1、前言

AD7699是一款8通道、16位、500kSPS吞吐速率的模数转换器(ADC),使用简单的SPI实现配置寄存器的写入和转换结果的输出。

本文将该芯片用于功率放大器输出电压、电流以及环境温度检测。采样点均使用了隔离芯片隔离,并接入AD7699中IN0、IN1、IN2三个通道。本例中仅使用通道1(即检测电压信号),具体关于多通道代码后续更新!!!

2、芯片介绍

参考电路:

芯片引脚:

寄存器内容:

驱动时序: (无繁忙模式)

3、驱动方式

本文采用STM32F103RCT6硬件SPI协议驱动AD7699,SPI配置为数据位16位、CPHA=1、CPHA=0、软件NSS;AD芯片配置CFG寄存器的内容(0xF324)为:单极性输入通道(参考GND)、只读取通道1的AD值、全带宽输入、内部基准电压源、禁用序列器、CFG不回读。

根据手册内容,无繁忙模式的驱动过程如下:

  1. CNV引脚上升沿启动转换,此时SDO引脚为高阻态,并忽略DIN引脚上的内容。在高电平持续2us(大于tconv)后,拉低CNV引脚开始更新CFG寄存器内容和转换结果回读。
  2. 在CNV引脚为低电平的前提下,SCK共输出16个脉冲,其中前14个上升沿脉冲用于写入CFG的值,前16个上升沿脉冲读取转换结果。读取结束之后,重复步骤1。

4、驱动代码

百度网盘链接:https://pan.baidu.com/s/1jXn5P5aJ1cOLCsj4eQO6cQ   提取码:7quz  (注:上传的工程基于RT thread studio开发,keil工程为模拟SPI协议并未上传)

SPI引脚初始化

void HAL_SPI_MspInit(SPI_HandleTypeDef* spiHandle)
{GPIO_InitTypeDef GPIO_InitStruct = {0};/* USER CODE BEGIN SPI1_MspInit 0 *//* USER CODE END SPI1_MspInit 0 *//* SPI1 clock enable */__HAL_RCC_SPI1_CLK_ENABLE();__HAL_RCC_GPIOA_CLK_ENABLE();/**SPI1 GPIO Configuration*PA4     ------> SPI1_NSSPA5     ------> SPI1_SCKPA6     ------> SPI1_MISOPA7     ------> SPI1_MOSI*/GPIO_InitStruct.Pin = GPIO_PIN_5|GPIO_PIN_7;GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);GPIO_InitStruct.Pin = GPIO_PIN_6;GPIO_InitStruct.Mode = GPIO_MODE_INPUT;GPIO_InitStruct.Pull = GPIO_NOPULL;HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);}void SPI1_NSS_GPIO(void)
{GPIO_InitTypeDef GPIO_InitStruct = {0};__HAL_RCC_GPIOA_CLK_ENABLE();GPIO_InitStruct.Pin = GPIO_PIN_4;GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4,GPIO_PIN_RESET);}

SPI配置代码

/* SPI1 init function */
void MX_SPI1_Init(void)
{hspi1.Instance = SPI1;hspi1.Init.Mode = SPI_MODE_MASTER;hspi1.Init.Direction = SPI_DIRECTION_2LINES;hspi1.Init.DataSize = SPI_DATASIZE_16BIT;hspi1.Init.CLKPolarity = SPI_POLARITY_LOW;hspi1.Init.CLKPhase = SPI_PHASE_2EDGE;hspi1.Init.NSS = SPI_NSS_SOFT;hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_16;hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB;hspi1.Init.TIMode = SPI_TIMODE_DISABLE;hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;hspi1.Init.CRCPolynomial = 10;if (HAL_SPI_Init(&hspi1) != HAL_OK){Error_Handler();}}

软件启动转换

/***AD_开启一次转换***/
static void ADC7699_conversion()
{HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4,GPIO_PIN_SET);rt_hw_us_delay(2);HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4,GPIO_PIN_RESET);
}

主程序

static void ADC7699_thread_entry(void *parameter)
{MX_SPI1_Init();SPI1_NSS_GPIO();SPI_TX_BUF[0] = 0xF324;     //CFG寄存器内容rt_thread_mdelay(1000);     //等待电压电流传感器稳定工作while (1){switch(AD_sta){case Conversion_wait : break;case Conversion_free :
//                                    HAL_GPIO_WritePin(GPIOB, GPIO_PIN_6,GPIO_PIN_SET);//测试引脚ADC7699_conversion();               //开启一次转换AD_sta = Conversion_end;            //数据转换结束break;case Conversion_end :rt_enter_critical();HAL_SPI_TransmitReceive(&hspi1, SPI_TX_BUF, SPI_RX_BUF, 1, 10);AD_V_Data = SPI_RX_BUF[0];rt_exit_critical();LOG_I("AD_V_Data:%04x",AD_V_Data);if(AD_V_Data > AD_V_Data_MAX)AD_V_Data_MAX = AD_V_Data;AD_sta = Conversion_free;                       //开启下一次转换//                                    HAL_GPIO_WritePin(GPIOB, GPIO_PIN_6,GPIO_PIN_RESET);//测试引脚break;default : break;}}
}

