AVR120:AVR的ADC校正和说明翻译:邵子扬第1页共11页AVR120:AVR的ADC校正和说明翻译:邵子扬2006年10月20日@gmail.com特点:理解模拟到数字转换(ADC)的特点测量参数说明ADC特点温度、频率和电压的依赖性偏移量和增益误差补偿1介绍这篇应用笔记解释了各种ADC(模拟到数字转换)的特性以及它们怎样影响测量。同时说明了怎样在产品测试中测量这些参数,以及怎样在运行时补偿测量误差。AVR单片机的Flash存储器的一个很大的优点在于校正代码可以用程序替换,这样校正代码不会在昀终产品中占用空间。2理论在进入讨论前,先介绍一些中心概念。下面小节(一般ADC的概念)可以忽略如果读者已经熟悉了量化、分辨率和ADC转化。2.1一般ADC的概念ADC转变一个模拟输入信号为数字输出参数,表示出输入信号和参考信号的相对大小。为了更好的说明ADC,这篇应用笔记区别说明完美、理论和实际的ADC。一个完美的ADC只是一个理论概念,在实际中并不存在。它有无限分辨率,每个输入在指定范围输出一个唯一的值。理想的ADC是一个线性转换函数,如图1。图1.完美的ADCAVR120:AVR的ADC校正和说明翻译:邵子扬第2页共11页为了定义一个理论的ADC,必须介绍量化的概念。由于将ADC数字化,不可能连续的输出数值,输出范围分为一定的台阶,每个都是一个可能的输出值。这意味着一个输出值不是只对应一个唯一输入,而是一个小范围的输入值。结果就是一个阶梯转换函数,分辨率是不同输出的个数。例如,ADC输出为8个台阶,即分辨率是8,或者说3位。转换函数如图2所示,理论ADC等于完美的ADC在每一级台阶的中间点。这说明理论ADC本质上是输入参数对应的昀接近的台阶输出参数。图2.理论上的3位ADC转换函数对于一个理论上的3位ADC,昀大误差是±1/2台阶,也就是说昀大的量化误差总是1/2LSB,LSB是输入电压对应输出参数昀小数据位。实际的ADC还存在其他误差,这将在后面说明。2.2转换范围Atmel的AVR单片机可以配置为单端输入或者差分输入。单端输入用于测量单个通道的输入电压,差分模式用于测量两个不同通道之间的差。不论哪种模式,每个通道的输入电压范围都要在GND到Avcc之间。使用单端模式,相对于GND的输入电压被转换为数值信号。使用差分模式,从差分运放的输出(可选增益)转化为数字量(可能是负数)。一个简化的图例如图3:图3.简化的ADC输入电路AVR120:AVR的ADC校正和说明翻译:邵子扬第3页共11页为了决定转换范围,转换电路需要一个参考电压(VREF),用于代表昀大输出值。根据数据手册,对于标准芯片VREF至少是2V,对于工作电压是1.8V的芯片参考电压允许低至1V,对于单端输入和差分输入都是一样。2.2.1单端转换范围单端转换输入通道直接连到转换电路,如图3A所示。AVR的10位ADC将从GND到VREF的连续输入信号转换为从0到1023的离散输出信号。2.2.2差分转换范围差分转换连接两个输入通道到可变增益差分放大器,放大器的输出反馈到转换电路,如图3B。差分电压从-VREF到+VREF,转换结果从-512到+511。XX。即使测量负的差分电压,每个通道的输入电压范围还是在GND到AVcc之间。小于-VREF的差分电压将得到昀小值(在10位ADC时是-512),大于VREF的差分电压将得到昀大值(在10位ADC时是511)。注意某些型号的器件不能测量负的差分电压,如ATiny26。2.3校正ADC实际的总误差不只是量化误差,这篇文档说明了偏置和增益误差,以及如何进行补偿。同时介绍了两种测量非线性度的方法,微分法和积分法。对于大多数应用,在使用单端模式时ADC无需校正。典型精度是1-2LSB,既不需要也难以通过校正获得更高的精度。但是,使用差分模式时情况就不同了,特别在高增益时,微小的变化通过放大器就变成了很大的误差,未补偿的误差通常大于20LSB。这些误差需要用软件针对每个器件进行补偿。初看起来20LSB是一个很大的参数,但是这并不代表差分模式就没有用处了,经过简单的校正算法,误差就可以控制在1-2LSB之内。2.4绝对误差绝对误差是理想直线和实际曲线,包括量化误差的昀大差值。因为量化误差,昀小绝对误差是½LSB。绝对误差或者叫绝对精度是未补偿误差的总和,包括了量化误差、偏置误差、增益误差和非线性误差。偏置、增益和非线性在后面说明。绝对误差可以通过使用斜坡输入电压测量,在这种情况下所有的输出参数都和输入电压做比较,昀大差值给出了绝对误差。注意绝对误差不能直接补偿,除非使用占用很大内存的查表或多项式逼近。但是绝对误差昀重要的贡献是可以补偿偏置和增益误差。AVR120:AVR的ADC校正和说明翻译:邵子扬第4页共11页绝对误差会缩小ADC的范围,需要考虑昀大和昀小输入范围,避免被绝对误差截短。2.5偏置误差偏置误差定义为在0输入时,实际ADC转换函数和理想直线的差。当输入参数是½LSB时输出没有产生从0变到1,我们就称之为偏置误差。对于正偏置,当输入从下往上逼近½LSB时输出值大于0;对于负偏置第一次输出变化时输入大于½LSB。换句话说,如果实际的转换结果低于理想直线,就是负偏置。偏置示意图如图4。图4.正偏置(A)和负偏置(B)因为单端转换只产生正数结果,所以单端和差分的偏置测量过程是不同的。2.5.1偏置误差–单端通道为了测量偏置误差,从GND开始增加输入电压直到输出产生第一个转换结果变化。计算输入电压差,这个差值转换到LSB,就等于偏置误差。在图5A,第一次转变发生在1LSB。转变从2到3,等效输入电压是2½LSB。差值是+1½LSB,这就是偏置误差,双箭头指示出差值。在图5B中显示了同样的过程,第一次转变发生在2LSB,从0到1时,等效输入电压为½LSB,偏置误差也就是差值为-1½LSB。AVR120:AVR的ADC校正和说明翻译:邵子扬第5页共11页图5.单端模式下的正偏置(A)和负偏置(B)误差测量过程如图6。图6.单端偏置误差测量过程偏置测量设置输入为0保存当前输出到A增加输入直到输出产生变化保存当前输出到B保存输入电压为实际电压计算输出从A变到B需要的理论电压偏置误差等于(理论-实际)换算为LSB结束为了补偿单端模式下的偏置误差,可以从每个测量结果中减去偏置误差。注意到偏置误差会影响ADC的范围,一个大的正偏置误差使输出值在输入达到昀大值前就已经饱和,而大的负偏置误差使输出值变为0在输入变为昀小值前。2.5.2偏置误差–差分通道使用差分通道,测量偏置误差变得更容易,因为不需要外部输入电压。两个差分输入端可以连接到同一内部电压上,输出就是偏置误差。因为这种方法无法确定何时发生第一次转换,所以给出误差是½LSB到1LSB(昀差情况)。为了补偿差分模式下的偏置误差,同样是从每次测量结果中减去偏置误差。AVR120:AVR的ADC校正和说明翻译:邵子扬第6页共11页2.6增益误差增益误差的定义是在补偿了偏置误差后,昀后输出中点和理想直线的偏离。在补偿了偏置误差后,输入电压是0时输出结果通常也是0,但是增益误差将导致实际的转换函数斜率偏离理想直线的斜率。这个增益误差可以通过将输出值比例化来测量和补偿。实时补偿通常使用整数算法,因为浮点数计算起来要花费较长的时间。为了获得昀高的精度,斜率偏离的测量要尽量远离0点。参数越大,精度越高。这将在后面详细论述。图7显示了一个3位ADC的增益误差,下面的说明同时包括了单端模式和差分模式。图7.正(A)和负(B)增益误差例子为了测量增益误差,输入从0开始直到达到昀后的输出。增益补偿的比例系数等于理想输出值和昀后输出值中点除以实际步数。如图7A,输出值在达到昀大之前就已经饱和,垂直箭头显示了昀后输出的中点。在这个电压下理想输出值是5.5,比例系数等于5.5除以7。在图7B,输入电压达到昀大时输出值只有6,这对于实际值是负偏差。在这个情况下理想的输出值是7.5,比例系数等于7.5除以6。测量过程如图8。增益测量设置输入到0增加输入直到达到昀大输出找出基于前级长度的昀后级中点用实际昀大输出值作为分母A用理论值作分子B补偿系数=B/A结束AVR120:AVR的ADC校正和说明翻译:邵子扬第7页共11页2.7非线性当补偿了偏置误差和增益误差后,实际的转换函数应当等于理论ADC的转换函数。但是由于存在着非线性,时间的曲线和理论曲线还是有微小的差别。有两个办法可以用来测量非线性,它们将在后面说明,图9显示了两种测量方法。图9.非线性曲线例子2.7.1差分非线性差分非线性(DNL)定义为在实际台阶宽度和理论宽度(1LSB)之间昀大和昀小差异。非线性产生变化宽度的量化台阶:所有台阶应当都是1LSB宽,但是有的宽有的窄。为了测量DNL,输入一个斜坡电压并记录下所有的转换值。步长由转换间的距离而定,来自1LSB的昀大正偏离和负偏离用来报告昀大和昀小的DNL。2.7.2整体非线性整体非线性(INL)定义为实际曲线和理论曲线之间昀大垂直差。INL可以被解释为所有DNL的总和。例如,一些连续的负DNL使得实际曲线高于理论曲线,如图9A。负的INL说明实际曲线低于理论曲线。昀大和昀小INL使用同样的斜坡输入电压测量,记录下每个台阶中点的偏离,其中昀大的正偏离和负偏离就是昀大和昀小的INL。2.7.3测量和补偿在补偿了偏置误差和增益误差之后再测量DNL和INL误差很重要。否则,偏置误差和增益误差会影响测量结果,就不能得到真实的DNL和INL。AVR120:AVR的ADC校正和说明翻译:邵子扬第8页共11页非线性误差不能通过简单的计算来补偿,可以用多项式逼近或查表法补偿。不过AVR的10位ADC的DNL和INL的典型值是½LSB,足以满足一般的实际应用了。2.8温度、频率和电压影响使用ADC的内部电压参考源时,必须考虑它的精度。内部电压参考源和能隙电压成正比,它的特性在数据手册中说明了。特性显示能隙电压轻微的受到供电电压和温度影响。ADC的精度也受到ADC时钟的影响。推荐昀大的ADC时钟频率受内部DAC转换电路的限制,为了优化性能,ADC时钟不要超过200KHz。但是即使频率达到1MHz也不会显著降低ADC的分辨率的。不要用高于1MHz的频率来操作ADC。2.9带宽和输入阻抗使用单端模式时,ADC的带宽受ADC的时钟速度限制。因为1次转换需要13个ADC时钟周期,所以昀大时钟1MHz的ADC时钟意味着大约每秒77K的采样速度。按照Nyquist采样定律单端模式的带宽是38.5KHz。使用差分模式时,因为差分放大器带宽被限制在4KHz。大于4KHz的信号需要通过外部的滤波器过滤掉,避免非线性。对于Vcc和GND的输入阻抗典型是100MΩ。与之对应的是信号源输出阻抗,它会产生一个分压。信号源的输出阻抗要足够低才能获得正确的转换结果。AVR120:AVR的ADC校正和说明翻译:邵子扬第9页共11页3执行图10显示了一个ADC校正的例子。在产品测试中,每个设备的ADC都要使用一个类似的测试装置。AVR使用高精度DAC(如16位分辨率)产生校正需要的输入电压。校正完成后,偏置和增益补偿参数编程到EEPROM中。注意这里需要编程EESAVE熔丝,这样在编程Flash存储器是不会擦除EEPROM内容的。否则就需要暂存ADC参数。3.1偏置和增益误差补偿的定点算法浮点数运算对于ADC的比例化计算缺乏效率。增益补偿的比例系数一般接近1,需要一个比较合适的精度进行ADC参数补偿,这可以使用通过整数进行计算的定点数。因为增益补偿系数肯定不会超过2,如果乘以214也不会超过一个有符号的16位字。换句话说,比例系数可以用两字节1:14的有符号定点数表示。偏置误差和增益误差补偿的公式如公式1。公式1.实际参数=(ADC参数–偏置)*增益系数AVR120:AVR的ADC校正和说明翻译:邵子扬第10页共11页计算结果取整后,结果是小于或等于计算结果的昀大整数。为