电容在ADC采样与电荷泵中的关键作用及实战选型要点
做硬件调试这些年电容大概是让我又爱又恨的元件。最近帮朋友调一块12位ADC采集板输入一个稳定的1.2V基准电压采回来的数值却在小数点后第二位来回跳那种明明电路很简单却查不出问题的感觉经历过的工程师都懂。最后盯着原理图看了半天发现采样保持电容取值偏小配合前端RC滤波电阻跟踪时间压根不够电容还没充到最终值开关就断开了。换个思路加大采样时间配置数据立刻稳了。这个故事背后其实牵出了电容电路的三条主线用它做微分积分、用它做采样保持、用它搬运电荷构成电荷泵。这篇文章想把电容在实战电路中的角色系统地拆一遍。从基础公式 iC·dv/dt 出发讲到ADC采样前级电路的设计要点再讲到电荷泵这种靠电容搬能量的功率拓扑。适合正在做模拟前端、传感器采集、电源设计的工程师尤其适合那些理论都懂但一上手就被采样偏差和电容选型问题卡住的朋友。1. 电容的物理本质决定它能做微分也能做积分1.1 从 iC·dv/dt 看电容的性格电容最基本的关系式就是 i C·dv/dt。这个式子含义很深流过电容的电流并不取决于电容两端电压有多高而取决于电压变化得有多快。也就是说电容本质上是一个对电压变化敏感的元件电压纹丝不动时它就像断路电压稍微波动它就拼命充放电去对抗。理解这个特性的最好类比是水库。水库里的水量代表电荷水面高度代表电压流入水库的水流就是电流。水库越大同样灌入一股水流后水面上升得越慢——这就是大电容稳压效果好的原因。反过来如果外面对水库的抽水速度不断变化水面高度也随之变化而水面变化速度乘以水库容量就等于水流大小。这个视角是后面理解微分电路和积分电路的钥匙。从能量角度看电容存储的是电场能量 E ½·C·U²。它不像电阻那样把能量变成热量消耗掉而是先存起来再放出去。正是这种暂存-释放特性让电容既能平滑电压积分效应又能传递瞬态变化微分效应还能在开关控制下把电荷从一个节点搬到另一个节点电荷泵。1.2 积分电路电流积累成电压最经典的积分电路就是一个电容加上一个恒流源或者通过电阻限流。当理想恒流源给电容充电时U (1/C) · ∫i dt如果电流恒定 I那么 U I·t/C电压随时间线性上升。这个公式在很多场合直接可用比如硬件设计中常见的软启动电路用恒流源给电容充电电容电压从0慢慢爬到目标值爬升时间 t C·U/I想调整软启动时间就改电容容量或者充电电流。用电阻给电容充电则更常见阶跃响应是 U(t) Vcc(1 - e^(-t/RC))时间常数 τ RC。注意这里的RC不是充到100%的时间而只是充到63.2%的时间。工程上一般认为5τ后基本充满但具体到采样电路5τ对应的残差约0.67%对12位ADC来说还不够低至少需要8~9τ才勉强达到1/4096精度以内。这个问题很多人会栽后面采样部分细说。1.3 微分电路变化率转化成电压微分电路最典型的结构是电容串联在信号路径上后面接电阻到地。输出电压正比于输入电压的变化率 u_out ≈ RC·(dv_in/dt)。这种电路在实际工程里相当难伺候。因为任何噪声、串扰、毛刺都带有极高的 dv/dt经过微分电路后噪声被放大得很厉害输出波形上全是尖刺。所以除了波形整形、触发沿检测这类特殊场景没人拿它做常规信号处理。反倒是它的低频版本——隔直通交的耦合电容——在电路里无处不在交流放大器级间耦合、串口电平转换、AC采样前端隔离直流偏置都是用电容阻断直流、让交流变化通过这个思路。从设计角度总结电容的微分和积分特性是个一体两面凡是需要平滑保持延时的地方用的是积分效应凡是需要提取变化隔离直流引导瞬态电流的地方用的是微分效应。理解到这一层再看采样保持电路和电荷泵思路就顺了。2. 采样保持ADC前面那颗电容决定了你测得的数值准不准2.1 采样保持电路的工作原理和时序SAR型ADC做转换的前提是转换期间输入电压必须保持稳定。于是就有了采样保持电路S/H结构上就是三件事一个模拟开关、一个采样电容、一个高输入阻抗的缓冲器。采样阶段开关闭合输入信号通过开关的导通电阻给采样电容充电电容电压跟踪输入电压。保持阶段开关断开电容把最后一刻的电压定格下来交给后级ADC逐位比较。整个过程就是电容充电和保持电荷的配合。关键时序参数有三个实际设计时一个都不能漏采样时间跟踪时间从开关闭合到开关断开的时间必须保证电容电压充到与输入电压的误差小于 ½LSB。孔径时间孔径延迟保持命令发出到开关真正断开的时间。这个时间不定会造成孔径不确定度直接表现为采样值的噪声。保持时间开关断开后电容电压维持精度的时长取决于电容自放电和开关/引脚的漏电流。很多工程师(包括以前的我)以为只要ADC分辨率高就行忽略了前端RC网络和采样电容构成的充电回路需要时间。拿12位ADC举例如果参考电压是3.3V那么一个LSB约0.8mV。要让充电残差低于0.8mV即残差比例小于满量程的1/4096按指数充电过程算需要约8.3τ。如果采样电容是10pF开关导通电阻50Ω时间常数只有0.5ns自然没问题。但如果你在前端加了RC滤波比如常见的100Ω电阻加10nF电容光这个滤波电容的时间常数就是1μs还不算采样电容并联进去的额外负载给1μs采样时间就有问题了。2.2 采样误差从哪来电荷注入、时钟馈通与孔径抖动采样误差是精密ADC设计里最容易踩的坑。先说电荷注入。模拟开关断开瞬间MOS管沟道里的电荷并不是立刻消失而是会往源极和漏极两个方向泄放。如果开关管两侧结构不对称或者采样电容比较小这部分电荷就会转移到采样电容上形成电压跳变偏移量通常是毫伏级别。解决办法有几种采样电容尽量选大一点电荷注入引起的电压变化 ΔU Δq/C 会小一些或者用互补CMOS开关、加虚拟开关Dummy Switch来抵消注入电荷。后端芯片如果是集成采样开关的ADC一般内部已经做了优化但使用外部采样保持电路或者多路复用器时就得仔细处理。时钟馈通也类似采样控制信号本身会通过开关管的栅漏/栅源寄生电容耦合到采样电容上产生一个固定的电压台阶。它与输入信号大小无关表现为失调误差。孔径抖动则直接影响信噪比孔径时间每抖动几个皮秒对应到一个高频信号的相位抖动输出电压误差就越大。所以采样时钟的抖动要求在高频采样时格外苛刻这也就是为什么高速ADC通常要求低抖动参考时钟。2.3 STM32 ADC采样时间配置与多通道扫描陷阱用STM32内置ADC时采样时间不是给个大概就行。STM32的ADC采样时间由寄存器配置常见选项有1.5、7.5、13.5、28.5、41.5、71.5、239.5个ADC时钟周期等。ADC时钟通常来自PCLK2分频比如72MHz主频、PCLK272MHz时ADC预分频设为6分频得到12MHz ADC时钟则1个ADC时钟周期约83.3ns。假设信号源内阻10kΩ采样电容约4pFSTM32系列典型值具体看型号手册RC时间常数约40ns。要满足12位精度需要8.3τ即约330ns。这个时间对应大约4个ADC时钟周期看起来13.5周期够了。但如果你在外部又加了一阶RC滤波电阻1kΩ、电容10nF波形从外部滤波电容传递到内部采样电容的过程就复杂了外部RC的时间常数是10μs你不能再按40ns算需要把采样时间拉到239.5周期否则测出来的数值会系统性偏小。多通道扫描更是陷阱重重。多个通道共用一个ADC如果你把通道按最慢通道配置采样周期所有通道都会变慢——这是正确做法。如果开发时改了一个通道的采样时间而其他通道保持短采样时间扫描时会出现混合读数慢信号通道窜到快信号通道上或者采样不充分导致通道间串扰异常。我曾见过一个案子三路传感器扫描数据周期性跳变最后查出来就是通道配置不一致。下面是一段配置采样时间的参考写法ADC_InitTypeDef ADC_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE); RCC_ADCCLKConfig(RCC_PCLK2_Div6); // ADC时钟 72MHz / 6 12MHz ADC_InitStructure.ADC_Mode ADC_Mode_Independent; ADC_InitStructure.ADC_ScanConvMode DISABLE; ADC_InitStructure.ADC_ContinuousConvMode DISABLE; ADC_InitStructure.ADC_ExternalTrigConv ADC_ExternalTrigConv_None; ADC_InitStructure.ADC_DataAlign ADC_DataAlign_Right; ADC_InitStructure.ADC_NbrOfChannel 1; ADC_Init(ADC1, ADC_InitStructure); // 采样时间设置为239.5个ADC周期约19.96us适合高阻抗信号源 ADC_RegularChannelConfig(ADC1, ADC_Channel_1, 1, ADC_SampleTime_239Cycles5);注意不同STM32型号的ADC时钟最高频率限制不同有的允许36MHz有的只有14MHz。配置前务必查数据手册否则采样结果可能完全不可信。2.4 高性能采样开关栅压自举为什么重要如果把采样保持电路做成独立的模拟开关就绕不开导通电阻随输入电压变化这个问题。常规CMOS传输门的导通电阻不是常数输入电压靠近电源轨或者地轨时电阻明显变化。开关导通电阻变化意味着采样电路的充电时间常数也在变最终在ADC输出上表现为积分非线性INL失真。栅压自举开关Bootstrap Switch的思路是让开关管的栅源电压保持恒定。具体做法是把电源电压预先充到一个电容上在采样阶段把这个电容跨接在开关管的栅极和源极之间。这样不管源极电压也就是输入信号怎么变Vgs始终等于电容两端电压导通电阻就稳定了。这个技术在现代高精度、高速ADC内部用得很多外部电路如果需要自己搭采样保持前端也可以用来保证全输入范围内采样带宽一致。做低速高精度采集时它不一定必须但一旦信号频率上去、输入摆幅又接近电源轨普通的CMOS开关就会露馅。3. 电流与电压采样电路里的电容配合3.1 电流采样电路的RC滤波怎么取值电流采样通常是把电流流过采样电阻产生的压降送给运放放大。采样电阻值很小压降也很小这种微弱信号特别容易被开关噪声、地弹干扰污染所以采样电阻到运放之间几乎都会加RC滤波。关键问题是这个RC的时间常数不能影响你关心的信号带宽。一个常用的做法是差分方式采样电阻两端各串一个等值电阻R然后在运放输入端并一个差分电容Cd同时两个输入端各并一个共模电容Cc。差分信号走的回路是RCdR共模噪声走的是RCc。差分截止频率 f 1/(2π·R·(2Cd? Cc?))。工程上更常用的是先估算需要抑制的噪声频段反推滤波器截止频率再选R和C。一个参考起点R取100Ω到1kΩ差分电容取1nF到10nF共模电容取100pF到1nF。但这只是起点具体要结合运放的输入电容和信号最高频率来算。计算时需要注意的是运放输入端本身还有输入电容如果外部R取太大运放输入电容和外接电容会形成分压/谐振反而在某个频点放大噪声。所以R不宜无脑加大宁可C加大。3.2 交流电压采样隔直、偏置与电容耦合交流电压采样尤其是220V交流的电压采样通常先用电阻分压网络把高压降到ADC能接受的范围然后做隔直处理。这里的电容起作用的地方就在于把直流分量去掉、只让交流分量通过配合后级偏置电路把交流信号抬升到ADC输入范围中间。具体做法常见两种。一种是纯电阻分压后直接进运放做偏置和放大另一种是分压后串电容后端再通过电阻网络设置直流工作点。第二种的好处是前端分压网络的直流电平与后级偏置完全解除耦合但代价是电容后端输入电阻构成的高通滤波器会限制最低可测量频率。比如电容取1μF后端等效输入电阻100kΩ那么高通截止频率约1.6Hz测50Hz没问题但如果要测更低的频率就需要加大电容到10μF、100μF。这里想提醒一点电容隔直之后的直流偏置点非常重要。如果偏置电压和运放输入偏置电流不匹配会把工作点慢慢拉偏。还有一种隐蔽故障输入信号是双极性偏置到ADC中心点后如果电容漏电大输出中线会漂移最终表现为读数在一半以上/以下不对称。3.3 电容倍增电路小电容干大电容的活电容倍增器是个很巧妙的电路利用运放的增益把一个物理小电容等效成一个大电容。常见做法是米勒电容倍增利用运放反相端的米勒效应等效输入电容 Ceq C·(1 A)A是这一级放大倍数。运放增益100倍一个100nF的电容在输入端看起来就像10μF。应用价值非常实际在需要大电容的场合比如低频滤波器、慢斜坡发生器、电源软启动延时大容量电解电容体积大、等效串联电阻高还可能有漏电问题。用运放加小薄膜电容等效出大电容精度和稳定性反而更好。但要注意电容倍增器是有源器件它受限于运放的带宽和压摆率。频率高了以后运放增益下降等效电容也不准了。还有它只能单向工作不能像物理电容那样双向储存和释放能量所以在能量缓冲、去耦这些场合它替代不了真正的电容。搞清楚应用边界才能在合适的位置放心地用。4. 电荷泵设计用开关和电容把电压搬到想要的电平4.1 电荷泵基本原理飞电容与电荷转移电荷泵是一种基于电容充电-放电-再充电的DC-DC变换器。它的核心是飞电容Flying Capacitor和一组同步开关。以最经典的负压电荷泵为例第一步开关把飞电容接到输入电源飞电容被充电到输入电压第二步开关切换把飞电容的正极接地负极接到输出端这时由于电容两端电压不能突变输出端就得到大约-输入电压的电平同时飞电容向输出电容和负载放电。如此往复输出就维持在一个负压附近。从能量角度看电荷泵的本质是把单位电荷一批一批地从输入搬到输出。每搬运一批电荷输出电容的电压会有微小的上升和下降这就是纹波。开关频率越高每周期搬运的电荷越少纹波越小但开关损耗也会增加。实际工程中电荷泵最常见的应用包括给运放提供负压、给LCD提供偏置电压、产生倍压给Flash编程电压、以及一些低功耗产品里用电荷泵产生LED驱动电压。选择电荷泵而不是LDO或电感开关电源的理由很直接没有电感EMI小、体积小、成本低缺点是负载能力有限一般到几百毫安就到头了。4.2 关键设计参数开关频率、飞电容容量与死区时间电荷泵设计里最重要的两个参数是开关频率和飞电容容量。理想情况下电荷泵输出等效阻抗近似等于 1/(fsw·Cfly)这个数值越大带载后电压跌落越严重。比如要输出50mA负载、允许输出电压跌落100mV等效阻抗就应该小于2Ω。如果开关频率100kHz那么Cfly至少要5μF。这是一个工程估算起点实际还要考虑开关管的导通电阻、电容ESR。死区时间同样关键。很多电荷泵使用交叉开关CDS模式在开关切换过程中如果上下管同时导通输入和输出之间就会形成贯通电流轻则效率暴跌重则电源轨被拉垮。所以开关的驱动信号之间必须插入一个很小的延迟让两个开关都处于断开状态这个时间就是死区。设计时我会按下面顺序过一遍确认负载电流和允许纹波计算需要的最小开关频率和飞电容。根据输入输出电压范围选择飞电容耐压预留至少1.5倍降额。确定开关管驱动方式加死区时间。用示波器抓输出纹波和SW节点波形确认没有直通和振铃。4.3 电荷泵的纹波、效率与电容选型输出纹波主要取决于输出电容和开关频率。粗略估算纹波峰峰值 ΔV Iload/(fsw·Cout)。如果负载50mA、开关频率500kHz、输出电容10μF纹波约10mV。想降低纹波有两条路加大输出电容或者提高开关频率。加大输出电容直接有效但注意电容的ESR也会贡献纹波所以高频场合要用低ESR的陶瓷电容。效率方面电荷泵的损耗主要有三个来源导通损耗开关MOSFET的导通电阻和飞电容ESR、开关损耗栅极驱动、寄生电容充放电、以及反向传输电荷时的固有损耗。理想2倍压电荷泵的效率可以达到接近100%但输出电流越大、开关频率越高实际效率越低一般负载稍重的2倍压电路做到85%到92%比较常见。电容选型是电荷泵设计里最容易忽视的一环。飞电容要承受较大的纹波电流优先选低ESR的X7R或C0G陶瓷电容。C0G温漂最小、最稳定但容值做不大X7R容量可以做得比较大但有直流偏压特性施加额定电压后容量可能下降到标称值的50%到70%。输出电容则要注意总ESR对纹波的影响通常用X5R/X7R并联一个小容值C0G来兼顾容量和频率特性。如果做非隔离的220V交流转低压的系统前级整流滤波电容的耐压和纹波电流就得更上心。220V交流整流后峰值电压约311V滤波电容至少选400V耐压常用450V铝电解电容。同时要考虑开机瞬间的浪涌电流所以很多设计会在整流桥后串一个NTC热敏电阻来抑制浪涌。这类电容规格不是看着差不多的容值就行耐压余量、纹波电流额定值和寿命都需要仔细核对。5. 实际调试经验与电容选型的几个大坑5.1 采样值系统性偏小的完整排查链路文章开头提到采样值偏小的案例这里把完整的排查链写出来给大家参考。当时的现象是输入电压稳定的1.2V基准ADC读出来稳定在0.92V左右不是跳变是稳定的偏低。第一步先怀疑分压电阻万用表量输入到ADC引脚的实际电压确认芯片引脚上确实是1.2V说明前端没有错。第二步检查参考电压因为12位ADC读数是相对于参考电压的如果参考电压偏低读数就会偏高而不是偏低方向不对。第三步怀疑采样时间不够于是把采样周期从13.5周期改成239.5周期读数立刻接近真实值此时确认是跟踪时间不足。背后的机理就是采样电容充电不充分。但为什么引脚上量到1.2V采样还是不够因为万用表测量的时间尺度是毫秒级它有足够时间把电压测准而芯片采样只有几微秒它要在这几微秒里通过信号源内阻给采样电容充电。信号源内阻高的时候前面没有足够的电容储能微秒级充电根本充不满。这也解释了为什么前端RC滤波的取值会直接拖垮采样精度。排查这类问题建议顺序是先用万用表确认引脚实际电压排除前端分压/放大问题。检查参考电压和基准稳定性。用示波器看采样控制信号和输入信号的时序关系确认采样窗口是否足够。逐步加大采样周期观察读数变化趋势找到拐点。检查前端RC滤波的截止频率确认它没有把目标信号衰减掉。有条件的话用高阻抗缓冲运放如电压跟随器驱动ADC输入。5.2 电荷泵输出电压异常的案例分析另一个实战案例是电荷泵负压升压不正常。电路是标准的负压电荷泵输入5V理论输出-5V飞电容1μF开关频率1MHz。实际测量输出只有-2.8V而且随负载波动明显。一开始怀疑芯片坏了换了芯片依旧。后来用示波器抓SW节点波形发现开关频率远低于设计值只有200kHz多一点再查芯片内部振荡器频率设定引脚发现外接电阻误选大了。开关频率下降导致等效输出阻抗升高带载后电压跌落就多了。把电阻改回标称值后输出恢复正常。这个案例说明一个道理电荷泵的实际输出能力用等效阻抗衡量任何导致有效开关频率降低的因素都会直接影响到带载能力。除了外部定时电阻飞电容ESR过高也会表现为带载电压跌落而飞电容容量不足则会出现空载电压正常、负载一上来就掉的现象。所以排查电荷泵问题时最好同时测SW波形、输出纹波和输出电流三个信息放一起问题定位会快很多。5.3 电容直流偏压特性X7R衰减一半你信吗陶瓷电容的直流偏压特性是很多工程师用过一次就忘不掉的教训。X7R电容在两端施加直流电压时实际容量会显著下降。比如10μF的X7R陶瓷电容在20V直流偏压下容量可能降到5μF以下在接近额定电压时甚至可能只剩下标称值的30%上下。这意味着什么如果你按10μF设计了一阶低通滤波截止频率在无直流偏压时工作正常一旦电路进入正常上电状态滤波截止频率可能默默漂移了一倍多。放在电源去耦场景里表现为高频噪声纹波变大放在RC延时电路里表现为延时时间变短。所以选型建议是对精度敏感的电路尽量用C0G/NP0电容虽然容量做不大但容量随电压和温度几乎不变。需要大容量时选择耐压值比工作电压高一倍以上的X7R靠低偏压工作来保住实际容量。产品设计阶段用网分或LCR表实测工作点下的实际容量而不是只参考数据手册标称值。如果电路里有电解电容还要注意温度范围下的容量衰减和ESR变化。最后再分享一个小经验电容的参数不像电阻那样标多少就是多少它的容量、ESR、漏电流都会随电压、温度、频率变化。设计时既要留出计算余量更要实测验证。做模拟电路这么多年我越来越觉得电容选型四个字提出来容易做起来难很多时候产品的精度边界和稳定性成败就在这几颗不起眼的电容上。希望这篇文章能帮你少走一些弯路特别是那些看起来玄学的采样偏差和电压跌落问题往电容方向想想往往就有答案。