基于STM32的AD7699、(AD7689、AD7949、AD7682)芯片驱动
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不回读。
根据手册内容,无繁忙模式的驱动过程如下:
- CNV引脚上升沿启动转换,此时SDO引脚为高阻态,并忽略DIN引脚上的内容。在高电平持续2us(大于tconv)后,拉低CNV引脚开始更新CFG寄存器内容和转换结果回读。
- 在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)芯片驱动相关推荐
- 基于STM32的4位数码管模块驱动
数码管型号四位共阳,采用2片595驱动数码管,五个管脚分别如下: VCC---------------------------------------------------------------- ...
- 基于STM32的电机--直流有刷电机H桥驱动的不同模式分析
文章目录 直流电机驱动设计 1.电机驱动硬件配置 2.电机驱动电路分析 简单正向电路 最简单的电机正反转电路 H桥电路分析 受限单极模式 单极模式 双极模式 减速电机的重要参数 直流电机驱动设计 1. ...
- 基于STM32的DS1302时钟芯片驱动
基于STM32的DS1302时钟芯片驱动 /****************************************************************************** ...
- 基于STM32系列芯片的 IAP实现的探索
基于STM32系列芯片的 IAP实现的探索 什么是IAP? 如何实现IAP? 第一步:学习官方源代码 第二步:了解STM32芯片基本硬件参数 第三步.搞清除STM32内置Flash 第四步. STM3 ...
- stm32 带通滤波器_带通滤波 - 基于STM32芯片和TFT-LCD的便携式心电图仪设计
相关推荐 3月10日,纽约州州长安德鲁-库默(Andrew Cuomo)曾在上月宣布,纽约大都市圈的公共交通系... 发表于 2018-04-16 08:50 • 88次阅读 LCD驱动我们只需要写硬 ...
- stm32 工业按键检测_基于STM32芯片的能谱仪设计
随着对天然辐射场中低能量γ谱学及其应用的深入研究,γ能谱仪不仅在固体矿产勘探.油气普查.水文和工程地质调查等工业生产及科学研究方面,甚至在民用的环境辐射场调查.建材与建筑装饰材料放射性检测方面,都得到 ...
- STM32CubeMX | 基于STM32使用HAL库硬件SPI驱动WK2124一拖四SPI转四路串口芯片
STM32CubeMX | 基于STM32使用HAL库硬件SPI驱动WK2124一拖四SPI转四路串口芯片 STM32基础工程生成 首先使用STM32CUBEMX生成STM32的基础工程,配置时钟到7 ...
- 基于STM32的数模转换芯片AD5328驱动程序
一个项目中需要输出4路0~5V模拟量,主控芯片为STM32F103单片机,选用了AD5328作为DAC输出: AD5328是ADI的一款DAC芯片,可输出8路模拟量,SPI通讯,自己根据AD5328数 ...
- 基于 STM32 的语音识别智能家居控制系统的设计(LD3320语音识别芯片+ESP8266 WIFI模块+DHT11温湿度采集+MQ系列 烟雾及可燃气体+蜂鸣器+步进电机模拟窗帘+OLED液晶显示+
## **基于 STM32 的语音识别智能家居控制系统的设计(LD3320语音识别芯片+ESP8266 WIFI模块(阿里云 或ONENET或局域网)+DHT11温湿度采集+MQ系列 烟雾及可燃气体+ ...
最新文章
- 2019年AI实力对决:美国领跑,中国追赶,欧盟弱势
- oracle 00966,oracle错误代码一览表
- JS判断是否是微信页面,判断手机操作系统(ios或android)并跳转到不同下载页面...
- nginx源码分析之网络初始化
- AdonisUI - 用于 WPF 应用程序的轻量级 UI 工具包,提供经典但增强的 Windows 视觉效果...
- 在 CAP 中使用 AOP ( Castle.DynamicProxy )
- Apache Lucene 5.0.0即将发布!
- hdu 3177贪心
- pythonsocket中tcp通信接收不到数据_TCP 为什么三次握手而不是两次握手(正解版)...
- 飞鸽传书2012是否发布了?
- PE格式学习讨论群:3214720
- Hibernate 主清单文件配制说明
- matlab数字调音台,软件说明
- 如何csdn复制他人博客文章到自己博客下?
- CWE ID 259:Use of Hard-coded Password
- vue实现画出页面二维码的3种办法
- BNN训练MNIST数据集
- iOS16更新后打不开微信 解决办法来了
- 关于产品MVP的定义与实践
- MySQL Bug一例-----ibuf cursor restoration fails