☰
基于LTspice的Buck电源环路稳定性仿真与补偿设计
2026/9/27 20:58:32 网站建设 项目流程

做电源设计,环路稳定性永远是绕不开的那道坎。Buck电路谁都会搭,输出电压也都能算出来,可真到动态负载、上电启动这些工况,环路一旦不稳定,输出就是持续振铃,甚至啸叫、炸管。LTspice是我用来干这件事的主力工具:它免费、轻量、仿真速度快,关键是能直接把跨导放大器传递函数、功率级传递函数、反馈网络串在一起,用波特图调试出真实的环路行为。这篇我会从零开始,手把手带你在LTspice里搭一个同步Buck的平均模型,测功率级传递函数,再搭跨导放大器补偿网络,最后用断点注入法扫出完整环路的波特图,一步步判断穿越频率和相位裕量。

这篇内容适合刚接触电源环路仿真的工程师,也适合在学校里学过Buck原理但对小信号分析“只听过没见过”的同学。整个过程用到的都是LTspice自带的基础元件,不需要额外装库,你把原理图搭起来跑一遍,比光看公式印象深得多。

1. 动手之前,先理清环路里在传什么东西

1.1 一个Buck反馈环路,拆开就是三个模块

闭环Buck的结构看上去五花八门,但从传递函数的角度拆开,其实永远是三块串联:功率级、误差放大器(补偿网络)、反馈分压网络。

功率级就是功率管、电感、电容组成的降压部分,它接收占空比信号,输出稳定的直流电压。误差放大器则是环路的“大脑”,它把输出电压的分压值与基准电压作比较,输出一个控制信号去修正占空比。反馈分压网络最简单,通常就是两个电阻,它决定了输出电压的设定点。

控制流程是这样的:输出Vout变高,反馈分压点Vfb就变高;误差放大器检测到Vfb偏离了Vref,就调整它的输出电压Vc;Vc再通过PWM调制器改变占空比,最终把Vout拉回目标值。这个循环里每一段都是频率的函数,所以整个环路的开环增益也是频率的函数。我们说的“环路稳定不稳定”,本质上就是看这个频率函数的增益和相位在穿越0dB时的表现。

注意:Buck的功率级从占空比到输出,直流增益高、相位特性差,双极点会让相位在谐振频率附近暴跌,如果不做补偿,闭环后大概率是振荡的。

1.2 为什么AC波特图必须用平均模型,不能直接上开关模型

很多新手第一次想做Buck环路仿真,直接在LTspice里摆一个开关管、一个续流二极管、一个电感电容,然后打开AC分析,结果发现扫描出来的曲线乱七八糟,甚至根本没法看。

原因很简单:LTspice的AC小信号分析是基于线性时不变电路的,它会先求直流工作点,再在直流工作点附近做线性化,然后逐个频率点计算幅相响应。而真实的开关管、二极管、PWM比较器都是强非线性器件,工作点在每个开关周期里都在大幅跳变,AC分析根本没法在这种模型上做线性化。开关模型只适合做tran瞬态仿真,看波形、看纹波、看损耗。

所以要做传递函数、波特图,必须用平均模型。平均模型的核心思想是忽略开关频率附近的纹波细节,只保留占空比到输出电压的小信号平均关系。Buck在连续导通模式下的平均行为非常规整:开关节点电压的平均值等于占空比乘以输入电压,后面就是一个LC滤波器。

这个平均模型在LTspice里用一个受控电压源就能搭出来,下面我们直接上手。

2. 功率级建模:搭一个Buck平均模型并测传递函数

2.1 用行为源B1搭出平均功率级

打开LTspice,新建原理图(File -> New Schematic),往里面放这些元件:

  • B1:behavioral voltage source,这是核心,用来模拟“开关节点平均电压 = 占空比 × 输入电压”。
  • L1:电感,33µH。
  • C1:电容,220µF,ESR设置为10mΩ。
  • R1:负载电阻,5Ω,对应5V/1A的输出。

电路连接方式:B1的正端输出接到节点sw,负端接地。sw节点经过L1接到输出节点out,out经过C1(带串联ESR)到地,out也经过R1到地。

B1的表达式是关键,右键B1,在Value一栏输入:

min(max(V(vb),0),1)*12

这个表达式的意思很直白:把B1输出节点的电压钳位在0到1之间,再乘以输入电压12V,模拟占空比到开关节点平均电压的换算。V(vb)就是占空比控制信号,后面我们会在vb节点注入小信号或者接补偿网络的输出。

电容ESR的设置也提醒一下:直接在C1符号上右键,在“Series Resistance”一栏填10m即可。这个ESR会带来一个高频零点,对环路稳定性影响很大,实测中绝对不能忽略。

把节点标好名字:sw、out、vb。给导线命名的方式是选中导线,右键->Label Net,或者直接用F4快捷键放置网络标签。

