若硬件电路不容许增加运算放大器,无法通过提高采样时间满足要求,此时还可以采用外接电容作为电荷存储器的方法。
SAR ADC内部采样保持电容在采样开关接通后,在采保电容稳定时间内需要一个足够的充放电电流,而通常实际的信号电路若具有较高的输入阻抗,往往不能提供足够大的电流快速为ADC内采样电容充电。为此大部分的应用都采用在ADC输入管脚到地接一个外部大电容作为一个电荷存储器,即图3中的CEXT。这个电容参与采样时电路的充放电过程,以便向SAR ADC采样电容提供充足的电荷,而对内部采样电容进行快速充电,并且稳定ADC输入点的电压。此CEXT与RAIN组成的RC滤波器也顺带限制到达ADC输入端的带外噪声,同时也帮助衰减ADC输入端中开关电容频繁切换和通断的反冲噪声影响。当然此RC滤波器也限制了VAIN信号源的截止频率。
计算CEXT
当采样开关接通后,会在CEXT和CADC之间有一段电荷重新分配的过程,这一段RC时间常数主要是由RADC的最大阻值和CADC的最大容值决定的。
在考虑CEXT和CADC之间电荷分配时,CPAD因为相对微小且与CEXT并联,是可以忽略的。电荷分配的算式是基于「分配前的全部电荷等于分配后的全部电荷」。
假设现在CADC是完全放电的,而CEXT储存着和VAIN一样的电压。VC(分配后的电压)定规为VAIN的0.999939倍,这个意义是VC最后徧差在VAIN的1 LSB之内,以12位解析度来记算。
例如CADC= 15 pF,
CEXT = 4095 x 15 pF= 61.4 nF。
这是CEXT的绝对最小值。在实际选择器件值时必需确认考虑到器件误差和老化因素,选择大一点的值是可以的,如68 nF。如果电容值选择再大,其实对采样时间要再缩短并没有实质帮助,反而限制了ADC输入信号的频宽。
但如果一个12位的ADC配罝CEXT < 4095 x CADC,反而会要求相当大的采样时间让CADC充电足够。所以若CEXT < 4095 x CADC而且使用者若没有需要anti-aliasing滤波器的情况下,还不如不要加CEXT。
若要求的精准度没有这么高,CEXT的数值可以照前面公式减小,这时ADC输入信号的频宽就增大了。相反的若要求精准度,CEXT就必须提高了,就要付出ADC采样时间间隔要拉大,ADC输入信号的频宽缩小的代价。
计算RAIN
所有对外部电容CEXT充电的阻值总合程为RAIN,也就是从CEXT看到驱动信号源的等效阻值。当RAIN变大,RAIN和CEXT所型成的截止频率就会变低。这表示当输入信号开始变动到CEXT电荷稳定的这段反应时间会增加。
要准确度稳定达到12位解析度误差1 LSB之内,RC线路的时间常数要求为:
倍。
Cext和Rain型成的截止频率为:
以前段CEXT= 62 nF为例,若RAIN = 200 Ω,截止频率可达9.7 kHz;但若RAIN = 20 kΩ,仅可接受97 Hz。源的频率若超以上截止频率,ADC转换结果会不准确。
注意此时程序不得将ADC设定为连续模式,而应设定为单点模式或以定时器间隔触发转换,软件必须确保两次转换之间的时间间隔等于或大于1/f。
采样时间不足的后果
若遵照计算CEXT的方式在ADC输入放置足够大的CEXT,要使CADC稳定所需要的时间就显得非常短。另外也只有一个情况之下可以不需要CEXT就是RAIN很小的时候。一般来说RAIN很小是因为传感器有输出缓冲极,这是RAIN都小于100 Ω。以上情况采样时间都容易满足。
不足的采样时间会造成ADC通道间互相干扰。就如本文开头所讨论的,这是因为电荷从一个通道累积在CADC上并转移到另一个通道,造成通道间互相影响。
信号源高阻的后果
通常造成以上所述通道间干扰的原因是因为信号源输入阻抗太高了。若要达到1 LSB的准确度,就必需在各通道转换中间加入延时,后果就是整体的转换时间变慢。
如果没有加上CEXT或着电容值太小,而采样时间又不足,ADC转换出来的结果因为通道间干扰而永远达不到1 LSB的准确度。
3.3 关于输入阻抗匹配的其他建议
以近期ADC朝向低功耗、高采样频率、并复杂功能的方向进行设计,ADC的采样行为已经不是如上文以一阶简易的RADC和CADC模型可以仿真的了,因此近期普遍ADC规格中只提供CADC的典型值,而不再提供RADC数值。取而代之的是ADC输入信号阻抗(RAIN)与采样时间(ts)的对应关系表,如下表所示。(下表自AT32F403A系列数据手册截取。)
表1. fADC = 28 MHz时的最大RAIN(1)
TS (周期) | tS (μs) | 最大RAIN (kΩ) |
1.5
| 0.05
| 0.1
|
7.5
| 0.27
| 0.6
|
13.5
| 0.48
| 1.2
|
28.5
| 1.02
| 2.5
|
41.5
| 1.48
| 4.0
|
55.5
| 1.98
| 5.2
|
71.5
| 2.55
| 7.0
|
239.5
| 8.55
| 20
|
(1) 由设计保证。
在可以得知ADC信号源的输入阻抗时,使用者不需进行计算,只要照表格指示透过软件设置足够的采样时间,一般都会得到合理的ADC转换值。但在一般情况下,使用者常常难以直接或间接得知ADC输入信号的阻抗时,最好的方法是逐步调试软件采样时间。
使用者可以依照下述步骤调试ADC的采样时间:
(1) 首先设置ADC时钟频率为最高值,并设置采样周期为最大值;
(2) 尝试ADC转换并检视转换结果;
(3) 若转换数值符合预期,则可逐步调试减小采样周期并观察ADC转出值,以求得足够而不过长的采样时间;
(4) 若最大采样时间所得转换值不符合预期,使用者需要降低ADC时钟频率,或是照着前文计算并外加合适大小的CEXT;硬件设置完成后再修改软件设置,逐步调试出合适的采样时间及采样间隔。
另外若采样间隔时间许可时,采取一些软件技巧也会提高ADC转换的准确度,例如:
(1) 采用平均法、移动平均法、或中值滤波;
(2) 对同一ADC通道采样两次,将第一次的值丢弃而使用第二次的采样的值。此种方式可以消除输入源内阻过大而在不同通道切换时,上一个通道的电压来不及从采样电阻放电而累积的电荷,导致影响下一个通道的转换值;
(3) 若ADC输入信号大约在0 V到VREF+/2时,可交替转换该ADC输入通道和内部VREFINT源,也可达到让采样电阻有足够时间充放电的效果,避免通道间干扰。若有内部VSSA通道,交替转换ADC输入通道和内部VSSA通道效果会更好且省时。因为让ADC采样电路放电到VSSA比起充放电到VREFINT可以以更快的采样时间达成。
4 其它ADC应用指南
4.1 内部参考电压VREFINT的设置目的与使用方式
内部参考电压(VINTRV)为ADC提供了一个稳定的电压输出。VINTRV内部连接到ADC1_IN17输入通道上,用于将VINTRV的输出转换为数字数值。
VINTRV是一个芯片内部的一个恒定电压信号源,按规格为1.2 V±3.3 %,在所有VDDA操作电压范围内都维持在此稳定电压规格内,不随VDDA电压变动而变化。因此,VINTRV在ADC的外部VREF+(通常与VDDA同电源)的电压未知或VVREF+电压会变动时(例如:使用电池电源),可用来参照推算出VREF+或VDDA电压以及各ADC_IN输入的准确绝对电压值。
例如:选定VINTRV通道经ADC转换后数值若为1650(Code_VINTRV),就可以推算出电压满格的VREF+或VDDA的电压为1.2x 4096 / 1650 = 2.979 V。此时若另一选定的ADC_IN外部通道转换出来的数值为800(Code_VAIN),就可采用以下两种计算方式:1.2 x 800 / 1650或2.979x 800 /4096,计算出此外部信号电压VAINx为0.582 V。
以上范例使用公式如下:
VREF+或VDDA = (VINTRV) x 4096 / (Code_VINTRV)
VAINx = (VINTRV)x (Code_VAIN) / (Code_VINTRV)
VAINx = VREF+或VDDA x (Code_VAIN) / 4096
使用者可以根据应用系统电源的特性,决定对VINTRV转换次数及间隔。若电源为电压未知但不变动,可于系统上电后并在ADC初始化并校正后,一次性对VINTRV转换;若电源为变动电压,就要根据电源变动速度和系统需求决定对VINTRV转换间隔,多次对VINTRV转换并更新此参照值,甚至需要对ADC重新校正。另外温度变化也可能使电源情况有改变,也可参考2.2.6节内容启动对VINTRV转换。
因VINTRV为内部弱电压源,ADC进行采样时需要足够时间让VINTRV为采样电路正确充放电,使用者需确实遵照数据手册中的TS_INTRV参数为VINTRV设置足够的采样时间,以获得正确的转换数值。