news 2026/10/27 17:26:18

LLC软启动电流过冲压不住?用PSoC的CLB+MACO做硬件闭环

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
LLC软启动电流过冲压不住?用PSoC的CLB+MACO做硬件闭环

上个礼拜我把一台400W的LLC谐振电源的启动波形导出来看,原边谐振电流峰值15.6A,比满载工作电流9A高了一大截。启动那一两秒里,MOSFET散热片的温度比满载跑五分钟还高。问题就出在软启动:传统的频率扫描方案在LLC谐振腔面前,根本压不住启动瞬间的电流过冲。这次我把原来放在MCU固件里的软启动逻辑,挪到了PSoC片内的CLB和MACO上,用硬件闭环的方式做脉冲密度预充和逐周期封顶,峰值直接降了一半多,开关管和变压器温度也明显下来。如果你也在做LLC软启动,或者在调“启动一炸管”的灵异现象,这篇文章应该对你有用。我会把物理根源、传统方案的软肋、CLB+MACO的完整设计思路、实测数据和踩坑记录都摊开讲。

1. 先从物理根源说起:启动过冲为什么“压不住”

1.1 谐振腔在启动瞬间的“充电竞赛”

LLC启动时最容易被忽略的一件事是:输出电容电压为零。这意味着变压器副边整流二极管几乎在整个开关周期里都导通,输出侧相当于被一个大电容短路。从原边看过去,副边反射过来的等效负载阻抗非常低,整个谐振腔近似变成了一个高Q值、低阻尼的串联RLC回路。

这种状态下给Lr-Cr串联网络突然施加Vbus电压,谐振电流不是缓慢爬升的,而是按指数包络振荡增长的。经典RLC欠阻尼阶跃响应的超调公式是Mp = e^{−πζ/√(1−ζ²)},阻尼比ζ越小,超调越大。启动瞬间恰恰就是ζ最小的时刻——负载等效电阻极低,能量无处释放,全灌进谐振腔里来回激荡。用倒水的类比理解:LLC的谐振腔像一个杯口尺寸固定的杯子,传统软启动是“凭感觉控制水流”,而启动时阻尼激烈变小,等于同时把杯子口换小了,你觉得倒得挺慢,其实已经洒了一桌。

再叠加一个很要命的特性:在串联谐振频率Fr附近,Lr和Cr的阻抗互相抵消,整个网络的阻抗降到最低值Z = √(Lr/Cr)。以我手上这块板子为例,Lr=9μH、Cr=66nF,Vbus=400V,理论上在谐振点附近原边电流可以冲到几十安的量级。软启动要解决的核心问题,就是别让电流在谐振腔“最没阻力”的时候跑出失控的速度。理解了这一点,后面所有方案设计都有了解释。

1.2 过冲的后果不只是“应力”

很多人以为启动过流只是让MOSFET多吃一点应力,其实更隐蔽的问题是热。开关管导通损耗和电流平方成正比,峰值电流翻一倍,瞬时损耗就是四倍。启动过程虽然只有几十毫秒,但MOSFET的结到壳热容很小,热量来不及散出去,结温瞬间就可能冲上去二三十度。如果你做过连续反复开关机的老化测试,会看到启动那几下温度逼近甚至超过满载稳态温度。

除了热,还有两个很容易被忽视的次生效应。一个是地弹和Vgs毛刺:LLC半桥的高边驱动在启动大电流冲击下,源极和功率地之间会出现明显的电压跳动,严重时会让驱动波形出现异常毛刺,甚至诱发误开通。另一个是磁性元件啸叫:谐振电流的包络在馈入变压器和电感时,磁致伸缩效应会产生可闻噪声。旧方案里那种“吱”的一声尖叫,其实就是大电流包络在音频段激励磁芯的结果。“降降温”这个说法,翻译成工程指标就是两条:压住原边谐振电流峰值,缩短高损耗状态的持续时间。

2. 传统软启动方案的两道坎:中断延迟与固定扫描曲线

