STM32使用ADS1256从入门到uV级信号测量

根据手册,不依靠外部放大电路,也不使用任何滤波算法,结果直出,通过ADS1256裸芯片调参实现uV级信号测量,全篇大白话讲解,通俗易懂。

先预览一下效果

整体设备外观

         模块是从优信电子买的,之前买过,后面写文章的时候又买了一块。写这个的初衷还是网上资料比较分散,搞了一年多快两年这款ADC,很多坑都是自己淌出来的,在这里做一个小总结以免后面有同行或者其他小伙伴也搞就不用做重复工作了。

ADS1256关键参数

本章将对ADS1256关键参数进行刨析,其他的不做讨论,那是下一章的内容~~

其中关注划线的部分即可

        从上面可以基本得到在不依靠外部放大电路情况下,仅靠ADS1256即可测量uV级微弱信号。那么如何让ADS1256稳定且准确的读取到微弱信号呢?

PGA可编程增益放大器

        基本高分辨率ADC都会自带PGA以提高其在电压转换方面的分辨率,但也同时存在适用范围,适用PGA后满量程输入电压范围将会进一步缩小,导致其使用范围受限,如果测量的电压范围超出其最大范围,要切换PGA挡位时,对于ADS1256来说,每次切换挡位时都要重新校准,使用上将会大大受限。让我们翻到手册中描述PGA的篇章。

手册 16页

                可以看到,对于不同挡位的PGA有着不同的测量范围,如果对于本博文来说,看起来很适合64这个挡位,我们要测量的微弱信号似乎就在这个范围,但是很遗憾,我们测量的uV并不能使用这个挡位PGA,反而我们要使用默认的1挡位,具体随着你看下去你会逐渐明白,我的用意。后面也说明了,在更改PGA之后都推荐重新校准ADC,校准时间也会根据配置的不同而不同,后面我会一一说明。

校准

        前面已经提到了校准,让我们翻到手册关于校准的部分,可以看到在这个芯片中TI提供了两个24位寄存器用于失调误差偏移以及满量程误差两个校准寄存器进行校准,其他部分由于我们不需要制造6位半电压表所以不需要去专门调整,在芯片出厂时已经基本有校准了,因此我们这部分先关注我圈起来的地方,这里有明确说明什么时候应该用校准。这是后面编写程序需要的,关乎到读取的数据是否足够准确!!!

        校准可以在任何时候进行,但在许多应用中,ADS1256漂移性能足够低,只需进行一次校准。当校准开始时,DRDY变为高电平,并一直保持高电平,直到之后准备好稳定的数据。校准后无需丢弃数据。强烈建议在基准电压稳定时上电后发出自校准命令。复位后,ADS1255/6 执行自校准。每当数据速率发生变化时,都必须进行校准,并且应在缓冲器配置或PGA发生变化时进行校准。

手册 24页

自校准

        数据手册往下翻,我们可以看关于自校准的描述,请注意这里的自校准与寄存器中的自动校准不一样,哪个在后面会说。这里的自校准根据上面的推荐和我使用的经验一般都在设备上电的时候使用,在自校准过程中不能读取数据也不能对芯片有任何操作,否则会打断校准从而使得读取到数据跳动较大,下面有提到使用自校准时与任何PGA无关,在任何情况下都可以进行,需要注意转换时间以及在校准前应该关闭缓冲器(这里我进行过多次测试以及经验得出当你以开启缓冲器进行校准后,如果再关闭缓冲器去读取信号将会产生较大偏差),对于这里,我的经验值是每次设备上电后执行自校准,然后系统等待1.5s左右再去给芯片设置参数,这样子能确保每次都校准校得比较好。

手册 25页

系统校准

        继续沿着手册下翻,我们可以看到关于系统校准的描述,这里的系统校准是需要用户去参与的校准,也是最准确的同时也是最麻烦的,具体校准方法在描述中有说明,但是校准源必须要保持准确,需要准备一个零输入差分信号以及满量程输入信号,我这里推荐使用吉时利2400这种源表进行校准,否则校准后将不如自校准。

手册 26页

自动校准

        继续下翻手册,可以看到关于自动校准的描述,在配置ADS1256时即可开启,同时在参数寄存器有写入时,该操作也会自己开启,同时这里有个坑,如果你测试的电压接近参考电压,由于自动校准,会逐渐拉进到参考电压导致测试值出现偏差,而不同差分通道之间所采集电压偏差过大也会导致这种情况会发生,这点需要注意,但是在一般情况下,自动校准会随着测量同一个值的次数而逐渐接近准确值,其功能也是很好用的。

手册 26页

缓冲器

        配置其自带的缓冲器能够极大提高输入阻抗,有助于提高测量的精度,对于采集一些uV级信号源是必不可少的,回到手册,根据内容可以看到在下图中开启了缓冲器并且速率低于50Hz此时输入阻抗能够达到80MΩ。

手册 3页  

再根据表中标注信息,来到手册中关于缓冲器的详细介绍页

手册 15页

        在上图中说如果芯片的时钟从默认的7.68MHz降为一半也就是3.84MHz时,在数据速率50SPS下的阻抗将从80MHz增加到160MHz,对于更加精细的场合适用性更强,但对于目前测量5uV级别的信号来说80MHz已经足够,同时也能看到就算开了缓冲器随着数据速率的提高,输入阻抗也会随之下降,很明显对于目前我们的使用场景来说速率越慢越好。