2.2 用AC扫描看功率级波特图,找到LC双极点和ESR零点

现在先单独测功率级传递函数。在vb节点接一个普通电压源V2,直流值设为0.4167,交流小信号幅值(small signal AC analysis amplitude)设为1。0.4167是5V输出的理论占空比(5/12),这样工作点就落在比较合理的位置。

放一个AC扫描指令,快捷键S,输入:

.ac oct 50 10 1Meg

意思是10Hz到1MHz,每倍频程50个点。运行后,点V(out)节点看波形,LTspice会同时显示增益和相位。正常情况下,你会看到典型Buck功率级传递函数的形状:低频段一条平线,约21.6dB(对应12V增益),在LC谐振频率附近出现一个明显的谐振峰,然后以-40dB/dec斜率下降,在高频段因为ESR零点又回缓到-20dB/dec。

LC谐振频率可以先用公式算一遍验证仿真:

FLC = 1 / (2π√(LC)) = 1 / (2π√(33µH × 220µF)) ≈ 1.87kHz

品质因数Q大约是:

Q = R√(C/L) = 5 × √(220µ / 33µ) ≈ 12.9

所以这个谐振峰会很高,幅值上大概能冲高到21.6dB + 20log(Q) ≈ 43dB。在仿真结果里如果看到这个峰,说明你的平均模型搭对了。

ESR零点频率是:

Fz = 1 / (2π × ESR × C) = 1 / (2π × 0.01 × 220µ) ≈ 72kHz

在这个频率之后,增益斜率明显变缓。这两个关键频率点就是后续设计补偿网络的重要坐标。

3. 跨导放大器补偿网络:理解gm到Type-II的传递函数

3.1 芯片内部常见的跨导放大器到底在干嘛

很多Buck芯片内部的误差放大器并不是普通运放,而是一个跨导放大器(OTA)。普通运放输出的是电压,跨导放大器输出的是电流,电流大小等于跨导gm乘以两个输入端的电压差。这个电流对外部补偿网络充电,从而在补偿网络上建立起控制电压。

记公式就是:

Iout = gm × (Vref - Vfb)

跨导放大器的好处是输出端是高阻态,补偿网络可以独立接在输出端和地之间,用极少数量的阻容元件就能实现积分、零点、极点,非常适合芯片内部集成。这就是为什么Type-II补偿在网络拓扑上看起来和普通运放不太一样:电容不再是跨接在反相输入端和输出端之间,而是从OTA输出端到地。对应到小信号传递函数,输出控制电压对误差电压的增益是:

Gc(s) = gm × Zc(s)

其中Zc(s)是OTA输出端补偿网络的阻抗。我们常说的Type-II补偿,在OTA形式下就是一条Rz、Cz串联支路,再并联一个很小的Cp:

Zc(s) = (Rz + 1/sCz) || (1/sCp)

这个网络的低频段是个积分器,直流增益趋于无穷大,保证输出电压无静差。中频段增益约等于gm × Rz,这是补偿器最核心的增益段,决定了穿越频率。高频段由Cp提供一个极点,用来压制开关噪声。

3.2 在LTspice里搭OTA补偿器并验证波特图

我们把OTA用行为电流源B2实现。在原理图上放置第二个行为源,右键把它设成电流源输出,表达式写:

I=1m*(V(ref)-V(fb))

这里的1m就是gm=1mS(1mA/V)。正常来说,一个1mS的跨导放大器和几十kΩ的补偿网络搭配,输出电压范围在几伏量级,电流消耗只有几十微安,很符合芯片内部的实际设计。

接着放元件:

  • Vref:直流1.25V,接到ref节点,作为OTA正相输入。
  • Rz:20kΩ。
  • Cz:1nF。
  • Cp:100pF。

接法:B2的正端接到vc节点,负端接地;vc节点接Rz与Cz的串联支路到地,再并一个大电阻?不用,OTA电流源+积分电容本身就是直流开路,不需要额外大电阻稳定工作点。Cp从vc到地。

为了单独验证补偿器的传递函数,把fb节点(OTA反相端)经过一个交流源Vtest接地:Vtest直流0V、交流AC振幅1V。这里要注意,实际闭环中fb点是由反馈分压驱动的,但在分段测量时我们用一个电压源直接驱动fb,目的是把“误差电压”当作激励。因为反相结构,测出的V(vc)/V(vtest)应该是一个带负号的响应。plot时直接看V(vc)就行。

再放一个AC扫描指令,跑10Hz到1MHz。你会看到补偿器典型波特图:低频段-20dB/dec斜线下降,说明是积分特性;中频段出现平台,增益约等于gm × Rz = 20倍即26dB;在约8kHz附近出现零点,相位从-90°开始往上抬;最后在约80kHz出现极点,相位重新回落。