5、结束

本文驱动代码能够正常读取引脚1上的AD原始值。后续会加入通道序列器,读取IN0-IN2的AD值。

基于STM32的AD7699、(AD7689、AD7949、AD7682)芯片驱动相关推荐

  1. 基于STM32的4位数码管模块驱动

    数码管型号四位共阳,采用2片595驱动数码管,五个管脚分别如下: VCC---------------------------------------------------------------- ...

  2. 基于STM32的电机--直流有刷电机H桥驱动的不同模式分析

    文章目录 直流电机驱动设计 1.电机驱动硬件配置 2.电机驱动电路分析 简单正向电路 最简单的电机正反转电路 H桥电路分析 受限单极模式 单极模式 双极模式 减速电机的重要参数 直流电机驱动设计 1. ...

  3. 基于STM32的DS1302时钟芯片驱动

    基于STM32的DS1302时钟芯片驱动 /****************************************************************************** ...

  4. 基于STM32系列芯片的 IAP实现的探索

    基于STM32系列芯片的 IAP实现的探索 什么是IAP? 如何实现IAP? 第一步:学习官方源代码 第二步:了解STM32芯片基本硬件参数 第三步.搞清除STM32内置Flash 第四步. STM3 ...

  5. stm32 带通滤波器_带通滤波 - 基于STM32芯片和TFT-LCD的便携式心电图仪设计

    相关推荐 3月10日,纽约州州长安德鲁-库默(Andrew Cuomo)曾在上月宣布,纽约大都市圈的公共交通系... 发表于 2018-04-16 08:50 • 88次阅读 LCD驱动我们只需要写硬 ...

  6. stm32 工业按键检测_基于STM32芯片的能谱仪设计

    随着对天然辐射场中低能量γ谱学及其应用的深入研究,γ能谱仪不仅在固体矿产勘探.油气普查.水文和工程地质调查等工业生产及科学研究方面,甚至在民用的环境辐射场调查.建材与建筑装饰材料放射性检测方面,都得到 ...

  7. STM32CubeMX | 基于STM32使用HAL库硬件SPI驱动WK2124一拖四SPI转四路串口芯片

    STM32CubeMX | 基于STM32使用HAL库硬件SPI驱动WK2124一拖四SPI转四路串口芯片 STM32基础工程生成 首先使用STM32CUBEMX生成STM32的基础工程,配置时钟到7 ...

  8. 基于STM32的数模转换芯片AD5328驱动程序

    一个项目中需要输出4路0~5V模拟量,主控芯片为STM32F103单片机,选用了AD5328作为DAC输出: AD5328是ADI的一款DAC芯片,可输出8路模拟量,SPI通讯,自己根据AD5328数 ...

  9. 基于 STM32 的语音识别智能家居控制系统的设计(LD3320语音识别芯片+ESP8266 WIFI模块+DHT11温湿度采集+MQ系列 烟雾及可燃气体+蜂鸣器+步进电机模拟窗帘+OLED液晶显示+

    ## **基于 STM32 的语音识别智能家居控制系统的设计(LD3320语音识别芯片+ESP8266 WIFI模块(阿里云 或ONENET或局域网)+DHT11温湿度采集+MQ系列 烟雾及可燃气体+ ...

最新文章

  1. 2019年AI实力对决:美国领跑,中国追赶,欧盟弱势
  2. oracle 00966,oracle错误代码一览表
  3. JS判断是否是微信页面,判断手机操作系统(ios或android)并跳转到不同下载页面...
  4. nginx源码分析之网络初始化
  5. AdonisUI - 用于 WPF 应用程序的轻量级 UI 工具包,提供经典但增强的 Windows 视觉效果...
  6. 在 CAP 中使用 AOP ( Castle.DynamicProxy )
  7. Apache Lucene 5.0.0即将发布!
  8. hdu 3177贪心
  9. pythonsocket中tcp通信接收不到数据_TCP 为什么三次握手而不是两次握手(正解版)...
  10. 飞鸽传书2012是否发布了?
  11. PE格式学习讨论群:3214720
  12. Hibernate 主清单文件配制说明
  13. matlab数字调音台,软件说明
  14. 如何csdn复制他人博客文章到自己博客下?
  15. CWE ID 259:Use of Hard-coded Password
  16. vue实现画出页面二维码的3种办法
  17. BNN训练MNIST数据集
  18. iOS16更新后打不开微信 解决办法来了
  19. 关于产品MVP的定义与实践
  20. MySQL Bug一例-----ibuf cursor restoration fails

热门文章

  1. linux如何进windows系统还原,怎样进行系统修复,还原?具体步骤是什么?
  2. 计划书怎么写学计算机,学习计划书怎么写
  3. 电视信号视频制式中CCIR和EIA,PAL与NTSC的意思
  4. Android图片处理(Matrix,ColorMatrix)
  5. Kafka学习笔记——Kafka原理与使用详解
  6. 【工具篇】普中51仿真器连接失败问题的一种解决方法
  7. 网站打开速度慢的原因分析及对策
  8. 智慧商贸之结算账户模块的新增
  9. 2.认识思科设备连接有线和无线练习题
  10. Qt之自定义控件(开关按钮)