矿石收音机论坛

 找回密码
 加入会员

QQ登录

只需一步,快速开始

搜索
查看: 32876|回复: 190

24bitADC芯片ADS1256的测量精度

[复制链接]
     
发表于 2022-4-5 10:59:36 | 显示全部楼层 |阅读模式
本帖最后由 abbey_tom 于 2022-4-5 11:08 编辑

折腾了一下ADS1256(24bitADC),
基准使用ADR4525,2.5V
PGA=1;
在第1通道加载了约1V的有效电压,
只取近五次测量的算术平均,
没有采用别的提高精度的算法,
测得的电压短期内可维持在下图中十个字以内的跳动(0.01%),
短期漂移量应该可控制0.05%以内?
当然这并不能代表ADS1256的精度,
影响因素包括基准的稳定度,
被测电压的稳定度,
还有算法等等。

1649126619339.jpg
     
发表于 2025-2-10 15:01:09 | 显示全部楼层
本帖最后由 pldjn 于 2025-2-10 16:03 编辑
washu 发表于 2022-4-9 21:09
轮胎的 2400,官方说法是 24bit no missing code,也就是说在 no missing code 层面是 24 位...

噪 ...


请问,单周期ADC转换是看数据手册的哪个参数,这个一直没有发现这种描述,是下面这个稳定时间的描述吗?
按这个时序图,感觉像是转换时间变长了,DRDY/DOUT的输出时间相当于5个转换时间。
1.png
回复 支持 1 反对 0

使用道具 举报

     
 楼主| 发表于 2022-4-24 08:08:51 | 显示全部楼层
本帖最后由 abbey_tom 于 2022-4-24 09:14 编辑
xjw01 发表于 2022-4-23 22:33
我没有用过这个芯片,我了不清楚。
这个问题,实际上是丢码了。


谢谢,问题已经解决了。
确实没有丢码。
但其实是相当低级的错误。

沿用了TI官方例程中的一段,
ADS1220code = (((long)tempData[0] << 16) + ((long)tempData[1] << 8) + (long)tempData[2]) >> 10; // take 3 bytes of voltage returned and place in word
出于对TI的绝对信任,这一句没有仔细看,
后来发现夹在英文注释中多了一个>>10

这样相当于舍弃了低10位,
如果是正值的话,数值缩小了1024倍
又因为约为1000倍,使得恰好是uV与mV之间的倍率,
显示值与23S没有差,
于是就没有怀疑转换数值的正确性,
把DEBUG的精力集中在时序相关。
回复 支持 1 反对 0

使用道具 举报

     
发表于 2022-4-21 23:57:42 | 显示全部楼层
本帖最后由 xjw01 于 2022-4-22 00:05 编辑
abbey_tom 发表于 2022-4-21 19:29
隔一段时间读寄存器进行比对,
看是不是既设值,
如果不是就复位芯片,


    我的复位键是接电源的,不易受干扰的,芯片没有被复位。

    被干扰后,芯片异常,无法正常读取数据。上述想法无法实现。

    但我无意中发现:被干扰后,只是造成DOUT数据无法移出而已。因为DRDY始终保持低电平,程序误以为有新数据,反复输出SCK信号来读取数据,而数据是错的。

    后来,我再次回到数据手册:数据读取后,芯片立刻将DRDY置1。所以,如果不是1,说明芯片受到电磁干扰。这样,判断是否受到干扰就有了依据。

    然而,如何让DRDY恢复正常?如何让它变为1?百思不得解。用示波器测SCK脚,总是有脉冲,它是用来读取数据的,可数据无效。越看越生气。拿起摄子,干脆把SCK引脚对地短路,我真不想看这些脉冲!!
这下可好,轻轻一碰,数据输出正常了。

   我立刻明白,摄子引入了额外的脉冲,数据正常了。我想,读数异常时,何不在程序中引入SCK脉冲,使得芯片恢复。
   经过反复调试,最终完美解决,一个数据也不丢。方法如下:

  P_CS = 0;
  ads1256_w1b(CMD_RDATA); //读数据
  ads1256_delay(25); //25对应10us,须延时6.6us以上才能读取数据(详见ads1256手册的t6)
  v  = ads1256_r1b(); v <<= 8;
  v += ads1256_r1b(); v <<= 8;
  v += ads1256_r1b();
  while(!P_DRDY){ //当ads1256受到干扰,数据移出异常,须重读
     P_SCK=1; ads1256_delay(1); //输出SCK脉冲
     P_SCK=0; ads1256_delay(1);
     ads1256_w1b(CMD_RDATA); //重读数据
     ads1256_delay(25);
     v  = ads1256_r1b(); v <<= 8;
     v += ads1256_r1b(); v <<= 8;
     v += ads1256_r1b();
  }
  P_CS = 1;
  if(v&0x00800000) v |= 0xFF000000;



回复 支持 1 反对 0

使用道具 举报

     
发表于 2022-4-5 11:44:51 | 显示全部楼层
看起来精度还可以 呀,做电池组测量用?
回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2022-4-5 11:54:37 | 显示全部楼层
sys3 发表于 2022-4-5 11:44
看起来精度还可以 呀,做电池组测量用?

