1. 为什么我坚持先在LTspice里把LLC仿真跑通,再考虑画板子
很多做电源的朋友对LLC谐振变换器的态度是"原理知道个大概,参数直接照抄参考设计"。等到板子打样回来,上电发现效率不对、波形畸形、管子发热,才回头翻公式,这个过程非常折磨人。我自己也走过这条路,所以现在无论做什么拓扑,我都会先在LTspice里搭一套可运行的仿真,把所有关键参数在软件层面验证一遍。这篇文章就是以半桥LLC谐振变换器为主线,完整演示从理论计算到LTspice仿真验证的整个过程。
LTspice在电源仿真里的地位不用多吹,它是免费的,求解速度快,收敛性在同类SPICE工具里算得上优秀,而且社区资源极其丰富,几乎所有功率器件的SPICE模型都能找到。对LLC这类谐振变换器来说,仿真还有一个额外的好处:谐振参数、死区时间、工作频率这些变量高度耦合,靠手算只能得到静态工作点,想看清楚开关瞬间的电流电压行为,必须借助瞬态仿真。
这篇文章的目标读者分三类。第一类是刚接触谐振变换器的学生或者转行做电源的初级工程师,你需要把课本上的增益曲线和示波器上的实际波形对起来。第二类是已经在做LLC、但主要依赖芯片厂家的设计工具、没真正搞明白底层模型的工程师,这篇文章会带你看到参考设计参数背后的计算逻辑。第三类是已经在用LTspice、但卡在变压器建模、驱动信号生成这些细节上的朋友。如果你只想要一个能跑的仿真文件,文章末尾有模型文件包的使用说明。
我选择了400V输入、12V/20A输出、额定功率240W这个规格,基本覆盖了当下主流适配器和服务器辅助电源的需求,谐振频率设为100kHz,这是功率密度和磁性元件体积都比较均衡的一个频率点。下面直接进入正题。
2. 半桥LLC的工作原理:三种工作模态和那条增益曲线,必须看明白
2.1 谐振槽由什么组成,两种谐振频率是怎么来的
半桥LLC的功率级可以拆成四块:由上下两个开关管组成的半桥、由谐振电感Lr、谐振电容Cr和变压器励磁电感Lm构成的谐振槽、变压器及副边整流电路、输出滤波电容。谐振槽的名字"LLC"就来自Lr、Lm和Cr三个元件。
关键在于,这个谐振槽存在两个谐振频率。第一个是Lr和Cr的串联谐振频率fr,也就是变换器设计的主谐振频率,公式是fr = 1/(2π√(Lr·Cr))。第二个是Lr+Lm和Cr共同作用的谐振频率fm,公式是fm = 1/(2π√((Lr+Lm)·Cr))。这两个频率把工作区域分成了三段,变换器在哪个频率段工作,决定了它的开关行为和增益特性。
这里有个容易混淆的点:Lm在电路中的角色是动态的。当副边二极管导通时,变压器副边被输出电压钳位,Lm两端电压基本恒定,此时Lm不参与谐振,谐振槽只有Lr和Cr起作用;当副边二极管全部关断时,副边相当于开路,Lm重新参与谐振,和Lr、Cr一起谐振。这个"参与与不参与"的切换,正是LLC能实现宽范围调压和软开关的根源。
2.2 三种工作模态的电流路径与开关行为差异
按照开关频率fs相对fr的关系,LLC有三种工作模态。
当fs > fr时,变换器工作在降压区,此时副边电流连续,Lm始终被输出电压钳位,不参与谐振。谐振电流是完整的正弦波,开关管在谐振电流过零之后关断,关断时电流相对较小,但副边二极管是硬关断,存在反向恢复问题。
当fs = fr时,这是最理想的工作点,变换器增益为1,副边电流临界连续。此时原边开关管实现ZVS开通,副边二极管实现ZCS关断,整个变换器的开关损耗降到最低。设计LLC时,通常把额定输入、额定负载这个最主要的工作点放在这个频率附近。
当fs < fr时,变换器工作在升压区。此时副边二极管提前关断,存在一段Lm参与谐振的区间,谐振电流在死区时间内对开关管输出电容充放电,为ZVS创造条件。这个区域能提供更高的电压增益,但副边二极管关断时的电流变化率受谐振电流控制,实际上也是软关断,这是LLC在宽范围输出应用中宝贵的特性。
我说句实在话,很多资料把这三个模态讲得很玄,你只需要记住一件事:工作频率偏离fr越远,增益偏离1越远,但相应地在某些区间会脱离ZVS条件。仿真时最值得观察的,就是实际工作频率落在哪个区间以及开关管的开通瞬间是否真的实现了零电压。
2.3 增益曲线与工作区域划分
LLC的增益特性可以用第一谐波近似(FHA)来分析。对半桥LLC,电压增益M可以近似为:
M = 2n·Vout / Vin
其中n是变压器原边到副边的匝比。增益的完整表达式是负载质量和电感比Ln的函数,曲线形状是:在fm和fr之间,增益大于1,随着频率降低而升高,这是升压区;在fr右侧,增益小于1,随着频率升高而降低,这是降压区。
在设计时,我们有三个关键设计自由度:匝比n由输入输出电压决定,电感比Ln = Lm/Lr决定增益曲线的峰值和ZVS范围,品质因数Q决定曲线的陡峭程度。Ln取得越大,增益峰值越高,但Lm也越大,励磁电流变小,ZVS的实现条件变差;Q取得越大,曲线越陡,满载时的频率变化范围越小,但Q过大会导致工作区域滑入ZCS区,失去ZVS特性。这个权衡关系,仿真里调参比手算直观得多。
3. 参数设计全过程:从240W规格一步步推出Lr、Cr、Lm的取值
3.1 设计规格与变压器匝比确定
我的设计目标是:输入电压Vin = 400V(典型PFC母线电压),输出电压Vout = 12V,输出电流Iout = 20A,额定功率240W,主谐振频率fr = 100kHz。
第一步确定变压器匝比。在理想情况下,当fs = fr时LLC增益M = 1,此时Vout = Vin/(2n)。考虑到副边整流二极管的压降,实际计算时要把二极管正向压降Vd算进去。这里我用全桥整流,每个二极管压降按0.6V估算:
2n·(Vout + Vd) = Vin n = Vin / (2×(Vout + Vd)) = 400 / (2×(12 + 0.6)) ≈ 15.87
取整到n = 16,这是原边到副边的匝比。也就是说,原边16匝对应副边1匝。需要注意,这个匝比决定了额定工作点落在谐振频率处,如果匝比取得不合适,额定点会偏离fr,导致效率下降。
3.2 谐振参数推导:Rac、Q和Ln的选择
第二步计算等效交流负载电阻Rac。FHA分析里,副边整流电路和输出负载折算到原边的等效电阻是:
Rac = 8n²Ro / π²
其中Ro = Vout/Iout = 12V/20A = 0.6Ω。代入n = 16:
Rac = 8×256×0.6/π² ≈ 124.5Ω
第三步选择品质因数Q和电感比Ln。Q的定义是特征阻抗与Rac之比:
Q = √(Lr/Cr) / Rac
Q的取值直接影响满载时的频率范围和ZVS条件。工程上Q通常取0.3到0.5之间,这里我取Q = 0.4。Ln = Lm/Lr通常取4到6,兼顾增益峰值和ZVS能力,这里取Ln = 5。
然后就可以反推谐振元件了。由Q和fr可以算出Cr:
Cr = 1/(2π·fr·Rac·Q) = 1/(2π×100×10³×124.5×0.4) ≈ 31.9nF
取标准值33nF。再由fr和Cr计算Lr:
Lr = 1/((2π·fr)²·Cr) = 1/((2π×100×10³)²×33×10⁻⁹) ≈ 76.7μH
仿真中我直接取77μH。最后计算Lm:
Lm = Ln·Lr = 5×77 = 385μH
实际电路里取390μH或400μH都很常见,仿真模型里我会用400μH,后面会解释为什么差几十微亨影响不大。
3.3 参数合理性验证与小细节
参数算完不能直接开搭,要做两轮验证。第一轮验证增益范围:最大增益需求发生在最低输入电压和满载时刻,对于PFC后级母线,输入通常稳定在400V左右,所以我们的增益变化范围并不大,额定点在M=1附近即可。
第二轮验证ZVS条件。一个粗略的判据是,死区时间内励磁电流能否把开关管的输出电容Coss充放电到所需的电压。要求励磁电流峰值大于2n·Coss·Vin/td,其中td是死区时间。以100kHz频率、300ns死区、每管Coss按200pF估算,励磁电流需要约0.53A,而385μH励磁电感在400V输入下的励磁电流峰值约为Vin/(4·fr·Lm) ≈ 2.6A,裕量充足。仿真中我会在开关管上并联电容来模拟Coss,验证这个条件。
还有一点值得提醒:Lr在实际电路中可以全部由变压器的漏感提供,也可以全部用独立电感,更多时候是两者结合。在仿真模型里,使用独立Lr元件更清晰,也方便扫参。变压器模型则用理想耦合加励磁电感来建立,下一节详细说。
4. 在LTspice里搭建电路:变压器建模、半桥功率级与驱动信号
4.1 变压器模型选择:耦合电感加励磁电感
LTspice里没有现成的变压器符号,但可以用耦合电感对来建模。对LLC的变压器,我推荐用漏感为0的理想耦合变压器加上励磁电感,谐振电感Lr放在变压器原边外部。这样做的好处是参数直观,和设计计算用的模型完全一致。
具体做法是放置两个电感L1和L2,然后用K语句耦合。L1放在原边作为励磁电感,L2放在副边,两者通过K1耦合。设定匝比n = 16,那么:
L1 = Lm = 400μH L2 = L1 / n² = 400μH / 256 ≈ 1.56μH
在LTspice原理图中放置两个电感,电感值分别设为400μ和1.56μ,然后放置一个耦合符号(kt),打开属性对话框,填入:
K1 L1 L2 1其中最后一个1代表耦合系数。耦合系数为1表示全耦合、零漏感,这正是我们需要的理想变压器模型。如果你是初次操作,注意耦合符号的命名必须和电感元件的命名一致,否则会报"unknown schematic syntax"之类的错误。
如果你想把漏感集成到变压器模型里,可以把耦合系数k设置成小于1的值,此时原边等效漏感约为(1-k²)·L1。但我不建议在初学阶段这么做,因为LLC的Lr通常单独设计,用独立电感更灵活,扫参数时也更好操作。仿真中用的变压器还需要关注同名端标记,耦合电感的同名端要接对,这决定了副边输出电压的极性。
4.2 半桥功率级与谐振槽接线
半桥功率级的连接方式如下:输入源V1正极接上管Q1的漏极,Q1源极接Q2漏极,即半桥中点sw节点,Q2源极接地。谐振槽从sw节点引出,依次串联Cr、Lr,连接到变压器原边的一端,变压器原边另一端接回输入源地(对于对称半桥是接输入中点,在400V单母线输入下接输入地即可)。
谐振电容Cr取33nF,这里有个实际建议:在LTspice里这个电容耐压不用设置,但你在做实际硬件选型时,Cr要承受谐振电流的交流分量和直流偏置电压,通常需要选择CBB电容或高频薄膜电容并联组合,这个在仿真中体现不出来。
功率开关管的选型,我建议仿真初期用开关模型而不是真实MOSFET。具体用法是放置一个开关元件SW,配合一个控制电压源。开关模型用语句声明:
.model SW1 SW(Ron=10m Roff=1Meg Vt=4 Vh=0.5)Vt是开启阈值,Vh是回差电压的一半。当控制电压高于4.5V时开关导通,低于3.5V时关断,导通电阻10mΩ,关断电阻1MΩ。这样做的原因是理想开关没有寄生电容,仿真收敛性好、运行速度快,适合先验证谐振槽的波形正确性。
等基本波形确认无误后,再把开关替换成真实MOSFET模型,比如LTspice自带的IRFP460,并在漏源之间并联100pF到200pF的电容来模拟Coss,这样才能真实观察ZVS是否成立。如果你一上来就用真实MOSFET,也不是不行,只是调收敛性的过程会让人崩溃。
4.3 驱动信号:PULSE源与死区时间设置
LLC的驱动信号是固定50%占空比的方波,上下管互补,中间插入死区时间。这是谐振变换器和PWM变换器在驱动上最大的区别——LLC靠调节频率来改变增益,而不是调节占空比。
我用两个PULSE电压源产生驱动信号。设死区时间td = 300ns,开关周期T = 10μs(100kHz),那么每个开关管导通时间Ton = T/2 - td = 4.7μs。上管Q1的控制电压源Vg1设为:
PULSE(0 12 0 20n 20n 4.7u 10u)含义是:从0到12V,延迟0,上升沿20ns,下降沿20ns,导通脉宽4.7μs,周期10μs。下管Q2的控制电压源Vg2设为:
PULSE(0 12 5u 20n 20n 4.7u 10u)延迟时间设为5μs,正好是半个周期之后开启。这样两个控制信号之间有300ns的间隔,就是死区。
这里有一个LTspice建模的细节必须提醒:上管Q1的源极在sw节点,不是地,所以Vg1的地端不能直接接地,而要接到sw节点上。在LTspice里,电压源作为独立元件,它的负极可以接任意节点,所以把Vg1的负极接到sw节点即可,正极接Q1栅极。如果你把Vg1接到地,仿真仍能运行,但栅源电压波形完全错误,欺瞒性很强。
4.4 输出整流与滤波环节
副边整流我采用全桥整流,四个二极管用LTspice自带的Schottky模型,例如MBR20200CT或者直接用通用二极管模型指定导通压降0.4V左右。在仿真里,二极管模型选择对效率数值有影响,但对波形形态影响不大。
整流输出接滤波电容和负载电阻。滤波电容取470μF,为了兼顾高频纹波,可以再并联一个1μF的小电容,仿真里影响不大。负载电阻就是0.6Ω,注意在LTspice里这个电阻的功耗是240W,仿真中的数值没有任何问题,但你如果在实际硬件里用这个阻值,必须用大功率电阻或者电子负载。
输出电路接好之后,整机原理图的核心部分就完成了。为了后续扫频方便,我把开关频率定义成参数freq,PULSE源的周期写成{1/freq},后面用.step命令可以自动扫描频率。
5. 仿真运行与波形判读:启动过程、稳态分析与ZVS验证
5.1 瞬态仿真参数设置与启动冲击电流
完成原理图后,仿真参数设置决定了你能否看到干净的稳态波形。我的建议是:
.tran 0 5m 0 100n startup解释一下这几个数字:总仿真时间5ms,意味着从零时刻开始仿真,5ms后结束;最大步长100ns,保证能分辨出100kHz的波形细节;startup选项让LTspice在仿真开始时从0V逐步建立输入电压,而不是瞬间跳变到400V。这个选项对观察启动冲击电流非常重要。
LLC谐振变换器启动时,谐振电容从零开始充电,会产生一个很大的冲击电流,这是谐振变换器的一个固有特性,实际硬件里需要软启动电路来限制。仿真中你会看到Lr电流的第一个峰值可能达到稳态的好几倍,这是正常现象,不是建模错误。如果你想快速跳过启动过程看稳态,可以不勾选startup,但那样输入电压是阶跃的,冲击电流会更夸张。
仿真时间5ms听起来不长,但LTspice的瞬态求解器在开关变换器上表现很好,实际运行可能只需要几秒到几十秒。如果跑得太慢,可以把观察窗口缩小到2ms,或者适当增大最大步长到200ns,但要留意不要因此损失波形细节。
5.2 稳态波形的判读:先看电流再看电压
等到仿真结束,我建议你按下面的顺序观察波形,这个顺序我在给新人培训时固定使用。
第一步,看Lr电流波形。稳态下应该是接近标准的正弦波,频率等于开关频率。如果Lr电流波形出现明显畸变或者频率不对,先检查驱动信号的频率设置是否真的进入了稳态,再检查谐振参数是否设置正确。
第二步,看sw节点电压波形。半桥中点电压应该在0V和400V之间来回翻转,上升沿和下降沿有一定斜率,这个斜率来自开关管Coss的充放电过程。如果sw电压跳变非常陡峭,说明你用的是理想开关模型,这个属于正常的模型简化。
第三步,看输出Vout波形。稳定后应该接近12V,纹波峰峰值在几十到几百毫伏之间。如果输出偏离12V太多,先检查变压器匝比和输入电压设置,再用下一节的增益概念判断当前工作频率落在增益曲线的哪个位置。
我通常还会加几个.meas测量命令来量化结果:
.meas TRAN Vout_avg AVG V(out) FROM 4m TO 5m .meas TRAN Iin_avg AVG I(V1) FROM 4m TO 5m .meas TRAN Iin_rms RMS I(V1) FROM 4m TO 5m .meas TRAN I_primary_rms RMS I(Lr) FROM 4m TO 5m这些测量值可以用来计算输入功率、输出功率和效率,避免肉眼估算的误差。
5.3 ZVS验证:把时间轴拉近,看开关瞬间
ZVS是LLC的灵魂,仿真验证ZVS的方法很简单:把时间轴窗口放大到开关瞬间,观察Q2(下管)的Vds波形和Vgs波形。
Q2在死区时间内应该先看到Vds从400V下降到0V,然后Vgs才上升,这就是ZVS开通。如果顺序反了,Vgs先上升、Vds还很高,说明开关管是在硬开关,此时不仅效率下降,EMI也会很糟糕。造成这个问题的常见原因有两个:开关频率跑到了fr以上太远的区域,或者死区时间太短,谐振电流还没来得及完成Coss的充放电。
为了真实观察ZVS,仿真模型里必须在每个开关管漏源之间并联电容模拟Coss。如果你发现死区时间里Vds没有降零,尝试增大死区时间,从300ns调到400ns或者500ns再看。我会用.step命令扫一组死区时间参数,一步到位对比不同死区下的ZVS效果。
死区时间也不是越大越好。死区太长会导致谐振电流反向流过体二极管的时间过长,增加导通损耗,严重时甚至失去ZVS窗口。仿真里你只要观察一点:Vds降到零之后,等待Vgs上升的时间间隔是否合理,就能判断死区是否合适。
5.4 用.step命令扫描频率看动态规律
LLC的增益随频率变化,这是它调压的基本手段。在LTspice里,我可以把频率设为参数,然后用.step命令自动跑多个频率点:
.step param freq 80k 120k 5k配合PULSE源中使用{freq}表达式,这样一次仿真就能得到9个频率点下的完整波形。把几个代表频率下的输出电压值记录下来,或者直接用.meas把平均值提取出来,你就能画出增益随频率变化的实际曲线。
这里有个经验之谈:第一次跑多个频率点仿真时,不要用startup选项,否则每个频率点都要经历完整的启动过程,仿真时间会翻好几倍。可以先让电路在一个频率下跑到稳态,然后利用LTspice的"冷启动传递"技巧,但初学者直接跑慢一点也能接受。
6. 仿真中的高频坑与排查经验:收敛性、变压器模型与死区
6.1 不收敛与时间步长问题
LTspice的收敛性虽然好,但LLC这类谐振电路在启动瞬间的冲击电流极大,容易触发时间步长过小导致的仿真卡死。如果你遇到仿真进度条长时间不动,或者报"time step too small"错误,通常有三个解决方法。
第一个方法是改求解器。在Simulate菜单里选择控制面板,把求解器从默认的Modified Trap改成Alternate,很多收敛问题会直接消失。第二个方法是在仿真命令里加上:
.options abstol=1e-10 reltol=0.003放宽一些绝对和相对误差容限,代价是精度略微下降,但在工程误差范围内完全可接受。第三个方法是在谐振电容或开关管上并联一个很小的阻尼电阻,比如1MΩ,或者给谐振电感串联一个很低的电阻比如10mΩ,这能让求解器更容易收敛。这些附加的寄生参数在实际电路里本来就存在,不算作弊。
6.2 变压器模型参数错误导致的隐性故障
变压器模型是LTspice仿真LLC时最容易埋雷的地方。我见过最典型的错误是把L1直接设成Lr,然后抱怨波形完全不对。记住,在原边串有独立Lr的模型中,变压器原边电感L1表示的是励磁电感Lm,不是Lr或者Lm+Lr。
另一个隐蔽问题是耦合系数。如果你用K1 L1 L2 1表示理想耦合,那么副边电感必须满足L2 = L1/n²的关系。如果L2偏大或偏小,等效匝比就变了,输出就不对。有一个快速验证方法:不接谐振电容,直接把变压器原边加一个交流小信号源,看副边输出电压是否符合匝比关系。
还有一个细节是电感元件的串联电阻。LTspice里的电感默认没有串联电阻,但在实际变压器中,原副边绕组电阻损耗不可忽视。仿真模型的精度取决于你的目的:验证波形和ZVS机制,默认设置够了;估算效率,就需要给Lr和变压器绕组合理添加串联电阻。
6.3 死区时间设置不合理导致ZVS失效或异常
死区时间的设置在LLC仿真里非常敏感,而且失效方式很有迷惑性。死区时间过短时,谐振电流还没完成对Coss的放电,上管的Vds还没降到零,驱动就来了,表现就是硬开通,但波形上看不出特别明显的异常,只有通过放大开关瞬间才能发现。
死区时间过长时,谐振电流已经完成了Coss的充放电,然后继续在反并联二极管里续流,这本身不算问题,但如果死区太长接近半个周期,电路就会进入异常工作状态,波形形态完全改变。
我个人习惯把死区时间设成谐振周期的2%到4%作为起点,也就是100kHz的谐振频率对应200ns到400ns的死区,然后通过.step扫描对比,把ZVS窗口和导通损耗的平衡找出来。仿真里对比几组参数是免费的,这正是它的价值所在。
6.4 启动冲击电流别误判为器件故障
第一次运行时看到Lr电流的冲击峰值可能是稳态值的4到5倍,很多人以为模型错了。实际上这是LLC的固有特性,谐振电容初始电压为零,上电瞬间输入电压全部加在Lr和Cr上,电流必然冲得很高。
如果你想观察稳态性能,建议把启动过程的时间缩短。方法是在.tran命令里仍然用startup,但把输入源V1的上升时间设置成一个合理值,比如1ms,这样冲击电流的大小可控,电路也能快速进入稳态。真正做硬件时要配合芯片的软启动功能,这个以后可以单独写一篇。
7. 模型文件包说明及后续能玩的方向
模型文件包里的内容我按元件和层级组织好了,解压后包含完整的.asc原理图文件、仿真设置截图说明、以及各个子电路的模型文件。打开方式很简单:LTspice菜单File→Open,选择.asc文件即可。如果你的LTspice版本比较老,可能需要更新到17.x以上,新版本对耦合电感和开关模型的兼容性更好。
打开原理图后,你会看到一个参数占位符区域,所有设计参数集中在图纸空白处的.param语句里,包括输入电压、开关频率、Lr、Cr、Lm、匝比、死区时间等。修改任何参数,重新运行仿真,就能得到对应的工作状态。我在每个参数旁边都加了注释,说明这个参数在理论计算中对应哪个公式,方便你改参数时对照前文。
文件包里还包含了两个版本的原理图:一个是使用理想开关的基础版,适合快速了解谐振槽工作原理;另一个是使用真实MOSFET模型加Coss电容的完整版,适合验证ZVS和死区时间。我建议你先跑基础版,波形全部看懂之后,再打开完整版对比差异。
接下来你可以往这几个方向继续扩展。一是加入闭环控制,用LTspice的电压反馈控制VCO(压控振荡器)来模拟芯片的调频稳压过程;二是把负载改成动态负载,用PWL电流源模拟实际设备的负载跳变,观察LLC的瞬态响应;三是扫描输入电压范围,研究宽范围输入下的增益变化。如果你对某个方向感兴趣,在评论区告诉我,我后续可以继续写。
最后说说我这次的实操体会。LTspice里搭LLC最大的收获,不是得到一个"能跑的仿真"这么简单,而是把增益曲线、ZVS条件、死区影响这些抽象概念全部变成了眼睛能看到的波形。第一次看到Vds提前降到零、Vgs再上升的那个瞬间,我对LLC的理解才算真正落地。做硬件之前先在仿真里把参数空间摸一遍,至少能帮你省掉一轮打样迭代的成本。这套方法我做了几个项目,确实稳。