ADC线性相关参数详解

本篇文章主旨是帮助读者理解模数转换器(ADC)的一些基本特性和ADC相关的一些专业术语的定义及概念。实际上ADC相关的参数定义非常多,本篇文章只会包含一些常用的参数,通过对这些参数的理解,设计人员在系统设计中可以更好的,也更有针对性的选择自己需要的ADC。本篇文章翻译自NXP的AN2438.pdf

测量单位

在ADC测试中,会用到各种不同的参数和单位来表征ADC的不同性能,如果对这些单位理解不当可能会影响对ADC性能的判断,从而影响ADC的选型,下面就列出了一些常用的单位表征方式,在以后的例子中我们都假设ADC是10bit, 参考电压是5.12V, 这时一个2.56V的输入电压的转换结果理想为0x200。

  • Volts(V), 误差电压,它是指一个输入电压在经过ADC转换后得到的结果所对应的理想输入电压与输入电压之间的差值。如果这个误差测量的单位是volts, 那么这个结果就和实际的输入电压相关,而不是一个归一化的值,它在表征一些固定的误差源(比如偏置误差)时比较常用。
  • 最低有效位(LSB)1 LSB指的是ADC的一个最小分辨率所对应的一个单位电压,它是一个更为常用的表示方式,多用于表征一些非线性误差。比如一个误差为正负3LSB的ADC对2.56V的输入电压的转换结果可能是0x1fd~0x203之间。LSB也是最为常见的误差表征方式。
    -满幅电压比(%FSV)它指的是ADC输入参考电压的百分之一,它常用于可较准的误差的量化,比如偏置误差和增益误差。
  • Counts, 和LSB定义相同,只是为了和友商ADC的定义保持一致。
  • Decibles(db) 1 db的定义是20*log(err_vlots/input_range), 对误差为50db的ADC而言,2.56V的电压转换结果在0x1fd和0x203之间,db的量化方式在通信领域应用十分广泛,而在电机和控制中很少用到。

ADC的传输曲线

ADC实际主要完成一个电压到数字码型转换的功能,实际的曲线对应的是一个实际传输函数,一个理想线性ADC对应的是一个理想传输函数,也就是输入电压上一个电压变化对应的码型变化是唯一的,与初始的电压值无关。较准后的传输函数是在做端点较准之后对应的曲线。

理想传输函数

理想的传输函数应该是VREFL(最低参考电压)到VREFH(最高参考电压)的一个直线,经过ADC之后,这条直线会被量化,量化的单位和ADC的分辨率有关,理想情况下每个量化等级是一致的。

理想的码型宽度(1LSB)ICW = 1LSB = (VREFH - VREFL)/2^N
理想的传输函数:Code = (VIN - VREFL)/1LSB  VIN = (Code * 1LSB) + VREFL

量化误差和量化方法

在ADC中有两种不同的量化方法:

  1. 非补偿量化:第一个step对应1LSB,最后一个step对应VREFH-1LSB, 这种方法的量化误差是0LSB到1LSB;
  2. 补偿量化: 第一个step对应1/2LSB, 最后一个step对应VREFH - 1/2LSB,这种方法的量化误差是-1/2LSB到1/2LSB;

quantization graphs.png

较准传输函数

大多数ADC因为很难精确测量两个端点上的电压而导致端点上存在非线性。如果对两个端点上的误差进行较准,我们会得到一个更为准确的测量结果,因此考虑到这个原因,我们可能在ADC两个端点之前定义一个传输函数,这个函数就是较准后的传输函数,它的起点是VREFL + EZS, EZS是零点失调电压,终点是VREFH + EFS, EFS是满幅失调电压。

较准后的码型宽度: ACW = [(VREFH + EFS) - (VREFL + EZS)] / 2^N
较准后的传输函数:
    Code = (VIN - VREFL - EZS)/ACW
    VIN = (Code * ACW) + VREFL + EZS

最佳传输函数

有些ADC的零点和满幅误差比较小,但是有比较大的非线性误差,这时就需要定义一个最佳的传输函数,它的定义是所有转换的平均误差最小。通过定义可以发现,想要得到这个曲线,需要遍历所有的电压点,这在实际应用的是很难实现的,因此这个函数的实际应用意义不大,不过很多自动评估系统都会假定存在这条曲线。

adjust-best-fit-transfer.png

零点误差和满幅误差

