
做电源的人谁还没被 Buck 电路“治”过几次印象最深的一次是我调一块 12V 转 3.3V 的板子电感、电容、续流二极管全都按典型电路焊好了空载输出纹波看着还挺干净结果一带 2A 电子负载输出直接变成 2.8V 左右的低频振荡示波器上那个波形像打摆子一样。后来查了一圈才明白问题根本不出在功率回路而是环路补偿这里的相位裕度不够。Buck 电路能出电压只是第一步能不能稳定、动态响应快不快很大程度取决于你给控制环路配的那几个电阻电容。这次我就把自己整理过的 Type II 和 Type III 补偿器的完整计算流程连同用 LTSpice 做环路仿真的方法一起写出来给刚接触电源的同行一个能直接照着做的路线。1. 先搞清楚我们到底在“补”什么1.1 一个让人头痛的现象输出振荡Buck 电路本身是一个闭环系统输出电压经过分压电阻采样送入误差放大器再和 PWM 比较器比较最终控制占空比。闭环系统的特点是增益太高了会振荡增益太低了输出电压稳不住。而电感、电容组成的 LC 滤波器在特定频率会引入一个很陡的相移这个相移叠加到环路里稍不留神就会让系统在某个频率满足“自激振荡”的条件。很多新手一看到输出振荡第一反应是加电容。实测下来加一个大的输出电容确实能让振荡频率变慢但治标不治本。真正要动的是误差放大器外围那个补偿网络。补偿器在这个环节里做的事情本质上就是“削峰填谷”在 LC 谐振频率附近把过大的增益压下来同时把掉下去的相位拉回来让整个环路在穿越频率附近仍然有足够的稳定裕量。1.2 小信号模型入门功率级传递函数要算补偿器参数得先知道被控对象长什么样。对电压模式 Buck 来说控制到输出的传递函数可以写成Gvd(s) Gdc × [1 s/(2π·fz_ESR)] / [1 s/(Q·ω0) s²/ω0²]其中 Gdc 是直流增益对电压模式 Buck 通常等于 Vin/VrampVramp 是 PWM 比较器的斜坡幅值ω0 2π·f0f0 是 LC 谐振频率Q 是品质因数由输出负载决定fz_ESR 是输出电容 ESR 带来的零点。这个式子里最影响稳定性的就是 LC 双极点。它在 f0 处会让增益以 -40dB/dec 的速度下降相位从 0° 一路掉到 -180°。如果输出电容的 ESR 足够大ESR 零点还能在某个频率把增益下降的斜率拉回 -20dB/dec顺带把相位拉回来一点。这就是补偿器参数里“零点”位置的物理意义拿补偿器的零点去抵消功率级的极点。1.3 稳定性三件套增益裕度、相位裕度、交越频率环路分析里绕不开三个指标交越频率crossover frequency、相位裕度phase margin简称 PM、增益裕度gain margin。交越频率 fc 指环路增益降到 0dB 的那个频率它基本决定了系统的带宽。带宽越高动态响应越快但也不能无限高一般取开关频率的 1/20 到 1/10 左右。开关频率 300kHz 的话fc 取 20kHz 到 30kHz 比较常规。相位裕度是大家在设计中最关心的它指环路增益为 0dB 时环路总相位距离 -180° 还有多少余量。相位裕度太低系统容易振荡太高动态响应慢且容易过冲。工程上我喜欢按 45° 到 60° 去设计满载轻载都照顾得到。注意评估相位裕度时一定要把分压电阻网络、PWM 调制器、输出滤波器全部算进去只算误差放大器自身是没有意义的。2. Type II 和 Type III到底选哪个2.1 Type II/III 的“长相”与能力Type II 补偿器常见的运放实现是输入电阻 R1反馈网络里 R2 和 C1 串联再并联一个高频电容 C2。它的传递函数形式是Gc(s) (1 s·R2·C1) / [s·R1·C1·(1 s·R2·C2)]它有一个积分环节、一个零点、一个高频极点。积分环节提供直流高增益让稳态误差趋近于零零点用来抵消功率级的一部分相位延迟高频极点用来压制开关噪声。Type II 最多能把补偿器的相位从 -90° 抬到接近 0°提升约 90° 出头实际可用大概 60° 左右。Type III 补偿器则是在 Type II 基础上再增加一组零点和极点常见实现是反馈网络里再接一个 R3-C3 串联支路。传递函数形式写成Gc(s) A × (1s/ωz1)(1s/ωz2) / [s×(1s/ωp1)(1s/ωp2)]它的相位提升能力明显更强两个零点能把补偿器的相位拉到 0° 以上。正因为这个特点Type III 才能对付电压模式 Buck 那个接近 -180° 的 LC 极点。2.2 判断标准ESR 零点在哪抛开理论直接说我的判断经验如果输出用的是电解电容或者钽电容ESR 通常有几十毫欧甚至上百毫欧ESR 零点频率比较低靠近或者落在穿越频率附近这时候 ESR 零点能帮忙拉相位Type II 往往就够用了。如果输出用的是多层陶瓷电容MLCCESR 只有几毫欧ESR 零点常常在 300kHz 甚至更高离穿越频率很远。此时功率级在穿越频率附近相位非常接近 -180°Type II 根本救不回来必须上 Type III。这也是为什么现在很多用陶瓷电容做输出的电压模式 Buck规格书里推荐的补偿网络长得那么复杂。你基本可以把“低 ESR 输出电容”和“需要 Type III”画上等号。2.3 热门误区不是所有 Buck 都需要 Type III有朋友问我是不是 Type III 参数更丰富性能一定更好还真不是。Type III 的零极点更多意味着高频增益不容易压下去对噪声更敏感参数算起来也费劲。对电流模式 Buck 来说电流内环已经把电感变成了受控电流源从控制到输出只剩一个主极点加一个 ESR 零点相位最坏也就 -90° 多再用 Type III 属于浪费。所以我的习惯是先判断控制模式。峰值电流模式、谷值电流模式这类 Buck默认先试 Type II电压模式 Buck 且输出为 MLCC直接 Type III。除非相位裕度实测不够再考虑升级补偿结构。3. 手把手计算 Type III 补偿器的参数电压模式 Buck 完整实例3.1 明确设计输入这一节我用一套完整参数走一遍大家可以把数字替换成自己的实际项目。设计输入如下Vin 12VVout 3.3VIout 3A开关频率 Fsw 300kHz输出电感 L 10µH输出电容 Cout 100µFESR 5mΩMLCC反馈基准 Vref 0.8VPWM 斜坡幅值 Vramp 1V这里要特别说下 Vramp。电压模式 Buck 的调制器增益是 1/Vramp很多初学者容易漏掉。Vramp 越小调制增益越高补偿参数差得就远。3.2 求功率级波特图的关键点先算 LC 谐振频率f0 1 / (2π√(L·Cout)) 1 / (2π√(10µ × 100µ)) ≈ 5033Hz再算 ESR 零点频率fz_ESR 1 / (2π × ESR × Cout) 1 / (2π × 0.005 × 100µ) ≈ 318kHz输出满载电阻Rload Vout / Iout 3.3 / 3 1.1Ω品质因数Q Rload × √(Cout / L) 1.1 × √10 ≈ 3.48接着选穿越频率。Fsw / 10 30kHz这是比较典型的起点兼顾带宽和稳定性。fc 取 30kHz。在 fc 处因为 fc 远大于 f0功率级的增益近似为|Gvd(fc)| ≈ Gdc × (f0/fc)² (12/1) × (5033/30000)² ≈ 0.338换算成 dB大概是 -9.4dB。相位方面LC 双极点已经把相位打到接近 -180°ESR 零点因为离得远只贡献了约 5° 的抬升∠Gvd(fc) ≈ -180° atan(30/318) ≈ -174.6°注意这里我用的近似公式是忽略双极点高阶影响的工程简化实际值会有几度偏差但作为设计起点完全够用后面 LTSpice 仿真会验证。3.3 选择交越频率并计算所需补偿器相位反馈分压比 H Vref / Vout 0.8 / 3.3 ≈ 0.242。要让环路增益在 fc 处为 1那么补偿器在 fc 处的增益必须满足|Gc(fc)| 1 / (|Gvd(fc)| × H) 1 / (0.338 × 0.242) ≈ 12.2接下来算相位。我希望最终相位裕度是 55°也就是说环路总相位在 fc 处应为 -180° 55° -125°。功率级相位是 -174.6°于是补偿器需要提供的相位是θc -125° - (-174.6°) ≈ 49.6°这就是整篇计算最核心的一个数补偿器必须在 30kHz 处贡献约 50° 的相位提升。3.4 分配零点和极点并计算参数Type III 补偿器有两个零点和两个极点我的分配原则是fz1 放在 LC 谐振频率附近用来抵消功率级的双极点。取 fz1 5kHz。fz2 略微低于 fc用来提供额外的相位提升。取 fz2 6kHz。fp1 放在 ESR 零点附近用来抵消 ESR 零点带来的高频增益上升。取 fp1 318kHz。fp2 放在开关频率的一半用来压制开关噪声。取 fp2 150kHz。先验证补偿器相位够不够θc -90° atan(30/5) atan(30/6) - atan(30/318) - atan(30/150) -90° 80.5° 78.7° - 5.4° - 11.3°≈ 52.5°比需求的 49.6° 高一点最终相位裕度约 57°很好留了一点余量。再算补偿器增益常数 A。补偿器传递函数为Gc(s) A × (1s/ωz1)(1s/ωz2) / [s×(1s/ωp1)(1s/ωp2)]在 fc 处|Gc(fc)| A × √(1(30/5)²) × √(1(30/6)²) / [2π×30k × √(1(30/318)²) × √(1(30/150)²)]代入数字|Gc(fc)| A × 6.083 × 5.099 / (188.5k × 1.004 × 1.020)≈ A × 31.02 / 192.9k ≈ A × 1.61e-4让它等于 12.2得到A ≈ 75.9k rad/s到这里Type III 补偿器的完整传递函数参数就齐了参数数值fz15kHzfz26kHzfp1318kHzfp2150kHzA75.9k rad/s我习惯把 A 换算成频率看一下量级A / 2π ≈ 12.1kHz说明这个补偿器的“等效积分器”在 12kHz 处过 0dB数字是合理的。3.5 从传递函数到外围 R/C 的映射补偿器的零极点参数算出来后最后一步是把它变成误差放大器外围的电阻电容。这里我必须说实话市面上 Type III 的运放实现网络有好几种画法不同芯片数据手册的命名也不一样你如果直接照着某个公式套很容易被符号绕晕。我的做法是先把上面这四个频率加一个增益常数 A 作为设计目标然后查所用控制器的数据手册看它推荐的 Type III 网络是哪种拓扑再按该拓扑给出的 R/C 公式反算元件。以最常见的运放反相积分型 Type III 为例反馈网络用两个串联 RC 支路并联其近似对应关系如下fz1 ≈ 1/(2π·R2·C1)fz2 ≈ 1/(2π·R3·C3)fp1 ≈ 1/(2π·R2·C3)fp2 ≈ 1/(2π·R3·C1)选定 R1 10kΩ然后用增益 A 去定 R2 和 R3 的量级四个方程解四五个未知数最后在 LTSpice 里扫一遍实际波特图差得不多就直接用。重要我从来不会指望这种近似公式一次精确定位。正确的流程是先用公式算出初始值再上仿真微调。真正决定成败的是零极点的相对位置而不是某颗电阻电容的 5% 精度。4. Type II 补偿器计算顺手也搞定4.1 设计场景说明Type II 虽然结构简单但用对场景非常香。我通常把它用在电流模式 Buck 上。电流模式控制下功率级的传递函数变成了单极点形式控制难度比电压模式低一大截。假设一个电流模式 Buck 的例子Vout 5VIout 2AFsw 200kHzCout 220µFESR 60mΩ电解电容Vref 0.8V负载电阻 Rload 5 / 2 2.5Ω。电流模式功率级的主极点大约在fp_power 1 / (2π × Rload × Cout) 1 / (2π × 2.5 × 220µ) ≈ 289HzESR 零点fz_ESR 1 / (2π × 0.06 × 220µ) ≈ 12.1kHz穿越频率取 fc 10kHz这是开关频率的 1/20留足余量。在这个频率下功率级的增益假设已经通过实测或数据表小信号图确认是 0dB 附近相位大约 -80°。为了让环路相位裕度达到 60°环路总相位需要 -120°补偿器相位需求是θc -120° - (-80°) -40°4.2 Type II 参数计算Type II 补偿器传递函数Gc(s) (1 s·R2·C1) / [s·R1·C1·(1 s·R2·C2)]零点 fz 1/(2π·R2·C1)极点 fp 1/(2π·R2·C2)。我习惯把零点放在 fc 的三分之一左右极点放在 fc 的三倍以上这样既给足相位提升又不至于让极点把相位拉回去太多。取fz 3.3kHzfp 30kHz验证补偿器相位θc -90° atan(10/3.3) - atan(10/30) -90° 71.6° - 18.4° ≈ -36.8°满足 -40° 的需求最后环路相位约 -117°相位裕度约 63°。4.3 元件参数反算输入电阻选 R1 10kΩ。在 fc 处由于 fc 在零点和极点之间补偿器增益约等于 R2/R1。功率级增益 0dB反馈分压比 H 0.8/5 0.16所需补偿器增益|Gc(fc)| 1 / (1 × 0.16) 6.25所以 R2 / R1 6.25取 R2 62kΩ。由 fz 反算 C1C1 1 / (2π × 3.3k × 62k) ≈ 780pF取 820pF由 fp 反算 C2C2 1 / (2π × 30k × 62k) ≈ 86pF取 82pF到这里Type II 的四颗元件全部出来了R110kΩ、R262kΩ、C1820pF、C282pF。4.4 Type II 的关键局限Type II 最怕遇到什么情况就是输出电容是 MLCC、ESR 低到基本可以忽略。这时候功率级在穿越频率处相位已经接近 -180°Type II 能提供的最大相位又只有约 90°而且实际还要被积分器的 -90° 消耗掉大半根本无法把环路救回来。换句话说Type II 不是不够好而是它只适合“功率级自身相位没坏到那个程度”的场景。5. 用 LTSpice 把环路仿真跑起来5.1 搭建功率级小信号模型我很少一上来就做完整的大信号 Buck 仿真因为环路 AC 分析用小信号模型更清晰也不容易被开关纹波干扰。LTSpice 里可以用一个行为源直接放置功率级传递函数EPOWER vout 0 LAPLACE {V(comp)} {12*(1s/(2*pi*318k))/(1s/(2*pi*5k*3.48)s*s/((2*pi*5k)**2))}这个行为源的输入是补偿器输出电压 V(comp)输出就是功率级的 Vout。它把 PWM 调制器、LC 滤波器、ESR 零点全部打包成一个传递函数非常适合纯环路验证。5.2 注入环路测相位裕度测环路增益最简单的办法是把真实的反馈链路打开。我在电源输出经过分压网络的地方把反馈信号断开插一个 AC 小信号源然后在 AC 分析里观察“返回信号 / 注入信号”的比值。具体步骤如下在补偿器输入端用一个电压源 VERR 作为 AC 激励AC 幅度设为 1。补偿器用另一个行为源实现传递函数就用前面算出的 Type III 参数。补偿器输出接功率级行为源。功率级输出经过分压系数 0.242 后回到补偿器输入节点。跑 AC 分析扫描范围从 100Hz 到 1MHz。在仿真图上直接画 V(fb)/V(err) 的幅频和相频曲线。0dB 交叉点对应的相位如果离 -180° 还有 57°那就说明设计达标。5.3 仿真结果解读与参数微调正常情况下你会看到增益曲线在低频以 -20dB/dec 左右下降在 5kHz 和 6kHz 附近变得平缓大约 30kHz 处穿过 0dB。相位曲线在穿越点附近保持在一个相对平缓的位置只要不低于 -125°相位裕度就是合格的。仿真中出现偏差很正常我遇到最多的是两类第一穿越频率偏低了。比如设计 30kHz仿真只有 15kHz。原因是补偿器的增益常数 A 受元件近似影响偏小。解决办法是按比例增大 A也就是调 R2 或 R3让增益曲线整体上移。第二相位裕度比计算值低不少。很多时候是因为 fp1 和 fp2 靠穿越频率太近相位被提前拉下去了。把两个极点往高频推一些或者把两个零点略微下移都能补回来。6. 现场调试排错我踩过的坑6.1 常见问题速查表现象可能原因处理办法输出低频振荡相位裕度过低降低 fc把零点向 LC 谐振点移动带载瞬间电压跌落大带宽不够适当提高 fc增大补偿器增益空载稳定、满载振铃满载时 Q 值变化导致相位更差在满载条件下单独校核 PM0dB 交叉点比设计值高很多补偿增益过大减小 R2/R1 或整体减小 A高频纹波耦合进 COMP第二个极点太远把 fp2 收回到 Fsw/2 附近这张表是我调板子时的“救命清单”每次碰到振荡先按表对号入座至少能省半天时间。6.2 两个很容易被忽略的细节第一个细节是轻载。很多人只在满载时测环路结果轻载一加输出就开始振。原因在于轻载时负载电阻变大LC 回路的 Q 值升高谐振峰更尖相位下降更陡。我现在的习惯是满载、半载、10% 负载各测一次相位裕度全部满足要求才算过关。第二个细节是输出电容的直流偏压特性。MLCC 在直流偏压下实际容量会缩水比如标称 100µF 的电容在 3.3V 偏压下可能只有 60µF。这会让 LC 谐振频率往高处移动和计算值差出 20% 以上。如果仿真和实测对不上先怀疑电容容量再去动补偿参数。6.3 调试思路总结调试环路补偿最忌讳的是一上来就乱换电容电阻。我自己的顺序固定如下先用计算或者仿真确定目标穿越频率和相位裕度再上板实测环路增益曲线。如果 0dB 交叉点和相位裕度都接近目标那就说明功率级建模是对的剩下的只是微调。如果实测和仿真差得远先别调补偿回头检查功率级参数尤其是电感的饱和特性和电容的直流偏压特性。等测试曲线和目标曲线重合度比较高时再去跑负载瞬态观察输出电压恢复波形。相位裕度大约在 50° 到 60° 时瞬态波形会有一个小的过冲但一两拍之内就能收敛。如果看到衰减振荡超过两三拍说明余量还不太够继续往这个方向收。最后再分享一个我自己的习惯不管计算多漂亮每次改完补偿参数我都会先在 LTSpice 里把环路波特图扫一遍确认 0dB 交叉点和相位裕度都在设计范围内再焊板子实测。这个习惯帮我省下的返工时间远比我花在仿真上的那点时间多。电源调试本身就是一个“计算-仿真-实测”反复迭代的过程第一次测出的相位裕度和计算值差个三五度都是很正常的事不用慌按数据说话就行。