☰
基于PSoC CLB-MACO的LLC软启动谐振电流峰值抑制设计
2026/10/28 9:18:32 网站建设 项目流程

LLC软启动阶段的谐振电流峰值抑制,是个做过数字电源的人都会皱眉的话题。前阵子在实验室给一台半桥LLC样机做首次上电,母线加压的瞬间,采样电阻上看过去的电流尖峰直接逼近30A,而设计额定电流只有10A。那一发没炸管,但把新板子打回原形,也逼我重新把“LLC软启动”这几个字拆开揉碎想了一遍。当时采取的第一版软启动其实就是最常规的“高频启动+扫频降频”,偏偏上电过冲依旧居高不下。后来把方案切到PSoC的CLB-MACO上,用可配置逻辑块在硬件层面做了启动谐振电流峰值抑制,才把尖峰真正压住了。这篇我把原理、设计思路、参数标定和实测踩坑都写出来,给正在调LLC数字电源、或者想在MCU里找“快逻辑”的工程师做参考。

1. 上电瞬间的“浪涌黑手”:谐振腔初始条件与Q值真相

1.1 只看增益曲线,容易忽略启动时的特殊点

LLC变换器设计阶段,大家最熟悉的是那张增益曲线族:以归一化频率为横轴,以品质因数Q为参数,增益从谐振频率附近的高点向两端下降。稳态分析都围绕输出建立好之后的情况去做,但启动瞬间的电路状态完全不是那回事。

启动前输出电容电压为零,负载等效电阻反射到原边的阻值非常低。反映到参数上,就是Q值远高于稳态设计值。半桥LLC的等效品质因数Q等于Z0除以反射电阻R_ac,启动时R_ac被拉得很低,Q值自然冲得很高。这时候如果你按稳态的工作频率去发波,实际工作点落在曲线上Q值极大、增益也极高的区域,原边谐振电流自然按“谐振腔阻抗Z0”来发展,完全不是额定工况下那种被负载阻尼压住的电流。

这也是为什么很多人在仿真里看到启动电流峰值“只有十几安”,实际板子一上电却冲得比仿真漂亮得多。仿真模型里负载电阻给的往往是额定等效电阻,而真实启动瞬间负载是接近短路的。

1.2 阶跃响应的“半周期回路”:电流峰值能涨多大

把启动瞬间看成一次阶跃激励:半桥中点的方波电压直接加到Lr和Cr串联的谐振支路上。忽略阻尼、忽略励磁电感分流的理想情况下,谐振电流峰值大约是方波幅值除以特征阻抗Z0:

I_peak ≈ (Vbus / 2) / Z0,其中 Z0 = √(Lr / Cr)。

举个例子,若Vbus=400V,Lr=20μH,Cr=33nF,算一下:

  • fr = 1 / (2π√(Lr·Cr)) = 1 / (2π√(20e-6 × 33e-9)) ≈ 196kHz
  • Z0 = √(20e-6 / 33e-9) = √606 ≈ 24.6Ω
  • 理想阶跃电流峰值 ≈ 200V / 24.6Ω ≈ 8.1A

看着不高?注意这是理想状态。真实情况下输出二极管尚未导通或导通窗口极短,Lm也参与谐振,加上母线电容、PCB寄生电感引入的更高频振荡,实际尖端可以比这个估算高出两三倍。配合满载额定电流10A来看,启动尖峰到了28A甚至更高就不奇怪了。

这类参数算起来很绕,很多同行习惯用在线LLC计算器先跑一遍增益和Z0,再把结果摆到Mathcad里复核。关键是把Z0算清楚,很多启动问题其实在原理图阶段就已经埋下了。

1.3 为什么“最低频率起步”是最危险的策略

有些初版固件为了快速建立输出,软启动直接从接近谐振频率的低频开始发波,甚至直接命中fr。在最恶劣的初始条件下,这就等于把谐振腔直接推到增益峰值,输出电容却没建立电压来消耗能量,结果不用多说。

还有一个容易被忽略的细节:LLC在启动瞬间往往处于硬开关或准硬开关状态。稳态时靠谐振电流完成ZVS,启动时电流相位、幅值都没建立好,死区时间内原边电流可能根本不足以给结电容完全充放电,于是硬开关带来的振荡又叠加在谐振电流上,让峰值更难控制。所以软启动要解决的不仅是一个“静态过流点”,而是一整个动态过程。

