做电源这行的人,早晚会撞上Boost电路的小信号建模这道坎。最早我刚接手一个24V升压模块的时候,想法特别朴素——不就是把电感、开关管、二极管、电容按拓扑摆好,让输出电压对得上公式就行了吗。结果板子一上电,负载跃变时输出软绵绵地摆几下才稳住,补偿网络怎么调都别扭,换了几组RC参数不是振荡就是响应慢。后来才明白,问题根本不在器件选型上,而在于我对Boost电路小信号建模的理解一直停留在"看公式"的层面,没有真正搞懂它为什么和Buck长得那么像、脾气却完全不同。这篇东西就是把这些年踩过的坑、翻过的教材、在示波器前死磕出来的经验,一次性整理清楚,聊一聊Boost电路小信号建模分析到底该怎么做,适合刚入门开关电源的硬件工程师、做环路补偿的电源设计者,以及仿真和理论对不上时抓耳挠腮的朋友。
1. Boost电路为什么必须做小信号建模
1.1 大信号算得对,闭环却稳不住
很多人第一次做Boost,都会先用理想稳态公式算出占空比。以12V升到24V为例,D = 1 - Vin/Vout = 0.5,电感按纹波电流选,电容按纹波电压选,看起来一切都有据可依。可这些公式只描述的是稳态或者大信号层面的平均关系,它告诉你"工作点在哪里",却不告诉你"系统在被扰动后能不能自己走回来"。
开关电源本质上是一个带反馈的强非线性系统。开关管每秒钟开合几十万次,电路在两个完全不同的线性状态之间反复横跳。你想用经典的线性控制理论去设计补偿器,就必须先把这种周期切换的行为,等效成一个连续的、线性的模型——这就是小信号建模存在的意义。它把"开关动作"平均掉,只保留低频的扰动传递关系,让你能画出伯德图、算相位裕度。
我个人的判断是:只要你的变换器带闭环,小信号建模就不是可做可不做的选修课,而是必修课。开环测试能过,闭环炸掉的案例,我见过太多次,绝大多数都是因为跳过了这一步,凭感觉试参数。
1.2 右半平面零点:Boost最扎人的地方
Buck和Boost的拓扑图看着只是把电感电容换了个位置,但小信号特性差得远。最核心的区别,就是Boost的控制到输出传递函数里藏了一个右半平面零点(RHP zero)。
右半平面零点这个东西的阴险之处在于:它不改变幅频特性(幅值该多大还是多大),却额外贡献相位滞后。也就是说,当你想通过提高增益来加快响应时,相位裕度反而被这个零点偷偷吃掉,系统比相频特性看上去的更不稳定。
注意:RHP零点带来的相位滞后是"物理性"的,没法靠补偿网络抵消。你能做的只有躲——把穿越频率压到远低于零点频率的位置。
从物理上理解,Boost的能量是先存进电感、再送到输出。当你增大占空比想让输出升高时,开关导通时间变长,意味着二极管导通时间变短,短时间内送到输出端的能量反而减少了,输出电压先往下掉一下,之后才回升。这个"先反后正"的动态,数学上就表现为右半平面零点。理解这一点,比记住公式更重要,因为它决定了你的补偿策略的天花板在哪里。
1.3 建模要回答的几个实际问题
我在实际项目里,小信号建模主要用来回答下面几件事,你可以对照自己的需求看看:
- 控制到输出的传递函数 Gvd(s) 长什么样,直流增益、双极点频率、品质因数、RHP零点频率各是多少;
- 输入到输出的音频敏感度 Gvg(s),也就是输入电压波动有多少会串到输出;
- 开环增益穿越频率定在多少合适,相位裕度能不能做到45度以上;
- 补偿器该用PI、Type II还是Type III,零极点怎么摆。
把这些问题回答清楚,补偿网络就不再是靠试凑,而是有明确计算依据的。后面我会用一个完整算例把它走一遍。
2. 状态空间平均法的完整推导思路
2.1 把两个开关状态分别写成状态方程
状态空间平均法是电源建模里最经典、也最经得起推敲的方法。它的核心思想很直白:Boost在一个开关周期里只有两个状态——开关管导通、开关管关断。我们分别把这两个状态的方程写出来,然后按占空比加权平均。
选状态变量为电感电流 iL 和电容电压 vc(也就是输出电压),忽略寄生参数,在连续导通模式(CCM)下:
开关导通(D1截止)时,电感接在输入源上储能,电容单独给负载供电:
L * diL/dt = Vin C * dvc/dt = -vc / R开关关断(D1导通)时,电感通过二极管向输出和负载释放能量:
L * diL/dt = Vin - vc C * dvc/dt = iL - vc / R你会发现,这两个状态的区别无非就是"vc 有没有参与进来"。导通时,输出侧和电感脱开;关断时,电感电流一部分给电容充电、一部分给负载。
2.2 按占空比加权,得到平均模型
设导通时间为 dTs,关断时间为 (1-d)Ts,把上面两组方程分别乘以 d 和 (1-d) 再相加,就得到平均方程:
L * diL/dt = Vin - (1-d) * vc C * dvc/dt = (1-d) * iL - vc / R这一步是整个方法的精髓。这里有个隐含假设必须说清楚:状态变量的纹波要足够小,也就是电感电流和电容电压在一个开关周期内的波动,相对它们的平均值可以忽略。这个条件在CCM、开关频率远高于LC谐振频率时通常成立。如果工作在DCM或者轻载大纹波,这个假设就崩了,得换DCM模型。
提示:状态空间平均法得到的是非线性模型,因为方程里出现了 d 和 vc、d 和 iL 的乘积。要变成线性的,还得做下一步小信号扰动。
2.3 先求静态工作点,这是后面所有分析的基准
在扰动之前,先让导数项为零,求出稳态工作点。把上式左边置零:
Vin - (1-D) * Vc = 0 => Vc = Vin / (1-D) (1-D) * IL - Vc / R = 0 => IL = Vc / (R * (1-D)) = Vin / (R * (1-D)^2)这两个式子就是Boost的稳态关系。以12V升24V、D=0.5、R=24Ω(1A负载)为例:
- 输出电压 Vc = 12 / 0.5 = 24V;
- 电感平均电流 IL = 24 / (24 × 0.5) = 2A。
注意电感电流是负载电流的两倍,因为只有关断期间电感才给输出供电,占空比越大,这个比例越高。很多人算电感电流有效值选器件时忽略这一点,结果电感饱和或者温升超标,这是很典型的坑。
3. 小信号扰动与线性化实操
3.1 分离直流与交流小信号
有了工作点,就能做小信号扰动了。做法是给每个变量加上一个直流分量和一个很小的交流扰动:
d = D + d^ (占空比扰动) iL = IL + iL^ vc = Vc + vc^ Vin = Vin + vin^把这些代回平均方程,展开后会得到三类项:纯直流项、一阶交流项、二阶交流项(两个扰动相乘)。直流项在求工作点时已经处理掉了,二阶项因为扰动本身很小,乘积是二阶小量,直接忽略。剩下的就是一阶线性方程:
L * diL^/dt = vin^ - (1-D) * vc^ + Vc * d^ C * dvc^/dt = (1-D) * iL^ - vc^/R - IL * d^这一步就是线性化。你会发现,原来非线性的乘积项,被拆成了常数系数乘以单个扰动量的形式,系统瞬间变成了线性的,可以上拉普拉斯变换了。
3.2 拉普拉斯变换与传递函数提取
把上面的时域方程做拉普拉斯变换(初始条件为零),得到:
sL * iL^ = vin^ - (1-D) * vc^ + Vc * d^ sC * vc^ = (1-D) * iL^ - vc^/R - IL * d^我们关心的是控制到输出的传递函数 Gvd(s),所以令输入扰动 vin^ = 0,只保留 d^。从第一个式子解出 iL^,再代入第二个式子,整理后得到:
Gvd(s) = [Vc * (1-D) - sL * IL] / [s^2 * LC + s * L/R + (1-D)^2]把 Vc = Vin/(1-D)、IL = Vc/(R(1-D)) 代进去,再按标准二阶形式归一化,就得到Boost的经典控制到输出传递函数:
Gvd(s) = Vin/(1-D)^2 * [1 - s * L/(R(1-D)^2)] / [1 + s * L/(R(1-D)^2) + s^2 * LC/(1-D)^2]这个式子信息量非常大,我建议你不要只把它当成推导结果,而要把它拆成三块来看:直流增益、右半平面零点、双极点。
3.3 一个完整算例,把参数都算出来
还是用前面那组参数,我把它们代进传递函数里,让每个环节都有具体数字:
| 参数 | 数值 | 说明 |
|---|---|---|
| 输入电压 Vin | 12V | 直流输入 |
| 输出电压 Vout | 24V | 目标输出 |
| 负载 R | 24Ω | 约1A负载 |
| 电感 L | 100µH | 按纹波电流选取 |
| 电容 C | 100µF | 按纹波电压选取 |
| 开关频率 fsw | 100kHz | — |
先算直流增益:Gvd(0) = Vin/(1-D)^2 = 12 / 0.25 = 48,换成对数就是 33.6dB。
双极点频率:ω0 = (1-D)/√(LC) = 0.5 / √(100e-6 × 100e-6) = 0.5 / 1e-4 = 5000 rad/s,对应 f0 = 796Hz。
品质因数:Q = R(1-D)√(C/L) = 24 × 0.5 × √(100e-6/100e-6) = 12。这个Q值不算低,说明LC谐振峰比较尖,容易在伯德图800Hz附近拱起一个高包。
右半平面零点:ωz = R(1-D)^2/L = 24 × 0.25 / 100e-6 = 60000 rad/s,对应 fz = 9.55kHz。
有了这三个数字,Boost的频域性格就清楚了:低频段平、800Hz附近有个谐振峰、然后是-40dB/dec的下降段、9.55kHz之后因为RHP零点幅度开始变平但相位继续往下掉。补偿设计的所有决策,都是围绕这三个数字转的。
4. 传递函数与频域特性解析
4.1 双极点决定了谐振区的"脾气"
传递函数分母里的双极点,本质上来自LC这个二阶储能网络。Buck和Boost的分母形式都是二阶,区别只在系数的表达。极点频率 ω0 决定了系统开环增益开始以-40dB/dec下降的位置,品质因数 Q 决定了下降前那个谐振峰有多高。
Q 越大,谐振峰越尖,相位在 ω0 附近掉得越猛——从0度一路掉到-180度。如果补偿器的穿越频率恰好落在这个区域,相位裕度会被吃得干干净净,系统很容易在谐振频率附近振荡。我的习惯是:先看 Q,如果 Q 大于5,就尽量别让增益穿越频率靠近 ω0,要么把带宽压低,要么用补偿器的零点把相位往上顶。
这里还有个实战细节:上面的 Q 公式里带着负载 R,意味着负载越轻(R越大),Q越高,谐振峰越尖。所以Boost在空载或者轻载时最容易啸叫,这不是错觉,是Q值在背后捣鬼。很多模块的相位裕度是按满载设计的,一轻载就不稳,根子就在这里。
4.2 右半平面零点决定了带宽上限
RHP零点的频率 fz = R(1-D)^2/(2πL),从这里能读出好几个工程规律:
- 负载电阻 R 越大(负载越轻),零点频率越高,但相位滞后依然存在,安全起见还是按最重负载来评估;
- 电感 L 越大,零点频率越低,越容易掉进带宽内,所以盲目增大电感来减小纹波会恶化动态;
- 占空比 D 越大(升压比越高),(1-D)^2 越小,零点频率越低。这就是为什么高压升压比的Boost特别难做,同样的电感,零点可能直接压到几kHz,带宽被限得死死的。
注意:工程上普遍的经验是把穿越频率 fc 取到 fz 的 1/3 到 1/5。按上面的算例,fz = 9.55kHz,那 fc 就取 2kHz 到 3kHz 比较稳妥。
这条经验不是拍脑袋。因为RHP零点在 fz 处贡献约-45度相位,在 fz/3 处已经开始明显啃相位了。如果你硬把带宽做高,相位裕度撑不住,响应会伴随一个反向的初始下跌——也就是负载跃变时输出先反方向动一下再回来,这个现象在很多廉价的Boost模块上都能看到。
4.3 音频敏感度:输入端串进来的干扰
除了 Gvd(s),输入到输出的音频敏感度 Gvg(s) 也值得看。它描述的是输入电压的扰动怎么传到输出。在开环下,输入的变化几乎会按比例往输出跑,因为Boost的输出正比于 Vin/(1-D)。闭环之后,这个传递函数会被环路增益压制,压制倍数就是 1/(1+T(s))。
实际意义在于:如果你的输入源本身有低频纹波(比如前级是整流后的母线),而环路增益在那段频率又不够高,输出就会跟着抖。做多级电源的时候,前级的纹波会在后级上以音频敏感度的形式重现,调环路时对着这个曲线看,比盲目加大输出电容有效得多。
5. 环路补偿设计与参数计算
5.1 穿越频率和相位裕度的取舍
补偿设计的第一步,是定穿越频率 fc。前面说了,受RHP零点限制,fc 一般取 fz/3 到 fz/5。取太高,相位裕度不够;取太低,动态响应慢,负载跃变恢复时间拉长。
我通常的做法是按下面的顺序逐步收敛:
- 先算出 fz,定 fc 的粗略上限;
- 看 ω0 和谐振峰 Q,确认 fc 和 ω0 拉开距离,避免落在谐振区;
- 目标相位裕度定在45度到60度,宽输入范围的模块我会留到50度以上;
- 用补偿器的零极点去凑相位。
5.2 补偿器类型怎么选
Boost常用的补偿器有PI和Type II两种。PI只有一个零点(外加原点极点),简单好用;Type II多一个高频极点,能更好地压高频噪声。对于Boost,因为RHP零点本来就限制了带宽,一般不容易被高频噪声困扰,PI往往就够用了。
PI补偿器的传递函数:
Gc(s) = Kp * (1 + ωz_c/s) 或 Gc(s) = (Kp * s + Ki) / s零点放在哪里很关键。经验做法是把补偿零点放在系统双极点频率 ω0 附近,用来补偿谐振峰带来的相位跌落。按算例,ω0 对应796Hz,那补偿零点就放在700Hz到1kHz之间。
5.3 一个可以直接抄的补偿算例
继续用12V升24V这组参数,目标 fc = 3kHz,相位裕度目标55度。
第一步,算开环增益在 fc = 3kHz 处的幅值。这里我先给个工程近似:由于 fc 远高于 f0(796Hz),增益已经进入-40dB/dec下降段,可以按斜率估算。从 ω0 到 fc,频率比是 3000/796 ≈ 3.77,每十倍频程下降40dB,所以:
|Gvd(fc)| ≈ 48 / (3.77^2) ≈ 48 / 14.2 ≈ 3.38 换成dB:20*log10(3.38) ≈ 10.6dB要求穿越时总增益为0dB,所以补偿器在 fc 处要提供大约 -10.6dB 的增益(如果你希望闭环快速响应,也可以让补偿器多推一点,但要在相位裕度允许范围内)。
第二步,摆零点。把补偿零点放在 fz_c ≈ 800Hz(对应 ωz_c = 5027 rad/s),接近系统双极点。这样在 fc 处,补偿器贡献的相位超前大约:
相位超前 = arctan(fc/fz_c) = arctan(3000/800) = arctan(3.75) ≈ 75度单个零点最多贡献90度,75度已经在很理想的区间了。
第三步,算 Kp 和 Ki。PI在 fc 处的幅值:
|Gc(fc)| = sqrt(Kp^2 + (Ki/ωc)^2),ωc = 2π*3000 ≈ 18850 rad/s让这个幅值等于上面算出的目标值(约0.295,即-10.6dB),同时零点位置满足 Ki/Kp = ωz_c = 5027,联立就能解出 Kp 和 Ki。具体数字随你的目标带宽和裕度微调,但方法是确定的——先定零点位置,再定整体增益。
提示:实际调的时候,我会先在仿真里把上面算出的 Kp、Ki 代进去扫一遍伯德图,确认相位裕度和幅值裕度(一般要求幅值裕度大于6dB),再上板子测。仿真和实测通常会有偏差,因为寄生参数(电感的DCR、电容的ESR、开关管导通电阻)都会挪动零极点。
5.4 电容ESR带来的隐藏零点
这里必须单独强调一点:上面所有推导都把电容当成理想元件,但实际电解电容有ESR。ESR会在输出传递函数里额外引入一个零点,频率大约在 1/(2π·ESR·C)。这个零点出现在左半平面,会贡献相位超前,某种程度上反而帮你稳住了系统。
但它是把双刃剑。ESR随温度变化很大(低温时ESR飙升),零点的位置也跟着漂。用铝电解做输出的模块,低温启动时特性会和常温差很多。所以我更倾向于用陶瓷电容并联,把ESR压到很低,让这个零点远高于穿越频率,不参与动态——代价是相位裕度得靠补偿器自己撑,不能指望ESR帮忙。
6. 常见问题与排查技巧实录
6.1 仿真和实测对不上的排查顺序
这是最常被问到的问题:明明仿真跑出来的相位裕度有50度,实测却是振荡的。我总结的排查顺序是这样的:
- 先查寄生参数:电感DCR、电容ESR、开关管和二极管导通压降。尤其是二极管,很多仿真默认理想二极管,实际有正向压降和反向恢复,会明显改变工作点,进而改变占空比和零点频率。
- 再查采样和延时:如果你用的是数字控制,PWM更新延时、ADC采样保持、计算延迟都会引入相位滞后,仿真里如果没建模这几个环节,实测必然比仿真更不稳。数字控制一般要考虑1到1.5个开关周期的延时。
- 最后查工作点漂移:输入电压、负载变化会让 D 变化,而 fz 正比于 (1-D)^2。如果你的仿真只在标称点做,实际工作在最恶劣点时零点可能已经压进带宽了。
6.2 负载跃变时的典型波形怎么看
看负载跃变波形,能读出很多信息。我整理了一个速查表:
| 波形现象 | 可能原因 | 处置方向 |
|---|---|---|
| 输出先反方向动一下再回 | RHP零点效应 | 降低穿越频率 |
| 恢复过程有等幅振荡 | 相位裕度不足 | 减小带宽或调补偿零点 |
| 恢复慢、拖尾长 | 带宽太低或低频增益不足 | 提高低频增益,调整积分项 |
| 轻载啸叫、重载正常 | 轻载Q值过高 | 增加假负载或做轻载降频 |
| 输出有低频纹波 | 音频敏感度、环路增益不够 | 提高中低频增益 |
这张表我在实际调试时经常对着看,能省掉很多瞎试的时间。
6.3 几个反直觉的经验
最后分享几条我踩过坑才明白的东西,可能和教科书上的主旋律不太一样。
第一,电感不是越大越好。大电感能压纹波,但会把RHP零点频率拉低,动态变差,还可能让电感进入DCM。选电感要在纹波和动态之间找平衡,一般让电感纹波电流是平均电流的20%到40%比较合适。
第二,输出电容也不是越大越好。大电容会让双极点频率降低,谐振区往下挪,可能正好挪进你的带宽里。而且大电容启动时的冲击电流大,软启动设计不当会保护。
第三,轻载最考验稳定性。因为 Q 正比于 R,轻载时谐振峰最尖,相位裕度最差。如果你的模块要在全负载范围稳定,相位裕度就得按最轻载来评估,而不是满载。
第四,数字控制的延时别忽略。模拟控制下算出来的补偿参数,直接搬到数字控制上往往会差一截,得把计算延时的相位损失补回来,通常是再把穿越频率压低10%到20%。
我自己现在做Boost,基本会按这个流程走一遍:先算工作点、再列平均方程、线性化求Gvd、算出 fz 和 ω0、定穿越频率、摆补偿零点、解增益、仿真验证、上板实测、根据波形微调。走完这一套,环路基本不会出大问题。真正难的地方从来不是公式有多复杂,而是要理解每个环节背后的物理含义,知道哪些参数一动就会牵动全局。把这些想明白了,小信号建模就不再是一堆推不完的公式,而是一个能帮你把设计做稳的实实在在的工具。