开关变换器建模:从大信号到小信号传递函数推导与补偿器设计

发布时间:2026/10/7 9:19:33
开关变换器建模:从大信号到小信号传递函数推导与补偿器设计
1. 开关变换器建模的底层逻辑与整体设计思路搞电力电子的人迟早会撞上同一个问题明明电路在PSIM或LTspice里跑得好好的一旦要设计闭环补偿器整个人就卡住了。原因很简单——开关变换器是一个强非线性、时变系统开关管每个周期都在导通和关断之间来回切换拓扑结构在两种状态之间跳变。你没法直接对它用拉普拉斯变换也没法直接写出一个传递函数丢进波特图里分析。这就是建模这件事存在的意义。所谓大信号模型描述的是变换器在任意工作点下的大范围行为比如启动过程、负载突变、输入电压大幅波动这些场景。它保留了系统的非线性特征通常用状态空间平均法或者等效电路法来建立能反映变换器的全局动态。而小信号模型则是在某个稳态工作点附近做线性化处理把非线性系统近似成一个线性系统从而可以用经典控制理论里的传递函数、波特图、零极点分析来设计补偿网络。两者不是对立的而是互补的——大信号模型告诉你系统能跑到哪里去小信号模型告诉你系统在稳态附近稳不稳。我个人的习惯是先建立大信号模型理解变换器的基本工作机理和稳态关系再在稳态点附近做小信号线性化推导出控制到输出的传递函数最后用这个传递函数来设计补偿器。这个流程走下来你对变换器的理解会比单纯仿真深好几个层次。1.1 为什么不能直接用仿真代替建模有人会说现在仿真软件这么强直接跑瞬态仿真不就行了何必费劲推导模型我刚开始也是这么想的后来踩了几次坑才明白仿真是验证手段不是设计手段。你可以用仿真验证一个已经设计好的补偿器是否满足相位裕度要求但你没法用仿真直接告诉你补偿器的零极点该放在哪里。传递函数能给你明确的零极点分布让你知道哪个频率段需要提升增益哪个频率段需要衰减补偿器的类型和参数选择才有依据。另外仿真跑一次瞬态可能要几分钟甚至几十分钟而用传递函数在MATLAB里画个波特图只要几秒钟。在设计迭代阶段这个效率差距是致命的。更关键的是传递函数能给你物理直觉——比如你知道输出电容的ESR会引入一个左半平面零点这个零点会提升相位对稳定性有利但同时也让高频增益上升可能引入噪声。这种直觉是仿真给不了的。1.2 状态空间平均法的核心思想状态空间平均法的本质是在一个开关周期内变换器交替工作在两个或多个线性电路状态中每个状态都可以写出一组线性状态方程。把这两个状态方程按照各自占空比加权平均就得到了一个描述平均行为的非线性方程。这个方程里包含了占空比d这个控制变量而d本身又是时间的函数所以方程是非线性的。具体来说对于一个Buck变换器开关导通时电感电压为Vin - Vout开关关断时电感电压为-Vout。用占空比d加权平均后电感电压的平均值为d·Vin - Vout。同理电容电流也可以写出类似的平均方程。这样我们就得到了一个用平均变量描述的系统它不再有开关纹波但保留了占空比的控制作用。这个平均过程有一个前提假设开关频率远高于变换器的自然频率由LC滤波器决定的谐振频率。换句话说变换器对扰动的响应速度远慢于开关周期。这个假设在绝大多数工程场景下都成立因为开关频率通常在几百kHz到几MHz而LC谐振频率通常在几kHz到几十kHz。1.3 小信号线性化的数学本质有了大信号平均模型之后小信号建模就是在稳态工作点附近做泰勒展开保留一阶项忽略高阶项。具体操作是把每个变量写成稳态值加小信号扰动的形式比如d D d̂vin Vin v̂invout Vout v̂out。代入大信号方程后消去稳态项因为稳态项本身满足方程再忽略二阶及以上的扰动乘积项剩下的就是线性化的小信号方程。这个过程听起来简单但实际操作中有几个容易出错的地方。第一稳态项的消去需要你正确求出稳态工作点比如Buck的Vout D·Vin这个关系必须用对。第二扰动乘积项的忽略要彻底比如d̂·v̂in这种项必须去掉但D·v̂in这种项必须保留。第三拉普拉斯变换之后初始条件要设为零因为我们关心的是小信号响应不是启动过程。2. 大信号模型的核心细节与实操要点大信号模型的建立方式主要有两种状态空间平均法和等效电路法。两种方法殊途同归但适用场景和操作难度不同。状态空间平均法更数学化适合推导传递函数等效电路法更直观适合理解物理意义和手工分析。2.1 状态空间平均法的完整推导流程以Boost变换器为例我完整走一遍推导流程。Boost有两个开关状态开关管导通时电感接输入电压二极管截止电容给负载供电开关管关断时电感通过二极管给电容和负载供电。状态1开关导通持续时间dTs电感电压vL Vin电容电流iC -Vout/R状态2开关关断持续时间(1-d)Ts电感电压vL Vin - Vout电容电流iC iL - Vout/R用占空比d加权平均平均电感电压 d·Vin (1-d)·(Vin - Vout) Vin - (1-d)·Vout平均电容电流 d·(-Vout/R) (1-d)·(iL - Vout/R) (1-d)·iL - Vout/R再加上电感电流和电容电压的微分关系L·d /dt C·d /dt 这样就得到了Boost变换器的大信号平均模型。稳态时微分项为零可以解出Vout Vin/(1-D)IL Vout/(R·(1-D))这两个稳态关系是后续小信号建模的基础必须记牢。注意状态空间平均法假设电感电流连续。如果变换器工作在DCM模式需要引入第三个状态电感电流为零的状态推导会更复杂。工程上如果不想处理DCM最简单的办法是保证电感电流纹波小于平均电流的两倍即ΔiL 2·IL。2.2 等效电路法的直观建模技巧等效电路法的思路是把开关管和二极管用受控源替代得到一个不含开关的等效电路。以Buck为例开关管可以用一个受控电压源d·Vin替代二极管可以用一个受控电流源d·iL替代。这样整个电路就变成了一个线性时变电路可以用基尔霍夫定律直接分析。等效电路法的优势在于直观。你可以一眼看出占空比d如何影响电感电压和电容电流也可以直接写出传递函数而不需要经过状态空间矩阵运算。对于简单的Buck、Boost、Buck-Boost拓扑我通常优先用等效电路法因为推导快、不容易出错。但等效电路法也有局限。对于隔离型拓扑如正激、反激、桥式变压器和多个开关管让等效电路变得复杂这时候状态空间平均法更系统化不容易漏项。另外等效电路法在处理寄生参数如电感DCR、电容ESR、开关管导通电阻时需要额外小心因为这些参数会影响稳态工作点和传递函数的零极点位置。2.3 大信号模型中的寄生参数处理实际电路中电感有直流电阻DCR电容有等效串联电阻ESR开关管有导通电阻Rds(on)二极管有正向压降Vf。这些寄生参数在大信号模型中不能忽略因为它们直接影响稳态工作点和效率。以Buck为例考虑电感DCR和开关管导通电阻后稳态输出电压不再是简单的D·Vin而是 Vout D·Vin - IL·(DCR D·Rds(on)) - (1-D)·Vf这个修正看起来不大但在低压大电流场景下比如CPU供电Vout1VIout20A寄生参数导致的压降可能占到输出电压的10%以上。如果你忽略这些项设计的补偿器在实测时可能完全失效。实操心得在推导大信号模型时我习惯先把所有寄生参数都写进去然后在稳态工作点计算时再根据实际情况决定是否忽略。对于12V转1V这种大降压比场景寄生参数必须保留对于12V转5V这种小降压比场景寄生参数可以暂时忽略先得到简化模型再在仿真中验证。3. 小信号模型的推导与传递函数提取小信号建模是整个设计流程中最核心也最容易出错的部分。推导过程需要耐心和细致一个符号错误就可能导致零极点位置完全错误补偿器设计随之失效。3.1 从大信号模型到小信号模型的标准化步骤我总结了一套标准化的推导流程适用于绝大多数PWM变换器第一步写出大信号平均方程。包括电感电压方程和电容电流方程形式为L·diL/dt f1(iL, vout, d, vin)和C·dvout/dt f2(iL, vout, d, vin)。第二步求稳态工作点。令微分项为零解出IL、Vout与D、Vin的关系。第三步引入小信号扰动。令iL IL îLvout Vout v̂outd D d̂vin Vin v̂in。第四步代入方程并消去稳态项。稳态项满足大信号方程可以直接减去。第五步忽略二阶项。比如d̂·v̂in、d̂·îL、d̂·v̂out这些乘积项全部去掉。第六步拉普拉斯变换。把d/dt换成s得到s域的小信号方程。第七步解出传递函数。通常我们关心的是控制到输出的传递函数Gvd(s) v̂out/d̂输入电压扰动为零以及输入到输出的传递函数Gvg(s) v̂out/v̂in占空比扰动为零。这套流程看起来机械但每一步都有坑。比如第三步的扰动定义有人喜欢用d D d̂有人喜欢用d D·(1 d̂)两种定义得到的传递函数相差一个D的因子。我建议统一用加法形式因为推导更直观不容易混淆。3.2 Buck变换器小信号传递函数的完整推导以Buck为例完整推导一遍。Buck的大信号方程为L·diL/dt d·Vin - VoutC·dvout/dt iL - Vout/R稳态工作点Vout D·VinIL Vout/R。引入扰动并线性化L·dîL/dt D·v̂in d̂·Vin - v̂outC·dv̂out/dt îL - v̂out/R拉普拉斯变换sL·îL D·v̂in d̂·Vin - v̂outsC·v̂out îL - v̂out/R令v̂in 0解出Gvd(s) v̂out/d̂ 从第一个方程得îL (d̂·Vin - v̂out)/(sL)代入第二个方程 sC·v̂out (d̂·Vin - v̂out)/(sL) - v̂out/R整理后得到 Gvd(s) Vin/(1 sL/R s²LC)这就是Buck变换器控制到输出的传递函数。它是一个二阶系统直流增益为Vin有两个极点谐振频率为1/(2π√(LC))品质因数为R·√(C/L)。这个结果非常干净物理意义也很明确直流增益等于输入电压说明占空比变化1%会导致输出电压变化Vin的1%。两个极点来自LC滤波器在谐振频率以上增益以-40dB/dec滚降。品质因数决定了谐振峰的尖锐程度R越大负载越轻Q越大谐振峰越尖锐相位跌落越快。3.3 考虑ESR后的传递函数修正实际电容有ESR它会在传递函数中引入一个左半平面零点。考虑ESR后电容电压方程变为 vout vC iC·ESR其中vC是电容本身的电压iC是电容电流。重新推导后Gvd(s)变为 Gvd(s) Vin·(1 s·ESR·C)/(1 s·(L/R ESR·C) s²LC)这个零点位于频率1/(2π·ESR·C)处。对于电解电容ESR较大零点频率可能在几kHz会显著提升中频段的相位。对于陶瓷电容ESR很小零点频率可能在几百kHz影响较小。注意ESR零点虽然提升相位对稳定性有利但也让高频增益上升可能放大开关噪声。在设计补偿器时如果ESR零点频率低于穿越频率你需要考虑它带来的增益提升是否会导致高频噪声问题。我通常会在补偿器中加入一个高频极点来抑制噪声极点频率设在开关频率的一半左右。3.4 Boost和Buck-Boost的传递函数特点Boost变换器的Gvd(s)与Buck不同它包含一个右半平面零点RHPZ。这个零点位于频率R·(1-D)²/(2πL)处特点是增益上升但相位下降对稳定性极为不利。RHPZ的存在意味着你不能把穿越频率设得太高通常要低于RHPZ频率的1/3到1/5。Buck-Boost同样有RHPZ而且它的传递函数更复杂直流增益为Vin/(1-D)²比Buck多了一个(1-D)的因子。这意味着占空比越大增益越高但RHPZ频率也越低稳定性越差。我个人的经验是对于Boost和Buck-Boost穿越频率通常设在RHPZ频率的1/5以下相位裕度至少留45度。如果RHPZ频率太低导致穿越频率无法满足动态响应要求就需要考虑增加电感值或者降低占空比范围。4. 实操过程与核心环节实现理论推导完了接下来是实操。我以一款12V转5V/5A的Buck变换器为例完整走一遍从建模到补偿器设计的流程。4.1 参数计算与稳态工作点确定设计规格输入电压12V±10%输出电压5V输出电流5A开关频率500kHz电感10μH输出电容100μF陶瓷ESR2mΩ负载电阻1Ω满载稳态工作点占空比D Vout/Vin 5/12 0.417电感电流IL 5A电感电流纹波ΔiL (Vin - Vout)·D/(L·fs) (12-5)·0.417/(10e-6·500e3) 0.58A输出电容电压纹波Δvout ΔiL/(8·C·fs) 0.58/(8·100e-6·500e3) 1.45mV纹波很小说明CCM假设成立状态空间平均法适用。4.2 传递函数计算与波特图绘制Gvd(s) 12/(1 s·10e-6/1 s²·10e-6·100e-6) 12/(1 s·10e-6 s²·1e-9)谐振频率f0 1/(2π√(LC)) 1/(2π√(10e-6·100e-6)) 5.03kHz 品质因数Q R·√(C/L) 1·√(100e-6/10e-6) 3.16 ESR零点频率fz 1/(2π·ESR·C) 1/(2π·2e-3·100e-6) 796kHz在MATLAB里画波特图L 10e-6; C 100e-6; R 1; Vin 12; ESR 2e-3; s tf(s); Gvd Vin*(1 s*ESR*C)/(1 s*L/R s^2*L*C); bode(Gvd); margin(Gvd);从波特图可以看到直流增益21.6dB谐振峰在5kHz处约10dB相位在5kHz处从0度快速跌落到-180度。ESR零点在796kHz处远高于穿越频率影响可以忽略。4.3 补偿器设计与参数计算目标穿越频率fc 50kHz开关频率的1/10相位裕度PM ≥ 45度。在50kHz处Gvd的增益约为-20dB从波特图读取相位约为-180度。为了在50kHz处获得0dB增益和45度相位裕度补偿器需要提供20dB增益和225度相位因为-18022545。选择Type III补偿器因为它能提供两个零点和两个极点适合补偿二阶系统。Type III的传递函数为 Gc(s) K·(1 s/ωz1)·(1 s/ωz2)/(s·(1 s/ωp1)·(1 s/ωp2))零点放在谐振频率处ωz1 ωz2 2π·5kHz 31.4k rad/s 极点放在ESR零点处ωp1 2π·796kHz 5M rad/s 另一个极点放在开关频率一半处ωp2 2π·250kHz 1.57M rad/s计算K值使得在50kHz处增益为0dB。经过计算K ≈ 1.2e5。实操心得补偿器参数计算出来后一定要在MATLAB里验证闭环波特图。我习惯用feedback(Gvd*Gc, 1)画出闭环波特图检查相位裕度和增益裕度。如果相位裕度不够可以适当降低穿越频率或者调整零点位置。实测中相位裕度留50度以上比较稳妥因为实际电路有寄生参数和延迟会额外损失相位。4.4 仿真验证与实测对比在LTspice里搭建Buck电路用平均模型或者开关模型都可以。平均模型仿真速度快适合验证传递函数开关模型更接近实际适合验证纹波和瞬态响应。我通常先用平均模型验证补偿器确认相位裕度和穿越频率符合设计。然后切换到开关模型跑负载突变仿真5A到2.5A观察输出电压的恢复时间和过冲。如果过冲太大说明相位裕度不够如果恢复太慢说明穿越频率太低。实测时我用网络分析仪测环路增益发现实测穿越频率比仿真低约10%相位裕度低约5度。这是正常的因为实际电感的DCR和电容的ESR与标称值有偏差PCB走线也有寄生电感。所以设计时留足够的裕度很重要。5. 常见问题与排查技巧实录建模和补偿器设计过程中有几个问题我反复遇到这里整理成速查表方便对照排查。5.1 传递函数推导常见错误问题现象可能原因排查方法直流增益不对稳态工作点算错检查Vout与D的关系式谐振频率不对LC乘积算错重新计算1/(2π√(LC))相位曲线异常扰动定义不一致统一用加法形式dDd̂零极点数量不对漏掉寄生参数检查ESR、DCR是否考虑高频增益不衰减补偿器极点没加检查Type III的高频极点我踩过最坑的一次是Boost变换器的RHPZ。当时推导完传递函数后发现相位曲线在RHPZ频率处开始下降但增益曲线也在上升导致穿越频率处相位裕度只有20度。后来把穿越频率降到RHPZ频率的1/5相位裕度恢复到50度但动态响应变慢了。最后通过增加电感值从10μH增加到22μH把RHPZ频率提高了一倍才在动态响应和稳定性之间找到平衡。5.2 补偿器设计中的典型问题问题一相位裕度够但实测振荡。这种情况通常是高频噪声引起的。补偿器的高频极点如果设在开关频率附近可能无法有效抑制开关噪声。我通常把高频极点设在开关频率的1/2到1/3处同时在PCB布局上尽量缩短反馈走线减少噪声耦合。问题二负载突变时过冲太大。这说明穿越频率太低系统响应慢。可以尝试提高穿越频率但要注意不能超过开关频率的1/5否则开关纹波会影响控制精度。另外增加输出电容也能减小过冲但会增加成本和体积。问题三轻载时不稳定。轻载时负载电阻增大品质因数Q增大谐振峰更尖锐相位跌落更快。如果补偿器没有足够的相位提升轻载时可能不稳定。解决办法是在补偿器中加入一个零点或者使用自适应补偿技术。注意DCM模式下传递函数会发生变化从二阶变成一阶直流增益也变了。如果你的变换器可能在DCM下工作需要分别设计CCM和DCM的补偿器或者保证在整个负载范围内都工作在CCM。5.3 仿真与实测差异的排查思路仿真和实测有差异是正常的但如果差异太大就需要排查。我通常按以下顺序检查第一检查仿真模型是否包含了所有寄生参数。电感的DCR、电容的ESR、开关管的导通电阻、二极管的压降这些在仿真中都要加上。第二检查PCB布局。反馈走线是否远离开关节点地平面是否完整输入电容是否靠近开关管这些布局问题会导致实测噪声远大于仿真。第三检查测量方法。用网络分析仪测环路增益时注入信号幅度不能太大否则会激发非线性。我通常用10mV到50mV的注入幅度确保变换器仍工作在小信号区域。第四检查元件容差。电感和电容的标称值通常有±20%的容差ESR也有很大分散性。设计时留足够的裕度实测时用LCR表测量实际值再代入模型重新计算。5.4 建模工具与效率提升技巧我常用的建模工具组合是MATLAB用于推导和验证传递函数LTspice用于电路仿真Python用于批量计算和绘图。MATLAB的Symbolic Math Toolbox可以自动推导状态空间平均方程省去手工推导的麻烦。Python的control库可以画波特图适合快速迭代。一个小技巧把传递函数的推导过程写成脚本参数化输入。这样当你改变电感或电容值时不需要重新推导直接改参数就能得到新的传递函数和波特图。我自己的脚本里定义了Buck、Boost、Buck-Boost三种拓扑的传递函数输入L、C、R、Vin、D就能自动出结果效率提升非常明显。最后分享一个我个人的体会建模这件事理论推导只是第一步真正的功夫在实测和调试。我见过太多人推导的传递函数很漂亮但实测就是不稳定。后来发现问题往往出在寄生参数和PCB布局上。所以推导完模型后一定要在仿真中验证在实测中修正。模型是地图实测是路况两者结合才能到达目的地。