2.1 你把频率调下去,电流已经冲上来了

最常见的LLC软启动就是软件扫频:启动时把开关频率设到最高,让谐振腔呈现高阻抗,再按固定步长逐步降低频率,让增益慢慢抬升、输出电压慢慢建立。思路本身没有错,但实际执行时有一个致命的时间问题。

软件扫频的完整路径是这样的:ADC采样电流检测点电压,触发中断,CPU读取比较结果,然后修改PWM周期寄存器的值,再等PWM模块在下一个重载边界生效。这一条链路走下来,在常见的72MHz或168MHz主控上,3到5微秒是家常便饭。可LLC在500kHz工作时,一个开关周期才2微秒。等你的中断把新频率写进去,电流的第二个、第三个峰值已经过去了。

更麻烦的是相位不确定性。PWM周期寄存器的重载不是随写随用的,要等计数器归零或到达设定值才装载。中断返回时机稍有偏差,实际生效时刻就会漂移。也就是说,传统软件扫频本质上是一个“事后执法”机制——检测到过流的时候,电流已经到达峰值了,你改频率只能影响后续几个周期,第一个尖峰该多大还是多大。对于LLC这种逐周期能量积累的拓扑,这种延迟就是压不住过冲的根本原因之一。

2.2 固定扫描曲线与动态工况的失配

就算你不在乎延迟,把扫描曲线调得足够保守,也还有一个绕不过去的问题:扫频是开环的。LLC启动时的实际工况由多个变量共同决定——Vbus电压、环境温度、输出电容初始电荷、负载轻重,甚至谐振电感磁芯的初始磁通状态。所有这些都会影响同一时刻谐振电流到底涨到了多少。

我旧方案的参数是:起步600kHz,每毫秒降2kHz,一路降到220kHz。在常温、Vbus=400V、电子负载CC模式下拉起来,看起来一切正常。可只要把环境温度降到零下或者把Vbus抬高到410V,同样一条扫描曲线在扫到300kHz附近时,电流形状就完全不一样了。扫描曲线调慢一点,谐振低阻区停留时间长,能量持续积累,峰值照样上来;扫描曲线调快一点,输出电容还没建立多少电压,电流斜率又变得更大。说白了,固定扫描曲线是在“开盲盒”。

这也是为什么很多同行最后宁可把软启动时间拉到50ms甚至100ms。并不是他们不知道启动时间长影响体验,而是开环方案实在没有更好的办法——只能用最保守的参数去赌一个大概率不会炸的工况。这种妥协在批量生产时尤其痛苦,因为你会遇到“第一批没问题,第二批换了批电感就偶尔启动过流”的诡异问题。

3. 这次的解题思路:CLB负责“听话”,MACO负责“摸温度”

3.1 为什么把保护逻辑放在CLB而不是固件

CLB的全称是可配置逻辑块,你可以把它理解成塞在MCU里的一颗“小CPLD”。它不参与CPU指令流,不排队等中断,也不管总线的优先级,只是根据输入信号组合产生输出。CLB的每个宏单元里都有查找表、触发器和数据路径,可以做计数器、状态机、逻辑门甚至简单的移位运算。关键是它的时钟可以和PWM同源,因此不存在固件里“读到一个已经过时的状态”的问题。

这次设计里,CLB承担的角色是“执行机构”:它接收MACO比较器送来的电平信号,对PWM模块的驱动脉冲做窗口选通和峰值封锁。所有判断和执行都在硬件路径上完成,延迟是固定的,而且远小于一个开关周期。固件只在启动开始时做一次初始化配置,启动过程中完全退出控制路径。这比在中断里调寄存器要可靠得多。

3.2 MACO:让模拟信号在片内完成“第一道判断”

MACO是PSoC片内的混合模拟控制模块,说白了就是把比较器、运放、参考DAC这些模拟电路放进MCU里。它在方案里的核心价值是连续监测谐振电流,而不是像ADC那样周期抓拍。

