第9篇:《面试题:ADC前端为什么要加运放跟随器?什么情况下可以不加?》

第9篇:《面试题:ADC前端为什么要加运放跟随器?什么情况下可以不加?》 大家好我是老张。上篇文章讲了模拟地和数字地有兄弟曾经问了一个很实战的问题“老张我面试时说ADC前端加运放跟随器是为了阻抗匹配面试官又问‘如果传感器输出阻抗很低还需要跟随器吗’我犹豫了。”这个问题问到点子上了。ADC前端设计是嵌入式硬件中最容易“照猫画虎”的地方——很多人知道要加跟随器但说不清什么时候必须加、什么时候可以省、省了会有什么后果。面试官追问两句就露馅了。今天老张就把ADC前端信号调理这件事从头到尾拆清楚让你面试时能从“信号源阻抗”讲到“采样电容充电过程”再到“RC滤波和跟随器的配合逻辑”。目录一、面试官问这道题到底在考什么二、第一层跟随器是什么解决什么问题2.1 跟随器的电路接法2.2 跟随器解决的核心问题阻抗变换2.3 在ADC前端的典型位置三、第二层为什么ADC需要低阻抗驱动3.1 ADC内部采样电路的工作原理3.2 采样电容充电过程——这是理解一切的关键3.3 不只是充电精度——采样电容的电荷注入效应四、第三层什么情况下可以不加跟随器4.1 判断标准信号源输出阻抗 × 采样电容 采样时间4.2 哪些场景输出阻抗足够低4.3 追问“我用电阻分压测电池电压不加跟随器能行吗”4.4 如果不想加跟随器怎么补救五、RC滤波和跟随器的配合逻辑六、满分回答模板七、总结一、面试官问这道题到底在考什么表面上是问一个运放电路实际上考察三个层次第一层知不知道跟随器的作用能说出“高输入阻抗、低输出阻抗、阻抗变换”。60分。第二层为什么ADC需要低阻抗驱动能从采样保持电路的充电过程解释。80分。第三层什么情况下可以不加跟随器判断标准是什么不加的话怎么补救能给出定量判断依据。95分。二、第一层跟随器是什么解决什么问题2.1 跟随器的电路接法电压跟随器是运放最基础的电路之一。接法极其简单输出端直接连到反相输入端信号从同相输入端输入。输出电压等于输入电压放大倍数约等于1。很多人第一次看到这个电路都觉得奇怪“放大1倍接了个寂寞”其实跟随器放大的不是电压是电流驱动能力。2.2 跟随器解决的核心问题阻抗变换跟随器有三个关键特性输入阻抗极高运放的同相输入端输入阻抗通常在MΩ甚至GΩ级别。对前级电路来说跟随器几乎不取电流不会给信号源造成负担。输出阻抗极低运放输出级的开环输出阻抗通常在几十Ω量级加了负反馈后等效输出阻抗可以降到1Ω以下甚至接近零。对后级电路来说跟随器几乎能输出任意电流而不掉电压。电压增益约等于1信号幅度不变只是换了驱动能力。一句话跟随器把高阻抗的虚弱信号变成低阻抗的强劲信号幅度不变。就像一个力气大的跟班你出多少力他就帮你推同样大小的力但能推动更重的负载。2.3 在ADC前端的典型位置传感器信号进来第一级可能是放大或滤波然后进跟随器跟随器输出直接接ADC输入引脚。跟随器在这里扮演了“缓冲器”的角色——隔离了前级调理电路和ADC采样电路的相互影响。三、第二层为什么ADC需要低阻抗驱动这一层是面试的及格线。说不出这一层说明你只是背了“要加跟随器”这个结论。3.1 ADC内部采样电路的工作原理ADC以SAR型逐次逼近ADC为例STM32和大多数MCU都是这种的输入引脚后面有一个采样保持电路核心是一个采样开关和一个采样电容。采样过程分两步采样阶段采样开关闭合外部信号给采样电容充电电容电压跟随输入信号变化转换阶段采样开关断开ADC逐次逼近地把电容上的电压转换成数字量关键点采样开关闭合的时间非常短。以STM32F103为例ADC时钟12MHz采样周期可以配置为1.5到239.5个时钟周期常用7.5个周期也就是0.625μs。在这极短的时间内外部信号必须把采样电容充电到和输入电压一致否则转换出来的数字量就偏低了。3.2 采样电容充电过程——这是理解一切的关键采样电容的容值通常为几pF到十几pFSTM32F103的采样电容典型值约12pF。给这个电容充电的是你的信号源。充电过程是一个RC充放电曲线电压V(t) V_in × (1 - e^(-t/RC))。R是信号源的输出阻抗C是采样电容。举例假设信号源输出阻抗R10kΩ采样电容C12pF采样时间t0.625μs。RC时间常数τ 10kΩ × 12pF 120ns0.625μs / 120ns ≈ 5.2τ5个τ以后电容电压充到输入电压的99.3%误差约0.7%12位ADC分辨率1/4096≈0.024%0.7%的充电误差相当于几十个LSB会导致ADC读数明显偏低而且这个偏低的值会随着输入电压变化而变化因为充放电速度非线性。如果信号源输出阻抗换成100Ω加跟随器后τ 100Ω × 12pF 1.2ns0.625μs / 1.2ns ≈ 520τ电容充电精度远高于12位分辨率误差可以忽略一句话总结SAR型ADC的采样电容需要极低阻抗的信号源来驱动否则充电不充分读数偏低。跟随器的作用就是把高阻抗信号源变成极低阻抗的信号源。3.3 不只是充电精度——采样电容的电荷注入效应还有一个更隐蔽的问题。采样开关每次断开时会向输入端注入一小部分电荷开关管的沟道电荷。这部分电荷如果被高阻抗信号源吸收会在输入端产生一个微小的电压阶跃。反复采样等效于在输入端加了一个偏置电压。低阻抗信号源能迅速吸收这部分注入电荷电压几乎不变。高阻抗信号源则会被干扰。这也是为什么ADC需要低阻抗驱动。四、第三层什么情况下可以不加跟随器这个问题是面试官最想听的。设计没有银弹知道什么时候可以省略才是真懂。4.1 判断标准信号源输出阻抗 × 采样电容 采样时间量化来说要让采样电容在采样时间内充电到1/2 LSB精度12位对应约0.01%需要的时间约9~10个RC时间常数。所以允许的最大信号源阻抗 R_max ≈ 采样时间 / (10 × C_sampling)以STM32F103为例采样时间设定为7.5个ADC时钟周期12MHz时钟下约0.625μs采样电容12pFR_max ≈ 0.625μs / (10 × 12pF) ≈ 5.2kΩ实际取保守一些留一半余量就是信号源输出阻抗不超过2~3kΩ可以直接接ADC。4.2 哪些场景输出阻抗足够低大多数运放输出端输出阻抗1Ω直接接ADC没问题。注意不是所有运放输出都能稳定驱动容性负载需要确认手册电阻分压网络分压电阻等效输出阻抗 R1∥R2。比如10kΩ和20kΩ分压输出阻抗约6.7kΩ高于上面算的5.2kΩ这就是为什么直接分压进ADC会读数偏低的原因某些传感器的输出缓冲器需要查传感器数据手册的输出阻抗参数另一颗MCU的DAC输出通常自带缓冲输出阻抗很低4.3 追问“我用电阻分压测电池电压不加跟随器能行吗”这是最常见的实战场景。接上面算例10kΩ20kΩ分压等效输出阻抗6.7kΩ采样时间0.625μs下充电误差接近1%对12位ADC会造成几十个LSB的系统偏差。但如果你把这个偏差在软件里校准掉而且电池变化缓慢、不需要高速采样这种“偏差”是固定的可以校准。真正的风险不在于固定偏差而在于分压电阻的阻值会随温度变化输出阻抗也会变化导致充电误差随温度漂移。如果产品要在宽温度范围工作这个漂移无法通过一次校准解决。所以我的设计准则电池电压监测这类对绝对精度要求不高、温漂影响可控的场景用较大分压电阻直接进ADC可以接受软件校准。温度变化大的场景要么加跟随器要么用更小阻值的分压电阻但功耗增加。4.4 如果不想加跟随器怎么补救方法一降低信号源阻抗。分压电阻用更小的阻值比如1kΩ2kΩ分压等效输出阻抗约667Ω充电误差大幅降低。但代价是功耗增加——4.2V电池下分压网络功耗约4.2/3k1.4mA对电池供电设备可能太多了。方法二延长采样时间。在MCU的ADC配置中把采样周期设长比如STM32的239.5周期给采样电容更长的充电时间等效允许更高的信号源阻抗。代价是采样率降低但很多低速率场景温度、电池电压完全够用。比如把7.5周期改成71.5周期允许的源阻抗可以提高近10倍。方法三在ADC输入引脚对地并联一个大电容。比如在分压点对地并一颗0.1μF到1μF的电容这个电容和采样电容形成电荷共享——采样瞬间采样电容的电荷主要从这颗大电容取而不是从高阻抗分压电阻取。但注意这个大电容会影响信号带宽只适用于缓慢变化信号如电池电压、温度。而且大电容不能完全消除充电误差只能减小。方法四用内置缓冲的ADC。有些MCU的ADC内置了可选的输入缓冲器虽然性能不如外部运放但在很多场景下够用。不过STM32F1系列没有内置ADC缓冲F3/F4/H7部分型号才有。五、RC滤波和跟随器的配合逻辑很多人把RC低通滤波器放在跟随器后面这是对的。但顺序搞反会出问题。正确顺序传感器→放大/分压→跟随器→RC滤波→ADC错误顺序传感器→放大/分压→RC滤波→ADC没跟随器为什么错误因为RC滤波的串联电阻R就是信号源的输出阻抗。如果R10kΩ那你就等于把信号源输出阻抗变成了10kΩ采样电容充电问题就来了。如果一定要在跟随器前面放RC滤波比如滤除高频噪声后再放大那R要尽量小100Ω到1kΩC可以取大一点0.1μF到1μF截止频率由小R大C实现。或者加第二级跟随器再做一次阻抗变换。正确的调理链传感器→阻抗变换/跟随器→RC滤波→跟随器→ADC如果传感器本身输出阻抗够低且带宽窄前两级可以合并传感器→分压/放大→跟随器→RC滤波→ADC跟随器提供低阻驱动RC设置在ADC引脚前滤除高频噪声六、满分回答模板面试官问“ADC前端为什么要加跟随器”按这个逻辑答第一段作用跟随器做阻抗变换输入阻抗极高不拖累前级输出阻抗极低能强力驱动后级。电压增益约等于1信号幅度不变。第二段为什么需要低阻抗SAR型ADC内部有采样保持电路采样开关闭合时需要在极短时间内给采样电容约12pF充电。如果信号源输出阻抗高RC时间常数大采样电容充不满ADC读数就偏低。12位ADC需要约10τ的充电时间达到1/2 LSB精度。第三段什么时候可以不加信号源输出阻抗×采样电容时间常数远小于采样时间就可以不加。实测判断用低阻跟随器测一次读数再用无跟随器电路测一次二者差值在1~2个LSB以内就不用加。电池电压监测这类低频信号如果输出阻抗不太高2~3kΩ以下也可以用软件校准或延长采样时间来省掉跟随器。第四段RC滤波配合RC滤波应放在跟随器之后否则RC滤波中的串联电阻本身就变成了高阻抗源反而加重充电问题。正确的调理链是放大/分压→跟随器→RC滤波→ADC。四层全覆盖这道题满分。七、总结要点说明跟随器作用高输入阻抗、低输出阻抗、电压跟随ADC采样原理采样开关闭合时外部信号给采样电容充电高阻驱动的问题充电时间不足→读数偏低→动态误差允许最高阻抗采样时间/(10×C_sampling)F103约3~5kΩ可省跟随器的情况源阻抗足够低或者用长采样时间、小分压电阻、并大电容RC滤波位置放跟随器之后否则RC的R就是高阻抗源软件校准前提固定偏差可校温漂导致的时变偏差无法校准下篇预告《面试题说出一个你解决过的硬件故障面试官想听什么》——这是很多面试的压轴题考的不是答案是排查思维。我会拆解面试官的评分标准给你一个“现象→排查→根因→解决→预防”的标准话术模板。有用的话收藏一下。下次设计ADC前端翻出这篇文章对着判断一下要不要加跟随器。评论区说说你被ADC读数不准坑过什么老张帮你分析电路。