用 Simulink 做反激(Flyback)电路的建模与仿真,乍一听是个被讲烂了的题目,可真到自己动手搭模型,卡壳的地方比想象中多得多。我在做隔离型 DC-DC 变换器的前期验证时,通常第一步就是先建一个开环仿真模型,把拓扑的工作过程、电压电流应力、占空比和负载变化的影响摸清楚,再决定后面硬件方案怎么定。这篇内容就围绕基于 Simulink 的 Flyback 反激型电路建模与仿真展开,从功能介绍和拓扑原理入手,完整走一遍建模、参数计算、仿真分析和排错过程。无论你是刚接触电力电子的学生,还是想快速验证控制策略的工程师,按照这个思路把模型搭起来,对反激电路的工作过程会有非常直观的理解,后续做闭环也好、做样机也罢,心里都有底。
1. 反激拓扑为什么自然成为隔离电源的首选——先想想它在“反”什么
1.1 从 Buck-Boost 演变过来的隔离拓扑
很多人第一次接触反激电路,注意力全被变压器带走了,以为它就是“带变压器的 Buck”。这个理解不算错,但从根源上讲,反激更接近 Buck-Boost 的隔离版本。
Buck-Boost 电路的核心动作是:开关导通时电感储能,开关关断时电感向负载放能,输出电压极性与输入相反。反激电路把电感换成了一副耦合绕组,也就是变压器,原边绕组的励磁电感承担储能任务,副边绕组在开关关断时把存储的磁能释放到输出侧。这里最关键的一点是:变压器在反激电路里主要不是“传能”器件,而是“储能+传能”器件,能量先在磁路里存起来,再在关断阶段送出去。
正因为能量是在开关关断期间传递的,所以叫“反激”(Flyback)。与之对应的是正激(Forward),正激电路在开关导通期间直接将能量从输入传到输出,变压器更像一个真正的变压器。两者的差别决定了磁芯复位方式、变压器气隙设计、占空比取值范围都不相同。
我在仿真模型里验证过这个区别:同样的输入电压 24V、输出电压 12V,反激和正激需要的变压器匝比、占空比完全不同,副边二极管导通时间也正好错开半个周期。如果你建的第一版模型哪哪都不对,先检查绕组同名端和二极管方向,大概率能解决一半问题。
1.2 反激到底适合用在什么功率段
反激电路能火这么多年,靠的不是性能极致,而是成本低、结构简单、容易扩展多路输出。它的典型应用区间是几瓦到一百瓦左右,常见的是各种充电器、适配器、LED 驱动电源、辅助电源等。功率再往上走,反激变压器的磁芯利用率会明显下降,开关管的电压电流应力也大,这时候更多人会转向正激、半桥或者 LLC 拓扑。
从工程选型的角度,我的建议是:如果需求是隔离型小功率电源,且对效率和体积没有极端要求,反激永远是第一候选。它只需要一个开关管、一个二极管、一个变压器、几个电容电阻就能工作,控制方式无论是电压模式还是电流模式都很成熟。反过来,如果你要做 300W 以上的大功率隔离电源,还抱着反激不放,那就要在散热和电磁兼容上付出很大代价,不如早点换拓扑。在仿真环境里,我们也能清楚看到这个趋势——随着输出功率要求提高,反激电路的峰值电流和漏感尖峰会迅速变大,波形越来越“难看”。
1.3 反激电路的“反”字藏在变压器同名端里
理解绕组同名端是建反激模型的第一道门槛。我在搭建模型时习惯先把变压器等效成“理想变压器 + 励磁电感 + 漏感”三个部分,这样就好理解多了。
开关导通时,输入电压加到原边绕组,励磁电感电流线性上升,此时副边绕组感应出的电压极性会让二极管反向截止,能量全部存在磁场里。开关断开后,原边电流失去通路,但励磁电感里的电流不能突变,磁通必须维持,于是副边绕组感应出相反极性的电压,二极管正向导通,电流流向负载和输出电容。所谓“反”激,就是副边的导通时刻和原边完全错开,能量传递方向在开关周期内反转了一次。
在 Simulink 里建模时,同名端必须按这个逻辑设置:原边和副边的极性相反,或者说变压器模块的绕向要保证副边电压极性在导通期间让二极管截止。很多初学者在这里把方向接反,结果仿真跑出来输出电压是负的,或者二极管在导通期间也导通,直接烧模型。判断方法很简单,看二极管电流波形:正常的反激电路,二极管只在开关关断期间有电流,如果开关导通期间二极管也出现大电流,基本就是极性反了或者二极管方向错了。
2. 建模前手里要有哪些参数——励磁电感、同名端与 CCM/DCM 选择
2.1 励磁电感是反激电路的“能量仓库”
反激变压器最核心的参数不是匝比,而是原边励磁电感 Lm。励磁电感决定了在给定占空比和开关频率下,开关导通期间能储存多少能量。
用公式表示就是:导通期间,励磁电流从初始值往上线性上升,电流变化量和输入电压、导通时间成正比,和励磁电感成反比:
[ \Delta I = \frac{V_{in} \cdot D \cdot T_{sw}}{L_m} ]
能量存储量则是:
[ E = \frac{1}{2} L_m I_{pk}^2 ]
如果电路工作在完全不连续模式(DCM),每个周期开始时励磁电流恰好降到零,那么输出功率和峰值电流直接挂钩:
[ P_{out} = \frac{1}{2} L_m I_{pk}^2 f_{sw} ]
这也是我在仿真前做手算设计时最常用的一组公式。比如要设计一个 24V 输入、12V 输出的小功率反激,开关频率取 100kHz,最大占空比 0.5,原边匝比设成 2:1,算出来的 Lm 大概在一百微亨附近。仿真后就拿这个值去设变压器的励磁电感参数,得到的波形和理论计算基本对得上。
这里要提醒一下:在 Simulink 的变压器模块里,如果用的是线性变压器模型,励磁电感往往通过原边自感和耦合系数来体现,而不是直接填一个“Lm”参数。你需要把原边自感设成 Lm 加上漏感的值,副边自感通过匝比换算过去,耦合系数设成接近 1 但又小于 1 才能产生漏感效应。
2.2 CCM 和 DCM:两种工作模式,建模和补偿的难度完全不同
反激电路有两种典型工作模式:连续导通模式(CCM)和断续导通模式(DCM),判断依据是副边二极管电流是否在开关周期内降到了零。
CCM 模式下,副边电流在关断阶段结束时还没归零,能量仓库里始终有“底货”。这种模式变压器利用率高,输出纹波小,但有一个著名的麻烦:控制到输出的传递函数里存在右半平面零点。右半平面零点意味着什么?用大白话说,你突然加大占空比想多送点能量,输出在一小段时间里反而可能先下降,然后才上升,控制器很不好调。这个现象在仿真里能清楚看到,给一个阶跃,输出电压先往下凹一下再冲上去。
DCM 模式就简单多了,每个周期结束前能量全部放光,传递函数近似成一阶系统,控制设计容易很多。代价是峰值电流大,开关管和二极管的应力高,磁芯利用率低。
我在仿真里通常两种模式都会跑,把负载从轻载到满载拉一遍,观察电感电流是否连续,再根据实际需求确定哪一种作为设计目标。很多产品为了兼顾轻载效率,会设计成轻载 DCM、重载 CCM 的混合模式,这种边界行为在仿真中看得非常清晰。
反激电路的两种模式在稳态电压增益上还不一样:
| 工作模式 | 近似电压增益(理想) | 控制复杂度 |
|---|---|---|
| CCM | ( V_{out}/V_{in} = D/(1-D) \times N_s/N_p ) | 存在右半平面零点,补偿较难 |
| DCM | 与负载、电感、频率相关,近似 ( V_{out} = V_{in} D \sqrt{R/(2 L_m f_{sw})} \times N_s/N_p ) | 近一阶系统,补偿简单 |
2.3 开关管、二极管和电容,先建理想模型还是带寄生参数的模型
刚开始建模的时候,我强烈建议先把所有器件设成理想模型:理想开关、理想二极管、理想电容。这样能最快跑通仿真,确认拓扑逻辑正确。直接上一堆寄生参数只会让你分不清是拓扑错了还是器件参数错了。
等基本波形正常了,再逐步加上 MOSFET 的导通电阻、二极管的导通压降、电容的等效串联电阻(ESR)。一个很直观的例子:输出纹波电压在理想电容下几乎为零,但实际电容有 ESR,纹波主要由 ESR 决定。如果你在仿真中看不到纹波,不是电路没问题,而是你的电容模型少了一个“ESR”。这种情况下,仿真和实测会差很远。
输出电容 ESR 会在采样电阻和电流路径上形成高频电压纹波,这个在模型里很容易验证:ESR 取 10mΩ 和取 100mΩ,输出纹波可能相差一个数量级。因此,建模阶段就把关键器件的寄生参数留好位置,后期填充数值会比全部推倒重来省事得多。
3. Simulink 建模仿真实操——器件选型、参数设置到跑通波形
3.1 用 Simscape Electrical 还是手写数学模型
在 Simulink 里建电力电子电路,主要有两条路线。
第一条是使用 Simscape Electrical 库(以前叫 SimPowerSystems),里面有现成的电源、MOSFET、二极管、变压器、电容电阻模块,拖拽连接就能搭出主电路。这种方式的优点是直观,电路拓扑和原理图几乎一一对应,适合刚接触的人。缺点是对求解器比较敏感,物理网络收敛问题偶尔让人头疼,仿真速度也比较慢。
第二条是用 Simulink 基础模块搭数学模型,比如用一个受控电压源和逻辑判断来表达开关动作。这种方式运行速度快,逻辑完全可控,适合做控制算法验证或平均模型。缺点是你需要自己写微分方程,距离真实电路比较远,开关过程细节也没有那么丰富。
我的建议是:如果是学习反激电路的建模与仿真,第一版直接用 Simscape Electrical 的线性变压器、理想开关、二极管和电容电阻搭电路;如果要验证复杂控制算法或者做快速反复参数扫描,再考虑用平均模型。
3.2 一步一步搭出反激开环模型
下面以 24V 输入、12V 输出、额定 10W、开关频率 100kHz 的小功率反激为例,给出搭建步骤。
第一步,建一个 Simulink 新模型,打开 Simscape Electrical 库,拖入 DC Voltage Source、MOSFET(或者 Ideal Switch)、Linear Transformer、Diode、Series RLC Branch(作为负载电阻和输出电容)、Parallel RLC Branch 之类的元件。注意:Simscape 的物理电路必须有明确的参考地节点,否则仿真会报错。
第二步,设置变压器参数。以线性变压器为例,原边自感取 100μH(包含漏感成分,比如励磁电感 95μH、漏感 5μH),副边自感按匝比 2:1 折算大约为 25μH,耦合系数 0.95。频率参数填 100kHz,功率等级填 10W 左右。这样变压器就能近似表达真实的漏感尖峰。
第三步,连 PWM 驱动。用 Simulink 库里的 Pulse Generator 直接输出方波脉冲,幅值设置成 1,占空比先按 0.5 设置,周期 10μs。如果用的是 Simscape 的 MOSFET,需要把 pulse 信号经过一个电压转换模块接到栅极输入端。
第四步,接测量和显示。用 voltage measurement 和 current measurement 测出输出电压、原边电流、副边电流、开关管两端电压,分别连到 Scope。为了便于后处理,也可以再接 To Workspace 模块,把关键信号存到 MATLAB 工作区。
第五步,运行模型。第一次运行如果出现“Initialization”报错,优先检查有没有接地、有没有纯电容回路、有没有不可导通的二极管方向。
3.3 参数计算:从目标规格推导仿真参数
在设参数这一步,很多人直接凭经验填,结果波形和设计目标对不上。我习惯把手算过程先写在纸上,再往模型里填。
刚才的例子,输入 24V,输出 12V,匝比 Np:Ns = 2:1。先假设工作在 CCM 边界附近,利用 CCM 增益公式:
[ V_{out} = V_{in} \cdot \frac{D}{1-D} \cdot \frac{N_s}{N_p} ]
代入已知量:
[ 12 = 24 \cdot \frac{D}{1-D} \cdot \frac{1}{2} ]
也就是:
[ 1-D = D ]
所以 D = 0.5,这是稳态工作的占空比初值。
接着估算励磁电感。按 10W 输出、效率 80%,输入平均功率约 12.5W,输入平均电流约 0.52A。CCM 模式下,输入电流波形是导通期间的三角波,占空比 0.5,因此峰值电流大约在 2A 附近。电感量由伏秒平衡决定:
[ L_m = \frac{V_{in} \cdot D}{\Delta I \cdot f_{sw}} = \frac{24 \times 0.5}{2 \times 100000} \approx 60\mu H ]
考虑裕量和实际磁芯参数,取 80μH~100μH 都合理。先填 100μH,仿真后观察电感电流波形,再微调占空比和电感量,直到输出电压稳定在 12V。
这个“先手算、后仿真、再微调”的流程,看起来慢,其实能省下大量反复试错的时间。
3.4 关键的仿真参数设置:Powergui 和求解器
如果用了 Simscape Electrical 库,模型里必须放一个 Powergui 模块。Powergui 里可以选择连续仿真或离散仿真。对于开关频率 100kHz 的电路,我推荐直接选“离散仿真”,离散步长设成 0.1μs 或 0.2μs,这样既能较准确分辨开关过程,速度也快。
求解器方面,如果整个模型是纯 Simulink 信号流加 Simscape 物理网络,默认的变步长求解器往往在开关动作瞬间反复缩小步长,造成仿真速度极慢。更好的做法是选 ode23t 或 ode15s,并且限制最大步长为开关周期的百分之一左右,比如 1μs。
一个经常被忽略的点:PWM 信号是 Simulink 信号域,主电路是 Simscape 物理域,两者连接处需要自然的接口模块。Simulink 的 Simscape 库里提供了 Simulink-PS Converter 和 PS-Simulink Converter,连接时注意信号单位,不然 Scope 上的数值会非常奇怪。
4. 从波形反推设计对不对——关键指标检查与参数扫描
4.1 开关管电压、电感电流、输出波形怎么读
模型跑起来之后,第一件事不是看电压准不准,而是看波形形态对不对。反激电路最核心的三个波形是:开关管漏源电压、原边电流、副边二极管电流。
开关管漏源电压在关断时刻会从接近 0 快速向上跳变,跳变后的平台值等于输入电压加上反射电压。用刚才的参数,反射到原边的电压大约等于 2×12V = 24V,叠加输入 24V,平台值约 48V。如果变压器存在漏感,波形顶端还会出现一个尖峰,尖峰的幅度取决于漏感和寄生电容的谐振,这是后面讨论漏感尖峰的基础。
原边电流在开关导通期间呈线性上升,如果工作在 CCM,它会从某个非零初始值开始上升;如果工作在 DCM,就从零开始上升。副边二极管电流则在开关关断期间出现,呈线性下降趋势,下降斜率受副边电压和副边电感影响。
输出电压波形应该是平均值接近 12V,叠加与开关频率同步的纹波。如果输出远超目标值或者出现明显的锯齿状大波动,先别急着改参数,回头检查变压器匝比和占空比。
4.2 验证增益公式:仿真结果与手算逐项对照
仿真不是随便跑个波形就算完,它最大的价值是帮你验证设计公式。我在做完一次仿真后,会把仿真测到的输出电压、占空比、励磁电流峰值和手算值列成一张表。
假设理论占空比 0.5,理论输出 12V。仿真开始后先等电路进入稳态,比如运行 5ms 后取后 2ms 的数据做平均。如果实测输出电压是 11.8V 或者 12.5V,属于正常偏差;如果差了 30% 以上,那大概率是参数设置或者同名端方向出了问题。
励磁电流峰值也可以对照:根据伏秒平衡,峰值电流等于 ( V_{in} \times D \times T_{sw} / L_m )。代入 24V、0.5、10μs、100μH,算出来是 1.2A。如果仿真波形里的峰值完全对不上,检查变压器的励磁电感是不是真的设置成了 100μH,或者耦合系数明显影响了有效励磁电感。
4.3 用参数扫描找出占空比和负载的影响
开环模型的另一个重要用途是看参数变化对输出的影响。利用 MATLAB 脚本批量修改 Pulse Generator 的占空比,收集稳态输出电压,很快就能画出一条“控制-输出”曲线。这个曲线对后面设计闭环控制器特别有用。
我习惯这样写一个小脚本:
modelName = 'flyback_openloop'; D_values = 0.2:0.05:0.7; Vout_values = zeros(size(D_values)); for k = 1:length(D_values) set_param([modelName '/Pulse Generator'], 'DutyCycle', num2str(D_values(k)*100)); simOut = sim(modelName, 'StopTime', '0.01'); vout = simOut.get('Vout'); Vout_values(k) = mean(vout.signals.values(end-1000:end)); end plot(D_values, Vout_values, 'o-'); xlabel('Duty cycle'); ylabel('Output voltage (V)');脚本里用到了 To Workspace 模块,模块采样时间设为 1μs,变量名设为 Vout。跑完后就能看到输出随占空比的大致变化趋势。
如果同时把负载电阻做成一个可变参数,还能看到负载阶跃下输出电压的突降或突升。这个实验虽然简单,但对理解开环特性、判断系统是 CCM 还是 DCM 帮助很大。
5. 仿真现场常见的坑和我的排查思路
5.1 报错、不收敛、波形飞了:先检查这四件事
Simscape 物理网络经常让人一头雾水,模型看起来完全正确,一仿真就报错。几年下来,我总结出四件最值得先检查的事。
第一,有没有接地。物理电路必须有一个参考地,否则求解器无法确定绝对电压。第二,有没有不可求解的回路,比如电压源直接并联电容而没有串联电阻。第三,开关管和二极管是否都处于正确状态,尤其是初次仿真时器件默认全是导通的,可能造成短路。第四,离散仿真步长是否过大,步长为 1μs 但开关过程只有几百纳秒,那必然采不到细节。
如果遇到“Matrix is singular”这类报错,不要急着去猜参数,先把电路断开成多段,一段一段连接,每连接一段就运行一次,能很快定位问题。
5.2 漏感尖峰为什么总是出现,怎么在仿真里观察
真实的反激电路里,变压器不可能是理想耦合,总存在漏感。漏感和开关管输出电容会在开关关断瞬间形成 LC 谐振,在漏源电压上叠加一个尖峰。仿真模型里如果不希望出现这个尖峰,可以把耦合系数设成 1,但那就和实际电路偏离太远。
我想看到的更真实的波形,就会在变压器参数里留一个 5μH 的漏感。关断瞬间,漏源电压平台值 48V 之外会叠加上一个尖峰,尖峰顶部可能到七八十伏。如果不管它,仿真虽然能跑,但这个尖峰对应的电压应力会直接影响你选 MOSFET 的耐压等级。
工程上应对漏感尖峰常用 RCD 钳位电路。我在仿真模型里也会加入:一个二极管、一个电阻、一个电容并联在原边。钳位电容电压大致取反射电压的 1.2 倍左右,钳位电阻阻值根据漏感储能损耗功率计算。加入钳位后,能看到漏源电压尖峰被明显削平,仿真波形更接近实测。这也是从“能跑的模型”走向“能指导硬件设计的模型”的关键一步。
5.3 开环跑通了,下不步怎么往闭环走
很多朋友仿真只停在开环,觉得波形对了就够了。但实际电源一定是有反馈的,至少要有输出电压采样和占空比调节。反激电路闭环仿真虽然稍复杂,但路径很清晰:把输出电压通过 PS-Simulink Converter 采进来,和参考电压做差,经过一个 PID 控制器,再控制 Pulse Generator 的占空比。
这里重点提醒一个反激特有的坑:如果电路在 CCM 模式下,控制器的带宽不能太高,否则会受右半平面零点影响变成不稳定。经验做法是,穿越频率取开关频率的十分之一以内,也就是 10kHz 左右。仿真时你可以在负载上叠加一个阶跃,观察输出电压的响应,如果出现持续振荡,先把 PID 增益往下调,再慢慢探索稳定性边界。
5.4 一个实用技巧:把仿真数据和手算结果放一张图里
建模型跑仿真只是手段,真正有说服力的是仿真结果和理论计算互相印证。我在完成一个阶段后,会把不同占空比、不同负载下的仿真输出电压和用增益公式算出来的理论值画在同一张图上,偏差控制在百分之几以内就说明模型可信,之后基于这个模型的任何改动都有依据。
这个小习惯看着不起眼,但在实际项目中能避免不少“仿真跑通了但硬件做出来完全不一样”的尴尬。反激电路的建模与仿真过程,说到底就是反复追问“为什么是这个波形”“为什么是这个值”,等你把每个波形都解释清楚了,对反激这个拓扑的理解算是真正到位了。