大家在使用
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
,估计一两年之内都测不完。