没有想好,闹着玩儿的,
先当做一个毫伏台表。
回复 支持 反对

使用道具 举报

     
发表于 2022-4-5 11:58:38 | 显示全部楼层
采样率多少,德姨指标 2.5Sa/S 输入噪声零点几微伏
捕获.PNG
当然不知道水分多大,记得以前玩 1232,用碱性电池做源,噪声 2、3 微伏好像
回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2022-4-5 12:04:23 | 显示全部楼层
本帖最后由 abbey_tom 于 2022-4-5 12:37 编辑
washu 发表于 2022-4-5 11:58
采样率多少,德姨指标 2.5Sa/S 输入噪声零点几微伏

当然不知道水分多大,记得以前玩 1232,用碱性电池 ...


现在取的是10sps
噪声可达100微伏
被测电压是5V电源通过简单电阻分压得的,
您说的碱性电池做源是直接将电池作为Ux吗

试着用小米电池做源测了一下,
噪声减小为10几个微伏吧。
不过,
还是不稳定,
会漂。
000.jpg
回复 支持 反对

使用道具 举报

     
发表于 2022-4-5 14:46:44 | 显示全部楼层
abbey_tom 发表于 2022-4-5 12:04
现在取的是10sps
噪声可达100微伏
被测电压是5V电源通过简单电阻分压得的,

飘肯定的,碱性电池温度系数可不小,所以要一个合适的环境(温度相对稳定)做测试。我当初测试 1232 应该是32样本。

手册上的数据是有效值,折算为峰峰值可认为大约是6倍(2.5uVpp),你再试试

btw. 可直接短路输入看看噪声多大
回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2022-4-5 20:54:40 | 显示全部楼层
本帖最后由 abbey_tom 于 2022-4-5 21:09 编辑

输入直接短路的话,
测得电压也在10个微伏,
看来这个基本上是固有的了。

btw. 我还测试了一下以电池为源的差分输入,
好像要强于单端输入。
短期稳定度基本也在数个微伏范围。
回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2022-4-5 21:12:02 | 显示全部楼层
下面是测试输出截图。
其中,0、1、3、5通道短接,
7通道接1.5V电池,
其它通道浮空。
均为单次取样值。
回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2022-4-5 21:12:25 | 显示全部楼层
washu 发表于 2022-4-5 14:46
飘肯定的,碱性电池温度系数可不小,所以要一个合适的环境(温度相对稳定)做测试。我当初测试 1232 应该 ...


下面是测试输出截图。
其中,0、1、3、5通道短接,
7通道接1.5V电池,
其它通道浮空。
均为单次取样值。
新建位图图像.jpg
回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2022-4-5 22:13:06 | 显示全部楼层
washu 发表于 2022-4-5 11:58
采样率多少,德姨指标 2.5Sa/S 输入噪声零点几微伏

当然不知道水分多大,记得以前玩 1232,用碱性电池 ...

为何PGA越大,噪声反而越小呢
回复 支持 反对

使用道具 举报

     
发表于 2022-4-6 00:22:15 | 显示全部楼层
abbey_tom 发表于 2022-4-5 20:54
输入直接短路的话,
测得电压也在10个微伏,
看来这个基本上是固有的了。

多少样本,我玩 1232 的时候,32 样本输入短路是 1.7uVpp,南孚电池是 3.3uVpp

短路
cr2004.jpg

南孚
cr2005.jpg



至少是符合手册指标的
无标题1232.png

回复 支持 反对

使用道具 举报

     
发表于 2022-4-6 00:23:40 | 显示全部楼层
abbey_tom 发表于 2022-4-5 21:12
下面是测试输出截图。
其中,0、1、3、5通道短接,
7通道接1.5V电池,

连续采样若干样本测试,1256 手册没仔细看,1232 手册好像是连续采样 100 样本,我偷懒 32 样本了...

回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2022-4-6 08:58:44 | 显示全部楼层
本帖最后由 abbey_tom 于 2022-4-6 09:17 编辑
washu 发表于 2022-4-6 00:23
连续采样若干样本测试,1256 手册没仔细看,1232 手册好像是连续采样 100 样本,我偷懒 32 样本了...


各通道连续100次采样的测试结果如下:
100次.jpg
回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2022-4-6 09:00:10 | 显示全部楼层
本帖最后由 abbey_tom 于 2022-4-6 09:11 编辑

单次采样结果有正有负,
我是取绝对值求和后再平均的。
代码如下:
测试代码0.jpg
回复 支持 反对

使用道具 举报

     
发表于 2022-4-6 10:16:14 | 显示全部楼层
abbey_tom 发表于 2022-4-6 09:00
单次采样结果有正有负,
我是取绝对值求和后再平均的。
代码如下:

这个测试不是叫你取平均值,而是统计 100 个样本的峰峰值(或者求其标准差、有效值),然后和手册对比。

要不然你之前说的大概 10uV 怎么来的?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 加入会员

本版积分规则

小黑屋|手机版|矿石收音机 ( 蒙ICP备05000029号-1 )

蒙公网安备 15040402000005号

GMT+8, 2025-4-26 06:49

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表