从MATLAB到PSIM:半桥LLC谐振变换器设计与仿真全流程

📅 发布时间:2026/10/21 17:41:11
从MATLAB到PSIM:半桥LLC谐振变换器设计与仿真全流程
做电源设计这几年身边同事聊充电器、服务器电源、车载充电机绕不开一个拓扑LLC。尤其是半桥LLC谐振DC/DC变换器几百瓦到上千瓦的功率段几乎都有它的身影。今天想把这套基于MATLAB和PSIM的完整设计流程从头捋一遍从规格书到参数计算从波形验证到问题排查把半桥LLC的设计与仿真一次说透。这套流程适合刚接触谐振变换器的学生也适合已经做过一两款硬开关电源、想转到软开关方向做产品的工程师。仿真不是目的能借助MATLAB把参数算明白、借助PSIM把波形看通透才算把LLC这个拓扑真正吃进脑子。1. 半桥LLC为什么值得认真做一次联合设计1.1 拓扑核心Lr、Cr、Lm三件套的分工半桥LLC从结构上看并不复杂前半部分是两个开关管组成的半桥逆变器产生高频方波中间是一个谐振槽包含串联电感Lr、串联电容Cr和变压器励磁电感Lm副边一般是中心抽头全波整流输出电容平波。很多人第一眼看到这个电路会问这不就是LC串联谐振加了个励磁电感吗对但恰恰是Lm的加入让这个拓扑同时获得了“宽范围调压”和“软开关”两样东西。Lr和Cr是主谐振元件负责形成正弦电流让开关管在过零点附近动作Lm则参与“降压”或者说“增益调整”。当负载较重时副边整流二极管导通输出电压把变压器副边钳住Lm两端电压基本被钳在nVo附近此时Lm几乎不参与能量传输当负载变轻或输入电压变化需要更高增益时Lm两端电压松动谐振腔的实际等效电感变成LrLm谐振频率下移变换器进入另一种工作模式。这一个“Lm参与/不参与谐振”的切换就是LLC能兼顾宽范围增益和全负载软开关的内在逻辑。半桥结构相比全桥少两个开关管驱动电路、成本、占板面积都更友好非常适合300W到1000W这个大众功率段。代价是变压器原边电压只有母线电压的一半同样的输出功率下原边电流更大开关管电流应力偏高。所以在选型时半桥LLC通常用在输入电压相对稳定、母线电压有PFC前级的场合。真要做很宽的输入范围比如9V到36V那就要考虑别的拓扑了。1.2 增益特性与工作区间三个变量决定一切设计LLC绕不开FHA基波近似法。说白了就是把半桥中点输出的方波只提取它的基波分量来分析谐振腔的增益特性。工程上绝大多数参数计算都基于这个方法只要Q值不是特别极端FHA的误差在可接受范围内给实际样机留出裕量即可。在FHA下半桥LLC的电压增益可以写成M x / sqrt( x² (1x²)·Q²·(fn - 1/fn)² 2Qx·(fn - 1/fn) ), 其中 x fn·Ln·Q是不是看着头大其实只需要抓住三个量归一化频率fn开关频率除以谐振频率fr、电感比LnLm除以Lr、品质因数Q。fn决定增益的大致高度Q决定曲线在谐振点附近陡不陡Ln决定峰值增益能到多高。谐振点fn1时增益恰好等于1这是一个最重要的锚点。实际工作区间可以分成三个区域。开关频率低于fr时增益大于1变换器工作在升压区副边二极管电流会断续二极管可以零电流关断没有反向恢复问题频率高于fr时增益小于1副边电流连续二极管是硬关断存在反向恢复损耗频率等于fr附近时各项性能折中最好。设计的目标很明确让额定输入电压落在fr附近工作用频率往左右移动来对付输入电压波动和负载变化。1.3 设计需求拆解从输入输出规格到增益范围参数设计不能凭空选得先把规格书里的硬指标列出来。我习惯拿一个典型的中功率电源来做例子输入母线电压标称值380V波动范围330V到400V也就是前级PFC输出母线输出12V最大输出电流30A额定功率360W目标效率93%谐振频率先定在100kHz方便后面算元件值和选磁材。半桥LLC有一个好性质fn1时增益等于1也就是说在标称输入电压下变压器变比可以直接反推。增益公式里的M和变比的关系是 M 2nVo/Vin让M1得到n Vin_nom / (2Vo) 380 / 24 ≈ 15.8取整16。这个变比不是拍脑袋来的它决定了变压器原边匝数对副边匝数的比例也决定了副边整流管的电压应力。有了变比和输入范围增益范围也就出来了。最低输入电压330V时需要M_max 380/330 ≈ 1.15最高输入电压400V时需要M_min 380/400 ≈ 0.95。好基本上整个设计的任务就是让增益曲线在满载时能覆盖1.15这个上限同时还有一点裕量。这一串数字在下一节会直接变成Lr、Cr、Lm的具体数值。2. 用MATLAB把谐振参数算明白从公式到脚本2.1 FHA参数计算路径Lr、Cr、Lm的推算过程参数设计的起点是等效负载电阻。在FHA框架里输出负载折算到变压器原边的等效电阻是R_ac 8n²R_L/π²。这里R_L是输出满载电阻360W/12V对应30A所以R_L 0.4Ω。把n16带进去R_ac ≈ 0.81 × 256 × 0.4 ≈ 83Ω。这个83Ω很关键后面所有谐振参数的求解都以它为基准。接下来的核心问题是选Q值。Q Z0 / R_ac其中Z0 sqrt(Lr/Cr)等于特征阻抗。Q值选多少不是随手定的要看增益曲线能不能覆盖最低输入的峰值增益。工程上常用电感比Ln Lm/Lr我一般取4到6这里取5。在Ln5的前提下先用MATLAB扫一组不同Q值下的增益曲线看哪个Q能让满载最低输入时的增益超过1.15并且还有5%左右裕量。我用的一段MATLAB脚本长这样clear; clc; Vin_nom 380; Vin_min 330; Vo 12; Po 360; fr 100e3; % 谐振频率 Ln 5; % 电感比 Lm/Lr n Vin_nom / (2*Vo); % 变比约16 RL Vo^2 / Po; % 满载等效负载电阻 Rac 8 * n^2 * RL / pi^2; % FHA等效原边电阻 fn linspace(0.5, 1.4, 500); for Q [0.3 0.4 0.5 0.7] x fn .* Ln .* Q; M x ./ sqrt(x.^2 (1x.^2).*Q.^2.*(fn-1./fn).^2 2.*Q.*x.*(fn-1./fn)); plot(fn, M, LineWidth, 1.2); hold on; end yline(1.15, --, Mmax1.15); grid on; legend(Q0.3,Q0.4,Q0.5,Q0.7,Mmax); xlabel(归一化频率 fn); ylabel(增益 M);这个脚本跑出来的结果很直观Q0.5时要在最低输入电压下拿到1.15的增益频率要压到0.72倍谐振频率以下留的裕量很薄Q0.3时在fn0.7附近增益能到1.22左右裕量充足。所以我实际设计时通常会选Q0.3到0.35之间。注意Q不是越小越好后面再展开说。参数接着往下算。Z0 Q × Rac 0.3 × 83 ≈ 25Ω。Lr Z0 / (2πfr) 25 / (2π×100000) ≈ 39.8μH。Cr 1 / (2πfr×Z0) 1 / (2π×100000×25) ≈ 63.7nF。Lm Ln × Lr 5 × 39.8 ≈ 199μH。取整后Lr 39μHCr 66nFLm 200μH这套参数放到PSIM里仿真效果和FHA预测基本对得上。2.2 最大增益与Q值取舍曲线怎么用才不翻车Q值太小除了前面说的增益裕量还有什么代价特征阻抗Z0随Q下降而变小所以Lr变小、Cr变大。Cr变大意味着谐振电容的储能变大充放电电流的峰值不一定变化很大但电容体积和耐压要求会上升另一方面Q太小导致增益曲线峰值特别高轻载时频率稍微一降增益就猛蹿环路很容易进入跳频模式控制起来非常难受。所以Q值的选择是一个典型的折中往大了取满载最大增益不够低输入时输出电压顶不上去往小了取控制难度变高功率器件和电容应力变差。我个人的经验是在保证满载增益有5%到10%裕量的前提下尽量取偏大的Q。上面的例子里Q0.3留的裕量充足可以尝试Q0.35再算一次如果fn最低约0.72时增益还能到1.15以上就取0.35指标余量更均匀。还有一个必须要检查的点是ZVS条件。半桥LLC的励磁电流在死区里给开关管结电容放电能不能实现ZVS就看励磁电流够不够大。励磁电流峰值近似为I_m nVo / (4Lm·fr)代入n16、Vo12、Lm200μH、fr100kHz得到I_m ≈ 2.4A。实际死区时间内需要的电流大约是C_node×Vin/td假设桥臂等效电容500pF死区时间100ns那需要1.9A。2.4A比1.9A大ZVS能实现但裕量只有一点三倍左右。如果死区调到150ns需要1.27A裕量就很舒服。这个校验放在MATLAB里写一行就能算别省直接决定Lm能不能选这么大。2.3 控制环初步校核在PSIM之前先看频域很多人拿到参数直接就去PSIM搭电路结果闭环跑起来要么振荡要么掉电然后一头雾水。我习惯先花半小时在MATLAB里把环路方向和小信号模型理顺再去PSIM里联调能省下大半天的排查时间。LLC的控制量是开关频率被控量是输出电压。用小信号模型近似LLC功率级的控制到输出传递函数可以简化成一个低通加一个延迟环节延迟时间约等于一个开关周期。压控振荡器的增益Kvco定义为单位控制电压对应的频率变化量输出滤波电容Co决定低频极点位置。基于这个简化模型用bode图算一下穿越频率和相位裕量PI参数就有了初值。我常用的方式是在脚本里直接定义传递函数s tf(s); Kvco 20e3; % 20kHz/V M_gain 1.15; % 低频增益近似 fp 1/(2*pi*470e-6*0.4); % 输出电容与负载构成极点约850Hz G_power M_gain / (1 s/(2*pi*fp)); G_power G_power * exp(-1e-5*s); % 加一个开关周期延迟 bode(Kvco * G_power); grid on;然后根据穿越频率取开关频率的十分之一到二十分之一也就是5k到10kHz设计PI参数。这样到了PSIM里面PI的初值基本就能稳定运行只剩下微调限幅和抗积分饱和。这一步看起来很不起眼但真正到了联调阶段就知道它的价值了。3. PSIM功率级搭建与PFM闭环仿真实操3.1 功率电路建模要点变压器、死区、初值一个都不能少PSIM里搭建半桥LLC的功率级难的不是画元器件而是保证模型细节和真实硬件一致。第一个容易踩坑的地方是变压器。我的做法是直接用“理想变压器 独立电感”组合原边串联Lr励磁电感Lm跨接在原边Cr放在谐振回路里。不要在PSIM的变压器参数里填一个很大的励磁电感又额外串Lm那样谐振腔参数会叠加混乱。第二个是要保留体二极管和寄生电容。PSIM的开关管如果选理想开关就没有体二极管ZVS死区期间半桥中点电流无处续流波形会完全失真。我习惯给开关管设置最小的导通压降、保留内部二极管并在开关管漏源之间并联一个等效Coss电容。Coss的取值可以从器件手册里读如果仿真版本不支持直接填模型就并一个几百皮法的外置电容效果大体对。第三个是谐振电容和电感初值。如果仿真目标是看稳态工况可以直接从上一个稳态结果的热启动开始节省时间。但如果是看启动冲击和软启动逻辑必须把Lr初始电流设为0、Cr初始电压设为0从零状态开始跑这样才贴近真实上电。死区时间设置在PSIM里要明确。两个开关管不能用同一个PWM信号必须生成互补且带死区的驱动波形。死区设太小桥臂直通设太大死区期间励磁电流给寄生电容放电完成后开始反向充电等于白损失电压时间。工程上根据Coss和励磁电流估算的死区时间在80到150ns仿真里可以扫一组值对比波形。3.2 闭环频率调制实现PFM方向别搞反LLC调的是频率不是占空比。PSIM里实现PFM最直接的办法是使用VCO压控振荡器模块或者用C Block自己写频率调制逻辑。VCO的好处是方向清晰、参数外露适合快速验证C Block的好处是软启动、限幅、频率上下限都能写在一起更接近真实控制器的行为。C Block实现频率调制的基本骨架可以这样写注释里说明需要按自己的PSIM版本调整非标准函数static double phase 0; double fmax 150e3; double fmin 60e3; double fout; double Kp 1.0; // 误差到频率的增益按实际标定 double err in[1]; // 电压误差电压低时err为正 fout 100e3 - Kp * err; // 电压低→频率降→增益升 if(fout fmax) fout fmax; if(fout fmin) fout fmin; phase 2.0 * PI * fout * DT; // DT为仿真步长 if(phase 2.0 * PI) phase - 2.0 * PI; out[0] (phase PI) ? 1.0 : 0.0; // 一路PWM这里最关键的是极性方向LLC工作在fr附近以下时频率降低增益升高。所以输出电压偏低控制环路必须把频率往下压也就是误差到频率的增益Kp符号必须是减。我见过不止一次有人把符号写反结果输出电压一路跌到零还以为是PI参数问题。实际上只要换成另一路VCO输出波形立刻就能恢复正常。真实的控制器还需要软启动。上电时频率先给到最高然后按一定的速率往下扫输出电压随频率降低逐渐建立。如果一上来就固定100kHz运行谐振电容初始电压为零第一个周期的电流尖峰能轻松超过稳态电流的十倍仿真步长稍大就直接发散。软启动逻辑我一般也放在C Block里用一个积分变量控制fout从150kHz缓慢降到指令频率。3.3 启动、稳态与动态切换仿真要看哪些关键波形搭建完成后仿真不能只看输出电压稳不稳必须看几个关键波形否则可能只是“碰巧稳住了”。首先是半桥中点电压Vab。它应该是幅值等于母线电压的方波上升沿和下降沿要干净。其次是谐振电流Ir和励磁电流ILm。在fr附近工作时Ir基本是正弦ILm是三角波接近开关切换点时Ir和ILm的差值正好是输出给副边的电流。如果Ir在一个开关周期内出现明显的阶梯跳变通常说明变压器同名端接反或者死区设置不妥。ZVS是否达成的检查方法很直接看开关管开通瞬间的漏源电压Vds。如果Vds在Vgs拉高之前已经降到零ZVS成立如果Vgs已经拉高Vds还在半空中那是硬开通波形上会看到明显的尖峰。动态性能则可以用负载阶跃模块把负载从100%跳到25%观察输出电压在几个毫秒内是否恢复到设定值。LLC因为是调频控制带宽通常不能做太高恢复时间在几百微秒到一两毫秒都算正常。仿真步长的选择也得讲究。100kHz开关频率对应10μs周期我一般把步长设为10ns到20ns这样谐振电流的每个周期能采样500到1000个点波形细节不会丢失。步长太大看起来波形平滑其实是抽样混叠算出来的损耗和峰值电流都会严重失真。4. 我踩过的仿真坑问题排查与提速技巧4.1 仿真发散先查这四个位置PSIM仿真发散是最常见的问题但原因通常集中在四处。第一个是死区时间设成了零或者负值桥臂直通后电感电流瞬间撞顶任何求解器都扛不住。检查方法是在驱动波形上看两个管子驱动是否存在交叠。第二个是谐振电容初始电压不匹配启动时产生冲击建议先给Cr设一个合理初始值或者用软启动扫描频率的方式让电容自然建立电压。第三个是变压器同名端接反次级整流输出相位错误电流波形会出现严重不对称输出可能振荡发散。第四个是仿真步长太大谐振腔的高频细节丢失等效出一个错误的稳态工作点。排查的时候不要上来就怀疑模型。我一般按顺序检查先看驱动时序再看变压器同名端然后看Lr/Cr/Lm数值有没有单位错误最后才调步长和解算器。很多时候问题是单位换算比如把mH写成了uH数值差了1000倍功率级行为完全变了。4.2 ZVS到底通没通用波形说话ZVS的判断不能靠“看起来像”要用波形证据。具体操作是把示波器窗口放到一个开关周期同时显示上管的Vgs和Vds。如果Vds在Vgs上升沿到来前已经降到接近零且谐振电流Ir在关断期间流过了体二极管那就是标准的ZVS。还有一种方法是在死区时间内看半桥中点电压如果中点电压在死区里已经翻转完成说明励磁电流足够给寄生电容放电了。我遇到过一种很隐蔽的情况稳态时ZVS看起来成立但动态满载切换或者启动瞬间失效。原因多半是励磁电流在瞬态过程中变小了Lm取值偏大导致ZVS裕量不足。仿真里可以用参数扫描把Lm从180μH到220μH扫一遍观察死区期间Vds的下降速度这里基本能看出哪套参数不会在瞬态翻车。4.3 增益不够或环路失控多数是参数域选错了如果输出电压在满载最低输入时顶不上去首先检查工作频率是否已经压到了最低限频。如果频率已经很低但仍然缺增益多半是Ln选太大了。Ln大意味着Lm大谐振腔的峰值增益下降。把Ln从5改成4峰值增益会有明显提升代价是励磁电流增大轻载效率稍微下降。相反如果输出电压在轻载时飘高则需要提高最小频率限制或者加入跳频逻辑。环路失控的表现通常是输出低频振荡。原因可能是误差到频率的增益方向反了也可能是PI参数太激进。我习惯先把积分系数设得很小比例系数也减半看波形能否稳定然后把积分时间常数逐步往下降。频率调制环路有天然的延迟穿越频率超过开关频率的五分之一就会不稳这点在调PI时要牢记。4.4 提速与结果可信度仿真参数设置的取舍追求仿真速度没问题但不能牺牲可信度。PSIM里有几个选项会影响速度和精度求解器阶数、允许迭代次数、最大步长。我通常的做法是先用大步长把电路跑通确认没有接线错误再逐步减小步长观察波形是否稳定不变。如果步长减半后波形峰值电流变化超过5%说明之前的步长不可信需要继续缩小。另外要控制仿真时长。LLC是高频开关电路跑100ms相当于一万个开关周期已经能覆盖绝大多数动态过程。动态负载阶跃仿真只要跑10ms到20ms就足够看出恢复特性。如果想让数据更快出来可以在稳态后缩短记录区间或者在稳态时用热启动避免每次都从零开始。这些习惯能把仿真时间从几小时压缩到十几分钟调试体验完全不一样。最后说点个人的实操体会。仿真里的LLC永远比板子上的LLC听话即使参数完全一致PCB走线寄生、变压器漏感、二极管的实际反向恢复特性都会让增益曲线平移、振铃变大。所以我现在的工作习惯是先用MATLAB算一遍得到一个可信的参数区间再到PSIM里做开关级验证和环路微调最后留出10%左右的裕量去打样。这套双平台流程能明显压缩从零开始做一款LLC电源的验证周期适合当模板反复用。你在自己调试过程中遇到跟上面看起来不一样的情况多半不是公式错了而是某个边界条件没对上顺着参数域和波形特征去查一般都能找到答案。