发新帖本帖赏金 50.00元(功能说明)我要提问
返回列表
打印
[技术讨论]

AD7190 ADC采集芯片使用分享

[复制链接]
986|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 woai32lala 于 2022-8-2 10:38 编辑

#申请原创# #有奖活动# #技术资源#[url=home.php?mod=space&uid=760190]@21小跑堂 [/url]AD7190 ADC采集芯片使用分享
    最近项目需要一个高精度的ADC采集芯片,采样精度24位,噪音低,我们选择了AD7190芯片,它的各种参数均满足我们的需求。
   AD7190是一款适合高精密测量应用的低噪声完整模拟前端。它集成一个低噪声、24位Σ-Δ型模数转换器(ADC)。片内低噪声增益级意味着可直接输入小信号。
这款器件可配置为两路差分输入或四路伪差分输入。片内通道序列器可以使能多个通道,AD7190按顺序在各使能通道上执行转换,这可以简化与器件的通信。片内4.92 MHz时钟可以用作ADC的时钟源;或者,也可以使用外部时钟或晶振。该器件的输出数据速率可在4.7 Hz至4.8 kHz的范围内变化。
这款器件提供两种数字滤波器选项。滤波器的选择会影响以编程输出数据速率工作时的均方根噪声和无噪声分辨率、建立时间以及50 Hz/60 Hz抑制。针对要求所有转换均需建立的应用,AD7190具有零延迟特性。
该器件
采用5 V模拟电源和2.7 V至5.25 V的数字电源供电,功耗为6 mA,提供24引脚TSSOP封装。
现在介绍一下我的整个设计思路。
AD7190芯片,该器件的输出数据速率可在4.7 Hz至4.8 kHz的范围内变化,当SPI的片选管脚拉低之后,芯片则开始进行数据转换,并且自动开始输出,可根据RDY管脚来判断,也是我们整个设计思路的核心。当数据转换在转换过程中时,RDY管脚为高电平,当数据转换完成时,RDY引脚电平为电平,因此我们可以根据RDY管脚的下降来判断是否有数据产生。但是DRY管脚作为下降沿触发时,需要配置为普通IO口,做SPI通信时,需要作为SPI管脚复用。因此我们首先将RDY配置为普通IO,中断触发,触发之后,将RDY管脚再配置为SPI复用功能,进行数据读取,读取完数据之后,再配置为普通IO口模式,下降沿触发,等待一下触发。当数据读取完毕后,RDY管脚电平会被自动拉高,如果一直不读取数据,RDY也会根据配置的频率进行数据输出。
硬件部分:
我们设计的电路如下图所示。
使用该芯片,我们需要关注的引脚为,SCLK、CS\、OUT/RDY\、DIN、AIN1、REFIN1(+)、
REFIN1(-)、REFIN2(+)、REFIN2(-)。
SCLK:通讯时钟。
CS\:通讯使能(低电平有效),即SPI通讯的片选管脚。
OUT/RDY\:通讯输出引脚/同时又有数据转换就绪输出引脚。可以在数据寄存器中从此引脚读取数据。如果当次引脚从高电平变为低电平时,表示可以读取数据(可以读取状态寄存器获得RDY\电平,即SPI的MISO管脚。
DIN:通讯输入引脚,即MOSI管脚。

REFIN1
本次设计我们只使用了一个通道AIN1,用了伪差分。
AIN1模拟输入,AINCOM为公共参考端,模拟输入AIN1至AIN4以此输入为基准。

REFIN1(+):正基准电压输入,在REFIN1(+)与REFIN1(-)之间施加一个外部基准电压。REFIN1(+)可以是AVDD与AGND+ 1V之间的任意值。通道AIN1所输入的最大电压为REFIN1(+)输入的电压。
REFIN1(-):负基准电压输入,接GND。
REFIN2(+)和REFIN2(-)也是一个基准电压源的输入,我们只需要用REFIN1作为基准电压源输入,这个选择由AAD7190配置寄存器中的REFSEL位决定。
我们使用的信号引脚介绍完毕,下面介绍芯片的电源引脚。
芯片的数字电源输入和模拟电源用同一个电源供给,但经过不同的电容滤波后分别输入。
参考电压源如下图所示,为高精度基准电压源ADR3425ARJZ-R7,产生2.5V基准电压,加在REFIN1(+)和REFIN1(-)两端。
以上硬件基本描述完毕,下面介绍软件部分。软件部分
引脚配置

寄存器配置

状态枚举及相关参数
读取AD7190数据可以列为以下状态
初始化、读取数据、等待下降沿。
调用的函数

第一步初始化

ad7190_init()该函数的作用是配置SPI管脚以及AD7190的相关配置和中断配置。
AD7190_Spi_Init()作用:SPI管脚配置
AD7190_Reset()作用:AD7190芯片复位,所有配置都恢复为默认值。
AD7190_Config()作用:AD7190芯片寄存器相关配置
EXTIX_Init()作用:配置DRY管脚为中断,下降沿触发。
数据读取函数

因为SPI通讯要读取数据,需要先往里发送数据,但是有个芯片规定需要注意一下

当连续输入40个1时,芯片会被复位,因此我们在读取数据时发送的是0x00,而不是0xFF,这点确实需要注意。

主循环

调用一个读取流程函数read_ad7190_process()

刚上电时,AD7190的状态为INIT,进行相关引脚的配置的AD7190寄存器的配置。
初始化完成之后,状态转为WAIT_FALLING,即等待下降沿触发,触发下降沿则表示数据已经转换完成了,可以进行读取了,将状态转为READ_DATA。将MISO引脚功能改为SPI功能,读取完毕后,再讲MISO改为普通引脚中断触发。
此状态的改变在中断函数中进行,如下图所示。

当AD7190的状态位等待下降沿触发时,触发中断,则将AD7190读取状态改为READ_DATA,并且记录下降沿次数+1.
当数据读取完成之后,将状态重新置位为WAIT_FALLING,等待新一轮的下降沿触发。

此外,我们设定了一个1s定时器,用来监测AD7190有没有在一定时间内上传足够的数据量,数据量的个数通过MIN_DRDY_LOW_COUNT参数设置
根据设置的转换频率来设置该参数即可。
如果1s内AD7190上传的数据量小于设置的参数,则可视为AD7190时序丢失,重新进行AD7190的初始化配置,将AD7190读取状态改为INIT,并将相关参数置位。如果1s内上传了足够的数据量,则证明AD7190正常工作,按规定进行数据上传。

就是就是对AD7190芯片数据读取的分享,感谢大家指点。
最后感谢官方提供的鼠标,嘎嘎好用!

























AD7190.zip

4.29 MB

使用特权

评论回复

打赏榜单

21小跑堂 打赏了 50.00 元 2022-08-04
理由:恭喜通过原创文章审核!请多多加油哦!

相关帖子

沙发
327334404| | 2022-8-10 15:57 | 只看该作者

使用特权

评论回复
发新帖 本帖赏金 50.00元(功能说明)我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

103

主题

512

帖子

5

粉丝