数字滤波器

        翻到关于数字滤波器部分,可以看到在ADS1256中,提供了一个可编程的低通滤波器,滤波器由两部分组成,一个固定滤波器,后跟一个可编程滤波器。我们能改变的只有后面的平均值滤波器,我目前所处环境干扰较小,因此不需要去专门使用该滤波器,如果你的场景受干扰较强需要过滤其他频率请酌情选择并配合硬件进行抵消干扰,仅靠自带滤波器无法解决干扰问题,这里应该要作为你最后一个需要去深入探究的部分,而不是一开始

手册 18页

手册 19页

噪声性能

        翻到数据手册关于干扰噪声方面的描述章节,可以仔细看看我画出来的位置,表格中最优的性能我都有标注

        我们看描述,这里有说有效位的计算公式,对于前期的我们还不需要去关注该公式,毕竟TI已经给了对于PGA挡位和数据速率在开启缓冲器和关闭缓冲器两个调节下的表格,我们只需要关注这些就好了,至于表格中的数据怎么来以及将来想更加深究当前有效位究竟是多少的可以在理解这些后再去探究,这里就不再深入。

        先来说开启了缓冲器的部分,可以看到表一是折合到输入端的噪声在开启缓冲器得到的数据,在我标的位置是其噪声最小的调节当PGA为64、数据速率为2.5时达到。再看表二缓冲器开启时的有效位数,这下发现情况不对,同样的条件在这里变成了PGA为1,SPS为2.5时为最优、接着看表三无噪声分辨率,这里一样是PGA为1,SPS为2.5时为最优PGA为1,SPS为2.5时为最优,并且就是芯片描述中标称的最优分辨率。

手册 12页

手册 13页

        此时我们可以得到,对于测量微弱信号特别是5uV级别,如果要保证其准确性和精度,需要开启缓冲器的情况下,将数据速率降低到2.5SPS,PGA设置为1,那么有人肯定疑惑了根据这个PGA适用表格,那我测试微弱信号不是更加应该开启PGA吗?

手册 16页

        确实是这样,但是那是对于mV信号,如果是uV信号,根据上述表格,虽然此时输入噪声很低,同时也丢失了输入有效位,此时将会丢失uV级别的准确性,同样的噪声水平也会极大提高,将得不偿失,这就是为什么在调试时明明开了PGA但是测量uV信号却一直不对。

        当你掌握上面所述的参数后,恭喜你,对于ADS1256这款ADC你已经大致了解了,只要按照自己的适用场景去调整上述参数即可正常的使用该ADC,也能让其发挥该有的性能。

        到这里我们理论储备已经足够,现在开始进入理论实操!

STM32 CubeMX配置

选择芯片

因为我手上就只有STM32F401CCU6核心板,所以选择对应的芯片类型

开启调试口

配置时钟

先选择外部高速时钟,如果没有可以不选,但是内部时钟速度较慢

       接着切换到时钟配置界面按照下面配置时钟,如果你不是这款芯片,其他的时钟源配置恐怕还需要麻烦你去网上找一下。

配置输出串口

一般串口默认就可以,但是需要开启串口中断

还需要开启中断,方便交互

配置定时器

这里主要是用于提供us延时函数使用

里面的分频值为主频-1即可,需要1Mhz的频率,其他无需设置

配置硬件SPI

这里使用硬件SPI,避免模拟出现问题,配置跟我下面就可以了,SPI时钟极性设置为低,时钟相位设置为第二边缘,速率不需要很快,快了也没什么用,ADS1256转换时间在哪里放着。

配置GPIO

这里需要配置的,只有ADS1256选择、同步‘、数据准备3个引脚即可,我这里因为在核心板上是靠近相邻所以就选择了这些。

其中需要注意的是数据准备引脚我采用的是接收中断读取,我也比较推荐这种,因为靠软件的While(ADS1256_DRDY)这种方式会阻塞程序,且读取时机也不是特别好,所以使用中断读取的话,在每一次有边缘触发都可以自动去读取值转换到中间变量,我们只需要去中间变量读取值即可

所以DRDY引脚需要设置中断,并且为上升沿触发,这里如果你设置的DRDY是低电平表示转换完成,需要设置为下降沿触发

配置外部中断

需要将外部中断开启,然后滴答定时器需要将优先级调低,就算你不使用,也推荐将其调低,避免在中断外延时的使用会影响中断,而在中断内使用会卡死的情况发生。

配置工程信息

将工程名称、工程目录、工程结构、IDE以及最小版本配置好即可

生成基本代码

到这里就配置好了,接下来我们开始根据数据手册编写驱动

驱动编写

(待更新,最近有点忙拖更了...>_<)

验证测试

使用吉时利2401作为微弱电压源,ADS1256差分读取。

依次使用吉时利2401输出5uV、50uV、100uV、200uV、500uV、1mV、2mV、5mV

如何提升全量程准确性

        最实用的方法是使用标准电压源输出给ADS1256,然后使用1256读取对应的值,使用线性插值法把电压纠正即可。

如果看了有收获的话,就点个赞吧,写文章不容易,如果有什么问题可以评论,我看到后会及时回复的。后面等代码部分更新了,会同步到gitee上。这样子没积分的小伙伴也能愉快玩耍了~~

  • 27
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

fbuilke

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值