24bitADC芯片ADS1256的测量精度
本帖最后由 abbey_tom 于 2022-4-5 11:08 编辑折腾了一下ADS1256(24bitADC),
基准使用ADR4525,2.5V
PGA=1;
在第1通道加载了约1V的有效电压,
只取近五次测量的算术平均,
没有采用别的提高精度的算法,
测得的电压短期内可维持在下图中十个字以内的跳动(0.01%),
短期漂移量应该可控制0.05%以内?
当然这并不能代表ADS1256的精度,
影响因素包括基准的稳定度,
被测电压的稳定度,
还有算法等等。
本帖最后由 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个转换时间。
本帖最后由 abbey_tom 于 2022-4-24 09:14 编辑
xjw01 发表于 2022-4-23 22:33
我没有用过这个芯片,我了不清楚。
这个问题,实际上是丢码了。
谢谢,问题已经解决了。
确实没有丢码。
但其实是相当低级的错误。
沿用了TI官方例程中的一段,
ADS1220code = (((long)tempData << 16) + ((long)tempData << 8) + (long)tempData) >> 10; // take 3 bytes of voltage returned and place in word
出于对TI的绝对信任,这一句没有仔细看,
后来发现夹在英文注释中多了一个>>10
这样相当于舍弃了低10位,
如果是正值的话,数值缩小了1024倍
又因为约为1000倍,使得恰好是uV与mV之间的倍率,
显示值与23S没有差,
于是就没有怀疑转换数值的正确性,
把DEBUG的精力集中在时序相关。 本帖最后由 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;
看起来精度还可以 呀,做电池组测量用? sys3 发表于 2022-4-5 11:44
看起来精度还可以 呀,做电池组测量用?
没有想好,闹着玩儿的,
先当做一个毫伏台表。 采样率多少,德姨指标 2.5Sa/S 输入噪声零点几微伏
当然不知道水分多大,记得以前玩 1232,用碱性电池做源,噪声 2、3 微伏好像 本帖最后由 abbey_tom 于 2022-4-5 12:37 编辑
washu 发表于 2022-4-5 11:58
采样率多少,德姨指标 2.5Sa/S 输入噪声零点几微伏
当然不知道水分多大,记得以前玩 1232,用碱性电池 ...
现在取的是10sps
噪声可达100微伏
被测电压是5V电源通过简单电阻分压得的,
您说的碱性电池做源是直接将电池作为Ux吗
试着用小米电池做源测了一下,
噪声减小为10几个微伏吧。
不过,
还是不稳定,
会漂。 abbey_tom 发表于 2022-4-5 12:04
现在取的是10sps
噪声可达100微伏
被测电压是5V电源通过简单电阻分压得的,
飘肯定的,碱性电池温度系数可不小,所以要一个合适的环境(温度相对稳定)做测试。我当初测试 1232 应该是32样本。
手册上的数据是有效值,折算为峰峰值可认为大约是6倍(2.5uVpp),你再试试
btw. 可直接短路输入看看噪声多大 本帖最后由 abbey_tom 于 2022-4-5 21:09 编辑
输入直接短路的话,
测得电压也在10个微伏,
看来这个基本上是固有的了。
btw. 我还测试了一下以电池为源的差分输入,
好像要强于单端输入。
短期稳定度基本也在数个微伏范围。 下面是测试输出截图。
其中,0、1、3、5通道短接,
7通道接1.5V电池,
其它通道浮空。
均为单次取样值。
washu 发表于 2022-4-5 14:46
飘肯定的,碱性电池温度系数可不小,所以要一个合适的环境(温度相对稳定)做测试。我当初测试 1232 应该 ...
下面是测试输出截图。
其中,0、1、3、5通道短接,
7通道接1.5V电池,
其它通道浮空。
均为单次取样值。 washu 发表于 2022-4-5 11:58
采样率多少,德姨指标 2.5Sa/S 输入噪声零点几微伏
当然不知道水分多大,记得以前玩 1232,用碱性电池 ...
为何PGA越大,噪声反而越小呢 abbey_tom 发表于 2022-4-5 20:54
输入直接短路的话,
测得电压也在10个微伏,
看来这个基本上是固有的了。
多少样本,我玩 1232 的时候,32 样本输入短路是 1.7uVpp,南孚电池是 3.3uVpp
短路
南孚
至少是符合手册指标的
abbey_tom 发表于 2022-4-5 21:12
下面是测试输出截图。
其中,0、1、3、5通道短接,
7通道接1.5V电池,
连续采样若干样本测试,1256 手册没仔细看,1232 手册好像是连续采样 100 样本,我偷懒 32 样本了...
本帖最后由 abbey_tom 于 2022-4-6 09:17 编辑
washu 发表于 2022-4-6 00:23
连续采样若干样本测试,1256 手册没仔细看,1232 手册好像是连续采样 100 样本,我偷懒 32 样本了...
各通道连续100次采样的测试结果如下: 本帖最后由 abbey_tom 于 2022-4-6 09:11 编辑
单次采样结果有正有负,
我是取绝对值求和后再平均的。
代码如下:
abbey_tom 发表于 2022-4-6 09:00
单次采样结果有正有负,
我是取绝对值求和后再平均的。
代码如下:
这个测试不是叫你取平均值,而是统计 100 个样本的峰峰值(或者求其标准差、有效值),然后和手册对比。
要不然你之前说的大概 10uV 怎么来的?