ADC的本质是采样,总会错过峰值。MACO里的比较器是模拟连续时间器件,输入信号只要越过阈值,输出立即翻转,不存在“这一拍没采到”的问题。信号路径是:电流互感器→采样电阻→MACO比较器→CLB逻辑→TCPWM的kill输入。整条链路完全绕开CPU和总线,相当于给LLC装了一个“硬件直觉”。这里用飞行员类比很贴切:ADC加固件像飞行员看仪表再手动操作,MACO加CLB像自动驾驶把气压高度传感器直接联动襟翼,不经过人的反应时间。

3.3 启动阶段的具体策略:高频预充+窗口调制+实时封顶

方案没有用传统的单纯调频,而是把启动分成三段。

预充段:基础频率锁定530kHz,CLB做窗口调制,每8个PWM周期只放行3个驱动脉冲。这个阶段输出电容电压接近零,副边近似短路,即使频率很高,单个脉冲注入的能量也不能太大。窗口调制让谐振腔“小口吃饭”,平均功率被压得很低。

建压段:MACO的另一路比较器检测输出电压分压,当Vout超过目标值30%附近且上升斜率进入合理区间时,CLB状态机把窗口从3/8逐级升到5/8、7/8,最终到8/8连续输出。与此同时基础频率从530kHz同步往下降,目标是220kHz左右。

稳态段:窗口恒为1,CLB退出窗口控制,PWM频率闭环交还给固件。

三段之外还有一道全程有效的保险:原边谐振电流采样进入MACO的峰值比较器,一旦越过限值,CLB立刻封锁下一个窗口的驱动脉冲,做到逐周期封顶。这就在“平均功率可控”之上加了“瞬时电流可见”的闭环,和传统开环扫频是本质区别。

4. 工程实现:从采样链路到CLB状态机的完整配置

4.1 电流采样与MACO输入通道

原边谐振电流采样我用了电流互感器(CT),没有用采样电阻直接串在主功率回路里。CT匝比1:20,副边接2Ω采样电阻,并联220pF电容滤掉开关毛刺。这样设计出来的采样电压范围大约是0.2V到1.6V,对应原边电流2A到16A,正好落在MACO比较器的输入量程内。

需要提醒的是CT选型时要注意磁复位和饱和问题。LLC原边电流是双向交流波形,CT在一个周期内自然回零,正常工况不会累积磁通。但启动瞬间如果电流包络过大,CT依然可能饱和,导致采样电压削顶失真,让保护误判。我建议CT的额定电流按两倍稳态峰值选,留足裕量。

采样电阻上的电压直接送MACO比较器输入。比较器阈值不是固定值,启动时做成斜坡:初始0.25V,对应原边电流约2.5A;20ms内缓慢爬升到0.65V,对应电流限约6.5A。这样做的用意是启动初期输出电压没有建立,振腔阻尼极小,限制阈值不能给高;随着输出电容逐步建压,阻尼增大,阈值再慢慢放开。斜坡由内部参考DAC设定,配和CLB状态机同步步进,不需要固件介入。

4.2 CLB资源划分与LUT真值表

以手头PSoC 4000T的CLB资源为例,我规划了三个宏单元,其实还留了一个做备用。具体配置如下表:

宏单元功能输入输出说明
CLB_DP0窗口计数器PWM_HF上升沿、MODEW_WIN、CNT_CARRY每个PWM周期加1,计数值小于LIMIT时输出1,达到边界产生进位
CLB_LUT0MODE选择状态机MACO_VOK、MACO_SLOPELIMIT[1:0]根据两路比较器输出决定LIMIT为3/8、5/8、7/8或8/8
CLB_LUT1+DFF0峰值封锁与复位W_WIN、PEAK_CMP、CNT_CARRYKILL_OUT检测到过流后保持封锁,直到窗口边界复位

