搞过LLC谐振变换器仿真的朋友应该都有体会,第一版模型跑起来不难,难的是让它在宽负载范围下都保持高效率、低应力、稳定不炸。额定点满载的时候变频控制(PFM)一切都很美好,一旦负载切到10%甚至空载,开关频率往上飙到200kHz以上,驱动都懒了,死区损耗占比变大,效率曲线难看,环路还容易抖。这时候就得让“移相控制(PSM)”上场搭把手。很多人问我,到底是变频加移相混合控制怎么个混合法,Simulink里模型该怎么搭,切换逻辑怎么设计才能不振荡。这篇就是把我的完整做法、参数推导和踩坑记录都摊开来讲,给做电源仿真和数字电源开发的同学一份可以直接抄作业的参考。
这个方案的核心价值在于:只靠一套PID和两个调制信号生成模块,就能让LLC在全负载范围都工作在软开关状态下,输出稳定且动态响应不差。适合正在做DC-DC电源仿真、数字电源控制算法验证、或者准备把Petri网一样的控制状态机从Matlab搬进DSP的工程师参考。我介绍的所有模型结构、参数和逻辑都基于常见实践,具体数值需要按你的功率等级重新算一遍,但整个方法和排查思路是通用的。
1. 为什么明明有变频,还非要加移相?
1.1 LLC变频控制的天然短板
LLC谐振变换器最吸引人的地方就是两个谐振点:第一谐振频率fr1由谐振电感Lr和谐振电容Cr决定,第二谐振频率fr2由(Lr+Lm)和Cr决定。输出增益曲线在fr1附近有较平缓的“平台区”,在这个区域里开关频率小幅变化就能覆盖较大增益区间,而且开关管能实现ZVS,二极管能实现ZCS,效率非常好。
缺点也在增益曲线里。当负载变轻,为了维持输出电压,开关频率必须往高处跑,跑到fr1的两倍以上都是常态。频率一高,首先驱动损耗和开关损耗不再可以忽略,其次磁芯和绕组的高频损耗跟着涨,核心问题是增益曲线在高频段变得非常平缓,频率从150kHz调到200kHz,增益才降一点点,没有多少调节裕量。环路增益不足,动态响应就慢,超调还大,整个系统给人一种“特别不跟手”的感觉。
1.2 移相控制补什么短板
移相控制改变的是全桥上下桥臂驱动信号的相位差。超前桥臂和滞后桥臂不再同时导通,输出电压波形从完整的方波变成了带死区的准方波,等效基波幅值降低,相当于直接压低了增益,而开关频率不必再大幅上升。
这意味着轻载时可以用相对固定的、不太高的频率,依靠减小有效占空比把输出电压压住。移相控制的核心优势就是轻载调节能力强,变换器可以工作在较低频率下,磁性元件损耗可控,环路响应也更好。代价是移相量增大后会牺牲部分软开关范围,滞后桥臂的ZVS变差,所以移相量不宜开得过大,最好控制在准方波占空比不低于0.4左右。
1.3 混合控制的真实目标
把两者组合起来,目标很明确:重载时以变频为主,因为PFM在这个区域天生就是最优解;轻载时以移相为主,让频率不要飙上去;中间过渡区则两者同时小幅参与,通过合理的分配逻辑平滑过渡,不能有明显的输出跳变和模式切换振荡。
这套方案的优势是既保住了重载效率,又解决了轻载调节问题,整个负载范围内开关频率都被限制在合理区间(比如60kHz到160kHz),功率器件的电压电流应力也都能控制在相对稳定的水平。对数字电源来说,实现起来并不复杂,反而比复杂的突发模式更容易做稳定。
2. 控制方案选型:混合策略怎么搭才合理
2.1 常见的混合思路对比
行业里混合LLC控制大致可以分成三类思路。第一类是“区域切换式”,负载重时纯跑PFM,轻到某个阈值后直接切到纯PSM,切换点用滞环比较器维持;第二类是“并行接管式”,频率环和移相环同时存在,正常情况频率环输出有效,当频率达到上限值后再让移相环开始起作用,频率环到限幅后退出;第三类是“联合调制式”,一个PI输出同时分配成频率和移相角,同一时刻两者都在变,相当于多了一个自由度来优化效率曲线。
我实际做下来,第一类实现最简单但切换冲击最明显,容易在模式切换瞬间看到输出电压凹陷或者尖峰。第三类控制自由度最高,但依赖高效率查表或者在线寻优,仿真阶段调参时间和计算资源都划不来。我最推荐第二类,工程上最容易收敛,策略直观,也天然带保护性质:频率到顶了才开始移相,相当于给频率环加了上限保护,不会出现频率无限往上飘的局面。
2.2 我选的架构和切换边界
我最终采用的方案如图(模型里看)所示:快环是两个PI控制器,一个输出开关频率,一个输出移相角。误差信号是输出电压参考与实际输出电压的差。这个公共误差同时送到两个PI,频率PI输出作为PWM开关频率,移相PI输出作为滞后桥臂的延时角度。
切换逻辑用状态机实现。状态一为“纯PFM模式”,条件是开关频率未达到fmax且负载电流大于切换阈值;状态二为“频率锁定、移相介入模式”,条件是开关频率达到fmax,或者误差持续小于某个小值且时间超过延时。进入状态二后,频率PI的输出被锁定在fmax的95%附近,移相PI从0开始缓慢展开,移相角的变化速率做斜率限制,防止瞬态跳变。状态三为“退出保护模式”,当移相角减小到接近0度并且负载电流回升,再切回纯PFM,同样加滞环。
2.3 边界参数不能拍脑袋
切换阈值的选择直接影响系统会不会来回振荡。我用的办法是给“模式切换标志”加滞环:电流阈值设为额定电流的15%,但进入移相模式需要负载电流低于12%,退出时需要高于18%。这样留出了6个百分点的差异带,负载波动在阈值附近来回晃动时,系统不会在PFM和PSM之间反复横跳。
除了电流滞环,还把输出电压误差也作为进入条件。如果只是电流轻但误差还很大,说明负载刚发生瞬态,暂时不切段,先让频率环顶上去,等输出电压稳定了再切换。仿真里这个逻辑只需要两个Memory块和几个比较器就能搭出来,但带来的稳定性提升非常明显。
3. 主电路参数设计:谐振腔数值不能凭空定
3.1 从规格书到等效电阻的计算流程
仿真的主电路参数全按一套实际的规格来算。以输入400V、输出48V/20A、满载960W为例。变压器匝比选原边8:1,对应副边全桥整流时额定输入下增益接近1,可以工作在fr1附近。负载电阻RL=48V/20A=2.4Ω,折合到原边的等效交流电阻R_ac约为(8/π²)·n²·RL,代入n=8,R_ac差不多是124Ω。
第一谐振频率取100kHz,品质因数Q取0.4。这个Q值的选择有讲究:太小会让增益曲线峰值过高,启动和动态时谐振电流应力大;太大会让曲线太陡峭,频率调节范围不够。0.4左右是宽范围输出常用的折中点。然后算Lr=(Q·R_ac)/(2π·fr)=0.4·124/(2π·100k)≈79μH,Cr=1/((2π·fr)²·Lr)≈32nF,励磁电感Lm取Lr的4倍左右,即320μH。
3.2 变压器模型和死区设置细节
变压器建模直接用Simulink里的线性变压器模块,勾选带磁化电感,磁化电感填Lm,漏感分成原边和副边两部分,其中原边漏感并入Lr、副边漏感折算后合并。很多朋友在这里图省事,直接用理想变压器加外部电感,结果谐振电流波形总是差那么点意思,就是因为漏感位置不对,导致谐振腔阻抗分布不对。
死区时间设置为200ns,对应100kHz满载开关周期刚好是2%。死区对ZVS很关键,LLC要软开关必须让死区期间谐振电流给开关管结电容完成充放电。Simulink仿真里死区设置得太小,驱动信号容易毛刺;太大则波形占空比损失,增益上不去。我建议从1%开始调,看谐振电感电流过零点是否在开关时刻附近,逐步调整。
3.3 求解器设置是仿真的隐形坑
LLC谐振变换器是高阶谐振系统,仿真步长选错了轻则波形震荡失实,重则直接发散。我的经验是固定步长取开关周期的二十分之一到五十分之一,100kHz对应0.2μs,建议取0.1μs。求解器选离散或ode3(即三阶龙格库塔),不要用变步长ode45跑整段稳态,不然仿真时间会拉到怀疑人生。
如果要在环路里做动态特性验证,必须用定步长离散求解器,因为PWM脉冲发生器和状态机在变步长下会产生额外的时间抖动,导致每个周期看到的波形都不一样,调试时很难分辨是控制问题还是数值问题。
4. Simulink模型搭建实录
4.1 主电路拓扑搭建步骤
模型我分三级来搭。第一级是输入源和全桥。直流源电压设为400V,全桥用四个MOSFET理想模型,注意每个开关管自带反并联二极管,这组二极管是电流反向通路的关键。如果是仿真ZVS波形,二极管必须存在,不能用理想开关替代。
第二级是谐振腔:从桥臂中点引出Lr,经过Cr接到变压器原边,变压器原边并联Lm。Cr的位置有两种常见接法,一种在桥臂输出端串联,一种在下桥臂中点并联到地。我选串联在谐振腔里,这样寄生参数更接近实物,谐振电流直接就是Lr电流。
第三级是副边和负载。全桥整流二极管采用肖特基等效模型,正向压降设0.4V左右,导通电阻设毫欧级。输出滤波电容取470μF加一点ESR约50mΩ,这样更接近实际电容特性,不会出现理想电容在瞬态时电压纹波过小的问题。负载用RL串一个受控电流源并联,方便做负载跳变实验。
4.2 控制环路具体连线方式
控制部分我按三块来连。第一块是采样与误差计算,输出电压经过一阶低通滤波后再和参考值相减,滤波时间常数取开关周期的5到10倍,这样采到的电压纹波不会直接灌进PI造成调节器饱和震荡。
第二块是频率PI和移相PI。两个PI都采用抗积分饱和结构,频率环输出限幅在60kHz到160kHz,移相环输出限幅在0到120度。比例积分参数先按经典整定:频率环Kp取0.001,Ki取0.05;移相环Kp取0.005,Ki取0.1。这只是初值,要在动态调试里继续优化。
第三块是PWM调制。频率信号通过一个VCO模块产生载波,四个驱动信号由三角波比较和RS触发器生成。超前臂两个开关互补,滞后臂相对超前臂延迟θ/(2π·fsw)秒。这里最容易出错的是移相角单位,Simulink里延迟模块用秒,记得把角度换算成时间,我在这上面吃过大亏,给定120度但延迟时间没换算,结果相当于一直满载运行。
4.3 模式切换逻辑的仿真实现
切换逻辑我建议用Stateflow实现,虽然几个逻辑门也能拼出来,但状态多了以后可读性和调试性差很多。三个状态分别是PFM_ON、PSM_ON和EXIT_CHECK。进入PSM_ON的条件用两个输入:负载电流和频率上限标志。进入条件在外部用逻辑运算生成,输出两个布尔量,Stateflow里只需要做状态转移。
退出PSM_ON时加一个斜坡延时模块,让移相角以每秒50度的速率回归零,同时频率PI从锁定值开始恢复调节。这个退坡设计是仿真中调试出来的,直接硬切会让输出电压瞬间顶上去,因为移相角消失的瞬间等效占空比跳变,输出能量突然增大,输出电压马上抬升一个台阶。
4.4 软启动与保护逻辑补全
仿真模型只做稳态控制是不够的,启动冲击电流经常让仿真直接发散。我加了软启动时序:初始开关频率设定为200kHz,让LLC远离谐振区低增益,然后按照每毫秒10kHz的速率向工作频率靠近。移相角在启动过程中固定为0,等频率稳定在目标附近后才允许切到闭环调节。这个过程在模型里就是一个Ramp模块串一个小型状态机,约30行代码不到。
过流和过压保护在仿真中也建议加上。谐振电流RMS超过阈值就封锁PWM脉冲,输出过压同样封锁。这对后面做故障注入非常有价值,比如模拟负载短路时,可以看到封锁时序是否够快。没有保护逻辑的模型调试动态响应时很容易因为一次操作失误重新跑十几分钟的仿真。
5. 波形分析与关键性能指标
5.1 满载纯变频状态的软开关判断
满载100kHz附近时,重点看谐振电流波形是否正弦,以及开关管漏源电压在驱动信号来临前是否已经被钳位到零。具体在Scope里叠加同一桥臂上下管的Vds和Vgs,如果Vds在Vgs变高之前已经降到零附近,说明ZVS成立。
另一个判断点是谐振电流的过零时刻。超前桥臂ZVS需要谐振电流在死区时间内变化到足够的负值,能够抽走结电容电荷。如果死区长度不够或者电流过零点离开关时刻太近,Vds下降过程会拖到驱动开启之后,这时波形上能明显看到Vds不是陡降而是慢慢爬下去,这就是硬开关的前兆。实测中如果看到这种波形,优先加长死区或者增大Lm/Lr比例。
5.2 轻载移相介入后的对比数据
我在10%负载下分别跑了纯PFM和混合控制两组仿真。纯PFM在10%负载时频率跑到200kHz左右,谐振电流波形很矮,输出电压纹波脉动变大,毛利大概是波形尖刺多、驱动脉冲间隔不均匀。混合控制模式下频率被限制在160kHz,移相角展开到55度附近,输出电压纹波基本没有变化,但开关频率降下来之后驱动波形间距均匀,从仿真器报的损耗数据看,开关损耗下降了差不多三成。
有一个值得注意的现象:移相角增大后,滞后桥臂的ZVS范围会变差,在过大移相角时能看到滞后桥臂的Vds下降速度变慢。这是移相控制的固有特性,不必追求把移相角开到90度以上,能在40到70度之间解决频率上飘问题就已经达到目的。
5.3 动态负载跳变的过渡表现
仿真里做了一次满载到10%负载的阶跃,时间点在0.2秒。纯变频控制下,输出电压需要大约2ms恢复,期间频率冲到200kHz以上,有一段明显的高频振荡尾迹。混合控制下,频率环先往上抬,碰到160kHz频率限幅后移相环开始接管,由于有斜率限制,输出电压的过渡速度稍微慢一点,约2.4ms,但整个过程没有出现电压过冲超过5%的情况,振荡尾迹也基本消失。
如果切换逻辑没做好,这一阶段会看到两种典型故障:一是输出电压突然下掉,因为模式切换瞬间频率环被锁定但移相环还没建立积分,系统瞬时失控;二是模式反复横跳,输出电压出现周期性锯齿。前者的解决办法是让移相PI在进入PSM模式前保持预置初值,后者的解决办法就是前面说的滞环设计。
6. 常见问题与排查技巧实录
| 故障现象 | 可能原因 | 排查顺序和建议 |
|---|---|---|
| 仿真直接发散或NaN | 求解器步长太大、初始条件冲突、器件模型理想度不匹配 | 先把步长调到0.1μs级别,再检查Cr初始电压是否设成0,最终建议用离散定步长求解器 |
| 输出电压在轻载时震荡 | 频率PI到达限幅值且无移相介入 | 检查频率上限是否生效,再确认移相PI输出是否使能,重点看切换状态的Enable端口接没接 |
| 模式切换瞬间电压凸起 | 移相角退出太快,退坡速率太快 | 将退坡速率降到20度/s以下,可观察瞬时波形逐步调高 |
| 谐振电流波形明显不对称 | 全桥PWM驱动出现了不应有的死区或延迟不匹配 | 分别查看四路驱动脉冲,确认滞后臂相对超前臂的延迟方向是否正确 |
| 动态时频率快速打满但输出仍低 | 频率PI增益过大或积分饱和 | 给PI输出加合理限幅,开启反计算抗饱和,Kp调小一半观察带宽变化 |
| 稳态纹波过大且随负载变化 | 输出滤波电容ESR设得过大或采样滤波时间常数太小 | 将ESR降到50mΩ以内,采样滤波时间常数加大到5到10倍开关周期 |
最常见的翻车点集中在三个地方。第一是移相角没有换算出对应的延迟时间,Simulink报错或者波形完全不变;第二是切换逻辑的布尔信号在环路里形成代数环,没有加Memory或Unit Delay打断,一仿真就红色报错;第三是谐振初始电流不为零,启动瞬间有很短的暂态电流冲击但被忽略了,导致后续环路参数看起来总是不对。
针对代数环问题,我建议在所有模式切换逻辑的输出端加一个Unit Delay,将判断结果延迟一个采样周期。这么一点延迟对控制环路影响可以忽略,但能彻底消除仿真时不收敛的头痛问题。如果模型里出现“Algebraic Loop”提示,先别急着改参数,优先找连线找信号环,往往改几个位置就能解决。
另一个小技巧是不要一开始就跑满载到轻载的阶跃,先用固定负载把稳态跑通了,再加阶跃,最后再上自动负载循环。分阶段调试能让仿真时间利用最大化,报错时也容易定位到底是主电路参数问题还是控制逻辑问题。
7. 我最后想分享的一点经验
模拟仿真和实际硬件最大的区别是:实际里有磁滞、温漂、分布参数,而软件里没有。所以仿真调好的参数搬到实物上一定会偏移,但这不代表仿真没用。我搭这套混合控制模型最大的收益,是用两个小时的时间把模式切换状态机可能出的问题全都踩了一遍,如果不做仿真,这些坑在实机上每一个都意味着烧管子、熔保险丝和重新打板。建议你在仿真模型基础上,把输出电流检测的噪声模型、栅极驱动信号的死区抖动这些非理想因素也加进去,这样仿真出来的切换边界和实物行为会更贴近。完成这一步之后,再去做数字电源移植,控制代码基本就是复制粘贴的事。