ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

开关变换器小信号建模实战:从状态空间平均到Buck传递函数

开关变换器小信号建模实战:从状态空间平均到Buck传递函数 我们做电源的特别是做环路补偿的几乎都绕不开小信号模型。早几年我刚接触开关变换器建模的时候翻了不少教材公式推导能看懂但一旦轮到实际调试比如想让Buck变换器的带宽跑高一点、相位裕量留够45度却不知道该用哪些参数建模、模型在哪个频段可信、算出来的穿越频率跟实测怎么就对不上。这篇文章就是我把自己从零学建模到真正用起来的全过程梳理了一遍从状态空间平均法开始一步步推导出Buck变换器的控制到输出传递函数再用仿真验证理论曲线最后聊聊那些教材里不写、但实操里一定踩过的坑。这套东西适合谁看呢一个是刚入行但被环路调试折磨的电源工程师另一个是研究数字电源控制、需要自己建被控对象模型的同学。看完你能明白小信号建模到底把什么“平均”掉了、在什么条件下成立、怎么从物理方程走到传递函数以及为什么仿真曲线和理论曲线在中频段对不上也不用慌。1. 内容整体设计与思路拆解1.1 为什么非要从“小信号”切入开关变换器本质是一个非线性、时变、分段光滑的系统。开关管导通时是一套电路拓扑关断时是另一套拓扑直接拿大信号模型去设计线性控制器KVL和KCL都写不爽利更别提频域设计了。小信号建模的核心思路是在一个稳定的直流工作点附近把非线性系统线性化从而得到一个近似的线性时不变系统。这个线性系统可以写传递函数可以用Bode图分析频带宽度和相位裕量可以设计补偿网络最后还能用经典控制理论的整套工具去综合系统。需要刻意记住的是小信号模型不等于把开关管随便等效成一个电阻或一个增益模块。它是从能量守恒和状态平均的物理过程出发严格推导出来的。它牺牲了对开关频率附近甚至更高频段行为的描述精度换来了在低频和中频段对系统动态特性相当准确的近似。控制器设计关心的正是这个频段所以实用价值极大。1.2 建模流派选型状态空间平均法为什么最常用业内目前主流的建模思路大致有三条路状态空间平均法、开关网络平均法、离散时间建模法。对于绝大多数连续导通模式CCM下的变换器设计状态空间平均法是首选。它逻辑链条清晰从状态方程出发不必额外引入复杂的开关网络等效而且结果可以很自然地退化为经典Buck、Boost、Buck-Boost的传递函数表达式。开关网络平均法在分析谐振变换器和临界导通模式BCM时更贴合物理但抽象程度高新手很容易被开关网络的各种等效子电路绕晕。离散时间建模法则主要用于数字控制器的精确设计它把采样和PWM更新延迟都纳入系统模型精度高但复杂度也高不是入门首选。我自己带项目时习惯这样做初始设计用状态空间平均法快速搭建频域模型、定补偿参数等样机出来了再实测环路用测得的Bode图反过来修正模型的高频寄生参数误差。两条腿走路既保证效率也能在板子上找到理论模型的偏差来源。2. 核心细节解析与实操要点2.1 状态方程的建立——写清楚每个开关状态下的电路关系以Buck变换器为例图里最核心的无非是输入源 (V_g)、开关管 (Q)、二极管 (D)或同步整流管、电感 (L)、电容 (C) 和负载电阻 (R)。选择电感电流 (i_L) 和电容电压 (v_C) 作为状态变量是因为它们和储能元件直接相关做主电路状态描述最自然。CCM下开关管导通时[ L\frac{di_L}{dt} V_g - v_C ][ C\frac{dv_C}{dt} i_L - \frac{v_C}{R} ]开关管关断、二极管续流时[ L\frac{di_L}{dt} - v_C ][ C\frac{dv_C}{dt} i_L - \frac{v_C}{R} ]写这两组方程时最容易犯的错误是把电感的寄生电阻 (R_L) 和电容的ESR (R_C) 忽略得太干净。初期建模可以忽略但后面分析输出纹波和零点位置时电容ESR带来的零点会直接影响补偿网络的设计。所以建议从一开始就保留 (R_C)最多在推导时把它“延后”处理否则后面要返工。2.2 平均化处理——如何把分段系统拼成连续系统分段线性系统不能直接做拉普拉斯变换。平均化处理就是用占空比 (d) 对两个子区间进行加权平均把分段方程拼合成一个连续的平均方程。导通区间占整个开关周期 (T_s) 的比例是 (d)关断区间是 (1-d)。那么电感的平均电压可以写为[ L\frac{d\langle i_L \rangle}{dt} d(V_g - \langle v_C \rangle) (1-d)(- \langle v_C \rangle) ]化简一下就是[ L\frac{d\langle i_L \rangle}{dt} d V_g - \langle v_C \rangle ]电容支路平均化之后和导通、关断状态长得一样所以直接沿用[ C\frac{d\langle v_C \rangle}{dt} \langle i_L \rangle - \frac{\langle v_C \rangle}{R} ]这里需要特别注意一个前提平均化成立的隐含条件是状态变量在一个开关周期内的变化量远小于其稳态值。也就是说电感电流的纹波和电容电压的纹波要足够小。这正好落在CCM设计的一般约束内所以它是合理近似不是硬凑。2.3 扰动注入与线性化——分清直流工作点与小信号分量现在把平均方程里的变量拆成直流工作点加小信号扰动的形式[ \langle v_g \rangle V_g \hat{v}_g ][ d D \hat{d} ][ \langle i_L \rangle I_L \hat{i}_L ][ \langle v_C \rangle V_C \hat{v}_C ]代回平均方程展开之后会出现三类项直流项、一阶小信号项、二阶小信号乘积项。直流项对应稳态工作点让它们归零就得到稳态关系二阶项如 (\hat{d}\hat{v}_g) 是两个小信号的乘积数值上远小于一阶项直接舍掉保留下来的一阶项就组成了小信号线性方程。于是电感电流的小信号方程是[ L\frac{d\hat{i}_L}{dt} D\hat{v}_g V_g\hat{d} - \hat{v}_C ]电容电压的小信号方程是[ C\frac{d\hat{v}_C}{dt} \hat{i}_L - \frac{\hat{v}_C}{R} ]线性化过程中最重要的一点是小信号扰动的幅度必须远小于直流工作点的值。工程上一般要求扰动幅度小于稳态值的10%超过这个范围线性化误差会明显增大模型预示的动态响应和实测就会拉开差距。3. 实操过程与核心环节实现3.1 拉普拉斯变换与传递函数推导将上面的小信号方程从时域变换到S域。电感电流方程变成[ sL\hat{i}_L(s) D\hat{v}_g(s) V_g\hat{d}(s) - \hat{v}_C(s) ]电容电压方程变成[ sC\hat{v}_C(s) \hat{i}_L(s) - \frac{\hat{v}_C(s)}{R} ]目标一般是先求控制到输出的传递函数也就是 (\hat{d}) 到 (\hat{v}_C) 的关系。为了方便分析先做两个合理的假设一是输入电压 (V_g) 恒定因此 (\hat{v}_g(s) 0)二是负载电阻不变。这样电感方程简化为[ sL\hat{i}_L(s) V_g\hat{d}(s) - \hat{v}_C(s) ]从电容方程中解出 (\hat{i}_L(s))[ \hat{i}_L(s) \left( sC \frac{1}{R} \right)\hat{v}_C(s) ]代入电感方程并整理就能得到经典的Buck变换器控制到输出的传递函数[ G_{vd}(s) \frac{\hat{v}_C(s)}{\hat{d}(s)} \frac{V_g}{LCs^2 \frac{L}{R}s 1} ]这个结果看着简洁但信息量很大。它表明Buck变换器是一个典型的二阶系统自然振荡角频率 (\omega_0 1/\sqrt{LC})阻尼比 (\zeta \frac{1}{2R}\sqrt{\frac{L}{C}})。(\zeta) 直接决定频域曲线在谐振点附近的凸起程度和时域响应的超调量。负载越轻也就是R越大阻尼越小谐振峰越高相位曲线在谐振频率附近的下跌也越剧烈。如果保留电容ESR (R_C)传递函数会额外增加一个零点 (f_z \frac{1}{2\pi R_C C})。这个零点通常落在几kHz到几十kHz如果补偿网络设计忽略了它实际开环增益曲线会比理论多一个向上的斜率段穿越频率附近的相位裕量计算就会出现偏差。同理电感的DCR (R_L) 会给传递函数增加一个低频零点同时改变低频增益在重载或小占空比工况下尤其明显。3.2 用Python快速验证理论模型的频率响应推导完传递函数光看公式没有体感必须画出Bode图来验证。我平时会用Python的control库或直接用scipy做频响计算。Buck电路设计参数(V_g12V)(V_{out}5V)(D5/12)(L33\mu H)(C330\mu F)负载(R5\Omega)计算得到[ f_0 \frac{1}{2\pi\sqrt{33\times10^{-6}\times330\times10^{-6}}} \approx 1.53kHz ][ \zeta \frac{1}{2\times5}\times\sqrt{\frac{33\times10^{-6}}{330\times10^{-6}}} \approx 0.1 ]这么低的阻尼比意味着谐振峰大约有14dB的凸起相位曲线在1.5kHz附近会迅速下拉接近-180度。看一下理论曲线低频段是水平直线增益约 (20\lg(V_g)21.6dB)过了谐振点以-40dB/dec斜率滚降相位从0度一直掉到-180度存在一个明显的谐振“悬崖”。这个结果给环路补偿的启示是如果直接把穿越频率定在谐振点之后必须用Type-III补偿在谐振点附近补两个零点和两个极点来抵抗LC双极点的相位下拉。如果穿越频率在谐振点之前那么Type-II补偿就够了。这就是建模指导设计的最直观价值。3.3 仿真验证从理想模型到电路级仿真模型推导完了必须用电路仿真验证。我常用的工具是SIMPLIS和PSIM这两款在做开关电源小信号分析时比SPICE类工具方便得多因为它们自带平均模型或可以进行AC扫描分析。在PSIM里搭Buck主电路用正弦扫频法做AC分析。PWM调制器给一个小信号正弦扰动叠加在稳态占空比上扫描频率范围从100Hz到100kHz。测量输出端的幅值和相位变化就能得到电路的“实测”Bode图。把这个结果和上一节的理论传递函数画在同一张图里你会发现理想模型在低频到中频段约1/10开关频率以下和仿真曲线几乎重合在谐振点附近的峰也能对上。但频率过了开关频率的一半之后理论和仿真开始明显分离这是因为平均化处理把开关纹波和谐波信息都抹掉了。这部分误差是建模方法的固有局限不是推导错误。如果是数字控制还得把采样延迟和计算延迟考虑进去模型就会再增加一个 (e^{-sT_d}) 延迟项带来越来越大的相位拖拽这也是数字电源环路带宽上不去的核心原因之一。模拟控制一样有延迟但比数字控制的采样延迟小得多模型里通常忽略不计。4. 常见问题与排查技巧实录4.1 实测Bode图和理论曲线高频段对不上这是被问得最多的现象。很多同学拿着理论传递函数算出来的补偿参数信心满满地折腾样机结果环路分析仪一测发现1/2开关频率附近的相位比理论预测还要低二十几度。原因主要有几个按优先级排查第一PWM调制器本身有一个等效的延迟效应。峰值电流模式和电压模式还不一样电压模式相对简单但调制器内部比较器和门驱动传播延迟、死区时间带来的非线性都会在高频段增加额外的相位滞后。第二电感寄生电容和MOSFET结电容在高频段形成额外的谐振峰和相位拖拽。这个在开关频率的一半以上尤其明显。理论模型里的双极点模型过于干净实际电路在高频段有非常多的寄生谐振。第三电容ESR零点的位置。如果电容用的是MLCCESR很低零点频率高得离谱会超出模型覆盖范围如果用的是电解电容零点可能落在10kHz附近直接把相位从-180度往回拉这个拉回效果如果你的理论模型没算零点就会看到实测相位比理论高。解决方法要判断偏差是否来自上述原因最直接的办法是保持补偿网络不变把一个已知干净的阻性负载接上测量开环传递函数。如果谐振峰位置和理论能对上但高频相位对不上基本都是寄生效应。这时候可以修正模型给电感增加一个并联电容模拟绕组间寄生电容给开关节点增加一个对地电容模拟结电容再对比仿真。4.2 占空比接近50%时电流模式控制出现次谐波振荡这个坑在电压模式里不明显但在峰值电流模式里很经典。当占空比大于50%时电感电流的上升斜率大于下降斜率平衡条件被打破扰动会随着每个开关周期被放大最终出现次谐波振荡频率等于开关频率的一半。在平均模型中我们引入的控制到电感电流的传递函数 (G_{id}(s)) 会在这个工况下预测出一个右半平面极点导致系统本质不稳定。这个极点在频域上表现为低频增益上升、相位额外下拉-90度非常迷惑特别是在Bode图上相位曲线形状和普通二阶系统差别不大容易误判成只是相位裕量不足。解决手段就是斜坡补偿。在平均模型里斜坡补偿的作用相当于给电流环路增加一个等效的采样保持增益修正项修正后的控制到输出的传递函数在高频段的增益尖峰被压低右半平面极点被拉回左半平面。实操中斜坡补偿的斜率一般取电感电流下降斜率的一半到一倍之间太小压不住次谐波太大会让系统动态响应变慢、大信号响应变钝。这里有一个经过验证的实用估算方法补偿斜坡斜率等于电感电流下降斜率时系统对任意占空比的稳定性裕量都比较均衡这也是很多控制芯片内部默认设置的原因。4.3 轻载下模型预测和实测偏差突然变大如果你做的是CCM/DCM兼容的变换器轻载时电感电流进入断续导通模式情况就变了。状态空间平均法的前提是CCMDCM下状态方程多了一个“电感电流为零”的区间平均方程的形态完全不同控制到输出的传递函数也从二阶降为一阶系统——负载电阻不再是独立的负载项而是与控制环路动态耦合在一起表现为低频增益升高、相位滞后的极点消失带宽模型参考价值大幅下降。遇到这种情况不能再用CCM模型硬算。工程上有两条路要么直接把负载提升到CCM边界以上再测量设计要么用DCM平均模型重新推导。DCM下Buck变换器的控制到输出传递函数大约是一个单极点系统极点位置和负载有关补偿策略也随之不同。我在项目里遇到轻载抖振burst mode开启和关闭引起输出微小振荡时就是切换到DCM模型重新算了一遍补偿才把问题解决。4.4 仿真软件搭建平均模型时忽略的初始化问题无论是SIMPLIS还是PSIM在做平均模型仿真时都要注意初始状态的设置。很多仿真器默认从零状态开始而平均模型和开关模型在启动瞬间的动态过程完全不同。如果你要测的是小信号频域响应一定要先让电路稳定到目标工作点再注入扰动。否则Bode图低频段会出现奇怪的波动或者相位曲线从0度附近莫名其妙地跳变到-180度。实操上我会先把占空比固定让电路启动到稳态再用分段线性化的方式逐步增加扰动幅度观察输出响应是否线性变化。如果输出对扰动出现明显的非线性响应比如整流失真或者幅值不随扰动等比例变化那就说明扰动加太大了要降低幅度重新扫描。一个相对保守的设置是让输出电压扰动幅度控制在稳态电压的1%以内这个幅度在AC分析中足够被检测到又不会触发非线性效应。5. 建模之外的经验补全5.1 平均模型与开关模型联合仿真的技巧建模验证阶段我习惯同时跑两套仿真一套用开关模型真实MOSFET模型或理想开关二极管另一套用平均模型。把两套模型的控制到输出Bode图叠加在一起如果中频段重合度足够好说明平均模型的适用边界确认没超如果分叉就要反过来检查是否进入了平均模型不适用的频段或者参数设置出了问题。在SIMPLIS里做这一套尤其顺手因为它原生支持AC分析可以直接得到开关模型的Bode图。PSIM也支持但需要自己搭一个正弦扰动源并做后处理稍微费事。用MATLAB/Simulink的话Control System Toolbox可以直接把传递函数离散化适合数字控制器设计验证。工具选择不重要重要的是你心里有一把尺子——平均模型在什么频段以下可信什么频段以上必须交给开关模型或实测去校核。5.2 寄生参数到底哪些值得建模很多论文动辄列出十几个寄生参数但工程建模不能贪多。我的经验是只关注那些对目标频段影响显著的参数按优先级排序。首先是电容ESR它带来的零点在某些电解电容方案里会落在环路带宽之内直接影响相位裕量必须建模。其次是电感DCR它的影响在轻载和高频段较明显表现为低频增益降低和轻载时阻尼增加。然后是MOSFET导通电阻和二极管压降这两个影响的是直流工作点在高频段影响不大期初建模时可以先不考虑。真正让模型复杂化的是这些寄生参数的工作点依赖性。比如MOSFET导通电阻随温度变化DCR随温度升高而变大电容ESR随频率和温度都在变化。如果把这些全部塞进模型参数不确定性会大到让模型失去指导意义。合理的做法是取典型值建模然后做±20%等参数扫描看看环路稳定性余量对哪些参数最敏感针对最敏感的参数再重点实测确认。控制设计本来就是在不确定性中寻找鲁棒性。5.3 从传递函数到补偿网络设计的桥接有了 (G_{vd}(s))下一步就是设计补偿网络 (G_c(s))让开环传递函数 (T(s) G_c(s)G_{vd}(s)) 满足交越频率、相位裕量、增益裕量三个核心指标。以Buck变换器为例如果LC双极点带来了-180度的相位滞后而目标相位裕量是45度那么补偿网络在穿越频率处必须提供足够的相位提升。这就是为什么需要Type-III补偿——它能在特定频率区间内产生最高约180度的相位提升。如果穿越频率选在谐振点之前LC双极点的相位滞后还没完全展开Type-II补偿就够用。用模型算出来的补偿参数上板之后一定还要实测闭环Bode图。理论参数只能作为起点因为实际电路里还有滤波电感、采样电阻、比较器偏置等带来的额外相移。这个实测闭环Bode图通常能看出补偿网络的零极点是否落在了正确位置。零极点位置偏差不大的情况下也可以直接在实机上微调电阻电容值来拉相位裕量不用每次都回模型里改参数重新算。5.4 数字控制下的建模变化如果你做数字电源模型还要额外考虑离散化、采样延迟和PWM更新延迟。模拟控制里调制器几乎即时响应占空比命令数字控制里ADC采样需要时间计算需要时间PWM寄存器更新还要等下一个周期边沿。这些延迟累加起来通常有1到2个开关周期反映到频域就是随频率线性增加的相位滞后。从模型角度修正方式是在 (G_{vd}(s)) 后面乘一个 (e^{-sT_d}) 延时项(T_d) 取 (0.5 \sim 1.5) 个开关周期具体取决于采样点和PWM更新策略。很多数字电源项目把带宽做不高不是因为模拟部分不行而是这部分延迟相位拖累太大。通过建模你可以明确计算出延迟对环路带宽的上限约束从一开始就设定合理的设计目标而不是等样机出来了再到处抓瞎。这个思路也能延伸到峰值电流模式数字控制中斜坡补偿参数在数字域实现时同样需要在控制环路上建立精确的数学模型才能算出最优补偿斜率。我个人在实际操作中的体会是小信号建模最大的价值并不在于让你背下一个公式而在于给了你一套“预判”能力——只要拿到拓扑、参数和工作点就能在心里先画出Bode图的大致形状知道哪些频段会有风险哪些参数对稳定性最敏感。这种直觉完全是靠一次一次推导、仿真、实测对比中磨出来的。最后再分享一个小技巧建模完成后在桌面贴一张“实测Bode图对不上理论Bode图”时的排查清单从上到下依次是采样延迟、寄生参数、阻尼系数、工作点偏差、补偿网络实际零极点位置基本能覆盖九成以上的偏差来源。如果清单逐项排查完还是对不上那就要检查是不是模型本身选错了比如该用DCM模型却用了CCM。
返回列表