
1. 环路补偿到底在补什么搞电源的人迟早会撞上环路稳定性这堵墙。输出电压纹波大、负载一跳变就振荡、上电瞬间过冲得吓人这些问题追到根子上十有八九是环路没调好。而调环路最直观的工具就是伯德图——它把开环传递函数的幅频特性和相频特性画在一张图上让你一眼看出穿越频率在哪、相位裕度够不够。我刚开始做Buck电源那会儿调补偿全靠试。电容电阻换了一轮又一轮示波器上负载跳变的波形还是振铃不断。后来被一位老工程师点醒你连自己系统的伯德图长什么样都不知道怎么知道补偿网络该往哪个方向调这句话让我彻底转向了仿真驱动的设计方法。LTspice做这件事有天然优势。它是免费的模型库丰富AC扫描分析跑得飞快而且可以直接把开关电源的平均模型或者行为级模型搭出来不用等几个小时跑瞬态。更重要的是LTspice能同时把电压模式和电流模式两种控制方式的伯德图放在一张图上对比这对理解两种架构的本质差异帮助极大。这篇文章面向的是已经能搭出基本Buck电路、但对环路补偿还不太有把握的工程师和学生。我会从模型搭建讲起把电压模式和电流模式的功率级传递函数差异、补偿网络设计、LTspice仿真设置、结果解读这几个环节全部串一遍。你跟着做下来应该能独立完成一个Buck电源的环路仿真和补偿设计。2. 为什么选LTspice做环路仿真2.1 开关电源仿真的三条路做Buck电源仿真摆在面前的路大概有三条。第一条是跑瞬态仿真直接把开关管按真实开关动作去仿真看输出电压和电感电流的时域波形。这条路最直观但有个致命问题你要看环路稳定性得跑负载跳变而负载跳变的频率响应信息藏在时域波形里你得反复试不同的补偿参数每次跑完看振铃效率极低。而且开关频率如果是500kHz你要仿真100ms的负载跳变步长至少得设到纳秒级跑一次可能十几分钟。第二条路是用平均模型。把开关管和二极管用受控源替代消除开关纹波只保留低频的包络行为。这样瞬态仿真可以跑得很快而且可以直接做AC扫描。平均模型的核心思想是在一个开关周期内对电压和电流取平均忽略开关频率附近的纹波成分。对于环路稳定性分析来说我们关心的频率范围通常在开关频率的十分之一到五分之一以下平均模型完全够用。第三条路是直接用传递函数建行为级模型。把功率级的传递函数用拉普拉斯表达式写出来用LTspice的Laplace源实现。这条路最抽象但跑AC扫描最快而且方便做参数扫描。我个人的习惯是先用行为级模型快速验证补偿网络的拓扑和参数范围再用平均模型做更接近实际的验证最后如果有必要再用瞬态仿真确认大信号行为。LTspice对这三种方式都支持得很好。2.2 LTspice在AC扫描上的独特优势LTspice的AC分析用起来很顺手。你只需要在电路里放一个AC激励源设置好扫描范围和点数点运行就能出伯德图。而且LTspice的波形查看器可以直接把幅频和相频画在一起右键就能添加游标读出具体数值。更关键的是LTspice支持.step指令做参数扫描。比如你想看补偿电容从1nF到10nF变化时相位裕度怎么变只需要一行.step指令LTspice会自动跑多次AC分析把所有曲线叠在一张图上。这个功能在调补偿的时候太有用了你能直观看到每个元件对环路的影响趋势。另外LTspice的表达式功能也很强。你可以直接在波形查看器里输入公式比如用-180ph(V(out))来计算相位裕度或者用mag(V(out))来读增益。这些表达式可以保存成.plot指令下次打开自动显示。2.3 电压模式与电流模式的本质差异在动手搭模型之前得先把两种控制模式的差异搞清楚。这不是学术问题而是直接决定你补偿网络怎么设计的关键。电压模式控制是最经典的架构。误差放大器输出一个控制电压这个电压和锯齿波比较产生PWM信号去驱动开关管。功率级的传递函数是一个二阶系统有两个极点一个由输出电容和负载电阻决定另一个由电感、输出电容和负载电阻共同决定。这两个极点通常靠得比较近在穿越频率附近贡献接近180度的相位延迟。再加上LC滤波器的双极点特性电压模式的相位在谐振频率之后掉得很快。所以电压模式的补偿网络通常需要两个零点来把相位抬起来典型的就是Type III补偿。电流模式控制则完全不同。它把电感电流信息引入到控制环路里内环是一个电流环外环是电压环。这样做的好处是电感不再是一个独立的储能元件而是变成了一个受控电流源。功率级的传递函数从二阶降为一阶只剩下输出电容和负载电阻决定的主极点。相位延迟大大减小补偿网络只需要一个零点就够了典型的就是Type II补偿。但电流模式也有自己的问题。当占空比超过50%时电流环会出现次谐波振荡需要加斜坡补偿。而且电流模式对电感电流的采样有噪声敏感性问题在轻载时尤其明显。这两种模式的差异在伯德图上表现得非常清楚。电压模式的幅频曲线在谐振频率处有一个尖峰然后以-40dB/dec的斜率下降电流模式则是一条平滑的-20dB/dec线。相位曲线更是天差地别电压模式在谐振频率后迅速掉到-180度附近电流模式则平缓得多。3. 搭建Buck功率级的平均模型3.1 平均模型的核心思路在LTspice里搭Buck的平均模型核心是用受控源替代开关管和二极管。具体来说开关管用一个受控电压源或者受控电流源来模拟二极管的续流行为也用受控源来等效。最常用的方法是PWM开关模型。这个模型把开关管和二极管打包成一个三端网络用占空比d作为控制量。输入端的电流等于输出端电流乘以d输出端的电压等于输入端电压乘以d。这样就把一个非线性开关网络变成了一个线性时变网络在AC分析时可以进一步线性化。在LTspice里实现这个模型可以用behavioral voltage source和current source。比如用一个电压源B1其电压表达式为V(in)*V(d)其中V(d)是占空比控制信号。再用一个电流源B2其电流表达式为I(L)*V(d)。这样就把开关网络的平均行为描述出来了。但要注意AC分析要求电路是线性的。所以占空比控制信号在AC分析时应该是一个直流工作点加上一个小信号扰动。LTspice的AC分析会自动在直流工作点附近线性化所以你只需要保证直流工作点正确即可。3.2 关键参数的计算与设置搭模型之前先把Buck的主电路参数定下来。我以一个典型的设计为例输入电压12V输出电压3.3V最大负载电流5A开关频率500kHz。电感的选择要考虑纹波电流。一般取纹波电流为负载电流的20%到40%。我取30%即1.5A。电感量计算公式为L (Vin - Vout) * D / (fsw * ΔIL)其中D Vout / Vin 3.3 / 12 0.275。代入得L (12 - 3.3) * 0.275 / (500e3 * 1.5) 8.7 * 0.275 / 750e3 2.3925 / 750e3 ≈ 3.19μH取标准值3.3μH。输出电容的选择要考虑输出电压纹波。纹波主要由电容的ESR和容值决定。假设允许纹波为输出电压的1%即33mV。电容的容值计算公式为Cout ΔIL / (8 * fsw * ΔVout)代入得Cout 1.5 / (8 * 500e3 * 0.033) 1.5 / 132000 ≈ 11.36μF考虑到ESR的影响实际取22μF的陶瓷电容ESR约2mΩ。负载电阻在最大负载时R 3.3 / 5 0.66Ω。这些参数在LTspice里设置好之后就可以开始搭平均模型了。3.3 在LTspice中实现平均模型打开LTspice新建一个原理图。先从放置元件开始。放置一个电压源V1作为输入设置为12V直流。放置一个电感L1值设为3.3μH串联电阻设为10mΩ。放置一个电容C1值设为22μF串联电阻设为2mΩ串联电感设为1nH。放置一个电阻R1作为负载值设为0.66Ω。接下来是核心部分PWM开关网络。放置一个behavioral voltage source命名为B1。其正端接输入电压正端负端悬空。电压表达式设为V(in)*V(d)其中V(d)是占空比控制电压。再放置一个behavioral current source命名为B2接在输出端和地之间电流表达式设为I(L1)*V(d)。但这样还不够因为AC分析需要一个小信号注入点。通常我们在占空比控制信号上叠加一个AC小信号。具体做法是用一个电压源Vd作为占空比控制设置DC值为0.275AC值为1。然后把这个电压源串联到PWM比较器的输入端。更简单的做法是直接用LTspice的average model库。LTspice自带一些平均模型元件比如Average Model of Buck之类的。但自带的模型可能不够灵活我更喜欢自己搭。自己搭的时候关键是要保证直流工作点正确。你可以先跑一个.op分析看看输出电压是不是3.3V。如果不是调整占空比控制电压的DC值直到输出正确。3.4 电压模式与电流模式的模型差异电压模式和电流模式的平均模型在功率级部分是一样的区别在于控制环路的建模。电压模式的控制环路很简单误差放大器输出直接就是占空比控制信号。所以在模型里你只需要把误差放大器的输出接到PWM比较器的输入即可。PWM比较器的增益通常设为1/Vramp其中Vramp是锯齿波的峰峰值一般取1V到2V。电流模式则复杂一些。它有一个内环电流环和一个外环电压环。内环的建模可以用一个受控源来实现电感电流的采样信号和误差放大器输出比较产生占空比控制信号。在平均模型里这通常用一个跨导放大器来实现其跨导等于1/Ri其中Ri是电流采样电阻。在LTspice里实现电流模式可以用一个behavioral current source来模拟电流环。具体来说误差放大器的输出电压Vc除以采样电阻Ri得到电感电流的参考值。这个参考值和实际电感电流的差值经过一个增益环节产生占空比控制信号。但这样搭出来的模型在AC分析时可能会遇到收敛问题。一个更稳妥的做法是用LTspice的Average Current Mode Control模型或者直接用传递函数来建。4. 补偿网络的设计与仿真4.1 电压模式的Type III补偿电压模式的功率级传递函数有两个极点所以补偿网络需要两个零点来把相位抬起来。Type III补偿网络就是干这个的。Type III补偿网络的传递函数为Gc(s) - (1 s/ωz1) * (1 s/ωz2) / (s/ωp0 * (1 s/ωp1) * (1 s/ωp2))其中ωz1和ωz2是两个零点ωp0是原点极点ωp1和ωp2是两个高频极点。设计步骤是这样的先确定穿越频率fc一般取开关频率的1/10到1/5我取50kHz。然后计算功率级在fc处的增益和相位。假设功率级在fc处的增益为-20dB相位为-150度。那么补偿网络需要在fc处提供20dB的增益和60度的相位提升才能保证相位裕度为60度。Type III补偿网络的两个零点通常放在功率级谐振频率附近两个高频极点放在开关频率的一半附近。具体计算这里不展开LTspice可以帮你自动优化。在LTspice里搭Type III补偿网络用运放加电阻电容实现。运放可以用LTspice自带的UniversalOpamp2增益设为100dB带宽设为10MHz。电阻电容的值根据计算结果设置。4.2 电流模式的Type II补偿电流模式的功率级只有一个主极点所以补偿网络只需要一个零点。Type II补偿网络就够了。Type II补偿网络的传递函数为Gc(s) - (1 s/ωz) / (s/ωp0 * (1 s/ωp1))设计更简单零点放在主极点附近高频极点放在开关频率一半附近。穿越频率同样取50kHz。在LTspice里搭Type II补偿网络用一个运放加一个电阻和两个电容即可。4.3 LTspice AC扫描设置补偿网络搭好之后就可以跑AC扫描了。在LTspice里AC扫描的设置很简单在菜单里选Simulate - Edit Simulation Cmd然后选AC Analysis。设置扫描类型为Decade点数设为100起始频率设为10Hz终止频率设为1MHz。但要注意AC分析需要电路有正确的直流工作点。所以在跑AC之前先跑一个.op分析确认所有节点的直流电压都正确。如果直流工作点不对AC分析的结果会完全错误。另外AC分析时你需要一个AC激励源。通常我们在误差放大器的输入端加一个AC小信号源幅值设为1相位设为0。这样AC分析的结果就是整个环路的传递函数。LTspice的AC分析结果会自动画成伯德图。你可以右键点击波形选择Add Plot来添加相位曲线。或者直接用表达式mag(V(out))和ph(V(out))。4.4 仿真结果解读与相位裕度计算跑完AC分析你会看到两条曲线幅频曲线和相频曲线。幅频曲线是增益随频率的变化相频曲线是相位随频率的变化。穿越频率是幅频曲线穿过0dB的频率点。在这个频率上读出相频曲线的值然后计算相位裕度PM 180 phase。如果phase是-120度那么PM 60度。相位裕度一般要求大于45度最好在60度左右。如果相位裕度不够你需要调整补偿网络的零点位置或者增益。在LTspice里你可以用游标直接读出穿越频率和相位值。右键点击波形选择Cursor然后拖动游标到0dB点读出对应的频率和相位。更自动化的方法是写一个.measure指令。比如.measure AC fc WHEN mag(V(out))1 .measure AC phase_at_fc FIND ph(V(out)) ATfc .measure AC pm PARAM 180 phase_at_fc这样LTspice会自动计算穿越频率和相位裕度并在日志里显示。5. 两种模式的对比与常见问题5.1 伯德图对比电压模式 vs 电流模式把两种模式的伯德图画在一起差异非常明显。电压模式的幅频曲线在谐振频率处有一个尖峰然后以-40dB/dec的斜率下降。相位曲线在谐振频率后迅速掉到-180度附近。补偿后的曲线在穿越频率处相位裕度约60度但高频段相位掉得很快。电流模式的幅频曲线是一条平滑的-20dB/dec线没有尖峰。相位曲线平缓得多补偿后的曲线在整个频段内相位裕度都比较好。这意味着电流模式的环路更稳定对元件变化的容忍度更高。但电流模式也有代价它需要斜坡补偿而且对电流采样噪声敏感。5.2 常见问题与排查技巧问题一AC分析结果完全不对增益曲线是一条直线。这通常是直流工作点不对。检查所有节点的直流电压特别是误差放大器的输出。如果误差放大器饱和了AC分析就没有意义。解决办法是先跑.op分析确认工作点。问题二相位裕度够但负载跳变时还是振荡。这可能是大信号问题不是小信号稳定性问题。检查电感是否饱和检查输出电容的ESR是否太大检查斜坡补偿是否足够。问题三电流模式在占空比大于50%时振荡。这是次谐波振荡需要加斜坡补偿。斜坡补偿的斜率一般取电感电流下降斜率的一半。在LTspice里可以在电流环里加一个额外的斜坡电压源来模拟。问题四LTspice跑AC分析时提示Singular matrix错误。这通常是电路里有悬空节点或者短路回路。检查所有节点的连接特别是behavioral source的表达式是否正确。问题五仿真结果和实测差很多。这通常是模型不够准确。检查电感的串联电阻、电容的ESR和ESL、运放的带宽和压摆率。这些寄生参数在高频段影响很大。5.3 实操心得与避坑指南第一个心得先用行为级模型快速迭代再用平均模型验证。行为级模型跑一次AC只要几秒钟平均模型可能要几十秒。先用行为级模型把补偿网络的拓扑和参数范围定下来再用平均模型做精细调整。第二个心得AC分析之前一定要跑.op分析。我踩过好几次坑AC分析结果完全不对查了半天发现是运放饱和了。现在养成了习惯每次改完电路先跑.op。第三个心得用.step指令做参数扫描。调补偿的时候不要一个一个值试用.step指令让LTspice自动跑。比如.step param Cc 1n 10n 1nLTspice会自动跑10次把所有曲线叠在一起。你一眼就能看出趋势。第四个心得注意LTspice的AC分析是在直流工作点附近线性化的。如果电路里有非线性元件比如二极管或者开关管AC分析的结果只在工作点附近有效。所以平均模型比开关模型更适合做AC分析。第五个心得相位裕度不是越高越好。相位裕度太高系统响应慢太低系统振荡。一般取60度左右比较平衡。如果要求快速响应可以取45度到50度如果要求高稳定性可以取70度到80度。6. 从仿真到实测的过渡仿真跑通了不代表实际电路就能稳定工作。从仿真到实测还有几个坑要填。第一个坑是元件容差。仿真里电容是22μF实际可能是20μF到24μF。电感是3.3μH实际可能是3.0μH到3.6μH。这些容差会影响穿越频率和相位裕度。解决办法是在仿真里做蒙特卡洛分析看看最坏情况下相位裕度还有多少。第二个坑是寄生参数。仿真里电感的串联电阻是10mΩ实际可能是20mΩ到50mΩ。电容的ESR是2mΩ实际可能是5mΩ到10mΩ。这些寄生参数在高频段影响很大。解决办法是在仿真里把这些寄生参数设得保守一些。第三个坑是PCB布局。仿真里所有连线都是理想的实际PCB上有走线电感和电阻。特别是电流采样路径走线电感会引入噪声。解决办法是在仿真里加一些小的串联电感来模拟走线。第四个坑是温度漂移。仿真是在室温下跑的实际电路可能在-40度到85度工作。电容的容值随温度变化运放的带宽随温度变化。解决办法是在仿真里做温度扫描看看极端温度下相位裕度还有多少。我个人的经验是仿真结果和实测结果能对上80%就不错了。剩下的20%靠经验去补。但仿真能帮你把大方向定下来避免犯低级错误。没有仿真的话你连往哪个方向调都不知道。最后分享一个实用技巧在LTspice里你可以把补偿网络的元件值设成变量然后用.meas指令自动计算相位裕度。跑完参数扫描后LTspice会在日志里列出每个参数对应的相位裕度。你直接找最大的那个就行。这个技巧能帮你快速找到最优的补偿参数。