在ADC的非线性测试中,一般两个端点会做特别的考虑,主要是因为这两个点的测试结果很容易得到。

  • 零点误差(Zero-Scale Error, Ezs), 它指的是实际第一个转换(code从0到1)对应的实际电压与理想电压之间的差值,如果code为0的结果不存在,比如直接从1跳到2,那么就是1和2对应实际电压和理想电压之间的差值。

    
    Ezs = CCW(0) - ICW(0)
    Ezs = CCW(x) - sum(i=0->x)[ICW(i)]
    
  • 满幅误差(Full-Scale Error, Efs), 最后一个码型对应的实际电压与理想电压之前的差值

    Efs = CCW(last) - ICW(last)
    Efs = CCW(last -x) - sum(i=x->last)[ICW(i)]
    

偏置误差和增益误差

零点误差和满收到误差可以用来计算偏置和增益误差,这两个误差是ADC参数中常常会用到的,也是经常会被误解的两个参数。

  • 偏置误差(Offset Error, Eo), Adjusted Offset, Zero-Scale Offset指的是ADC第一个转换对应的实际电压与理想电压之前的差值,它的定义的零点误差相同。偏置暗示所有的转换结果都会偏移一个固定的大小,然而这并不意味着偏置误差大对系统的影响可以直接较准。
  • Best-Fit Offset, 它指的是最佳传输函数和理想传输函数在VREFL点的差异,有的地方也会选取中间点(VREFH + VREFL)/2而不是VREFL, 这个偏置实际很难测量
  • 满值偏置(Full-Scale Offset)是最后一个转换对应的实际电压与理想电压之前的差值,写满幅误差的定义相同
  • 增益误差(Gain Error Eg) Adjusted Gain Error指的是实际传输函数曲线斜率和理想传输函数曲线斜率之前的差异,不过在计算时一般取两个端点上的差异:EG = Ezs - Efs, 增益误差一般无法直接测量,另外,如果端点上的线性不是特别好的话,也会影响增益误差经结果,所以增益误差还是越小越好。

endpoint error.png

差分非线性

差分非线性(Differential Non-Linearity, DNL)指的是实际码型电压宽度(Current Code Width, CCW)与理想码型电压宽度(Ideal Code Width, ICW)差异的最大值, DNL是ADC至关重要的一个参数,它可以表征ADC对一个微小电压变化的采样能力, DNL的计算方法如下:

    Code DNL = CCW - ICW
    DNL = Max(Code DNL)

在有些地方可能会用到ACW(较准后的单位电压)而不是CCW,这样对ADC的相对精度影响不大,不过用ACW的时候,只有ADC带有较准功能的时候才有参考价值。
与差分非线性相关的两个比较重要的参数是Missing Codes和Monotonicity:

  • Missing Codes: 漏码指的是ADC输入电压上一个无穷小的电压变化导致ADC输出两个不同的码,而两个码中间的码不出现, DNL为-1LSB就意味着ADC会有漏码,这种表示方式下DNL不会小于1LSB.
  • Monotonicity 非单调, 非单调指的是ADC输入电压一直增加的情况下,ADC的输出结果出现变小的情况。

differential non-liearity missing codes non montonicity.png

积分非线性

积分非线性(Integral Non-Linearity, INL)指的是从第一个转换到当前转换的所有差分误差(DNL)的和。例如,如果到当前点DNL的和是1LSB,它的含义是从第一个点到当前点的电压宽度比理想的电压宽度大一个LSB,也就是当前点的转换结果会比理想结果的code小1.
概括地说,INL指的是实际传输曲线与一个基准传输曲线之前的曲率的差异,不过不同的测试方式对基准的传输曲线的选择不一样。

    Code INL = V(Current Transition) - V(Baseline Transition)
    INL = Max(Code INL)

三种主要的定义:

  1. INL, Adjusted INL, Endpoint INL: 当前的转换电压与较准之后相应的转换电压的差异。这种定义方式在ADC可能通过较准的方式修正端点上的偏置前提下,ADC能够获取的最佳结果;
  2. Unajdusted INL: 当前转换与理想转换的差异,它包含了量化误差之外的所有误差;
  3. Best-Fit INL: 当前转换与最佳传输曲线的差异,通过优化正负两边的误差而使结果更好,但因为最佳传输曲线很难测量,所以这种定义并不实用,不过一般ADC的评估套件都会采用这种方式,因为它的结果看起来更好。

相关的几个其它定义

  1. 总误差(Total Error)又称总失调误差(Total Unadjusted Error), 一般越小越好
  2. Total Adjusted Error,指的是实际传输曲线与校准后传输曲线之前的INL和量化误差(Quatization Error)的和,和Total Unadjusted Error易混淆,现在不常用。
  3. Code Error, 误码,实际转换结果与理想转换结果之前的差异,一般是Total Unadjusted Error用LSB表示后取最近的整值。

Total Unadjusted Error.png

以上就是和ADC线性相关的一些参数的定义及测试方式,后面还会有一些和电源相关的其它误差分析,将另起一文详细说明。

发表新评论