窗口计数器的思路很简单:TCPWM产生高频基础信号PWM_HF,CLB_DP0对这个信号做5bit计数。每一次PWM输出高电平时,计数器加1,然后和LIMIT比较。计数值小于LIMIT时输出W_WIN为1,允许PWM驱动通过;计数值达到LIMIT后,余下的周期W_WIN为0,驱动被关断。

CLB_LUT0负责决定LIMIT取多少。启动初期MODE=0,LIMIT=3,窗口密度3/8;MACO检测到输出电压建立到一定水平后,MODE变为1,LIMIT跳到5;之后再到7,最后MODE=3时LIMIT设为8,等于窗口全开。这个过程不需要CPU参与,纯粹由两路MACO比较器的输出电平触发状态切换。

CLB_LUT1加DFF0做的是安全锁存:PEAK_CMP一旦变高,DFF0置位,KILL_OUT拉高,PWM驱动被封锁;只有等窗口计数器进位CNT_CARRY到来,锁存器才被清除。这样能保证一个窗口内最多只放行到阈值边界,不会让同一窗口里的后续脉冲继续累积能量。

这些逻辑在PSoC Creator的CLB组件编辑器里,就是填查找表真值表和Datapath比较值。不需要写Verilog,也不需要额外逻辑芯片。填表时注意输出寄存器化选项,尽量让LUT输出打一拍再出去,避免组合逻辑毛刺。

4.3 与TCPWM/PWM模块的衔接

TCPWM在这里只干一件事:产生互补PWM波形,并留一个kill输入通道。启动时频率设为530kHz,占空比50%,死区300ns。CLB的KILL_OUT接到TCPWM的kill0输入,配置成高电平封锁。KILL一旦拉高,TCPWM的两路输出同时被强制置为无效电平,半桥不会出现上下管同时导通风险。

连接方式上唯一需要注意的是KILL信号生效的边沿位置。LOCK如果落在PWM高电平中间,会把一个完整脉冲切成很窄的毛刺,副边变压器电压伏秒面积瞬间失衡。我实际调下来比较稳妥的做法是:窗口的翻转边沿避开PWM输出边沿,尽量错开90°。这样即使KILL动作,也是在一个脉冲完整结束之后才关断,不会把波形切成细碎的小尖刺。

4.4 为什么“窗口调制”比“改频率”更直接

可能有人会问:既然CLB都盯上了,为什么不让CLB直接去调TCPWM的频率寄存器,非要搞一个脉冲密度窗口?原因在于,直接调频率需要等待周期寄存器的同步重载,改到哪个周期生效和当前计数器的相位有关,存在不确定性。而窗口调制是在每个开关周期边界做“开”或“关”的选通,动作天然与PWM经度对齐,确定性极高。

启动阶段本来就是能量注入过程,不需要次级侧输出连续正弦波。脉冲密度调制在这个阶段等效于“用极少的信息量精确控制平均功率”,非常适合。等输出电容建立起来之后,再切回连续调频模式,就是顺理成章的事了。这套分段思想,核心是把“什么时候给多少能量”这件事从开环猜测改成闭环决策。

5. 实测对比:同一块板子,两种方案的启动波形差异

5.1 测试环境和测量点位

这块板子的参数先摆出来:输入Vbus=400V,输出48V/8.3A,Lr=9μH,Cr=66nF,Lm=230μH,谐振频率约207kHz。电子负载设置为CC 8.3A,环境温度25℃,连续开关机10次取最差一次数据。测量探头用200MHz带宽,电流探头夹在谐振电感回路上,同时用热像仪记录满载运行5分钟后的MOSFET壳温和变压器中心柱温度。

旧方案就是在固件里跑的软启动扫频,600kHz起步,每毫秒降2kHz,其他所有硬件条件完全一致。新方案把软启动逻辑整体迁到CLB+MACO,固件只负责初始化。

5.2 关键指标对比

指标旧方案(固件扫频)新方案(CLB+MACO)
原边谐振电流峰值15.6A7.2A
软启动完成时间38ms26ms
MOSFET壳温82℃64℃
变压器中心柱温度89℃70℃
启动啸叫有,轻微无