2. 常规软启动为什么总在“事后补救”

2.1 扫频曲线标定好之后,环境一变就失效

最常用的传统软启动办法,是让开关频率从比较高的起点(比如2倍fr)按一条事先标定的曲线逐步下降到目标稳态频率。思路本身没问题:离谐振频率远,阻抗大、增益低,电流小;越靠近谐振频率,增益爬升,输出建立得越快。

但这条曲线是“开环”的。负载轻重、母线电压高低、谐振电容容差、温度对磁性元件参数的影响,都会让实际最佳扫频曲线偏移。你在一台板子上调好的曲线,换到另一台PCB或者换一批电容,启动电流就变了。更尴尬的是,如果标定时把起点频率设得不够高,第一次上电就直接致敬满血浪涌。

2.2 逐周期电流限制的检测链路,往往慢半拍

都说要加逐周期限流,但真正做起来,问题在于“多快才算逐周期”。LLC的工作频率即使只有200kHz,周期也就是5μs。谐振电流的建立在前半个周期内就完成大半,峰值出现在几百纳秒到一微秒量级。MCU中断方式在这里基本顶不住:ADC采样加上比较判断加上响应,少说也要几百ns到数μs,等软件反应过来,峰值早就过去了。

就算用片上比较器直接拦截PWM,也存在“拦截之后怎么办”的问题。LLC的电流波形接近正弦,不能像反激那样简单粗暴地关断一整个周期。如果关断时机不对,半桥两个开关管的导通时间就不对称,变压器会因此偏磁,下一拍反而可能更危险。

2.3 闭环PID介入的时机错位

另一种常见做法是启动时直接把PID环路打开,让输出电压慢慢建立。问题是启动初始阶段误差极大,PID输出会在上限饱和,实际上等于开环输出最高频率或最大占空比。等输出电压慢慢追上来、误差进入线性区,PID才开始有这个“温柔”的控制动作,但此时浪涌往往已经发生过了。

也就是说,传统方案本质上是“先用开环跑完最危险的一段,再交给闭环修正”。这违背了启动控制的核心诉求——在最危险的初期把电流按在一个可控范围内。

3. 把判断放进硬件:PSoC CLB-MACO的工作方式

3.1 CLB不只是“可编程IO”,它是外设与PWM之间的“接线员”

PSoC里的CLB(可配置逻辑块)本质是一小片可编程数字逻辑资源,由查找表、触发器和数据选择器组成。它和FPGA的规模没法比,但好处是直接生长在MCU外设总线旁边,能与TCPWM、比较器、ADC触发信号直接相连。

CLB对LLC控制的价值在于:它可以在和PWM外设同步的时钟域里运行,每个开关周期都被重新评估一次。判断结果可以立刻作用于TCPWM的周期更新、强制输出、甚至Kill信号。这种路径的时延是纳秒到亚微秒级的,可以真正跟得上逐周期的节奏,而不是靠中断去抢时间。

把CLB理解成一个“懂外设时序的小助手”:主CPU负责写目标参数、管启动流程,CLB则在每个PWM周期内盯着关键信号,一旦发现异常,它不需要等任何指令就能做出动作。

3.2 MACO数据通路:从“门逻辑”到“算术判断”的扩展

单靠查找表和触发器做简单的继电器逻辑没问题,但要实时算一个目标频率、比较一个累计值、做滞回判断,逻辑资源就有点不够用。PSoC的CLB-MACO正是为此出现的:部分型号的CLB支持切换为MACO模式,把宏单元重构成数据通路,可以执行加、比较、移位、累加这类简单算术,相当于在硬件逻辑旁边配了一个微型“算术引擎”。

用在LLC启动场景里,MACO很适合做这些事:

  • 每周期累加一次频率步进值,得到当前目标开关周期;
  • 对过流比较器输出做窗口积分,过滤尖峰噪声;
  • 比较当前电流峰值估计与上限值,输出滞回状态。

我在样机上用的就是这几种能力组合。CPU只负责在启动前配置阈值、在启动完成后切入PID闭环,启动中段的“盯电流、调频率”动作完全由CLB-MACO承担。

3.3 为什么这组合比“模拟比较器+MCU”更适合干活

