AVR120 AVR的ADC校正和说明Word格式文档下载.docx
- 文档编号:22196941
- 上传时间:2023-02-03
- 格式:DOCX
- 页数:14
- 大小:198.86KB
AVR120 AVR的ADC校正和说明Word格式文档下载.docx
《AVR120 AVR的ADC校正和说明Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《AVR120 AVR的ADC校正和说明Word格式文档下载.docx(14页珍藏版)》请在冰豆网上搜索。
它有无限分辨率,每个输入在指定范围输出一个唯一的值。
理想的ADC是一个线性转换函数,如图1。
图1.完美的ADC
为了定义一个理论的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输入电路
为了决定转换范围,转换电路需要一个参考电压(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。
绝对误差或者叫绝对精度是未补偿误差的总和,包括了量化误差、偏置误差、增益误差和非线性误差。
偏置、增益和非线性在后面说明。
绝对误差可以通过使用斜坡输入电压测量,在这种情况下所有的输出参数都和输入电压做比较,最大差值给出了绝对误差。
注意绝对误差不能直接补偿,除非使用占用很大内存的查表或多项式逼近。
但是绝对误差最重要的贡献是可以补偿偏置和增益误差。
绝对误差会缩小ADC的范围,需要考虑最大和最小输入范围,避免被绝对误差截短。
2.5偏置误差
偏置误差定义为在0输入时,实际ADC转换函数和理想直线的差。
当输入参数是½
LSB时输出没有产生从0变到1,我们就称之为偏置误差。
对于正偏置,当输入从下往上逼近½
LSB时输出值大于0;
对于负偏置第一次输出变化时输入大于½
换句话说,如果实际的转换结果低于理想直线,就是负偏置。
偏置示意图如图4。
图4.正偏置(A)和负偏置(B)
因为单端转换只产生正数结果,所以单端和差分的偏置测量过程是不同的。
2.5.1偏置误差–单端通道
为了测量偏置误差,从GND开始增加输入电压直到输出产生第一个转换结果变化。
计算输入电压差,这个差值转换到LSB,就等于偏置误差。
在图5A,第一次转变发生在1LSB。
转变从2到3,等效输入电压是2½
差值是+1½
LSB,这就是偏置误差,双箭头指示出差值。
在图5B中显示了同样的过程,第一次转变发生在2LSB,从0到1时,等效输入电压为½
LSB,偏置误差也就是差值为-1½
图5.单端模式下的正偏置(A)和负偏置(B)误差
测量过程如图6。
图6.单端偏置误差测量过程
为了补偿单端模式下的偏置误差,可以从每个测量结果中减去偏置误差。
注意到偏置误差会影响ADC的范围,一个大的正偏置误差使输出值在输入达到最大值前就已经饱和,而大的负偏置误差使输出值变为0在输入变为最小值前。
2.5.2偏置误差–差分通道
使用差分通道,测量偏置误差变得更容易,因为不需要外部输入电压。
两个差分输入端可以连接到同一内部电压上,输出就是偏置误差。
因为这种方法无法确定何时发生第一次转换,所以给出误差是½
LSB到1LSB(最差情况)。
为了补偿差分模式下的偏置误差,同样是从每次测量结果中减去偏置误差。
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。
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。
非线性误差不能通过简单的计算来补偿,可以用多项式逼近或查表法补偿。
不过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Ω。
与之对应的是信号源输出阻抗,它会产生一个分压。
信号源的输出阻抗要足够低才能获得正确的转换结果。
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参数–偏置)*增益系数
计算结果取整后,结果是小于或等于计算结果的最大整数。
为了保证结果是最接近的整数,在取整前需要加上0.5(译者注:
即四舍五入)。
加上0.5,乘以比例214并减去偏置就得到了公式2。
公式2.
214*实际参数=214*ADC参数*增益系数+214*0.5-214*偏置*增益系数
因为增益系数和偏置修正是常数,可以进一步进行优化。
如果等式两边乘以22,得到216,高2字节等于取整后的结果,这样不用右移16位。
我们引入一些常数,并在公式3中总结。
公式3.
系数=214*增益系数
修正=214*(0.5–偏置*增益系数)
216*实际结果=22*(ADC参数*系数+修正)
使用这个方法,校正软件计算常数系数和修正,并存储它们到EEPROM中。
运行中,只需要对ADC参数进行一次乘法,一次加法和左移两位。
使用IARC编译器以及最高速度优化,只需要42个CPU周期。
3.1.1校准
测试工装设计超出了这篇笔记的范围。
下面只给出了AVR校准流程图,它使用了外部DAC。
无需使用多个ADC通道,只使用一个开关切换单端和差分模式。
ADC参数认为和使用的通道是一致的,多路复用不会引入误差。
软件执行过程如图11。
图11.软件校正流程
这一段程序应当先编程到AVR单片机中以进行校正,以后在用最终的程序替换。
再次说明要编程EESAVE熔丝,这样在编程Flash时可以防止将EEPROM的数据也擦除了。
3.1.2补偿
运行时补偿的代码可以做为一个小函数,每次ADC测量后都通过这个函数校正,使用公式3中的系数和修正参数。
图12.配置和增益补偿的流程图
计算过程可以用下面的C函数,也可以用宏的方式表示:
signedintadc_compensate(signedintadcvalue,
signedintfactor,
signedlongcorrection)
{
return(((((signedlong)adcvalue*factor)+correction)<
<
2)>
>
16);
}
存放在EEPROM中的参数可以在程序启动时复制到SRAM中,这样可以在程序中快速访问。
4参考
●RobertGordon–ACalculatedLookatFixed-PointArithmetic
●ApplicationNoteAVR210–UsingtheAVRHardwareMultiplier
(全文完)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- AVR120 AVR的ADC校正和说明 AVR ADC 校正 说明