设计与开发

INL单片机 关于ADC(DAC)的线性度(INL和DNL)

小编 2024-10-05 设计与开发 23 0

关于ADC(DAC)的线性度(INL和DNL)

大家在使用ADC的时候,往往最关注位数,而对ADC的线性度往往会忽略。

其实这个线性度也是ADC非常重要的指标,ADC(或DAC,其实ADC也是由DAC组成的)线性度指标有两个:

INL:翻译过来叫“积分非线性”,指的是ADC整体的非线性程度。

DNL:翻译过来叫“微分非线性”,指的是ADC局部(细节)的非线性程度。

我们通常讲的“线性度”都是指“积分非线性”,积分非线性一般以百分比给出,或者以位数给出。举个例子:AD7705(16位)的datasheet上说有0.003%的非线性。1LSB为1/65535=0.0015%,所以也可说AD7705有2LSB的非线性。“微分非线性”不常用, AD7705的datasheet上说:“16位无失码”,那就是说明它的微分非线性小于1LSB。

再举个例子:有一把10厘米的尺子,分度为1mm(分辨率,相当于ADC的1LSB),那总共有100小格(满量程为100LSB,7位ADC都不到)。

“微分非线性”指的是,每一小格长度和理想的一小格长度(定为1mm)之间的误差。就是说这把尺子有疏有密,假设这把尺子有些小格的长度分别为: 0.8mm, 0.9mm, 1.0mm,1.1mm,1.3mm。那么 1.3mm的小格对应的“微分非线性”为:1.3mm–1mm = 0.3mm,0.8mm的小格对应的“微分非线性”为0.8mm–1mm = -0.2mm,取绝对值就是0.2mm。取最大的误差值0.3mm(也就是0.3LSB)定义为这把尺子的“微分非线性”。

“积分非线性”是微分非线性误差的积累,是某一长段区间(有可能在3cm处,也有可能在5cm处有最大误差)和真实长度的误差。“积分”就是对一段区间内的“微分”求代数和嘛(离散域)。

好的微分非线性并不能保证有一个好的积分非线性,因为假如微分非线性的误差很小,但都是正的,那积分非线性就会很大(假如尺子有100小格,每一小格的的微分非线性误差累加起来就很大)。但是好的积分非线性可以保证有一个好的微分非线性。

有些人会问,假如有一把尺子的每一小格都是0.9mm,这时INL和DNL为多少?这时候格子的疏密是均匀的,DNL为0mm,INL也为0%,也就是线性度非常理想(我这里把理想一小格长度定为0.9mm)。但是这样的尺子是不准确的,我们说这把尺子有一个增益误差(这里就是0.9倍)。就是说你用这把尺寸量到一个物体长度读数为10CM,需要再乘上0.9这个系数,物体的真实尺寸为10CM*0.9=9CM。我们使用一些ADC时,常常要做增益校准,做的就是这个事(用一个标准的信号源,把这个0.9的系数给算出来,存到单片机或者E2PROM里面)。

说到这里大家对ADC线性度概念应该可以明白一些了,但是如何把一个ADC芯片的线性度测量出来,那可不是容易的事。特别是高位数的ADC,比如16位,笨一点的办法,就是测65536个点,计算得到积分非线性,如果是24位的ADC,估计一两年之内都测不完。

本文来自网络文章整理,如有侵权请联系删除。

单片机外围模块漫谈之二,如何提高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

相关问答

单片机 inc是什么意思?

我想你的意思应该是(16H)=X,(17H)=Y,表示定义16H这个数据存储器单元中用来存放X,定义17H这个数据存储器单元中用来存放Y,INC16H的意思是把16H这个地址单...我...

INMS是什么意思- 汇财吧专业问答

[回答]这句英文应该是:Whenyou'rebroke,butshebeliev甫触颠吠郯杜奠森订缉esinyourdreams.意思是:当你身无分文时,她却相信你的梦想。笨蛋的意思你的是...

继电器com和on接什么线?

空调继电器上com代表公共端,on端子表示常开触点。COM端子和ON端子组成启动回路,当继电器线圈得电,接通电源负载工作。1、DC+:接5V正2、DC-:接5V负极(单片...

单片机 IE0的数值是由INT0决定的吗?

IE0外部中断0的中断标志位。单片机接收到中断信号后,IE0置1,产生中断,进入外部中断程序后IE0清零。这个过程是单片机硬件自动作用的,软件上不需要处理。I...

我用组态王与 单片机 进行通讯,设置之后发现只能接受而不能发送COMIN是接收COMOUT是发送,求解啊?

如果串口调试测试没有问题,看一下你的COMMOUT字符串的格式是否符合通讯协议规范(注意全角和半角)如果串口调试测试没有问题,看一下你的COMMOUT字符串的格式是...

单片机 主要技术指标?

(1)位数:是单片机能够一次处理的数据的宽度,有1位机(如PD7502)、4位机(如MSM64155A)、8位机(如MCS-51)、16位机(如MCS-96)、32位机(如IMST414).....

uint什么意思,怎么用。 单片机 c语言编程?

1、这不是C语言关键字,只是程序设计者为了方便自己做的宏定义“#DEFINEUINTUNSIGNEDINT”,当然可以把它写成其他的字符串,不过还是用这个好,大部分的程序...

单片机 INT0和INT1口干嘛用的?

[最佳回答]单片机正常工作时,要不停的执行它的程序。在INT0或INT1口输入一个信号(低电平或下降沿),就可以使单片机临时停下正在执行的程序,转去执行预先编好...

小白问下 单片机 isp是什么意思_其他问答_系统粉

ISP笼统的说就是在线编程,把单片机焊到电路板上,如果发现程序哪里有不合适的地方,可以直接通过pc进行编程,而不用把单片机进行拆卸ISP笼统的说就是...

IAP是什么意思_作业帮

[回答]IAP有多种含义,包括:中国科学院大气物理研究所,服务商,应用编程,支付方式等.看你是在哪方面遇到的

猜你喜欢