对ADC(DAC)的线性度(INL和DNL)的一点理解

  • Post author:
  • Post category:其他







大家在使用


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


,估计一两年之内都测不完。