Professional Documents
Culture Documents
特点:
理解模拟到数字转换(ADC)的特点
测量参数说明 ADC 特点
温度、频率和电压的依赖性
偏移量和增益误差补偿
1 介绍
这篇应用笔记解释了各种 ADC(模拟到数字转换)的特性以及它们怎样影响测量。同时说明
了怎样在产品测试中测量这些参数,以及怎样在运行时补偿测量误差。
2 理论
在进入讨论前,先介绍一些中心概念。下面小节(一般 ADC 的概念)可以忽略如果读者已经
熟悉了量化、分辨率和 ADC 转化。
第 1 页 共 13 页
AVR120: AVR 的 ADC 校正和说明 翻译 : 邵子
扬
2.2 转换范围
Atmel 的 AVR 单片机可以配置为单端输入或者差分输入。单端输入用于测量单个通道的输入
电压,差分模式用于测量两个不同通道之间的差。不论哪种模式,每个通道的输入电压范
围都要在 GND 到 Avcc 之间。
第 2 页 共 13 页
AVR120: AVR 的 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 之间。
注意某些型号的器件不能测量负的差分电压,如 ATiny26。
2.3 校正
ADC 实际的总误差不只是量化误差,这篇文档说明了偏置和增益误差,以及如何进行补偿。
同时介绍了两种测量非线性度的方法,微分法和积分法。
但是,使用差分模式时情况就不同了,特别在高增益时,微小的变化通过放大器就变成了
很大的误差,未补偿的误差通常大于 20LSB。这些误差需要用软件针对每个器件进行补偿。
第 3 页 共 13 页
AVR120: AVR 的 ADC 校正和说明 翻译 : 邵子
扬
2.4 绝对误差
绝对误差是理想直线和实际曲线,包括量化误差的最大差值。因为量化误差,最小绝对误
差是 ½LSB。
绝对误差或者叫绝对精度是未补偿误差的总和,包括了量化误差、偏置误差、增益误差和非
线性误差。偏置、增益和非线性在后面说明。
绝对误差可以通过使用斜坡输入电压测量,在这种情况下所有的输出参数都和输入电压做
比较,最大差值给出了绝对误差。
注意绝对误差不能直接补偿,除非使用占用很大内存的查表或多项式逼近。但是绝对误差
最重要的贡献是可以补偿偏置和增益误差。
绝对误差会缩小 ADC 的范围,需要考虑最大和最小输入范围,避免被绝对误差截短。
2.5 偏置误差
偏置误差定义为在 0 输入时,实际 ADC 转换函数和理想直线的差。
图 4. 正偏置(A)和负偏置(B)
因为单端转换只产生正数结果,所以单端和差分的偏置测量过程是不同的。
第 4 页 共 13 页
AVR120: AVR 的 ADC 校正和说明 翻译 : 邵子
扬
第 5 页 共 13 页
AVR120: AVR 的 ADC 校正和说明 翻译 : 邵子
扬
图 5. 单端模式下的正偏置(A)和负偏置(B)误差
测量过程如图 6。
图 6. 单端偏置误差测量过程
偏 置 测 量
保 存 输 入 电 压 为
设 置 输 入 为 0 实 际 电 压
保 存 当 前 输 出 到 A 计 算 输 出 从 A变 到
B需 要 的 理 论 电 压
增 加 输 入 直 到 输
出 产 生 变 化 偏 置 误 差 等 于
( 理 论 -实 际 )
换 算 为 LSB
保 存 当 前 输 出 到 B
结 束
为了补偿单端模式下的偏置误差,可以从每个测量结果中减去偏置误差。注意到偏置误差
会影响 ADC 的范围,一个大的正偏置误差使输出值在输入达到最大值前就已经饱和,而大
的负偏置误差使输出值变为 0 在输入变为最小值前。
第 6 页 共 13 页
AVR120: AVR 的 ADC 校正和说明 翻译 : 邵子
扬
为了补偿差分模式下的偏置误差,同样是从每次测量结果中减去偏置误差。
2.6 增益误差
增益误差的定义是在补偿了偏置误差后,最后输出中点和理想直线的偏离。在补偿了偏置
误差后,输入电压是 0 时输出结果通常也是 0,但是增益误差将导致实际的转换函数斜率
偏离理想直线的斜率。这个增益误差可以通过将输出值比例化来测量和补偿。
实时补偿通常使用整数算法,因为浮点数计算起来要花费较长的时间。为了获得最高的精
度,斜率偏离的测量要尽量远离 0 点。参数越大,精度越高。这将在后面详细论述。
图 7. 正(A)和负(B)增益误差例子
为了测量增益误差,输入从 0 开始直到达到最后的输出。增益补偿的比例系数等于理想输出
值和最后输出值中点除以实际步数。
如图 7A,输出值在达到最大之前就已经饱和,垂直箭头显示了最后输出的中点。在这个电
压下理想输出值是 5.5,比例系数等于 5.5 除以 7。在图 7B,输入电压达到最大时输出值只
有 6,这对于实际值是负偏差。在这个情况下理想的输出值是 7.5,比例系数等于 7.5 除以
6。测量过程如图 8。
第 7 页 共 13 页
AVR120: AVR 的 ADC 校正和说明 翻译 : 邵子
扬
增 益 测 量
用 实 际 最 大 输 出 值
作 为 分 母 A
设 置 输 入 到 0
增 加 输 入 直 到 达 到 用 理 论 值 作 分 子 B
最 大 输 出
补 偿 系 数 = B/A
找 出 基 于 前 级 长 度
的 最 后 级 中 点
结 束
2.7 非线性
当补偿了偏置误差和增益误差后,实际的转换函数应当等于理论 ADC 的转换函数。但是由于
存在着非线性,时间的曲线和理论曲线还是有微小的差别。有两个办法可以用来测量非线
性,它们将在后面说明,图 9 显示了两种测量方法。
图 9. 非线性曲线例子
2.7.1 差分非线性
差分非线性(DNL)定义为在实际台阶宽度和理论宽度(1LSB)之间最大和最小差异。
为了测量 DNL,输入一个斜坡电压并记录下所有的转换值。步长由转换间的距离而定,来自
1LSB 的最大正偏离和负偏离用来报告最大和最小的 DNL。
第 8 页 共 13 页
AVR120: AVR 的 ADC 校正和说明 翻译 : 邵子
扬
2.7.2 整体非线性
整体非线性(INL)定义为实际曲线和理论曲线之间最大垂直差。
2.7.3 测量和补偿
在补偿了偏置误差和增益误差之后再测量 DNL 和 INL 误差很重要。否则,偏置误差和增益误
差会影响测量结果,就不能得到真实的 DNL 和 INL。
非线性误差不能通过简单的计算来补偿,可以用多项式逼近或查表法补偿。不过 AVR 的 10
位 ADC 的 DNL 和 INL 的典型值是 ½LSB,足以满足一般的实际应用了。
2.8 温度、频率和电压影响
使用 ADC 的内部电压参考源时,必须考虑它的精度。内部电压参考源和能隙电压成正比,它
的特性在数据手册中说明了。特性显示能隙电压轻微的受到供电电压和温度影响。
2.9 带宽和输入阻抗
使用单端模式时,ADC 的带宽受 ADC 的时钟速度限制。因为 1 次转换需要 13 个 ADC 时钟周期,
所以最大时钟 1MHz 的 ADC 时钟意味着大约每秒 77K 的采样速度。按照 Nyquist 采样定律单
端模式的带宽是 38.5KHz。
第 9 页 共 13 页
AVR120: AVR 的 ADC 校正和说明 翻译 : 邵子
扬
3 执行
图 10 显示了一个 ADC 校正的例子。
第 10 页 共 13 页
AVR120: AVR 的 ADC 校正和说明 翻译 : 邵子
扬
3.1 偏置和增益误差补偿的定点算法
浮点数运算对于 ADC 的比例化计算缺乏效率。增益补偿的比例系数一般接近 1,需要一个比
较合适的精度进行 ADC 参数补偿,这可以使用通过整数进行计算的定点数。
公式 1.
实际参数 = (ADC 参数 – 偏置)* 增益系数
计算结果取整后,结果是小于或等于计算结果的最大整数。为了保证结果是最接近的整数
在取整前需要加上 0.5(译者注:即四舍五入)。加上 0.5,乘以比例 214 并减去偏置就得
到了公式 2。
公式 2.
214 * 实际参数 = 214 * ADC 参数 * 增益系数 + 214 * 0.5 - 214 * 偏置 * 增益系数
我们引入一些常数,并在公式 3 中总结。
公式 3.
系数 = 214 * 增益系数
修正 = 214 * (0.5 – 偏置 * 增益系数)
216 * 实际结果 = 22 * (ADC 参数 * 系数 + 修正)
3.1.1 校准
测试工装设计超出了这篇笔记的范围。下面只给出了 AVR 校准流程图,它使用了外部 DAC。
无需使用多个 ADC 通道,只使用一个开关切换单端和差分模式。ADC 参数认为和使用的通道
是一致的,多路复用不会引入误差。
软件执行过程如图 11。
图 11. 软件校正流程
第 11 页 共 13 页
AVR120: AVR 的 ADC 校正和说明 翻译 : 邵子
扬
校 正
等 待 校 正 信 号
使 用 外 部 DAC测 量 偏 置
误 差
使 用 外 部 DAC和 偏 置 误
差 补 偿 测 量 增 益 误 差
存 储 参 数 到 EEPROM
发 出 校 正 结 束 信 号
结 束
3.1.2 补偿
运行时补偿的代码可以做为一个小函数,每次 ADC 测量后都通过这个函数校正,使用公式
3 中的系数和修正参数。
图 12. 配置和增益补偿的流程图
增 益 和 配 置 补 偿
获 取 ADC原 始 值
乘 以 系 数
加 上 修 正
左 移 两 位
È¡ ¸ß Á½ ¸ö ×Ö ½Ú
结 束
计算过程可以用下面的 C 函数,也可以用宏的方式表示:
signed int adc_compensate(signed int adcvalue,
signed int factor,
signed long correction)
第 12 页 共 13 页
AVR120: AVR 的 ADC 校正和说明 翻译 : 邵子
扬
{
return (((((signed long)adcvalue*factor)+correction)<<2)>>16);
}
存放在 EEPROM 中的参数可以在程序启动时复制到 SRAM 中,这样可以在程序中快速访问。
4 参考
Robert Gordon – A Calculated Look at Fixed-Point Arithmetic
http://www.embedded.com/98/9804fe2.htm
Application Note AVR210 – Using the AVR Hardware Multiplier
http://www.atemel.com/dyn/resources/prod_documents/DOC1632.PDF
(全文完)
第 13 页 共 13 页