关于逐周期处理,简单对比一下三种方案的特性:

方案响应速度状态逻辑误动作控制可维护性
MCU中断数百ns到μs级强,但受软件调度影响可做滤波但干扰CPU实时性代码灵活
模拟比较器+RS触发器ns级基本没有,只能锁存或复位容易受毛刺干扰需改硬件
CLB-MACO数十ns,PWM周期同步可用有限状态机表达可在硬件内做窗口滤波、滞回配置化修改

从表里能看出,模拟比较器输在“没有状态”,MCU输在“不够快”,CLB-MACO正好卡在中间:够快,又有状态逻辑。对于LLC这种波形有明确相位关系、电流接近正弦、需要“判断后再决定下一拍动作”的拓扑,这层状态逻辑是省不掉的。

4. 让限流走在“浪涌前头”:峰值抑制逻辑设计与参数标定

4.1 信号链路与状态机设计

整个抑制方案我把它拆成四段信号链路:

  1. 原边电流通过电流互感器或者采样电阻,进入PSoC内部的比较器,阈值由DAC或参考电压设定。比较器输出一个“过流标志”接到CLB输入。
  2. TCPWM的周期更新事件同时反馈给CLB,作为每周期边沿同步信号。CLB在每个开关周期结束时刻,读入该周期内是否出现过流标志。
  3. MACO数据通路根据“过流标志产生时刻的相位”和“连续过流的时钟数”,估算电流尖峰的趋势,而不是只看单次电平平移。
  4. CLB状态机输出频率调节使能信号,控制TCPWM周期寄存器的更新方向。必要时输出同步的Guard信号保护半桥对称性。

关键状态设计为四态:

  • RAMP_FAST:启动初期,电流未触及限制,按大步进降频,快速建立输出。
  • LIMIT_HOLD:电流超过上限,停止降频,保持当前频率。如果电流继续上升,允许小幅抬高频率。
  • RAMP_SLOW:电流回落到滞回点以下,改为小步进降频,缓慢逼近稳态频率。
  • PASS_THROUGH:电流已完全受控,输出接近目标,释放控制权给PID闭环。

这个状态机的核心思想是“让限流走在浪涌前头”:它不是等电流失控后才去砍,而是在电流逼近阈值的那几个周期里,就已经阻止频率继续下降,甚至主动把频率往回拉。

4.2 用类Verilog描述了时序行为,实际配置时照着搭

CLB配置不是像写MCU代码那样逐行C语言,而是在PSoC Creator里搭组件、连信号。为了方便说明,下面用类Verilog把这个时序行为描述出来,实际配置时按这个逻辑去连LUT和触发器即可。

// 行为示意:CLB内部状态判断 always @(posedge pwm_period_end) begin if (over_current_flag) begin state <= LIMIT_HOLD; // 过流,保持频率 freq_step <= FREQ_STEP_UP; end else if (state == LIMIT_HOLD && current_below_recover) begin state <= RAMP_SLOW; // 回落到恢复阈值,进慢速区 freq_step <= FREQ_STEP_SLOW; end else if (state == PASS_THROUGH) begin // 交给CPU/PID,CLB只做监视 end end // 周期更新:LIMIT_HOLD时禁止降频,RAMP阶段按步进调整 assign period_update = (state == LIMIT_HOLD) ? period_hold : period_target;

信号之间的具体接法,需要在PSoC Creator里把CLB组件的输入口接到比较器输出,把输出口接到TCPWM的周期更新和强制信号上。硬件上的连线比写代码更像“接电线”,但这套环境的好处是改逻辑不需要动PCB,重新编译一次就能换一种策略,特别适合反复调软启动曲线。

4.3 参数标定:先定限流值,再定起始频率,最后碰恢复斜率

这套方案里最重要的不是代码,而是三个参数的标定顺序。我建议按下面这个顺序来:

  1. 先定Ilimit(限流阈值)。参考磁性元件的饱和电流和开关管峰值电流,取饱和电流的70%到80%作为上限比较器阈值。这个值不能说越大越好,因为限流值就是给启动过程画的一条“保险丝”。
  2. 再定f_start(起始频率)。一般取1.6到2倍fr。太高会让启动时间拉长,太低则第一拍就可能触发限流。起始频率标定完成后,看第一次上电是否一上来就触发LIMIT_HOLD。如果第一拍就触发,说明起点太低,把起点往上提。
  3. 最后调恢复斜率。恢复斜率和启动时间直接相关:从f_start到f_steady,分多少步走完。步子大,启动快,但接近稳态时如果限流还在频繁触发,说明步进太大;步子小,启动慢但平滑。

