产品选型

adc单片机 单片机外围模块漫谈之二,如何提高ADC转换精度

小编 2024-11-24 产品选型 23 0

单片机外围模块漫谈之二,如何提高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)知识基础视频教程:

视频教程

一、模拟信号和数字信号

模拟信号指幅度的取值是连续的(幅值可由无限个数值表示)。时间上连续的模拟信号连续变化的图像(电视、传真)信号等。时间上离散的模拟信号是一种抽样信号,它是模拟信号每隔时间T抽样一次所得到的信号,虽然其波形在时间上是不连续的,但其幅度取值是连续的,所以仍是模拟信号,称之为脉冲幅度调制(PAM,简称脉幅调制)信号。

数字信号指幅度的取值是离散的,幅值表示被限制在有限个数值之内。二进制码就是一种数字信号。二进制码受噪声的影响小,易于有数字电路进行处理,所以得到了广泛的应用。

AD转换器(Analog-Digital Converter)是模数转换器的别称,其功能是将模拟量转换成对应的数字量。A/D转换器作为模拟量与数字量的桥梁,在数据采集、模拟量测量等领域获得了广泛应用

二、AD转换器参数指标

(1)分辨率:指对输入模拟量变化的灵敏度,习惯上用输出二进制的位数或BCD码位数表示。

(2) 转换误差:指与数字输出量所对应的模拟输入量的实际值与理论值之间的差值。常用最低有效位的倍数表示。

(3)转换速率:指能够重复进行数据转换的速度,即每秒转换的次数,而完成一次A/D转换所需的时间(包括稳定时间),为转换速率的倒数。

三、 ADC0809的使用

ADC0809时序中,CLK为转换时钟,要一直产生。转换过程为,ADC先在ALE引脚上产生上升沿进行通道地址锁存,将要转换的通道选中;接着在START引脚产生上升沿,启动转换进程;ADC转换开始后,EOC变低,表示正在转换过程中;当EOC变高时,表示转换结束,这时可以将OE引脚拉高,允许数据从AD中输出,最后通过D0~D7读取数据即可。

电路图如下:

电压表

相关问答

单片机 adc 之间如何连接?

单片机与ADC之间可以通过多种方式进行连接,包括并行接口、串行接口、SPI接口等。其中,最常用的方式是通过SPI接口进行连接,通过SPI接口可以实现快速、稳定的数...

12位 adc单片机 有哪些?

1.C8051F020,集成了一个12bit的ADC和8bit的ADC,飞思卡尔十六位的单片机MSP430F5系列单片机;2.stm32f系列单片机;3.picf18系列单片机;等等。在使用的时...

单片机 请问 ADC 的基准指的是什么?

ADC的基准电压是ADC转换电路里用于确定目标测量电压的最高范围。因此基准电压的选取对ADC转换的精度有所影响。例如:ADC0809的电源电压范围是4.75v-5.25v。...

单片机 AD和 ADC 的区别?

主要区别如下:1.AD通常指模拟量到数字量的转换过程,是一种广义的概念。ADC则特指执行AD转换的硬件模块,是AD概念的一种实现方式。2.单片机中的ADC模块内置...

请各位高手讲解一下 单片机 ADC 模块中的数据左对齐和右对齐是啥意思?把大概的工作原理讲下啦.谢谢啦?

一般高于八位的ADC才会出现这种情况比如说AD转换后数字量保存在ADCH,ADCL两个寄存器中左对齐就是AD值的最高位就是ADCH的最高位了,ADCL的低位就会有的用不到...

单片机 ADC 的控制有几种?

这个东西和单片机有关的主要是D0~D7ADDA、ADDB、ADDCALESTARTEOCOE相应的作用看下面ADC0809芯片有28条引脚,采用双列直插式封装,下面说明各引脚功能。.....

PIC 单片机 如何实现多路 ADC 采集?

PIC单片机可以使用片载模拟多路复用器和ADC模块实现多路ADC采集。具体过程如下:初始化ADC模块,包括设置采样速率、分辨率和参考电压等参数。配置模拟多路复...

adc 0809与 单片机 连接的三种方式?

51单片机与0809连接时,实际上有两类接法。一是将0809连接为51的一个外扩存储器。执行MOVX指令时端口时序恰好能够满足0809要求。启动A/D转换,以及模拟通道实...

单片机adc 如何测12v电压?

单片机ADC可以测量12V电压。单片机ADC可以实现对模拟电压信号测量和转换成数字信号处理,将电压信号按照一定比例变成数字信号,因此,可以通过把12V电压信号...

单片机 如何实现模拟输出,内部的 adc 模块能不能直接输出模拟信号?

可以用dac芯片或者pac芯片扩展。pac芯片gp8101可以实现pwn转电压信号,dac芯片gp8201可以实现i2c转电压信号,sop8封装,非常方便。可以用dac芯片或者pac芯片扩展...

猜你喜欢