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

2019-12-16 22:37发布

24位ADC输出是2进制补码。当负端电平高于正端时,ADC输出的最高位是1,此时如何计算多次测量结果的平均值?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
66条回答
not_at_all
1楼-- · 2019-12-16 23:24
最直接的方法就是把AD数值加上0xFFFFFF,转换为无符号的数再滤波。   
babysnail
2楼-- · 2019-12-17 00:12
not_at_all 发表于 2016-1-31 22:48
最直接的方法就是把AD数值加上0xFFFFFF,转换为无符号的数再滤波。

不对吧? 加上0xFFFFF对补码来说相当于-1

应当是:转成整数(取反+1)  0-7FFFFF表示负数,800000表示0, 800001-FFFFFF表示正数
gamalot
3楼-- · 2019-12-17 02:40
做个判断就行了,假设是24位ADC

  1. int32_t code;

  2. code = Adc_read_data();

  3. if ((code & 0x800000) != 0)
  4. {
  5.   code -= 0x1000000;
  6. }

  7. ......
复制代码
gamalot
4楼-- · 2019-12-17 04:11
 精彩回答 2  元偷偷看……
zouzhichao
5楼-- · 2019-12-17 04:16
gamalot 发表于 2016-1-31 23:16
做个判断就行了,假设是24位ADC

借你的代码出个优化简洁版本:
int32_t code;
code = Adc_read_data();
code -= (code & 0x800000)  << 1;
gamalot
6楼-- · 2019-12-17 06:15
zouzhichao 发表于 2016-1-31 23:31
借你的代码出个优化简洁版本:
int32_t code;
code = Adc_read_data();

你这个实际上就是最常用的方法,最简洁高效,缺点和就是更加不够直观

一周热门 更多>