使用24位ADC差分测量多次,如何计算平均值

2019-12-16 22:37发布

24位ADC输出是2进制补码。当负端电平高于正端时,ADC输出的最高位是1,此时如何计算多次测量结果的平均值?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
66条回答
jackwang123
1楼-- · 2019-12-24 02:51
ilikemcu 发表于 2016-3-13 11:10
我在上海,但是抱歉,对于这种擦屁股的事情,或者给已经做好了硬件,需要做软件的活儿,我坚决不碰,纯粹 ...

不是擦屁股,付费指导一下也可以,帮忙看看电路和布线.
现在是AD的噪声没处理好,布线改来改去已经无能为力了,1个板子上3个CS5532的数据采集20位的精度没问题,但是一个板子上12个AD的数据采集实在是一筹莫展了.
以前是共用晶振,现在分别用晶振精度还是不够.独立使用参考源也不行.
我在金桥这边,如果方便的话,我到你那里请教一下也可以.
lklhzu
2楼-- · 2019-12-24 07:37
gamalot 发表于 2016-1-31 23:16
做个判断就行了,假设是24位ADC

你好,对于楼主的疑问“当负端电平高于正端时,ADC输出的最高位是1,此时如何计算多次测量结果的平均值?”,此时不是应该把得到的补码数据转换成原码再参与计算吗?
按照你给出的这个公式,假如code = Adc_read_data();读到的数据是code=0x812345,那么执行
if ((code & 0x800000) != 0)
{
  code -= 0x1000000;
}
后得出code=0xFF812345;不等于0x812345的原码啊?请问是我哪里理解的不对吗?还请指教!
lklhzu
3楼-- · 2019-12-24 08:47
ilikemcu 发表于 2016-2-2 22:47
老实讲,CS5513的性价比实在不行了,还不如用ADS1232,把内部PGA置1倍,比5513那个不是好了一点点啊,价格 ...

大神,你的这句话“双极性AD码,直接把负向满量程值作为0点,所有采集到的数据,统一加上23位的值,统一向上平移,转换到无符号整型变量操作,就方便多了”,加上这句Count=Count^0x800000就可以了吧?
负满量程          0mV      正满量程
0x000000     0x800000   0xffffff
rube
4楼-- · 2019-12-24 12:25
 精彩回答 2  元偷偷看……
reflecter
5楼-- · 2019-12-24 16:28
是说ADC输入是差分接法,信号有+/-?都24bit了的,为何要做多次(滑动)平均?
Euphonium
6楼-- · 2019-12-24 16:54
zouzhichao 发表于 2016-1-31 23:31
借你的代码出个优化简洁版本:
int32_t code;
code = Adc_read_data();

谢谢你的代码,正好要用到

一周热门 更多>