一乐电子

一乐电子百科

 找回密码
 请使用微信账号登录和注册会员

QQ登录

只需一步,快速开始

快捷登录

手机号码,快捷登录

搜索
楼主: blackspider_e
收起左侧

发现有不少同学对,“过采样增加ADC精度”还不是很懂,传个详细资料

  [复制链接]
发表于 2013-9-27 10:48 | 显示全部楼层
多谢分享,通过争论更能知道事情的真相,很受用。
发表于 2013-10-9 19:43 | 显示全部楼层
感谢,多谢分享。
发表于 2013-10-9 20:03 来自手机 | 显示全部楼层
我觉得过采样应该这样理解。
有一把最小刻度1mm的尺子,你拿这把尺子量同一个物体,量了十次,然后求平均值,这时候,得到的数据可能是12.345mm,光从数字上看,精度是提高了,毕竟小数点后多了好几个数
发表于 2013-10-9 23:09 | 显示全部楼层
wangke2010 发表于 2013-10-9 20:03
我觉得过采样应该这样理解。
有一把最小刻度1mm的尺子,你拿这把尺子量同一个物体,量了十次,然后求平均 ...

非常同意这个说法。
发表于 2014-5-7 15:52 | 显示全部楼层
谢谢分享,不错哦
发表于 2014-5-18 22:54 | 显示全部楼层
yanjian 发表于 2013-1-15 10:09
晕,原版资料都没看?
AVR121: Enhancing ADC resolution by
oversampling

终于把这个问题搞清楚了,一直把别人的过采样能提高精度信以为真了。原来是提高了分辨率,谢谢通俗易懂的讲解。
发表于 2016-1-6 17:10 | 显示全部楼层
yanjian 发表于 2013-1-15 10:09
晕,原版资料都没看?
AVR121: Enhancing ADC resolution by
oversampling

版主这话不敢苟同,精度1mm的尺子确实可以精确测量小于1mm的东西,我们身边都有这样的工具,游标卡尺。

游标卡尺主副尺的精度都是1mm,但是游标卡尺可以精确测量0.02mm以上的尺寸。说游标卡尺精度0.02mm估计大家都没啥意见吧。

当然,精度的前提是标定。

过采样法用的原理虽然和游标卡尺不同,但是算法的科学性是早就公认的。理论上只要采样率够,1位ADC可以实现任意位的分辨率和精度,当然前提是标定。基于过采样理论制造的ADC还真有,学名叫∑-Δ ADC转换器。

其实就是我们使用的现成的ADC,如果不标定,你也不能说他的精度就够。


发表于 2016-1-6 17:11 | 显示全部楼层
ksd 发表于 2014-5-18 22:54
终于把这个问题搞清楚了,一直把别人的过采样能提高精度信以为真了。原来是提高了分辨率,谢谢通俗易懂的 ...

如果分辨率经过标定,那就可以认为是提高了精度。
发表于 2016-1-6 17:19 | 显示全部楼层
本帖最后由 hotdll 于 2016-1-6 17:20 编辑
wangke2010 发表于 2013-10-9 20:03
我觉得过采样应该这样理解。
有一把最小刻度1mm的尺子,你拿这把尺子量同一个物体,量了十次,然后求平均 ...

过采样不是这样的,你这个是平滑滤波。

ADC的过采样通常用的是插值法。

按你说的例子,如果adc分辨不了0.5mm的值,通常都是当作0处理。过采样的时候,通过插入0-±1.2mm的白噪声误差,让被测量的1mm以下的值与这个白噪声叠加。然后对它们叠加后的值进行4的N次方测量,合理设置采样频率,可以保证在采样数据的平均值内白噪声为0.然后按想要达到的位数平均,可以得到一个浮点数。该浮点数的尾巴,就是提高的分辨率,如果该对该分辨率进行标定,那么可以认为其提高了精度。

发表于 2016-1-6 18:45 | 显示全部楼层
过采样的确好用,分辨率也有一定的提高,我用它做了不少设备了,最常用的就是电压电流表了。0-30V电压小数点后两位精度可以做到0.2%左右,我用的电压基准是MC1403,AVR M48单片机。
顺便附上用ADC中断做的过采样子程序吧(自学单片机,写的不规范请多见谅),我都用了好几年了,现在基本上没什么时间玩单片机了,送给大家吧。

volatile unsigned int cou_adc;//ADC过采样计数器
volatile unsigned long add_adc; //ADC过采样累加寄存器
volatile unsigned int x0; //x0寄存器
volatile unsigned int x1; //x1寄存器
volatile unsigned int x2; //x2寄存器
volatile unsigned int x3; //x3寄存器
volatile unsigned int x4; //x4寄存器
volatile unsigned int x5; //x5寄存器
volatile unsigned int x6; //x6寄存器
volatile unsigned int x7; //x7寄存器

volatile unsigned char bz_adc;//ADC采样标志寄存器

void adc_init();

ISR(ADC_vect)//ADC中断函数(自动进行过采样并分通道保存在xn寄存器中)
{  
   if(!gbi(bz_adc,0))//不要初次采样
   {
      add_adc+=ADC;//非初次采样ADC过采样变量累加
      cou_adc--;//计数
   }
   cbi(bz_adc,0);//清初次采样标志
   if(!cou_adc)//采样256次
   {
      add_adc>>=3;//右移3位得出约15位精度的数值

          switch (ADMUX)//通道切换并将long数据转换成int数据存入x寄存器
          {
             case 0:
                    ADMUX=1;x0=(int)add_adc;break;
                 case 1:
                    ADMUX=2;x1=(int)add_adc;break;
         case 2:
                    ADMUX=3;x2=(int)add_adc;break;
         case 3:
                    ADMUX=4;x3=(int)add_adc;break;
                 case 4:
                    ADMUX=5;x4=(int)add_adc;break;
         case 5:
                    ADMUX=6;x5=(int)add_adc;break;
         case 6:
                    ADMUX=7;x6=(int)add_adc;break;
                 case 7:
                    ADMUX=0;x7=(int)add_adc;break;
      }

          cou_adc=256;//重置计数器
          add_adc=0;//ADC过采样累加寄存器清零
          sbi(bz_adc,0);//置初次采样标志
   }
   sbi(ADCSRA,ADSC);//ADC开始转换
}

void adc_init()//adc初始化
{
   ADMUX=0B00000000;//外部基准,结果右对齐,ADC0输入  
   ADCSRA=0B11001101;//ADC32分频,ADC中断使能
   //ADCSRA=0B11001111;//ADC128分频,ADC中断使能
   cou_adc=256;//重置计数器
}

本版积分规则

QQ|一淘宝店|手机版|商店|电子DIY套件|一乐电子 ( 粤ICP备09076165号 ) 公安备案粤公网安备 44522102000183号

GMT+8, 2024-5-3 07:26 , Processed in 0.049787 second(s), 30 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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