1. 半桥LLC软启动到底难在哪
半桥LLC谐振变换器在中小功率电源里几乎是绕不开的拓扑,效率高、EMI友好、原副边隔离容易做,但凡做过300W以上适配器或者LED驱动的朋友,大概率都碰过它。可真正让工程师头疼的往往不是稳态效率,而是软启动这一段几十毫秒的过程。稳态跑得再漂亮,开机瞬间炸管、输出过冲、谐振电流失控,这些问题几乎都集中在软启动窗口里。
软启动的本质,是让谐振腔的能量从零逐步建立起来,同时把输出电容从0V充到目标电压。听起来简单,但半桥LLC有两个要命的特性:一是谐振腔的增益曲线高度非线性,频率稍微偏离谐振点,增益就剧烈变化;二是输出电容在启动瞬间相当于短路,如果一开始就给满占空比或者固定频率,谐振电流会瞬间冲到额定值的数倍。MOSFET的SOA再宽也扛不住这种冲击,尤其是GaN或者超结器件,热容小,几个周期就能过热失效。
我见过太多项目在实验室空载启动没问题,一挂满载或者低温启动就炸机。问题基本都出在软启动策略上。这篇文章就把我这些年踩过的坑整理一下,围绕半桥LLC软启动最常见的5个错误展开,每个错误都给出可落地的解决方案和参数计算思路。不管你是用STM32的PWM外设、还是用专用LLC控制器,这些逻辑都是通用的。适合正在调试LLC的电源工程师、做数字电源固件的朋友,以及刚接触谐振变换器的学生参考。
2. 错误一:启动频率设置过高或过低
2.1 为什么启动频率不能随便定
半桥LLC的增益曲线是一条先升后降的曲线,谐振频率fr处增益为1,低于fr的感性区增益大于1,高于fr的容性区增益小于1。软启动时输出电容电压为0,反馈环路还没建立,此时如果启动频率选在谐振点附近,增益接近1,但输出需要从0充到目标值,实际需要的增益远大于1。很多新手直接把启动频率设成谐振频率,结果就是输出电压爬不上去,环路拼命降频,一路降到容性区,然后MOSFET体二极管反向恢复,上下管直通。
反过来,启动频率设得太高,比如设到2倍fr,增益很低,输出几乎不涨,控制器会一直降频,降频过程中如果环路响应慢,就会在某个频率点突然进入高增益区,谐振电流瞬间飙升。我实测过一款200W的LLC,启动频率设成1.8倍fr,空载启动正常,带载启动时谐振电流峰值冲到15A,而稳态只有3A,MOSFET的Idm额定才20A,余量根本不够。
正确的做法是:启动频率应该设在略高于谐振频率的位置,通常是1.2到1.5倍fr,然后在这个频率上以固定占空比(接近50%)运行一段时间,让谐振腔建立初始能量,再逐步降频。这个初始频率的选择要结合最大增益需求来算。
2.2 启动频率的计算方法
假设你的LLC参数如下:谐振电感Lr=100μH,谐振电容Cr=22nF,励磁电感Lm=600μH,变压器匝比n=10,输入电压Vin=400V,输出电压Vo=24V,满载电流Io=8A。
先算谐振频率:
fr = 1 / (2π√(Lr·Cr)) = 1 / (2π√(100e-6 × 22e-9)) ≈ 107kHz
再算最大增益需求。LLC的直流增益公式(基波近似法):
M = Vo·n / (Vin/2) = 24×10 / 200 = 1.2
也就是说,满载时需要的增益是1.2。根据增益曲线,增益1.2对应的频率大约在0.85fr到0.9fr之间。但启动时输出电容电压为0,实际需要的瞬时增益更高,因为要给输出电容充电。所以启动频率不能直接取0.85fr,而应该先在高频段建立能量。
我的经验是:启动频率取1.3倍fr左右,即约140kHz。在这个频率下,增益大约0.7到0.8,输出会缓慢上升,谐振电流被限制在合理范围。等输出电压升到目标值的60%到70%后,再让环路接管,逐步降频到工作点。
注意:启动频率不能低于fr,否则一开始就进入容性区,MOSFET体二极管反向恢复会导致直通。这是硬性红线。
2.3 不同控制芯片的频率设置差异
如果你用的是专用LLC控制器,比如NCP1399、L6599这类,它们通常有软启动引脚,外接电容决定软启动时间,内部会自动从高频降到低频。但要注意,这类芯片的启动频率是固定的,比如NCP1399的启动频率大约是谐振频率的2倍,如果你选的谐振参数不匹配,启动频率可能过高或过低。
用数字控制器(比如STM32的HRTIM或者普通TIM)的话,频率完全由你控制,灵活性更高,但也更容易出错。我建议在固件里做一个频率扫描表,启动时从高频逐步降到目标频率,每一步停留几个开关周期,让谐振电流平稳过渡。下面是一个简单的频率递减逻辑示例:
// 假设PWM频率由定时器ARR值决定,ARR越大频率越低 #define FR_START 140000 // 启动频率140kHz #define FR_TARGET 95000 // 目标频率95kHz #define STEPS 200 // 分200步降频 #define DWELL 10 // 每步停留10个开关周期 uint32_t arr_start = TIMER_CLK / FR_START; uint32_t arr_target = TIMER_CLK / FR_TARGET; int32_t arr_step = (arr_start - arr_target) / STEPS; for (int i = 0; i < STEPS; i++) { set_pwm_freq(arr_start - i * arr_step); delay_switching_cycles(DWELL); }这段代码的核心思想是让频率平滑下降,避免突变。实测下来,200步、每步10个周期,总启动时间大约20ms,输出过冲可以控制在5%以内。
3. 错误二:死区时间设置不当导致直通
3.1 死区时间的双重作用
半桥LLC的死区时间有两个作用:一是防止上下管直通,二是为谐振电流换流提供时间。在软启动阶段,谐振电流还没建立,死区时间如果太短,MOSFET的结电容放电不充分,上下管切换时会出现电压尖峰;如果太长,谐振腔的电流会反向,体二极管导通时间过长,反向恢复损耗增加。
很多工程师在稳态调试时把死区时间调得很小,比如100ns,觉得效率高。但软启动时谐振电流小,MOSFET结电容的充放电时间相对更长,100ns根本不够。我遇到过一款300W的LLC,稳态死区100ns没问题,但启动时上下管直通,炸了两颗MOSFET。后来把死区时间改成300ns,启动就稳了。
死区时间的合理范围通常是200ns到500ns,具体取决于MOSFET的Qg和Coss。计算公式如下:
t_dead ≥ Qg / Ig + Coss × Vin / Ig
其中Ig是驱动电流,Qg是栅极电荷,Coss是输出电容。以一款常见的650V超结MOSFET为例,Qg=30nC,Coss=100pF,驱动电流1A,Vin=400V:
t_dead ≥ 30e-9 / 1 + 100e-12 × 400 / 1 = 30ns + 40ns = 70ns
这是理论最小值,实际要留2到3倍余量,所以取200ns到300ns比较稳妥。
3.2 软启动阶段的死区时间优化
软启动阶段和稳态的死区时间可以不同。我的做法是在固件里做两套死区参数:启动时用较大的死区时间(比如400ns),等输出稳定后再切换到较小的死区时间(比如200ns)。这样既保证了启动可靠性,又不牺牲稳态效率。
用STM32的HRTIM或者高级定时器可以很方便地动态修改死区。以STM32G4的HRTIM为例,死区时间由DTxR寄存器的DTRx[7:0]位决定,每个计数周期代表约1ns(取决于时钟)。启动时设置DTR=400,稳定后改成DTR=200即可。
提示:死区时间切换要在输出稳定后进行,切换瞬间可能会引起轻微的占空比跳变,建议在几个开关周期内逐步过渡,避免谐振电流扰动。
3.3 死区时间与MOSFET选型的关系
不同MOSFET的死区时间需求差异很大。平面MOSFET的Coss较大,死区时间要长一些;超结MOSFET的Coss小,死区可以短一些;GaN器件的Coss更小,但栅极驱动要求更严格,死区时间通常可以做到100ns以内。
下面是一个常见MOSFET的死区时间参考表:
| MOSFET类型 | 典型Coss | 推荐死区时间 | 备注 |
|---|---|---|---|
| 平面MOSFET | 500pF | 400-600ns | 结电容大,换流慢 |
| 超结MOSFET | 100pF | 200-300ns | 主流选择 |
| GaN HEMT | 50pF | 100-150ns | 需专用驱动 |
| SiC MOSFET | 80pF | 150-250ns | 高温性能好 |
选型时要根据实际驱动电路和母线电压来调整,不能照搬手册。
4. 错误三:谐振电流采样与保护响应太慢
4.1 软启动阶段的电流特征
软启动时谐振电流的波形和稳态完全不同。稳态时谐振电流接近正弦波,峰值和有效值关系明确;启动时谐振电流是一系列逐渐增大的脉冲,第一个脉冲可能很小,但随着输出电容充电,脉冲幅度快速上升。如果保护电路还是按稳态的阈值来判断,要么误触发,要么响应太慢。
我见过一个案例:工程师用比较器做逐周期限流,阈值设成稳态峰值的1.5倍。结果启动时谐振电流的峰值在几个周期内就超过了阈值,但比较器输出经过光耦隔离后延迟了2μs,等PWM关断时MOSFET已经承受了3倍的额定电流,连续几次启动后管子就热击穿了。
4.2 逐周期限流的正确实现
逐周期限流的核心是快速检测、快速关断。检测环节要用带宽足够的电流互感器或者分流电阻,信号调理电路的延迟要控制在500ns以内。关断环节最好用硬件比较器直接触发PWM封波,不要经过软件中断,软件中断的延迟通常在1μs以上,太慢了。
以STM32G4为例,可以用内置的模拟比较器(COMP)加HRTIM的故障输入(FLT),比较器输出直接连到HRTIM的FLT引脚,一旦过流,HRTIM在下一个计数周期就封波,延迟只有几十纳秒。比较器的阈值可以用DAC动态设置,启动时设一个较低的阈值,稳定后再提高。
// 启动时设置较低的过流阈值 DAC_SetValue(DAC_CH1, 1000); // 对应1A // 稳定后提高阈值 DAC_SetValue(DAC_CH1, 3000); // 对应3A这种动态阈值的方法可以兼顾启动保护和稳态效率。启动时阈值低,任何异常都能快速保护;稳定后阈值高,避免误触发。
4.3 谐振电流的采样位置选择
谐振电流的采样位置有三种:谐振电容电流、谐振电感电流、变压器原边电流。谐振电容电流包含直流分量,采样电路要能处理双极性信号;谐振电感电流是纯交流,可以用电流互感器;变压器原边电流在启动时可能有偏磁,采样时要加隔直电容。
我的建议是优先采样谐振电感电流,因为它的波形最干净,而且能直接反映谐振腔的能量状态。用电流互感器加一个 burden 电阻,输出信号送到比较器和ADC。比较器做快速保护,ADC做慢速监控和环路控制。
注意:电流互感器的磁芯要选高频特性好的,比如铁氧体或者纳米晶,匝比根据最大电流来定,burden电阻的功率要留足余量。
5. 错误四:输出过冲与环路饱和
5.1 输出过冲的成因
软启动结束时,输出电压从0升到目标值,如果环路响应太快,会在目标值附近产生过冲;如果环路响应太慢,启动时间会很长,输出电容充电不足,负载一加上去电压就掉。更麻烦的是,很多数字控制器的积分器在启动阶段会饱和,等输出接近目标值时,积分器需要很长时间才能退出饱和,导致过冲严重。
我实测过一款数字控制的LLC,启动时积分器限幅设得太大,输出过冲到了28V(目标24V),过冲幅度17%。后来把积分器限幅改小,并且在启动阶段用纯比例控制,等输出升到90%目标值后再切入积分,过冲就降到了3%以内。
5.2 分段式软启动策略
分段式软启动是解决过冲的有效方法。具体来说,把启动过程分成三个阶段:
第一阶段:频率固定在高频段,占空比接近50%,让谐振腔建立能量,输出电容缓慢充电。这个阶段不启用反馈,开环运行。
第二阶段:输出升到目标值的60%到70%时,启用比例控制,比例系数设得较小,让输出继续上升但速度放缓。
第三阶段:输出升到目标值的90%以上时,切入完整的PI控制,积分器从0开始累积,避免饱和。
每个阶段的切换点要根据实际调试来确定,不能照搬。我通常会在固件里加一个调试变量,实时观察输出电压和环路状态,找到最佳切换点。
5.3 积分器抗饱和处理
积分器抗饱和是数字电源的基本功。常用的方法有三种:限幅法、反计算法和条件积分法。限幅法最简单,直接限制积分器的输出范围;反计算法在积分器饱和时,用误差信号反向修正积分器;条件积分法在饱和时停止积分,只保留比例作用。
对于LLC软启动,我推荐用条件积分法。启动阶段积分器不工作,只靠比例控制;等输出接近目标值时,再启用积分器,并且积分器的初始值设为当前比例输出对应的值,这样切换时不会跳变。
// 条件积分法示例 if (output_voltage < target_voltage * 0.9) { // 启动阶段,纯比例控制 duty = Kp * error; integral = 0; // 积分器清零 } else { // 稳定阶段,PI控制 integral += Ki * error; // 积分限幅 if (integral > INTEGRAL_MAX) integral = INTEGRAL_MAX; if (integral < INTEGRAL_MIN) integral = INTEGRAL_MIN; duty = Kp * error + integral; }这段代码的关键是积分器在启动阶段清零,等输出接近目标值时才启用,并且限幅防止饱和。
6. 错误五:轻载或空载启动时的振荡
6.1 轻载启动的特殊性
轻载或空载启动时,输出电容的放电回路几乎没有负载,充电电流全部用来抬高输出电压。如果软启动策略还是按满载来设计,输出会迅速冲到目标值以上,然后环路拼命降频,降频过程中又进入容性区,引起振荡。我见过一款LED驱动电源,空载启动时输出电压在20V到30V之间来回振荡,频率大约几百赫兹,LED灯珠一闪一闪的。
轻载启动的核心问题是能量无处释放。满载时输出电容充电的能量会被负载消耗掉,轻载时这些能量只能储存在输出电容里,导致电压过高。解决方法有两种:一是加假负载,二是调整软启动策略。
6.2 假负载的设计
假负载是最简单的方案,在输出端并联一个电阻,消耗掉多余的能量。假负载的阻值要根据最小负载电流来定,通常取满载电流的1%到5%。比如满载8A,假负载取0.5A左右,阻值R=Vo/0.5=48Ω,功率P=Vo²/R=12W。这个功耗在待机时是浪费,所以很多场合不允许。
更好的方案是用有源假负载,只在启动阶段接入,稳定后断开。用一个MOSFET串联电阻,启动时导通,稳定后关断。控制信号可以从软启动状态机里取。
6.3 轻载启动的频率策略
轻载启动时,启动频率要设得更高一些,让增益更低,输出上升更慢。同时,降频的步长要更小,避免突然进入高增益区。我的经验是:轻载启动频率取1.5倍fr,降频步长取满载的一半,总启动时间延长到50ms左右。
另外,轻载启动时可以在输出端加一个电压比较器,一旦输出电压超过目标值的110%,立即暂停降频,等电压回落到105%以下再继续。这种“走走停停”的策略可以有效抑制振荡。
提示:轻载启动的调试最好在低温下进行,低温时电解电容的ESR增大,输出电容的充电特性会变化,更容易出现振荡。
7. 常见问题速查与调试心得
7.1 软启动问题速查表
| 现象 | 可能原因 | 排查方法 | 解决方案 |
|---|---|---|---|
| 启动时炸上下管 | 死区时间不足 | 示波器看桥臂中点电压 | 增大死区到300ns以上 |
| 输出电压爬不上去 | 启动频率过高 | 测谐振电流波形 | 降低启动频率到1.3fr |
| 谐振电流峰值过大 | 降频太快 | 测谐振电流峰值 | 减小降频步长,增加停留时间 |
| 输出过冲严重 | 积分器饱和 | 观察环路输出 | 分段式软启动,条件积分 |
| 轻载启动振荡 | 能量无处释放 | 测输出电压纹波 | 加假负载或调整频率策略 |
| 保护误触发 | 阈值设置不当 | 测比较器输出 | 动态阈值,启动时降低 |
| 启动时间过长 | 降频太慢 | 测输出电压上升时间 | 增大降频步长,减少停留 |
| MOSFET发热严重 | 死区时间过长 | 测体二极管导通时间 | 减小死区,换低Coss器件 |
7.2 调试工具与技巧
调试LLC软启动,示波器是必备的。至少要四通道:一路看桥臂中点电压,一路看谐振电流,一路看输出电压,一路看PWM驱动。桥臂中点电压的上升沿和下降沿能反映死区时间是否合适;谐振电流的波形能反映频率是否在感性区;输出电压的上升曲线能反映软启动策略是否平滑。
电流探头要选带宽足够的,至少10MHz以上,否则谐振电流的高频分量测不准。电压探头要用差分探头测桥臂中点,普通探头的地线夹在桥臂中点上会短路。
我习惯在固件里加一个“软启动调试模式”,启动时把关键变量通过DAC输出到示波器上,比如谐振电流峰值、输出电压、频率指令等。这样可以在示波器上同时观察多个信号,快速定位问题。
7.3 个人经验总结
软启动的调试没有一劳永逸的参数,不同的谐振参数、不同的MOSFET、不同的负载条件都需要重新调整。我的建议是:先在满载下调好启动参数,然后在轻载下验证,最后在低温下做余量测试。每次调整只改一个参数,观察波形变化,记录数据。
另外,软启动的时间不要太短,也不要太长。太短了冲击大,太长了用户会觉得开机慢。一般50ms到200ms比较合适,具体看输出电容的大小和负载要求。
最后分享一个小技巧:在软启动阶段,可以把PWM频率的降频曲线做成S形,而不是线性。S形曲线在开始和结束时变化慢,中间变化快,这样既能快速建立能量,又能平滑过渡到稳态。实测下来,S形曲线的启动过冲比线性曲线小30%左右。
这个内容后续还可以这样扩展:如果你用的是三相LLC或者多相LLC,软启动的策略会更复杂,需要考虑相间均流和相位同步。有机会再单独写一篇。