实际样机参数(半桥LLC,Vbus=400V,输出48V/10A)我最终标定如下:

参数取值说明
fr196kHzLr=20μH,Cr=33nF
f_start310kHz约1.58倍fr
Ilimit13A额定10A的1.3倍
Irecover8A滞回区间下沿
大步进降频4kHz/周期RAMP_FAST阶段
小步进降频500Hz/周期RAMP_SLOW阶段

启动时间实测约3ms,其中快速降频段约1.8ms,慢速逼近段约1.2ms。这个分配让输出建立又稳又不拖沓。

5. 实测结果与调试中的三个坎

5.1 实测数据:抑制前后对比

为了对比效果,我在同一块板子上分别跑了三种启动策略:

启动方式谐振电流峰值启动时间现象
无限制,直接低频发波约28A约1.2ms电流严重过冲,有异响
传统扫频(2fr线性下降到fr)约19A约3.5ms中段仍有一个明显鼓包
CLB-MACO状态机限流约12.5A约3.0ms电流被压平,无明显鼓包

最终把Ilimit定在13A,实测峰值最高冲到12.8A,没有触发硬件保护。对比最初的28A,算是把启动浪涌砍掉了一半还多。而且这种限流方式对负载不敏感,换不同负载跑了几轮,状态机都能自己适应。

5.2 第一个坎:峰值毛刺导致限流误触发

刚接上CLB逻辑时,限流阈值设到10A,结果启动过程中限流频繁触发,频率被压住不动,启动时间被拖到接近10ms。用示波器看比较器输出,发现触发信号里混着一堆窄毛刺,这些毛刺来自谐振电流高频振荡,并非真正的平均电流过流。

解决方法是给过流判断加一个时间窗口:只有连续超过比较器阈值达到一定时钟数才确认“真过流”。这个窗口不能太长,否则就失去逐周期意义,我压到大约200ns,既滤掉开关噪声,又能拦住真正的浪涌前沿。

5.3 第二个坎:恢复阈值太低造成“喘振”

另一个问题是Irecover设得太低,电流回落后状态机从LIMIT_HOLD切回RAMP_FAST,降频几步又触限流,形成高频喘振,不仅机械噪声明显,频率波动还会耦合进输出电压。这实际上是典型的“滞回不足”。

处理办法是加宽滞回区间:Ilimit设13A,Irecover设8A。电流要回落到比限流值低一大截,才允许状态机解除限流。代价是启动时间略有延长,但换来的是系统不再来回抖动。

5.4 第三个坎:Kill信号引发的偏磁问题

早期版本图省事,CLB检测到过流直接给TCPWM发Kill信号,把正在进行的半周期强行终止。结果过流确实被压住了,但上下管导通时间不再对称,变压器偏磁又带来了新的原边电流不对称问题。

后来改成“不在当前周期下手,而是在周期边界调整下一步频率”:过流时不砍当前周期,而是封锁下一次的降频动作,必要时小幅抬频。虽然延时了不到一个周期,但对LLC这种需要保持波形对称性的拓扑来说,完整性比瞬时关断重要得多。

5.5 强电调试的安全习惯

多说一句调试安全。上电实验不要直接满母线电压试,先用可调限流电源把母线拉到36V或50V,确认限流逻辑响应正常之后,再逐级加压到额定值。这样即使参数标定错误,板子顶多出一声异响,不至于炸管。谐振电流波形不要只看平均值,用示波器的峰值保持功能记录启动阶段每一个周期的最大电流,这是判断限流策略有效性的唯一可靠依据。

我个人在这轮调完之后最大的体会是:LLC软启动的难点不在没有限流机制,而是把限流机制放到正确的时间尺度上去执行。把这种和时间强相关的判断交给CLB-MACO硬件去做,CPU只在启动前后管宏观流程,整个系统的实时性和稳定性都会上一个大台阶。这个思路不只用于启动,后续做输入电压瞬态跌落保护、跳闸后自动重启,我都打算沿用这套硬件状态机方案。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询