概述
AT32的微控制器内置最多三个高级12位片上SAR模拟数字转换器(ADC)并提供自校准功能,用于提高环境条件变化时的ADC精度。在涉及模数转换的应用中,ADC精度会影响整体的系统质量和效率。为了提高此精度,必须了解ADC相关的运作和影响精度的原因。
SAR ADC使用一个采样电容充电至输入信号电压,SAR逻辑对此电压做数据转换。然而,这个ADC内的采样电容是由外部的信号源直接充电的,也因着采样电容值、输入阻抗、还有外部线路影响,需要一段充电稳定时间来保证对输入信号电压量测的准确性。为达到好的ADC量测,必需设置足够的采样时间。否则,前一次在某一输入通道转换所残余在采样电容上的电荷,会影响目前正在进行转换通道的准确性。ADC精度不仅取决于ADC性能和功能,还取决于ADC周围的整体应用设计。此应用笔记旨在帮助用户如何设置正确软、硬件使ADC达到准确的量测,也提供相关应用上的注意事项。
ADC的误差来源及其误差最小化办法
本章列出了影响ADC转换精度的主要误差。这些类型的误差存在于所有ADC中,转换质量将取决于它们的消除情况。为便于参考,将精度误差以LSB为单位来表达。就电压而言,通过将LSB数乘以1 LSB对应的电压来计算电压误差(1 LSB=VREF+/4096或VDDA/4096)。
ADC自身误差
ADC自身误差为ADC本身设计和制造时所产生本体的误差,这类误差通常由以下静态参数显示:微分线性误差(DNL)、积分线性误差(INL)、偏移误差(OE)、增益误差(GE)、和总未调整误差(TUE)。AT32微控制器数据手册的ADC特性部分规定了这些误差的定义和值。其中TUE为实际和理想传输曲线间的最大偏离,此参数指定可能发生的会导致理想数字输出与实际数字输出之间最大偏离误差。(注意TUE不是DNL、INL、OE、与GE之和,它可能源自同时发生的一种或多种误差。)
AT32 ADC自校准功能可以补偿偏移误差,在ADC使用前先进行一次自校准可保证在数据手册揭示范围的任何环境条件之下,TUE小于4 LSB,也就是保证12位ADC静态准确度(accuracy)可达10位以上。
至于ADC的动态参数(如:ENOB)及其代表的误差程度,通常在语音和特定音频应用才会考虑,在一般MCU的应用场合不会太重视,在本文中也不于讨论。
ADC环境导致的误差
参考电压/电源噪声
就供电侧噪声而言,开关式电源模块通常内置快速切换功率晶体管,这会在输出中产生高频噪声,此切换噪声介于15 kHz至1 MHz之间,也需留意。线性稳压器的输出质量更佳。如果使用切换电源,建议使用线性稳压器供应模拟级。建议在电源线和地线之间连接具有优良高频特性的电容。应在靠近电源的位置安装一个0.1 μF和一个1至10 μF的电容。这些电容允许直流信号通过它们。小值电容过滤高频噪声,高值电容过滤低频噪声。要过滤高频噪声,还可使用与电源串联的铁氧体电感器(ferrite bead)。由于线的串行电阻极低,此解决方案导致的直流损失极低(可忽略不计),除非电流很大。
微控制器端VDD和VSS引脚的安装位置很接近,因此可以在尽量靠近的位置通过极短的引线将电容连接到微控制器。VDDA和VREF+引脚必须连接到两个外部去耦电容,100 nF陶瓷电容加上1 μF钽电容或陶瓷电容。注意数字地与模拟地应相互隔离,避免噪声串扰。
图2. 无VREF引脚封装的电源和参考去耦
GPIO输入电压电平超出常规
其它AT32型号MCU则没有以上限制(例如:AT32F403A、AT32F407、AT32F421、AT32F435/437等系列),所有具有ADC输入功能的GPIO引脚都是耐5V引脚。这类引脚在未使用作ADC输入信号而作为数字输入时,需设置为浮空输入、输入上拉、或输入下拉模式,就可以输入高于VDD的电压而不干扰ADC的操作。但使用者仍需注意输入电压不可超出5.5V。但作为ADC输入使用设置为模拟模式时,则失去耐5V特性,使用者需注意输入电压不可超出VDD+0.3V。
在GPIO引脚输入负电压也会干扰ADC的转换。注意输入电压不可低于-0.3V。
模拟输入信号噪声
采样平均滤波
添加外部滤波器
但添加了外部RC滤波器时,ADC的采样时间和采样间隔都需要重新评估,否则可能造成更大的量测误差。请详细参考第3章内容。
模拟信号源阻抗的影响
关于模拟信号源具有高输入阻抗特性或加入RC滤波器时,ADC的测量设置请详细参考第3章内容。
CPU生成的内部噪声
当CPU(以及其他外设)操作时,会产生大量内部和外部信号变化,这些变化通过电容耦合传输到ADC外设。此类干扰影响ADC精度。
为使CPU(以及其他外设)对ADC的影响最小化,必须使采样和转换期间的数字信号变化量最小化(数字静默)。使用下列方法之一可以实现这一点(在采样和转换时间内实现):
内部CPU变化量最小化(CPU停止,等待模式)
停止非必要外设(计时器、通信等)的时钟
温度影响
温度对ADC精度有重要影响。它主要产生两种重要误差:偏移误差漂移和增益误差漂移。建议使用内部温度传感器和ADC看门狗,以在温度变化达到给定值时重新校准ADC。
I/O引脚串扰
由于I/O之间的电容耦合,切换I/O可能会在ADC的模拟输入中产生一些噪声。彼此距离很近或交叉的PCB走线可能会产生串扰。内部切换数字信号和I/O会产生高频噪声。由于电流浪涌,切换高灌电流I/O可能导致电源电压小幅下降。
PCB上与模拟输入走线交叉的数字走线可能影响模拟信号。通过让接地走线来屏蔽模拟信号,可以减少串扰产生的噪声。PCB布线时,应考虑对ADC输入信号给予屏蔽,可在信号线周围铺铜并就近接地,同时应尽量缩短走线距离。另外在ADC采样和转换时间内实现I/O引脚变化量最小化,对减小对ADC的干扰很有帮助。
EMI产生的噪声
邻近电路产生的电磁辐射可能在模拟信号中产生高频噪声,此时PCB走线相当于天线接收干扰噪声。使用者可以通过在可能的发射源和接收器之间提供物理隔离,或通过适当的接地和屏蔽措施对它们进行电气隔离。
沿敏感模拟信号布置接地走线,在PCB上提供屏蔽。双层PCB的另一侧也应具有接地板。这样可以防止干扰和I/O串扰影响信号。应使用屏蔽线缆将远距离信号(例如:传感器)连接到PCB或注意尽可能缩短PCB上信号的路径长度。晶振、时钟以及存在快速变化的信号线尽量远离ADC输入信号。
ADC输入源阻抗对测量的影响和正确的设置方式
其中模拟信号输入源对ADC的输入阻抗(RAIN),直接与ADC采样时间有关,影响ADC转换结果甚巨。未考虑输入阻抗使得ADC输入的外部器件与软件设置的采样时间不批配,往往是造成ADC使用问题的原因。以下分别针对信号源具有一般输入阻抗或高输入阻抗,分别探讨如何正确设置ADC的软、硬件。
一般输入阻抗的测量设置
VC是内部CADC电容两侧的电压(请参见图4)。对于给定的采样tC,可以考虑VAIN=VREF+所对应的tC需要采样时间是最大值,因为此时CADC电容需要最多时间从0V充电到VAIN。因此,VAIN=VREF是验证最大源电阻时要考虑的最坏情况。通过软件设置增加采样时间或降低ADC时钟频率可等效加长采样时间,当采样时间越长越可以获得好的转换结果。
一般我们假设允许的最大误差等于1 LSB,照RC充放电公式:
其中V(t)带入VREF×(1-1/212),VAIN带入VREF;而时间常数τ=(RAIN+RADC)xCADC,采样时间大于8.32x(RAIN+RADC)xCADC就可达到1 LSB误差之内。若使用者要求较低的准确度,可进一步增大允许的外部电阻RAIN。
高输入阻抗的测量设置
若硬件电路不容许增加运算放大器,无法通过提高采样时间满足要求,此时还可以采用外接电容作为电荷存储器的方法。
SAR ADC内部采样保持电容在采样开关接通后,在采保电容稳定时间内需要一个足够的充放电电流,而通常实际的信号电路若具有较高的输入阻抗,往往不能提供足够大的电流快速为ADC内采样电容充电。为此大部分的应用都采用在ADC输入管脚到地接一个外部大电容作为一个电荷存储器,即图3中的CEXT。这个电容参与采样时电路的充放电过程,以便向SAR ADC采样电容提供充足的电荷,而对内部采样电容进行快速充电,并且稳定ADC输入点的电压。此CEXT与RAIN组成的RC滤波器也顺带限制到达ADC输入端的带外噪声,同时也帮助衰减ADC输入端中开关电容频繁切换和通断的反冲噪声影响。当然此RC滤波器也限制了VAIN信号源的截止频率。
计算CEXT
例如CADC=15 pF,
计算RAIN
以前段CEXT=62 nF为例,若RAIN=200Ω,截止频率可达9.7kHz;但若RAIN=20kΩ,仅可接受97Hz。源的频率若超以上截止频率,ADC转换结果会不准确。
采样时间不足的后果
若遵照计算CEXT的方式在ADC输入放置足够大的CEXT,要使CADC稳定所需要的时间就显得非常短。另外也只有一个情况之下可以不需要CEXT就是RAIN很小的时候。一般来说RAIN很小是因为传感器有输出缓冲极,这是RAIN都小于100Ω。以上情况采样时间都容易满足。
不足的采样时间会造成ADC通道间互相干扰。就如本文开头所讨论的,这是因为电荷从一个通道累积在CADC上并转移到另一个通道,造成通道间互相影响。
信号源高阻的后果
如果没有加上CEXT或着电容值太小,而采样时间又不足,ADC转换出来的结果因为通道间干扰而永远达不到1 LSB的准确度。
关于输入阻抗匹配的其他建议
使用者可以依照下述步骤调试ADC的采样时间:
首先设置ADC时钟频率为最高值,并设置采样周期为最大值; 尝试ADC转换并检视转换结果; 若转换数值符合预期,则可逐步调试减小采样周期并观察ADC转出值,以求得足够而不过长的采样时间; 若最大采样时间所得转换值不符合预期,使用者需要降低ADC时钟频率,或是照着前文计算并外加合适大小的CEXT;硬件设置完成后再修改软件设置,逐步调试出合适的采样时间及采样间隔。
采用平均法、移动平均法、或中值滤波; 对同一ADC通道采样两次,将第一次的值丢弃而使用第二次的采样的值。此种方式可以消除输入源内阻过大而在不同通道切换时,上一个通道的电压来不及从采样电阻放电而累积的电荷,导 致影响下一个通道的转换值; 若ADC输入信号大约在0V到VREF+/2时,可交替转换该ADC输入通道和内部VINTRV源,也可达到让采样电阻有足够时间充放电的效果,避免通道间干扰。若有内部VSSA通道,交替转换ADC输入通道和内部VSSA通道效果会更好且省时。因为让ADC采样电路放电到VSSA比起充放电到VINTRV可以以更快的采样时间达成。
其它ADC应用指南
内部参考电压VINTRV的设置目的与使用方式
VINTRV是一个芯片内部的一个恒定电压信号源,按规格为1.2V±3.3%,在所有VDDA操作电压范围内都维持在此稳定电压规格内,不随VDDA电压变动而变化。因此,VINTRV在ADC的外部VREF+(通常与VDDA同电源)的电压未知或VVREF+电压会变动时(例如:使用电池电源),可用来参照推算出VREF+或VDDA电压以及各ADC_IN输入的准确绝对电压值。
例如:选定VINTRV通道经ADC转换后数值若为1650(Code_VINTRV),就可以推算出电压满格的VREF+或VDDA的电压为1.2x4096/1650=2.979V。此时若另一选定的ADC_IN外部通道转换出来的数值为800(Code_VAIN),就可采用以下两种计算方式:1.2x800/1650或2.979x800/4096,计算出此外部信号电压VAINx为0.582V。
以上范例使用公式如下:
使用者可以根据应用系统电源的特性,决定对VINTRV转换次数及间隔。若电源为电压未知但不变动,可于系统上电后并在ADC初始化并校正后,一次性对VINTRV转换;若电源为变动电压,就要根据电源变动速度和系统需求决定对VINTRV转换间隔,多次对VINTRV转换并更新此参照值,甚至需要对ADC重新校正。另外温度变化也可能使电源情况有改变,也可参考2.2.6节内容启动对VINTRV转换。因VINTRV为内部弱电压源,ADC进行采样时需要足够时间让VINTRV为采样电路正确充放电,使用者需确实遵照数据手册中的TS_INTRV参数为VINTRV设置足够的采样时间,以获得正确的转换数值。