补偿器的零点、极点位置可以手动算一遍:

Fz = 1 / (2π × Rz × Cz) = 1 / (2π × 20k × 1n) ≈ 7.96kHz

Fp = 1 / (2π × Rz × Cp) = 1 / (2π × 20k × 100p) ≈ 79.6kHz

你可以在波特图上实测这个零点和极点,和公式基本吻合。到这里,你已经完成了环路分析里最难啃的“跨导放大器传递函数”部分:它就是一个gm乘上补偿网络阻抗的简单函数。

4. 闭环环路增益测量与波特图调试

4.1 断点注入法:在LTspice里测真实环路增益T

分段测完功率级和补偿器之后,把它们连成闭环模型,然后需要直接测整个开环增益T(s)的波特图。理论上T(s)=Gc(s)×Gvd(s)×H(s),但如果你手动把三段曲线叠乘,既麻烦又容易出错。更直接的办法是断点注入法。

断点注入法的思路是在环路里找一个点,把环路断开,插入一个交流小信号源,然后看信号绕环路一圈回来后与注入信号的比例。实际操作如下:

在vc节点(OTA/补偿网络输出)和功率级输入vb节点之间,串入一个电压源Vtest。Vtest的直流值设为0,交流AC振幅设为1。连接方向:Vtest正端接vb,负端接va,其中va就是原vc节点。这样直流状态下Vtest相当于一根导线,环路工作点完全不变;交流状态下,Vtest就是一个振幅为1的扰动注入。

把va、vb两个节点都通过网络标签标出来。接下来放AC扫描指令,跑出结果后,在波形窗口添加表达式:

-V(va)/V(vb)

添加表达式的方法是在波形窗口空白处右键 -> Add Trace,然后手动输入。加负号是为了把负反馈环路带来的180°移相“翻转”回来,这样测出的相位就直接对应经典开环增益相频响应,判断相位裕量更方便。

为什么这个表达式就是环路增益T?简单推导一下:设功率级和反馈网络的乘积为T,那么从va到vb这一段传输会满足va/vb = -T。因为va是误差放大器输出,vb是功率级输入,两者之间隔着补偿网络本身的正向增益和反馈分压网络的反向传输,本质上就是整个环路的开环增益,而负号来自负反馈配置。所以-V(va)/V(vb)就是T的复数值,它的对数幅频曲线就是环路增益的幅频曲线。

4.2 完整闭环模型接线和参数

把之前各单位连接成一个完整回路,注意几点:

  • Vref的1.25V接到OTA正相输入ref。
  • 输出节点out通过R1(49.9kΩ)接到fb节点,fb节点通过R2(16.2kΩ)接地。
  • fb节点接到OTA反相输入。
  • OTA输出vc经过断点注入结构的va、Vtest、vb后接到功率级B1的控制输入。
  • B1输出就是sw节点,经过电感电容到out。

反馈分压比算一下:H = R2/(R1+R2) = 16.2/(49.9+16.2) ≈ 0.245。

稳态输出电压理论上就是:Vout = Vref × (1 + R1/R2) = 1.25 × (1 + 49.9/16.2) ≈ 5V。这个值配合占空比0.417,就是前面设定的工作点。

跑AC扫描后,观察-V(va)/V(vb)的幅频和相频。理论上整个环路的转折点应该能同时看到补偿器的零点、功率级的LC双极点、ESR零点、补偿器的极点。

穿越频率就在增益曲线穿过0dB的那个点。你可以把鼠标移到曲线上,用光标功能(Ctrl+点击曲线)精确读数。这里预设参数下,穿越频率会落在15kHz左右,相位裕量大约50°到60°,这是一个相当健康的环路响应。

4.3 怎么看相位裕量和增益裕量,标准是多少

相位裕量是在穿越频率处,相频曲线距离-180°还有多少度。这个指标直接决定了闭环系统对参数摄动和延迟的容忍度。工程上常用标准:

  • 相位裕量低于30°,系统在负载突变或参数漂移时很容易振荡。
  • 45°到60°是大多数电源设计的理想范围,兼顾稳定性和响应速度。
  • 相位裕量大于75°,稳定性极好但动态响应偏慢,输出恢复时间长。

增益裕量同样重要,它是指相位达到-180°时,增益距离0dB还有多少dB。一般要求至少6dB以上。在波特图里检查这两个值,是“调试”的核心工作。

经验法则:穿越频率一般取开关频率的1/20~1/10。对200kHz的Buck来说,10kHz~20kHz是合理的穿越区间。如果你扫出来穿越频率到了50kHz,哪怕相位裕量看着还行,也要警惕高频噪声和环路延迟。

4.4 参数调整实战:从振荡到稳定的完整过程

