当前位置:首页 > > 嵌入式微处理器
[导读]相信ADC的应用或多或少都会用到,在很多场合都有分辨率要求,要实现较高分辨率时,第一时间会想到采用一个较高位数的外置ADC去实现。可是,高分辨率外置ADC往往价格都不便宜,这就带来一对矛盾: 高指标与低成本。其实,利用单片机片上的ADC利用过采样技术就能很好的解决这样一对矛盾体,本文来聊聊这个话题。

[导读] 相信ADC的应用或多或少都会用到,在很多场合都有分辨率要求,要实现较高分辨率时,第一时间会想到采用一个较高位数的外置ADC去实现。 可是高分辨率外置ADC往往价格都不便宜,这就带来一对矛盾: 高指标与低成本。 其实利用单片机片上的ADC利用过采样技术就能很好的解决这样一对矛盾体,本文来聊聊这个话题。

什么是过采样?

在信号处理中,过采样是指以明显高于奈奎斯特速率的采样频率对信号进行采样。从理论上讲,如果以奈奎斯特速率或更高的速率进行采样,则可以完美地重建带宽受限的信号。奈奎斯特频率定义为信号带宽的两倍。过采样能够提高分辨率和信噪比SNR,并且通过放宽抗混叠滤波器的性能要求,有助于避免混叠和相位失真。

在很多项目应用中,需要测量信号的动态范围较大,且需要参数的微小变化。例如,ADC需要测量很大的温度范围(比如工业中甚至要求从-200℃~500℃),但仍要求系统对小于1度的变化做出响应。常见的单片机片上ADC位数为12位,如要实现高于12位分辨率要怎么做呢?我们知道奈奎斯特-香农采样定理可知:

其中:

  • 为输入待采样信号最高频率
  • 为奈奎斯特频率。

如果实际采样频率高于奈奎斯特频率 ,即为过采样。那么低于奈奎斯特采样频率进行采样就称为欠采样。

或许你会问,常规的应用都是过采样,怎么也没见分辨率提高了呀?如果仅仅过采样,要实现更高分辨率显然是不够的,那么要怎么利用过采样实现更高的分辨率呢?要知道所采用的ADC硬件核分辨率是固定的,难道还会变不成?

过采样提高分辨率

如果对一模拟信号,采用过采样,然后再进行一定的软件后处理,理论上是可以得到更高分辨率的。

为增加有效位数(ENOB :effective number of bits),对信号进行过采样,所需的过采样率可以由下面公式确定(省略理论推导,过于枯燥):

其中:

  • 为过采样频率
  • 产品所需实际采样频率
  • W为额外所需增加的分辨率位数

假设系统使用12位ADC每100 ms输出一次采样值也即(10 Hz)。为了将测量的分辨率提高到16位,我们按公式计算过采样频率。


因此,如果我们以 f对信号进行过采样,然后在所需的采样周期内收集足够的样本以对它们进行平均,现在可以将16位输出数据用于16位测量。

具体怎么做呢?

  • 首先将256个连续采样累加
  • 然后将总数除以16(或将总数右移4位)。该过程通常称为抽取,也即将速率采样。
  • 在类似进行下一次16位样本处理

注意:用于累积过采样数据并执行除法抽取数据类型必须具有足够的字节宽度,以防止溢出和截断错误。比如这里累积和可以采样32位无符号整型。

由上面公式可得出一个重要结论:每提高W位分辨率,需要提高采样率 倍。

过采样提高ADC的信噪比

ADC测量的SNR理论极限基于量化噪声,这是基于在没有过采样和平滑滤波情况下模数转换过程中固有的量化误差所致。而量化误差取决于ADC分辨率的位数,其中N为ADC的位数, 为参考电压。

SNR理论情况下极限值的计算方式是数据转换的有效位数,如下所示:


这个公式没必要去记,用到的时候参考计算一下即可。从公式中可看出,要提升一个模数转换器的理论SNR的一种可行方案可以通过提升采样位数,但是需要注意的是这里的信噪比是度量模数转换器本身的,就一个真实系统的信噪比还与整个信号链相关!

从上式中不难算出,12位ADC的理论SNR极限值为74dB,而通过过采样提升4位分辨率后,其SNR理论极限提高至96 dB!

到底怎么实现呢?

这里以伪代码的方式给出编程思路:

void init_adc(void) { /*配置ADC的采样率为过采样率连续中断模式*/ } void start_adc(void) { /*控制ADC启动采样*/ } /*不同的开发平台中断函数写法略有差异,比如51需要指定向量   */ /*OVERSAMPLE_FACTOR=4^RSHIFT_BITS 下面两个宏一起修改 */ #define RSHIFT_BITS        (4) #define OVERSAMPLE_FACTOR  (256) static unsigned short adc_result=0U; void adc_isr(void) { static unsigned short adc_index = OVERSAMPLE_FACTOR; static unsigned int accumulator = 0U; /*ADC_REG ADC转换结果寄存器,不同平台名称不同*/ accumulator += ADC_REG; 
    adc_index--; if( adc_index==0 )
    { /* 加和按因子抽取 */ adc_result  = accumulator>>RSHIFT_BITS;
        accumulator = 0;
        adc_index   = OVERSAMPLE_FACTOR;
    }
}

该方案有一个缺陷,就是每次ADC中断都需要CPU参与,在过采样率很高的情况下,上述方案消耗很多CPU资源,那么如果单片机内存资源足够的情况下可以考虑采用DMA模式,采集很多数据并将数据暂存下来,然后再做累加平均抽取。这是空间换时间的策略的体现。这个编代码也很容易,只需要申请一片内存区,内存区的大小可以定为256的倍数,这是因为在提升4位分辨率情况下,一个16位的输出样本需要256个12位样本。

总结一下

在成本受限的情况下,可以通过单片机片内ADC过采样以及累积抽取的技术来提升采样分辨率,这种技术的特点:

  • 可以使用过采样和平均来提高测量分辨率,而无需增加昂贵的片外ADC。
  • 过采样和加和抽取将以提高CPU利用率和降低吞吐量为代价来提高SNR和测量分辨率。
  • 过采样和加和抽取可以改善白噪声的信噪比。

-END-


来源 | 嵌入式客栈

作者 | 逸珺


整理文章为传播相关技术,版权归原作者所有 |

| 如有侵权,请联系删除 |


【1】嵌入式研发10多年,工程师悟出这些道理

【2】当谈起嵌入式工程师,究竟在谈些什么

【3】嵌入式工程师出路之我见:就业,技术,行业...

【4】为什么嵌入式工程师会对8位MCU有误解?

【5】嵌入式工程师结合经历聊硬件工程师和软件工程师哪个更有前途?


免责声明:本文内容由21ic获得授权后发布,版权归原作者所有,本平台仅提供信息存储服务。文章仅代表作者个人观点,不代表本平台立场,如有问题,请联系我们,谢谢!

嵌入式ARM

扫描二维码,关注更多精彩内容

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: 驱动电源

在工业自动化蓬勃发展的当下,工业电机作为核心动力设备,其驱动电源的性能直接关系到整个系统的稳定性和可靠性。其中,反电动势抑制与过流保护是驱动电源设计中至关重要的两个环节,集成化方案的设计成为提升电机驱动性能的关键。

关键字: 工业电机 驱动电源

LED 驱动电源作为 LED 照明系统的 “心脏”,其稳定性直接决定了整个照明设备的使用寿命。然而,在实际应用中,LED 驱动电源易损坏的问题却十分常见,不仅增加了维护成本,还影响了用户体验。要解决这一问题,需从设计、生...

关键字: 驱动电源 照明系统 散热

根据LED驱动电源的公式,电感内电流波动大小和电感值成反比,输出纹波和输出电容值成反比。所以加大电感值和输出电容值可以减小纹波。

关键字: LED 设计 驱动电源

电动汽车(EV)作为新能源汽车的重要代表,正逐渐成为全球汽车产业的重要发展方向。电动汽车的核心技术之一是电机驱动控制系统,而绝缘栅双极型晶体管(IGBT)作为电机驱动系统中的关键元件,其性能直接影响到电动汽车的动力性能和...

关键字: 电动汽车 新能源 驱动电源

在现代城市建设中,街道及停车场照明作为基础设施的重要组成部分,其质量和效率直接关系到城市的公共安全、居民生活质量和能源利用效率。随着科技的进步,高亮度白光发光二极管(LED)因其独特的优势逐渐取代传统光源,成为大功率区域...

关键字: 发光二极管 驱动电源 LED

LED通用照明设计工程师会遇到许多挑战,如功率密度、功率因数校正(PFC)、空间受限和可靠性等。

关键字: LED 驱动电源 功率因数校正

在LED照明技术日益普及的今天,LED驱动电源的电磁干扰(EMI)问题成为了一个不可忽视的挑战。电磁干扰不仅会影响LED灯具的正常工作,还可能对周围电子设备造成不利影响,甚至引发系统故障。因此,采取有效的硬件措施来解决L...

关键字: LED照明技术 电磁干扰 驱动电源

开关电源具有效率高的特性,而且开关电源的变压器体积比串联稳压型电源的要小得多,电源电路比较整洁,整机重量也有所下降,所以,现在的LED驱动电源

关键字: LED 驱动电源 开关电源

LED驱动电源是把电源供应转换为特定的电压电流以驱动LED发光的电压转换器,通常情况下:LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: LED 隧道灯 驱动电源
关闭