单片机外围模块漫谈之二,如何提高ADC转换精度
在此我们简要总结一下ADC的各种指标如何理解,以及从硬件到软件都有哪些可以采用的手段来提高ADC的转换精度。
1. ADC指标
除了分辨率,速度,输入范围这些基本指标外,衡量一个ADC好坏通常会用到以下这些指标:失调误差,增益误差,微分非线性,积分非线性,信噪比,信纳比,有效位数,总谐波失真。让我们以下图为例来看一下这些指标的意义。
LSB
参数中经常用LSB作为单位,比如说差分非线性为2 LSB。这究竟是多大一个值呢?为了简单起见,我们以一个3bit分辨率,满量程为5V的ADC为例。1个LSB对应的电压大小为5V/7=714mV。如果是8bit分辨率,那么1个LSB对应5/255=19mV。
图中横轴为输入电压Vin增长方向,纵轴为数字输出。理想情况下输入电压每增长1LSB(714mV),那么输出会向上跳变一次,对应虚线L1所在转换曲线。但实际电路往往会引入偏差,转换曲线往往如 L2 所对应曲线。
失调误差(Offset Error)
电压从0开始增大时,引起输出第一次跳变的电压值,与理论上应该引起第一次跳变的电压值(0.5 LSB)的差值。衡量小电压时的转换精度。如图中,理论上应该在0.5 LSB处跳变,实际电压增大到1 LSB时才跳变,所以Offset Error是 1–0.5 = 0.5 LSB。
增益误差(Offset Error)
可以理解为实际转换曲线偏离理想曲线的程度。用最接近满量程时跳变点电压值和理论跳变点电压值的差表示。
差分非线性 DNL(Differential Non-Linearity)
理论上每增加或减少1 LSB 的电压,都会引起输出对应的一次跳变。但实际情况可能如图中a,b处所示,电压的步距大于或小于1个LSB的理论步距。
a 处 DNL = 1.5 – 1 = 0.5 LSB;
b 处 DNL = 0.5 – 1 = -0.5 LSB;
积分非线性 INL(Integral Non Linearity)
差分非线性累积起来造成的对实际转换曲线的最大偏离就是INL。如图中所示,需要注意的是INL不能表征对理想转换曲线的偏离程度。
总不可调整误差 TUE(Total Unadjusted Error)
实际转换曲线与理想转换曲线之间最大的偏离。在最糟糕的一点,我们通过ADC得到的电压,与实际电压的差值。通俗讲就是最不准的一点差多少。
思考一下,如果 DNL 和 INL 都非常好,那么是不是说明 TUE 就非常好?
对,还真不一定。即使线性度非常好,如果增益误差大,还是会导致最终结果大的偏差。
信噪比 SNR(Signal-to-Noise Ratio)
有用信号与噪声的能量比。我们总是期望信噪比越大越好。对于一个 N-Bit 分辨率的ADC来说,如果输入是一个满量程的正弦信号,在只考虑量化噪声的情况下,可以推导出一个有用的公式:
SNR = 6.02N + 1.76dB
推导过程见参考文档 ADI: MT-001
此公式直观的表明了ADC分辨率和信噪比之间的量化关系。
信纳比 SINAD (Signal-to-Noise-and-Distortion Ratio)
实际ADC是无法达到理想状态的,它的输出除了会引入噪声,还会引入输入信号的谐波。SINAD是有用信号能量,与谐波(Distortion)加噪声(Noise)能量的比,它更能体现现实世界中的ADC性能。
SINAD = 20log(S/(N+D))
*而SNR = 20log(S/N)
有效位数 ENOB(Effective Number of Bits)
体现ADC实际性能相当于多少位。可以从SINAD推出:
ENOB = (SINAD–1.76)/6.02
*和理想情况下的位数对应:NOB =(SNR - 1.76)/6.02。
总谐波失真 THD(Total Harmonic Distortion)
有用信号能量与谐波能量的比。
THD = 20log(S/D)
2. 如何提高转换精度
模拟电源(VDDA)和电压参考(VREF)
有的单片机ADC模块会引出单独的电源引脚和电压参考引脚,最好用LDO给这些引脚供电,或者用磁珠和滤波电容把这部分电源从数字部分隔离出来。
输入信号的输出阻抗
下图是ADC采样简化等效电路。ADC采样和保持电路的等效输入电阻电容Radc,和Cadc,手册中都会给出。在采样期间,开关SW会接通外部的信号输入电路,给采样电容Cadc充电至和输入信号相等(接近),之后SW断开,ADC对采样电容上的电压进行转换。如果采样时间过短,或者输入信号的输出阻抗过大,将导致采样电压不准。在信号源输出阻抗过高时,可以考虑增加一级运放。
高频串扰
如果与模拟输入引脚靠近的IO上有高频翻转的信号,或者PCB上有与输入信号长距离的平行走线,串扰将干扰输入信号。应避免ADC引脚临近信号高频翻转。在ADC输入布线和临近的走线之间用地线隔离开也可以避免ADC精度下降。
Wait,Stop模式
如果ADC在Wait和Stop模式下还可以工作,在此种模式下可以最大限度的降低MCU电源的波动,提高ADC的转换精度。
过采样(Oversampling)
如果采样频率为fs,那么对于fs/2以内的信号频率既可以获得完整信息。过采样是用远高于所需的采样频率去采样,这样噪声就会均摊在整个采样频带内。我们用数字滤波器可以滤除有用信号频带之外的噪声,从而使频带内的信噪比提高,获得更高的分辨率。对多次转换结果进行平均也可以提高结果的精度。
芯片内部校正
很多单片机内部都有校正机制(Calibration),每次上电后执行一次Calibration,可以以提高ADC的精度。
温度的影响
ADC受温度影响比较大,特别是失调误差和增益误差。如果芯片工作温度范围很宽,可以在不同的温度下预先测量,按温度做出查找表以在实际工作时做校正。
混入白噪声
这种方法对提高直流信号的分辨率很有用。如果输入信号接近直流而且很稳定,那么输出就不会产生跳变,比如输出一直是0x15A,我们无法确认输入电平是更接近0x159,还是更接近0x15B。那么我们可以人为地把白噪声混入信号,使信号产生小的波动从而输出产生跳变,然后再通过数学平均得出一个精度更高的数值。实际操作中可以用GPIO产生一个方波然后通过阻容耦合进输入信号引脚。
参考资料:
ADI: Data Converter Introduction
ADI: MT-001 TUTORIAL Taking the Mystery out of the Infamous Formula,
"SNR = 6.02N + 1.76dB," and Why You Should Care
ST: AN1636 UNDERSTANDING AND MINIMISING ADC CONVERSION ERRORS
ST: AN2834 Application note How to get the best ADC accuracy in STM32 microcontrollers
NXP: How to Increase the Analog-to-Digital Converter Accuracy in an Application
NXP: Cookbook for SAR ADC Measurements
单片机如何通过ADC模块采集模拟信号
单片机的ADC接口属于模数转换接口,将外部的模拟量信号转化为数字信号,单片机属于数字器件,需将模拟信号转化为数字信号才能够为单片机处理。目前市场的很多单片机都自带ADC转换接口,若无ADC转换接口,可以使用ADC数模转换芯片外扩。
ADC模块是将模拟信号转化位数字信号,数字信号用0和1表示,ADC模块有参考电压,假设给的参考电压是5V,ADC是12位的(几位表示用二进制几位数存储模拟量转化后的数字量,12位的ADC则可储存数字量范围为:(二进制)000000000000~111111111111,转换为十进制数字范围为0~2^12即0~4095。
也就是说把参考电压分为2^12份即4096份,最小分辨率为VREF/4096。
也就是说二进制的000000000000代表输入模拟量0V,而111111111111代表最大值VREF。
下面以上图C8051单片机为例子,如原理图所示,该单片机工作电源为3.3V,参考电压为2.048V,所以模拟量的输入范围为0~2.048V。若所需采集的电压范围大于参考电压值时,可以使用电阻分压进行降压或者使用运放进行缩小等。
该单片机ADC为12位的。也就是说输入电压为0时,单片机转换后的数字量结果为000000000000(二进制),当输入电压为2.048V时,单片机转换后的数字量结果为111111111111(二进制),十进制为4095。
也就是说,输入电压的值V=2.048×ADC采集到的数字量÷4095。
比如我们要采集一个0~10V范围的模拟量电压进行显示,那么,可以先将0~10V的电压缩小5倍,可以使用电阻分压,也可以采用运放缩小等方式,然后接入单片机的ADC采样口,可以接入上图的P2.2口。
最后换算公式为:V = result * 2.048/ 4095 * 5;其中 result为单片机采集到的数字量。
相关问答
单片机 与 adc 之间如何连接?单片机与ADC之间可以通过多种方式进行连接,包括并行接口、串行接口、SPI接口等。其中,最常用的方式是通过SPI接口进行连接,通过SPI接口可以实现快速、稳定的数...
现在的 单片机 除了C8051F350之外,还有哪些带有高精度 ADC 的?C8051F350是一款高性能的微控制器,集成了24位8通道ADC和8位2通道DAC。24位的AD采样其分辨率是非常高的,一般的集成AD采样功能的单片机其位数位8位或10位。如果A...
单片机 对 ADC 的控制有几种?这个东西和单片机有关的主要是D0~D7ADDA、ADDB、ADDCALESTARTEOCOE相应的作用看下面ADC0809芯片有28条引脚,采用双列直插式封装,下面说明各引脚功能。.....
单片机 AD和 ADC 的区别?在单片机中,AD和ADC实际上是同一种模数转换器的不同叫法,AD是AttackDamage的缩写,而ADC则是AttackDamageCarry的缩写。AD/ADC用于将模拟信号转换为数字信号....
单片机 如何处理 ADC 采样数据?通过AD转换单片机可以把模拟信号转换为数字信号单片机通过AD输入口可以采集到外界的电压值。根据I=U/R的关系,可以用于测量电流;使用NTC和固定电阻进行分压,...
12位 adc单片机 有哪些?1.C8051F020,集成了一个12bit的ADC和8bit的ADC,飞思卡尔十六位的单片机MSP430F5系列单片机;2.stm32f系列单片机;3.picf18系列单片机;等等。在使用的时...
ADC /SPI/PWM 单片机 中是什么意思?ADC:模拟数字转换,将模拟电压转换成数字量的外设的名称SPI:串行总线,全双工串行总线PWM:脉冲宽度调制,工程控制脉冲波形ADC:模拟数字转换,将模拟电压转换成...
单片机 几个 ADC 能同时使用吗?一般情况下,单片机内部的多个ADC模块是可以同时使用的,这主要取决于单片机的硬件设计和软件编程。不同的单片机芯片具有不同的ADC数量和特性,一些高性能的单片...
stc 单片机adc 采样值是5v?STC单片机ADC采样值并不一定是5V,它取决于ADC参考电压的设置。在STC单片机中,ADC参考电压可以通过设置寄存器来进行调整,一般默认为内部参考电压2.56V。因此,...
单片机 供电电压会影响 adc 基准电压吗?单片机供电电压会影响ADC基准电压。ADC(模数转换器)是将模拟信号转换为数字信号的设备,其中基准电压是ADC进行模拟信号转换的参考电压。单片机供电电压的变化...