峰值电流降了54%,这个幅度基本靠数值就能感受到“降温”。温度指标更直观:MOSFET壳温降了18℃,变压器中心柱降了19℃,反复开关机时的热冲击温和了很多。

5.3 峰值降了,启动时间为什么反而更短

这个结论乍看反直觉,但细想完全合理。旧方案为了不炸管,把扫频拉得很慢,38ms里前面一大半时间都处在“低效空转”状态——频率虽然高,但输出电容电压没有建立起来,能量大部分消耗在谐振腔内部循环上。真正给输出电容充电的只有后半段的低频率区间,而那段区间电流又因为缺乏闭环限制冲到接近16A,不敢再多给电。

新方案相当于给软启动加了巡航控制:每一段都贴着临界安全的最大电流限制走,能多给能量的时候就多给一点,一看电流要冒头就立刻封窗口。于是26ms就把同样的输出电容从零充到48V。工程上,“慢”从来不等于“稳”。旧的扫频方案是又慢又不稳,新的硬件闭环是又快又稳。

6. 试产中踩过的那几个“软钉子”

6.1 MACO比较器抖动造成的窗口抖动

第一次联调时发现,启动过程中窗口密度不稳定,示波器上PWM驱动波形出现随机缺拍。起初以为是CLB状态机写错了,后来查了一晚上才发现是MACO比较器在阈值附近抖动。谐振电流采样信号上有开关毛刺,哪怕幅值只有几十毫伏,在比较器阈值附近也会引发输出反复翻转,导致CLB误判。

解决办法是两件事叠加:比较器配置加15mV滞回,采样电阻的并联电容从220pF增大到470pF。滞回让比较器在阈值附近不会来回跳变,RC滤波把高频开关毛刺削掉一些。但注意滤波不能加得太狠,截止频率保持在10MHz左右合适——如果低到1MHz,峰值信息也会被滤掉,比较器永远看不到真实的电流尖峰。

6.2 CLB组合逻辑的“违章短脉冲”

另一个折腾了很久的问题是PWM驱动脚上偶尔出现几纳秒的毛刺。示波器上看像是KILL信号在窗口边沿抖了一下,实际上这是CLB组合逻辑的竞争冒险——LUT的输出在输入信号变化时,因为不同路径的传播延迟不一致,会产生一个几十纳秒的窄脉冲。这个窄脉冲传到TCPWM的kill脚上,就会把驱动波形切出一个诡异的小缺口。

排查思路很直接:先确认毛刺在CLB输出端就存在,然后给所有LUT输出加DFF寄存器打一拍。寄存器化之后,输出只在CLB时钟沿变化,组合逻辑的竞争冒险被有效屏蔽。同时我把TCPWM的kill配置成电平触发而不是边沿触发,就算残留一点窄毛刺,也不容易产生误动作。这类问题用低频示波器基本看不出来,建议至少200MHz带宽起步。

6.3 状态切换太早导致二次过冲

第三版逻辑里,我把“建压完成”的判据简单设成输出电压超过目标值的50%。实测发现,在输出电容很大、充电斜率很陡的负载条件下,Vout刚过50%时dVo/dt仍然很高,此时如果马上把窗口从5/8跳到8/8,会给谐振腔一个很大的能量阶跃,造成二次过冲。虽然峰值没到15A那么夸张,但也到了11A左右,明显不合格。

后来把判据改复杂了一点:不仅要求Vout高于阈值,还要求输出电压斜率低于某个限值。用MACO的两路比较器,一路看电压幅值,一路看上升趋势,两路同时满足时,CLB才允许状态机切换到更高密度窗口。这个调整把切换点向后推了大约3ms,二次过冲完全消失。这段3ms的平台期在示波器上会显示为电流小幅回落,别把它误判成环路不稳去乱调参数。

6.4 固件不要“抢方向盘”

