ADC电压明明稳定,采样值为什么总是偏低?
ADC电压明明稳定,采样值为什么总是偏低?
做MCU ADC时,有一种问题非常常见。
万用表量引脚是2.000 V,示波器看也没什么明显噪声,可程序换算出来长期只有1.93 V、1.95 V。
于是开始校准ADC、改VREF、做平均滤波,折腾半天误差还在那里。
这种情况我一般先问一句:你的ADC前面到底接了多大的源阻抗?采样时间设了多少?
很多人理解ADC输入时,会把它想成万用表:输入阻抗很高,所以前面怎么分压都无所谓。
但MCU里常见的SAR ADC在真正采样时,会闭合一个内部开关,把外部输入接到一颗Sample-and-Hold电容上。
这颗电容要在有限的Acquisition Time里充到接近VIN,然后开关断开,ADC再对这个被“存住”的电压做转换。
问题就出在这里:如果外部信号源阻抗很大,给这颗小电容充电的RC时间常数就变大。采样窗口已经结束了,电容还没充到真实输入电压,结果自然偏低。
图1:典型SAR ADC输入模型,外部源阻抗与内部开关、电阻和采样保持电容共同决定建立时间。
万用表测的是相对慢的直流状态,而且输入阻抗通常很高。
ADC的动作却很短。每一次采样,都可能在几十ns、几百ns或者几µs的时间里对输入端抽取一小包电荷。
所以“ADC脚静态电压正常”和“采样瞬间已经稳定”是两回事。
尤其是前面用100kΩ、几百kΩ电阻做分压,为了低功耗又把电阻做得很大时,问题最容易出现。
ADC位数越高,对Settling Error越敏感。12 bit想真正达到12 bit精度,内部采样电容需要比8 bit、10 bit更加充分地稳定。
图2:ADC外部驱动与内部Sample-and-Hold并不是彼此独立,前端必须在采样窗口内把内部电容充到目标精度。
这个现象更有迷惑性。
例如ADC通道A上一拍采的是3.0 V,下一拍立刻切到通道B的0.5 V。如果B的源阻抗很高,内部采样电容上前一通道残留的电荷没来得及完全释放和重新建立,B的结果可能就被A“带偏”。
反过来也一样:从低电压通道切到高电压通道,第一次采样值可能偏低,第二次、第三次才逐渐接近。
这也是为什么有些项目里会看到一个很土但有效的办法:切通道以后先丢掉第一次转换结果,再读第二次。
它能缓解问题,但最好还是把根因搞清楚——源阻抗、采样时间和内部采样电容之间到底是否匹配。
如果芯片允许调ADC Sampling Cycles,先把采样时间明显拉长再测。
结果立刻接近真实值,方向基本就对了。
第二个验证动作,是临时把分压电阻减小一个数量级。例如原来470kΩ/100kΩ,实验时换成47kΩ/10kΩ,再看ADC结果是否改善。
第三个动作是在ADC脚附近加合适的小电容,形成一个Charge Reservoir,让采样瞬间需要的电荷先由这个电容提供,而不是全部通过高阻信号源现充。
但RC也不能随手乱加。电容太大、串联电阻太大,会限制信号带宽;快速变化的模拟量可能又跟不上。
图3:SAR ADC一个周期由Acquisition和Conversion组成,采样时序决定输入建立时间。
第一,翻Datasheet里的ADC Analog Input Model和Maximum Source Impedance,不要只看“12-bit ADC”这几个字。
第二,按最差通道切换压差计算或估算Acquisition Time。前一通道和后一通道差得越大,Settling压力越明显。
第三,高阻传感器、精密分压和高速采样之间如果冲突明显,就加Buffer,不要硬让ADC直接吃。
第四,VREF也要查,但顺序别反了。采样时间不够时,换再准的Reference也救不了前端没有稳定下来的电压。
一句工程判断:ADC采样不准,别只盯“多少位”;先确认内部那颗采样电容有没有时间真正充到位。
声明:
本文由凡亿教育整理,转载请注明来源!
投稿/招聘/广告/课程合作/资源置换 请加微信:13237418207






哔哩哔哩
微信公众号
小红书
抖音
知乎
西瓜视频
头条
微信视频号
