尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

ADC输入阻抗越低越好?分清源阻抗与采样动态阻抗是关键

ADC输入阻抗越低越好?分清源阻抗与采样动态阻抗是关键 作为一个常年跟ADC打交道的人我几乎每隔一段时间就会看到有人问出这个问题ADC输入的阻抗到底是做低好还是做高好甚至有不少人把“输入阻抗越高越好”当成铁律结果在项目里越调越不对也有人反过来为了让ADC输入阻抗变低拼命加大驱动能力结果噪声和串扰反而上去了。这个问题的迷惑性在于它牵扯到三个完全不同的阻抗信号源输出阻抗、ADC内部等效输入阻抗、以及采样开关和采样电容组成的动态阻抗。把这三者混在一起谈问多少遍都绕不出来。这篇文章想做的事就是把这笔账彻底算清楚从SAR ADC内部采样网络的物理行为讲起到源阻抗如何影响采样精度再到STM32、GD32这类MCU内置ADC以及HX717等独立ADC芯片的实际搭配方案。全文里出现的结论和参数有一部分来自我自己的实测有一部分来自数据手册和公开的应用笔记大家拿到自己项目里可以直接抄作业但前提是先看懂背后的原理。1. 先把三个阻抗分清楚天天说的“低阻抗”到底指哪一个1.1 源阻抗、输入阻抗、采样阻抗别混为一谈很多人在评估ADC输入时脑子里只有一个笼统的“阻抗”概念觉得只要把ADC输入端的阻抗降下去信号就不容易衰减了。这话在放大器输入端基本成立但在ADC输入端却常常帮倒忙。为了把问题讲明白我习惯把注意力拆成三层信号源输出阻抗Source Impedance传感器、运放输出端、前级电路的等效输出电阻用Rs表示。ADC等效输入阻抗从ADC输入引脚往里看进去能“静态”测到的阻抗。对于CMOS型ADC这个值通常高达几十兆欧姆甚至更高因为引脚进去先是一个MOS开关栅极几乎不取直流电流。采样网络动态阻抗在采样保持阶段ADC内部的采样开关闭合采样电容Chold/Csample通过开关导通电阻Rsw从信号源取电荷。这个动态过程呈现出的等效阻抗和采样频率、采样电容值紧密相关通常远低于“等效输入阻抗”。问题就出在这三层阻抗上。问答里说的“low impedance for the ADC input”翻译成工程语言至少有两种截然不同的指向信号源是低阻抗的低Rs所以对ADC实现低阻驱动。ADC输入端表现出的输入阻抗是低的也就是ADC本身从外部抽取的电流比较大。这两种情况在实际电路中的影响几乎相反第一种通常是好事第二种往往是隐患。大家之所以觉得“低阻抗好”本质上是因为低阻驱动确实能快速给采样电容充好电精度更好而“低阻抗不好”的论调也是真的因为ADC输入端一旦等效阻抗太低就会对前级电路产生明显的负载效应、拉低信号、引起通道间串扰。谁都不矛盾只是在说两个不同的位置。1.2 为什么“输入阻抗越高越好”这句话在ADC上不成立对运放来说输入阻抗高意味着前级几乎不用输出电流所以“高输入阻抗”几乎总是优点。但对ADC来说高输入阻抗只说明静态电流小采样那一瞬间该要的电荷还是得要。只要你把采样开关闭合采样电容就会从源端抽取电荷这个抽取行为跟静态输入阻抗无关只跟采样电容、开关导通电阻、源阻抗共同构成的RC网络有关。更直白一点ADC输入引脚测出来的直流阻抗是100MΩ看了让人很开心但当你用100kHz采样率去采一个1kΩ的信号源结果还是可能差出好几个LSB。原因就是采样建立的瞬间引脚上会形成瞬时电流脉冲高静态阻抗对这种脉冲电流毫无帮助。所以评估ADC输入端的好坏关键看的是采样网络的动态行为而不是拿着万用表量出来的那个直流阻抗值。2. SAR ADC输入端的物理真相采样电容和开关是怎么“吃”电流的2.1 采样阶段的电路等效模型绝大多数MCU内置ADC和独立逐次逼近型ADCSAR ADC在使用普通模式时工作原理都差不多采样阶段开关闭合外部信号源给内部采样电容充电保持阶段开关断开电容上的电压被锁住供SAR逻辑逐次比较。这个阶段可以用一个非常朴素的等效电路来描述Rsw内部采样开关导通电阻通常在几百欧姆到几千欧姆之间随温度、电压变化很大。Csample采样电容通常几个皮法到几十皮法。在高速高精度SAR里这个值会做得相对大一些因为kT/C噪声和匹配精度都需要它。从外部看进去ADC在采样阶段的等效阻抗大约就是Rs Rsw与Csample串联的动态阻抗。注意这个动态阻抗不是某个固定电阻而是随着时间变化的充电特性。假设信号源电压为Vs采样开始瞬间采样电容两端电压为0或者说残留下一次前一个通道的电压那电容电压随时间变化的关系是标准的RC充电曲线Vc(t) Vs × (1 − e^(−t / τ))其中 τ (Rs Rsw) × Csample想要让转换结果达到N位精度采样结束时刻的Vc必须与Vs的误差小于0.5个LSB。换算成时间要求就是t_sample ≥ (N 1) × ln2 × τ ≈ 0.693 × (N 1) × (Rs Rsw) × Csample拿一个典型的12位SAR ADC举例N12ln2×13 ≈ 9.0也就是说采样时间至少需要9个时间常数。如果Rs Rsw 2kΩCsample 5pFτ 10ns那么采样时间至少得给到90ns。听起来不苛刻但假如信号源输出阻抗窜到10kΩτ就变成60ns采样时间得给到540ns。如果你的采样周期固定得很短这个时间就根本不够结果就是读数偏小、非线性、甚至抖动。2.2 开关电容输入的“等效电阻”错觉还有一个有趣的现象如果把开关电容网络看得足够“宏观”它的行为有点像一只电阻。每次采样采样电容会从源端取走Q Csample × Vs这么一坨电荷如果采样频率是fs那么平均输入电流就是I_avg Q × fs Csample × Vs × fs由此可以推出一个“等效输入电阻”R_eq Vs / I_avg 1 / (Csample × fs)举个例子Csample 5pFfs 1MHzR_eq就是200kΩ。有些文章会拿这个“等效输入阻抗”做文章告知你“ADC输入阻抗是200kΩ”于是你按200kΩ做阻抗匹配实际上是大错特错。因为这只等效电阻只反映平均电流完全无法描述采样瞬间那个纳秒级的电流尖峰。真实的采样瞬间电流尖峰的大小取决于Rs Rsw跟那个200kΩ根本没有直接关系。这也是不少人用万用表或者阻抗分析仪去测ADC输入端测出一堆奇怪数据的原因——测量仪器根本模拟不了真实采样网络的工作状态。2.3 那低阻抗到底好在哪看到这里你应该明白了如果能把Rs Rsw压得很低采样电容充电就特别快采样时间给短一点也行ADC在同样采样周期下能适配更高的输入带宽通道切换之后的残留电荷也能更快清干净。这就是“低阻抗”真正的好处——不是因为它让静态输入“看起来”更漂亮而是因为它把采样建立的RC常数压小了。所以当人们说“给ADC输入端一个低阻抗驱动”时准确含义是用一个低输出阻抗的源比如运放跟随器输出阻抗可能只有零点几欧姆去推ADC让采样电容在几个纳秒内就充到位。3. 低源阻抗是馈赠但低输入阻抗是要还的3.1 信号源阻抗过大精度会断崖式下降既然采样电容需要电流那么信号源能不能供出这个电流就是决定精度的关键。对于真实信号源输出阻抗Rs总是存在并且有限。Rs越高充电电流越小建立越慢误差越大。拿一个非常常见的情形来说STM32的内置ADC数据手册里通常会给出一个最大外部源阻抗建议值有些型号在采样时间最短时只允许R_AIN不超过几千欧如果采样时间选得很长允许的源阻抗可以到几十千欧。我当年第一次用一个高阻电位器直接接ADC输入电位器阻值50kΩ采样时间用默认的1.5周期结果采出来的曲线在中间位置明显凹陷最后才发现就是源阻抗太大、采样时间太短电容根本没充满。这种误差不是线性误差而是跟源阻抗和采样频率纠缠在一起的动态误差。它的特征非常迷惑信号变化缓慢时看起来挺准信号一快或者切换通道之后就乱跳把采样保持时间调长一点又好转。很多人在这种问题上折腾半天怀疑程序、怀疑参考电压却很少第一时间想到是源阻抗不匹配。3.2 用运放做缓冲是低阻驱动最常规的打法为了压下源阻抗最可靠的办法是在信号源和ADC之间加一个运放电压跟随器。运放跟随器的输出阻抗极低通常在几十毫欧到几欧姆而且能提供足够的瞬态电流能把采样电容迅速充满。这是ADC模拟前端最经典的结构传感器 → 级联放大/滤波 → 运放跟随器 → AIN引脚选运放的时候几个参数挺关键带宽增益积不要只盯着“带宽够不够采样率”要看输入信号本身的最高频率。一般建议GBW至少是信号最高频率的10倍以上不然放大环节会引入额外相移和增益误差。输出电流能力和建立时间运放必须能在采样瞬间提供足够大的充电电流。数据手册里看“Settling Time”和“Output Current”选择能在几百纳秒内稳定到0.1%级别的器件。输入偏置电流和失调电压高精度场景下这两项会直接反映到直流误差里。CMOS运放偏置电流很低适合高阻信号源双极型运放速度快但偏置电流要大好几个数量级。噪声对于16位以上的ADC运放噪声对有效位数的影响不能忽略。折算下来运放等效输入噪声电压最好低于半个LSB折算到输入端的噪声。3.3 低输入阻抗的另一面瞬时电荷注入和“坑”前级如果ADC输入端的等效阻抗真的非常低比如只有几百欧姆那么这个输入引脚在每次采样时抽取的电流尖峰会非常大。这里有一个实打实的工程问题如果前级运放输出端还串着一个滤波电阻为了构成RC低通那么这个电阻会和采样电容构成一个新的分压/充电网络瞬态充电电流会在电阻上产生压降导致采样开始瞬间引脚电压被拉低。如果RC时间常数未能在采样窗口内恢复精度照样往下掉。这正是“低阻抗”双刃剑的体现ADC输入阻抗低 → 充电快 → 但瞬态电流大 → 对外围电路造成的扰动也大。尤其当多个模拟通道共用一个采样电容时通道切换后采样电容上的残留电荷会与下一通道的信号源发生电荷共享表现就是通道串扰。如果前级阻抗高残留电荷放不掉串扰更严重如果把前级阻抗做得很低残留电荷被迅速冲走串扰就轻一些。这又回到了低阻抗驱动的好处上。所以我的结论非常明确你要追求的不是ADC输入端本身低阻抗而是让驱动它的源阻抗足够低并且控制好瞬态电流对周围电路的影响。4. 采样时间、源阻抗、采样电容三者之间的数学账4.1 一个可以拿去做预判的计算例子为了让你能在画板子之前就先估算能不能直接接我拿一个典型12位SAR ADC的参数来举例子。假设Rsw 2kΩCsample 4pF信号源内阻Rs 5kΩ采样时间 t_sample 由程序配置设为 1μs计算 τ (Rs Rsw) × Csample 7kΩ × 4pF 28ns。12位精度需要约9个τ也就是 9 × 28ns 252ns。现在你给的采样时间是1μs远大于252ns足够。同样条件下如果采样时间压缩到0.2μs200ns那就明显不够了需要想办法降低Rs或者增加采样时间。再看一种情况Rs 50kΩCsample 4pFRsw 2kΩτ 52kΩ × 4pF 208ns。12位需要 9 × 208ns 1.872μs。如果你的采样时间只有1μs误差就非常大了。这种情况下要么把Rs降下来要么把采样时间拉长要么给ADC输入端并联一个外部电容让外部大电容先去充当“电荷库”不过这又会引入新的问题外部电容太大运放驱动不稳。实际设计里我一般不会死磕公式而是直接留足2倍余量把需要的建立时间算出来之后再翻一倍确保温漂和参数分散性不至于把设计推到悬崖边。4.2 采样时间不是越长越好很多做MCU开发的朋友遇到采样不准的第一反应就是把采样时间调到最大。STM32系列里采样时间最长可以到239.5个ADC时钟周期相比最短的1.5周期差了160倍。这招确实能救回一部分因源阻抗过高导致的误差但代价是采样吞吐率直线下降。你如果用定时器触发采样希望在一个PWM周期内同时采三相电流采样周期被拉得很长就会直接影响控制环路的时间精度。尤其是做FOC电机控制的场景ADC采样窗口必须精确落在PWM中心对齐的某个时刻采样时间长了窗口就偏了电流波形捕捉就失真。所以更合理的思路是先用公式估算“源阻抗采样时间”组合是否够用不够用就上运放缓冲而不是无脑拉长采样时间。4.3 外部并联电容的适用场景与坑在信号源和ADC输入之间串一个电阻再对地并一个电容构成RC低通滤波器是非常常见的抗混叠和降噪做法。但这个电容选多大直接决定瞬态行为。电容大抗噪声好但建立时间会变长电容小建立快但抗噪声弱也起不到给采样电容供电荷的作用。经验值外部电容通常取Csample的20~50倍也就是大概100pF到1nF级别。如果外接电容过大比如1μF就必须确认运放输出是不是能稳定驱动这个电容性负载很多运放接大电容会振荡。这时候就得加隔离电阻通常几十欧姆但隔离电阻又会拉高源阻抗形成一个取舍。在设计时我会先用示波器看AIN引脚的波形确认采样时刻的电压跌落幅度再来调整电阻电容的值——这是最直观也最不容易走弯路的方法。5. 落地到开发板STM32、GD32内置ADC怎么搭输入电路5.1 从数据手册里找到R_AIN限制对于STM32、GD32这种MCU内置ADC数据手册里通常会有一张表格标明在不同采样时间下允许的最大外部源阻抗RAIN。这个值是基于内部采样开关导通电阻、采样电容和12位精度要求算出来的。在STM32F103这样的经典型号上当采样时间为1.5周期时RAIN典型允许值只有几百欧姆到1kΩ左右当你把采样时间拉到239.5周期RAIN允许值可以到几十kΩ甚至上百kΩ。这个表非常值得认真看很多人采样不准就是因为没查这个表用了个10kΩ的源阻抗就直接去采。实际操作中我会做一个非常保守的估计直接按数据手册RAIN最大值的一半来设计这样即使芯片批次温度变化、开关导通电阻变大也能兜住。如果前级是运放跟随器那RAIN压根不是瓶颈倒是运放本身的建立时间和带宽成为新的瓶颈。5.2 多通道、扫描模式、DMA通道串扰怎么压下去STM32/GD32的ADC经常用多通道扫描DMA采集就是把CH0、CH1、CH2……轮流采一遍结果通过DMA搬到内存。很多人在这个模式下发现通道之间互相串扰CH0的信号会“漏”到CH1里去。根子就在于采样电容上的残留电荷没放干净或者采样时间不够。解决办法是有层次的把采样时间调长尤其是通道切换频繁时。多通道模式下每个通道的采样时间是同时配置的为了让最慢的那个通道也能准只能统一拉长。给每个输入通道都加上RC滤波。用外部电容来帮助建立也能抑制串扰。建议每个通道的RC参数一致否则各通道的建立特性不同采出来的数据会有系统性差异。利用ADC的采样保持请求或注入通道功能在真正关键的通道上单独设置更长采样时间而不是让所有通道都一样。FOC场景里三相电流采样经常采用注入通道或者定时器触发单次采多个通道的方式时序上更精确。DMA搬数只是把结果搬走它不解决模拟建立问题。很多人误以为“加DMA后采样变准了”其实是心里作用DMA之前值和之后值的差异完全由采样保持电路决定。我在一个多通道采集项目里实测过8个通道扫描采样时间1.5周期CH0接一个3V方波CH1接地结果CH1读出了0.8V左右的残留把采样时间调到55.5周期之后残留降到0.05V以下。这就是采样时间不足的典型表现。5.3 硬触发采样用定时器让采样窗口精准落位ADC采样最怕的是窗口抖动。使用定时器触发ADC比如TIM1的TRGO事件可以让采样精确地发生在PWM周期的特定位置这对于FOC电流采样尤其重要。触发之后ADC自动完成采样和转换DMA把结果搬走CPU全程不参与。这种模式下采样时间仍然是关键参数触发时刻之后ADC需要一段时间完成采样保持再逐位转换转换期间输入端的信号变化不会影响结果但采样期间信号如果变化过快就会产生孔径误差。针对这种情况我给输入端加一级抗混叠滤波几乎是必须的不然采样到的就是波形上某个“偶然”的瞬时值而不是你想要的平均值或中心值。RC截止频率一般设置在信号最高频率的3~5倍既保留信号有效成分又滤掉高频毛刺。6. 高精度独立ADC芯片24位、20位器件的输入前端怎么伺候6.1 位数越高建立误差的预算越少从12位跳到16、20、24位很多人以为只是分辨率变高了实际上对模拟前端的苛刻程度是指数上升的。24位ADC的一个LSB对应的相对误差大约是 1/16777216也就是0.000006%左右。你输入端源阻抗稍微大一点采样建立误差落在最后几位里结果就是有效位数ENOB很难看。以HX717这类双通道24位ADC为例它的输入结构也是开关电容型内部会有可编程增益放大器PGA等效输入阻抗相对较低通常要求信号源能提供足够的电荷。这类ADC很多用在称重传感器上桥式传感器的输出阻抗通常在1kΩ到数kΩ之间。如果直接用传感器输出接ADC由于PGA输入级会从传感器抽取电流会造成电桥负载效应导致测量误差。所以即便是低成本方案也不能完全省掉前端处理。6.2 高精度场景的输入前端设计方案桥式传感器信号先差分放大比如用仪用放大器再进ADC或者直接用ADC内部的PGA但要在传感器和PGA之间做好RC滤波并在PCB布局上让模拟地和数字地干净分割。单端高阻信号必须用低漏电流运放做跟随器。运放输入偏置电流要nA级甚至pA级否则偏置电流流过源电阻会产生压降这个压降直接变成误差。抗混叠滤波器RC低通很有必要但电阻不能太大。比如用1kΩ100nF截止频率约1.6kHz适合称重、温度这类低频缓变信号如果信号本身偏高可以适当调整。基准电压高精度ADC对参考电压的稳定性很敏感。参考源的输出阻抗、动态响应能力也会影响转换结果。低阻抗的基准源通常更稳但如果基准源和采样电容之间没有隔离每次采样引起的电流冲击会干扰基准电压。设计上最好在基准引脚附近放高质量去耦电容必要时串一个几欧姆的隔离电阻。6.3 滤波函数和数据处理再怎么救也救不了模拟前端的底噪网上有很多“ADC值滤波函数”什么滑动平均、中值滤波、卡尔曼滤波都是数字域的补救手段。它们能让你看到的数据曲线更平滑但不会提升真实有效位数。如果模拟前端的源阻抗、采样建立、参考噪声没搞定平滑之后的数值只是把噪声“掩盖”了不是“消除”了。尤其在做高精度采集时一定要先确认模拟前端已经把建立误差和噪声压在可接受范围内再谈数字滤波。底噪的排查方法我常用三板斧把ADC输入端对地短接采一组数据看噪声幅度。如果底噪就已经有十几个LSB说明是电源、地、参考或者逐位逼近过程中的问题跟信号源无关。在输入端接一个干净的直流电压比如从一个精密基准分压出来看看读数稳定性和线性度排除采样保持电路的问题。用低噪声运放驱动之后再复测看底噪是不是大幅下降。7. 实测对比同一个ADC不同源阻抗下的真实差异7.1 测试条件和数据做了这么多年ADC光讲理论不够我还是想放一组亲手测过的数据。测试对象是一块STM32G4系列开发板的12位ADC采样时间配置为12.5周期ADC时钟约30MHz采样保持时间大约416ns。信号源是一台稳定的直流电压源输出1.200V分别通过不同的串联电阻接入ADC输入端模拟不同的源阻抗。串联电阻理论源阻抗采样值12位原始码换算电压误差0Ω~0Ω24571.1997V-0.03%1kΩ1kΩ24531.1978V-0.18%10kΩ10kΩ24101.1768V-1.93%100kΩ100kΩ21361.0430V-13.08%这个数据有明显的信息量源阻抗从0到1kΩ误差还很小到10kΩ已经掉到接近2%到100kΩ直接损失13%。很多人觉得“几十千欧而已应该问题不大”看完这个表应该心里有数了。如果不加运放缓冲用10kΩ以上的源阻抗直接怼ADC在高精度需求下基本是没法用的。需要提醒的是这个结果是在我的板子、我的采样时间、我的芯片个体上测出来的不同芯片的Rsw和Csample有差异数据会略有浮动但趋势不会变。7.2 补上运放缓冲之后的复测同一套系统我在信号源和ADC之间加了一级SGM8531这样的低功耗运放跟随器再把10kΩ和100kΩ的电阻放在运放之前也就是让运放去承受高阻源。这时候ADC输入端看到的源阻抗接近运放的输出阻抗不到1Ω。复测结果10kΩ和100kΩ两组数据的采样值基本回到2455~2457之间误差恢复到0.1%以内。这个提升不是靠代码、不是靠滤波纯粹是模拟前端驱动能力的改善。这组对比从实践层面印证了前面讲的逻辑低阻驱动对ADC来说确实重要但你要做的是降低驱动源阻抗而不是试图改变ADC输入引脚的“阻抗”。ADC输入引脚的阻抗由芯片内部决定你改不了能做的是配合它。7.3 关于“ADC欢迎您回家”这类热词的巧合顺手提一句在查资料的时候经常会看到一些奇怪的搜索热词像“adc欢迎您回家”这种明显是打游戏或者看直播跑偏的词。做技术的人搜索时容易混入这些干扰词但大家最终要解决的问题还是那几类采样不准、通道串扰、DMA配置不对、有效位数上不去。这篇文章把最基础的模拟输入问题梳理清楚后面再遇到类似问题思路就清晰多了。8. 直接给结论到底低阻抗是好还是坏把整篇文章压缩成几句话方便你以后评审原理图时直接用对信号源来说低输出阻抗几乎总是好事。低阻驱动能快速给ADC采样电容充电减少采样建立误差。对ADC输入引脚本身来说你不需要刻意追求“低阻抗”也无法改变它。内部采样开关采样电容的动态阻抗才是重点。高源阻抗配合短采样时间是采样误差最常见的两个来源。出现读数偏低、非线性、通道串扰时优先检查这两个参数。降源阻抗最标准的手段是加运放缓冲而不是直接并联大电阻或者盲目加大采样电容。多通道扫描场景下采样时间不足会导致通道间电荷串扰延长采样时间或加外部RC是常规解法。从设计层面看“低阻抗”本身不是目的它只是快速建立和低误差的一种手段。真正重要的是让ADC在采样窗口内能够稳定地获得足够精度的电压。为了达到这个目的前提就是源阻抗要足够低、采样时间要足够富余、外部网络的寄生参数要可控。希望这篇文章能帮你把这个看似矛盾的问题理顺——以后再有人问“ADC输入低阻抗好不好”你至少能反问一句你说的是哪个阻抗
返回列表