AN2834
应用笔记马丽孕肚写真
如何在STM32F10xxx上
得到最佳的ADC精度
前言
STM32F10xxx微控制器产品系列,内置最多3个先进的12位模拟/数字转换模块(ADC),转换时
间最快为1μs,这个ADC模块还具有自校验功能,能够在环境条件变化时提高转换精度。
在需要模拟/数字转换的应用中,ADC的精度影响到整个系统的质量和效率。为了能够达到应有
的精度,用户需要了解ADC误差是如何产生的和影响它的参数。
转换精度不是仅仅依赖于ADC模块的性能和功能,它与该模块周边应用环境的设计密切相关。
本文旨在帮助用户了解ADC误差的产生,以及如何提高ADC的精度,包含以下2个部分:
● 介绍了与ADC设计相关的,诸如外部硬件设计参数,和不同类型的ADC误差来源。
● 提出一些设计上的建议,和如何在硬件方面减小误差的方法。
译注:
本译文的英文版下载地址为:
演员陈佳佳
www.st/stonline/products/literature/an/15067.pdf
目录如何在STM32F10xxx上得到最佳的ADC精度目录
1ADC误差的种类3
1.1ADC模块自身相关的误差3
1.1.1偏移误差3
1.1.2增益误差4
1.1.3微分线性误差5
1.1.4积分线性误差6
1.1.5总未调整误差6
1.2与环境相关的ADC误差7
1.2.1电源噪声7
1.2.2电源稳压7
野子 流浪者
1.2.3模拟输入信号的噪声7
1.2.4ADC的动态范围与最大输入信号幅度严重不匹配7
1.2.5模拟信号源阻抗的影响8
1.2.6信号源的容抗与PCB分布电容的影响8
1.2.7注入电流的影响9
1.2.8温度的影响9
1.2.9I/O引脚间的串扰9
1.2.10EMI导致的噪声 10 2如何得到最佳的ADC精度 11
2.1减小与ADC模块相关的ADC误差的建议 11
2.2如何减小与外部环境相关的ADC误差 11
三千鸦杀青青2.2.1减小电源噪声 11
2.2.2电源稳压的建议 12
2.2.3消除模拟输入信号的噪声 12
2.2.4将最大的信号幅度与ADC动态范围匹配 13
罗霈颖 利菁2.2.5模拟信号源的阻抗计算 14
2.2.6信号源频率条件与源电容和分布电容的关系 14
2.2.7温度效应补偿 15
2.2.8注入电流最小化 15
2.2.9减小I/O脚串扰 15
2.2.10降低EMI导致的噪声 16牧羊曲下载
2.2.11PCB的设计建议 16
2.2.12元器件的摆放与布线 18 3结论19
1 ADC误差的种类
1.1 ADC模块自身相关的误差
在STM32F10xxx的数据手册中,给出了不同类型的ADC精度误差数值。通常,精度误差是以LSB为单位表示。电压的分辨率与参考电压相关。电压误差是按照LSB的倍数计算:
1 LSB = V REF+ / 212或 V DDA / 212
1.1.1 偏移误差
这是定义为从第一次实际的转换至第一次理想的转换之间的偏差。当ADC模块的数字输出从0变为1的时刻,发生了第一次转换。理想情况下,当模拟输入信号介于0.5 LSB至1.5 LSB表达的范围之内时,数字输出应该为1;即理想情况下,第一次转换应该发生在输入信号为0.5 LSB时。
偏移误差以E O标注。
例子说明
对于STM32F10xxx的ADC模块,最小的可检测到的电压增量变化,按LSB表示为:
1 LSB = V REF+/4096 (或对于没有V REF+管脚的产品:V DDA /4096)
如果V REF+=3.3V,理想情况下输入402.8μV(0.5 LSB = 0.5 x 805.6μV)时,产生数字输出1。然而实际上,这时ADC模块的读数可能仍然为0。如果在输入电压达到550μV时,才能得到数字输出1,则:
偏移误差E O = 实际的转换 - 理想的转换
E O = 550μV - 402.8μV = 141.2μV
E O = 141.2μV / 805.6μV = 0.17 LSB
当输入的模拟电压大于0.5 LSB产生第一次的转换,则偏移误差是正值。下图显示了正的偏移误差:
图1 正的偏移误差
当输入的模拟电压小于0.5 LSB产生第一次的转换,则偏移误差是负值。下图显示了负的偏移误差。
如果输入的模拟电压V AIN = VSSA并且ADC产生了一个非0的数字输出,则偏移误差是负值,即一个负电压产生了第一次的转换。
1.1.2 增益误差
增益误差定义为最后一次实际转换与最后一次理想转换之间的偏差。增益误差以E G标注。
最后一次实际转换是从FFEh至FFFh的变换。理想情况下,当模拟输入电压等于V REF+ – 0.5LSB 时产生从FFEh至FFFh的变换,因此对于V REF+ = 3.3V的情况,最后一次理想转换应该在
3.299597V。
如果ADC数字输出为FFFh时,V AIN < V REF+ – 0.5LSB,则增益误差为负值。
例子说明
增益误差E G = 最后一次实际转换 – 最后一次理想转换
如果V REF+ = 3.3V并且V AIN = 3.298435V时产生了从FFEh至FFFh的变换,则:
E G = 3.298435 V – 3.299597 V
E G = –1162μV
E G = (–1162μV / 805.6 μV) LSB = –1.44 LSB
如果在V AIN等于V REF+时不能得到满量程的读数(FFFh)时,增益误差是正值,即需要一个大于V REF+的电压才能产生最后一次变换。图3显示了正的增益误差,图4显示了负的增益误差。
图3 正的增益误差
1.1.3 微分线性误差
微分线性误差(DLE)定义为实际步长与理想步长之间的最大差别。这里的“理想”不是表示理想的转换曲线,而是表示ADC的分辨率。DLE以E D标注,见图5。
E D = 实际转换步长 – 1LSB
理想情况下,当模拟输入电压改变1LSB应该在数字输出上同时产生一次改变。如果数字输出上的改变需要输入电压大于1LSB的改变,则ADC具有微分线性误差。因此,DLE对应于需要改变一个数字输出所需的最大电压增量。
图5 微分线性误差的表示
例子说明
一个给定的数字输出,应该对应到一个模拟输入的范围。理想情况下,步长应为1LSB。假定在模拟输入电压在1.9998V至2.0014V,得到了相同的数字输出,则步长宽度是2.0014V – 1.9998V = 1.6mV,此时E D是高端(2.0014V)与低端(1.9998V)的差减去1LSB对应的电压。
如果V REF+ = 3.3V,模拟输入1.9998V(9B1h)可以产生的输出结果介于9B0h和9B2h之间;同样,模拟输入2.0014V(9B3h)可以产生的输出结果介于9B2h和9B4h之间。
这样对应9B2h的综合电压变化范围是:
9B3h – 9B1h,即:2.0014 V – 1.9998V = 1.6 mV (1660 μV)
E D = 1660 μV – 805.6 μV
E D = 854.4 μV
E D = (854.4 μV/805.6 μV) LSB
E D = 1.06 LSB