最后一个问题比较隐蔽,也最值得说。调试后期我发现,只要CPU在启动过程中开了PWM中断,哪怕中断里只做监控日志不修改任何寄存器,CLB的窗口序列也会偶发错乱。仔细分析后确定是中断的调试探针访问APB总线时占了带宽,间接影响了PWM相关的寄存器读取时序。

所以我在代码里做了个明确约定:启动阶段关掉所有PWM中断,CPU完全退出PWM控制路径,只保留状态机监控和故障记录;等MACO检测到输出建压完成、窗口切到全开的稳态段之后,固件再接管频率闭环。这个约定听起来基础,但实际项目里真的容易被忽略。你的保护逻辑做得再好,CPU在边上“抢方向盘”,也会让整套硬件闭环的效果打折扣。

如果再做一版,我仍然会把软启动保护放在CLB+MACO上,而不是退回固件扫频。启动就一次,这个瞬间最怕的是“来不及反应”。把感、判、行放进硬件,等于给LLC戴上了自动刹车。后来我在另一台780W的LLC上复用了这套逻辑,主要改的是CT匝比、采样电阻和MACO的阈值斜坡,CLB窗口部分几乎原封不动就移植过去了。做这类调试的另一个心得是:示波器带宽和探头补偿真的不能省,CLB毛刺和MACO抖动这类问题,用低频设备基本看不到,白白浪费一晚上的排查时间。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/27 17:26:13

本地开源代码模型替代Jev实测:工具调用、授权与接入指南

最近花了大概两周时间,把团队里一直用的 Jev 相关开源模型完完整整过了一遍替代方案。先说结论:Jev 这类“本地优先、轻量可跑”的代码模型,在社区里口碑不差,尤其适合个人开发者把它接进 Codex CLI、Claude Code 这类终端原生的编…

作者头像 李华
网站建设 2026/10/27 17:26:04

开源替代Jev:从模型到Agent框架的完整选型与落地指南

Jev这个词,最近在几个开发者社群里出现的频率明显高了。但你要是问十个人“Jev到底是什么”,大概能收到八种回答:有人说它是一个AI编程助手,有人说是一套能嵌入Codex CLI、Claude Code里跑的模型接口,还有人干脆把它当…

作者头像 李华
网站建设 2026/10/27 17:25:53

Seay源码审计系统实战:从扫描到复扫的完整流程

简介:Seay源代码审计系统是一款面向开发者与安全工程师的自动化代码审计工具,用于在项目开发中快速发现源代码里的潜在安全漏洞与编码规范问题,适合具备一定编程基础、希望提升代码质量与安全性的技术人员使用。压缩包共25个文件,…

作者头像 李华
网站建设 2026/10/27 17:25:42

军工级WebUploader改造:卫星视频安全传输方案

1. 项目背景与需求分析军工行业的卫星视频传输系统面临着几个特殊的技术挑战:视频文件体积通常达到GB级别、需要在不同安全级别的浏览器环境中稳定运行、传输过程可能因网络波动中断。传统的文件上传方案在这种场景下存在明显不足:单次上传大文件容易因网…

作者头像 李华
网站建设 2026/10/27 17:25:38

JavaScript全栈图片众包标注平台PictureTag:从搭建到二次开发

简介:PictureTag 是一套面向软件工程课程实践与 Web 全栈入门者的图片众包标注平台项目源码,以 JavaScript 为核心,配合 Java 后端实现图片加载、Canvas 标注、任务发布与标注数据存储等完整流程,适合想通过真实项目理解前后端协作…

作者头像 李华
网站建设 2026/10/27 17:25:32

TCP协议深度解析:结构、特点、应用场景与实战排查

1. 为什么我们绕不开TCP:从一次线上故障说起几年前我接手过一个内部数据同步服务,两台机器之间传文件,平时跑得好好的,某天突然开始间歇性丢数据,日志里没有任何报错,就是传过去的文件校验对不上。排查了大…

作者头像 李华