有了闭环仿真模型,调试就变得非常快。我举两个我自己实测下来很典型的案例,你完全可以照着试。

案例一:Cz太小导致相位裕量崩掉

把Cz从1nF改成100pF,Cz的零点从8kHz升高到80kHz,等于零点跑到了穿越频率之外。你会发现环路增益的幅频曲线低频段被抬高,穿越频率右移,而相位在穿越频率处反而更差——因为补偿零点还没来得及提供相位提升。仿真出来相位裕量可能只有20°左右。这种环路如果想当然上板,轻载或者动态负载下就会看到输出振荡。在LTspice里把这个现象look一眼,比实际焊板听啸叫高效一百倍。

案例二:Rz提高增益导致带宽过大

把Rz从20k改成39k,中频增益提升约5.8dB。穿越频率会从15kHz上移到25kHz甚至更高。看起来响应更快了,但相位裕量会明显下滑,因为功率级相位在高频段越来越接近-180°。这就是“增益不能随便加”的教训,波特图能把它可视化成很直观的曲线。

如果还想把相位裕量调回来,正确做法是适当调大Cz,让零点左移,更早地开始补相位,而不是盲目压低增益。

调试结束后,别忘了用瞬态仿真做一次验证。把Vtest去掉(或者保留但DC=0不影响),放一个tran指令:

.tran 5m

在输出端并一个脉冲电流源,例如从0到1A,持续0.5ms再跳回0。如果环路相位裕量充足,输出扰动的振铃很快衰减;如果相位裕量很低,你会看到持续好几个周期的振荡波。时域波形和波特图的对应关系,是判断你调试是否正确的最终标准。

5. 常见问题与排查技巧实录

5.1 我踩过的一些坑:AC全为零、unknown schematic syntax、不收敛

AC扫描结果全是一条水平直线或者全是0

八成是激励源没有设置AC振幅。在LTspice里,普通电压源默认的“Small signal AC analysis amplitude”是空的,你必须在电压源属性里填上1,AC扫描才会有输入。另一个常见原因是B源表达式里引用错了节点名,比如节点标签没有生效。建议确认节点名有没有正确加上,表达式里的大小写和花括号语法都要一致。

报错“unknown schematic syntax”

这通常和我的自定义表达式有关。常见原因有:用了中文标点、括号不匹配、单位写错。比如你写1m*(V(ref)-V(fb))没问题,但写成1m*(V(ref)-V(fb))用了中文括号,LTspice立刻翻脸。解决办法是把表达式复制到纯文本编辑器里,肉眼检查一遍所有符号是不是英文半角。

瞬态仿真的“Timestep too small”

平均模型一般很少报这个错,如果报了,先看一下是不是有理想开关模型混进来了,或者电路里有死循环的低阻抗回路。我的经验是减小最大步长,例如.tran 0 5m 0 1u,或者在Control Panel->SPICE里把积分方法改成Gear。平均模型下如果还收敛不了,把B源的输出电压范围钳位好,也能大幅提升收敛性。

5.2 让效率翻倍的几个LTspice技巧

用.step命令一次性看多个参数

比如想对比Cz=1n和Cz=100p两种补偿参数,在Cz电容的Value里写{Cz},再放一条指令:

.step param Cz list 1n 100p

运行AC扫描,两条不同颜色的曲线会同时显示。这种参数扫描对调试补偿网络非常实用,可以直观看到零点移动对相位裕量的影响。

波形窗口里读穿越频率和相位裕量

在幅频曲线穿过0dB的地方,用光标点一下,对应的相位曲线数值就是相位裕量的关键信息。LTspide的相位曲线默认可能会在±180°之间跳变,这不影响你的判断:只要看穿越频率处相位离-180°多远即可。想更精确的话,可以把AC数据导出为文本,用其他工具做unwrap处理。

关于“保存文件后多出好几个文件”

这是LTspice正常现象,它运行后会生成.raw、.log、.net等文件,和你的.asc原理图文件放在一起。.asc才是你的电路源文件,其他都是可再生的中间产物,不用管,定期手动删掉就行。LTspice菜单里也有清空运行数据的按钮,点一下就能把临时文件清走。

一点个人体会

我在实际做电源项目时,基本流程都是先用LTspice平均模型把环路推一遍,确认穿越频率和相位裕量达标,再用开关级模型做瞬态验证,最后才画板。这套流程帮我避免了至少四五次“板子回来就炸”的尴尬。环路稳定性这件事,最怕的就是靠感觉猜。而波特图调试的核心就三件事:看穿越频率够不够合理,看相位裕量够不够大,看增益裕量有没有余量。只要这三项都有数,电源的动态性能基本不会出大问题。这篇模型你现在搭出来,后面换电容电感、改输出电压,都只需要改几个参数重跑一遍就行,属于一次投入长期受益。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询