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

2019-12-16 22:37发布

24位ADC输出是2进制补码。当负端电平高于正端时,ADC输出的最高位是1,此时如何计算多次测量结果的平均值?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
66条回答
PCBBOY1991
1楼-- · 2019-12-18 18:53
 精彩回答 2  元偷偷看……
knight_avr
2楼-- · 2019-12-18 22:43
其实 MCU 用于计算的负数表示形式就是 二进制补码,其实基本不用转换的只要把24位转换为32位直接计算即可

uint32_t adc_read = adc_readdata();
int32_t adc_val = adc_read;
if (adc_val & bit(23)) {adc_val |= 0xff000000;}
PCBBOY1991
3楼-- · 2019-12-19 00:46
knight_avr 发表于 2016-2-1 10:30
其实 MCU 用于计算的负数表示形式就是 二进制补码,其实基本不用转换的只要把24位转换为32位直接计算即可

...

你的程序应该是对的。
gamalot
4楼-- · 2019-12-19 06:46
PCBBOY1991 发表于 2016-2-1 09:35
为什么不直接取平均?还要做这样的转换?

不转换肯定是不行的,因为从ADC读回的是24位的补码,不能直接拿来用

区别只是大家转换的方法,俺的比较笨拙,其他几位网友的方法比较巧妙

gamalot
5楼-- · 2019-12-19 09:12
ersha4877 发表于 2016-2-1 09:19
收下了,拿去试试,这样可以直接和正数相加了是不,那和正数求平均怎么处理,直接除以相加的数量,比如四 ...

一般就是窗口平滑滤波,取最后N个读取值的平均,稍微复杂一点的可以去掉一个最高值和一个最低值

一般来说N取值越大滤波效果越好,但是反应速度越慢,具体多少要根据你的应用的情况自己进行调整

再复杂一点的可以判断数值是不是在大幅度变化,是的话就丢弃前面的数据加快反应速度,总之花样还挺多的 ......
lgc150
6楼-- · 2019-12-19 10:27
 精彩回答 2  元偷偷看……

一周热门 更多>