ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

LLC软启动电流尖峰抑制:用CLB-MACO硬件逻辑实现逐周期钳位

LLC软启动电流尖峰抑制:用CLB-MACO硬件逻辑实现逐周期钳位 去年做一款3kW服务器电源的辅助供电级时LLC上电瞬间的谐振电流尖峰把我折腾得不轻。示波器上那一下峰值直接冲到稳态电流的接近3倍保险管倒是没炸但驱动芯片先躺了一个。后来把目光转到MCU内部那几块常被忽略的硬件资源——用PSOC的可配置逻辑块加上模拟比较通道CLB-MACO做了一套启动谐振电流峰值抑制方案问题才算真正解决。这篇就把LLC软启动为什么会有这么猛的电流冲击、传统软启动方案差在哪、以及CLB-MACO方案的检测/比较/修正完整链路一五一十说清楚。如果你正在做LLC谐振变换器的启动策略或者在为启动过流、软启动时间太长、频率斜坡调不稳这些问题头疼这篇文章应该能给你一个不同的思路把峰值抑制这件事从软件中断里拿出来用芯片里现成的硬件逻辑去完成。1. 启动瞬间那一下“重锤”——LLC软启动电流尖峰的根源1.1 LLC启动时到底发生了什么LLC谐振变换器正常工作时靠的是谐振腔的阻抗特性来传输能量但启动瞬间完全是另一回事。输出电容初始电压为零控制环路一使能变换器要在极短时间内把输出电容从0V充到额定电压。这时候等效负载接近短路状态增益需求被拉到极限。问题在于LLC的增益曲线跟开关频率强相关。启动时如果直接以接近谐振频率的开关频率运行谐振腔会以极大Q值工作电流波形又尖又高。很多人第一反应是“频率拉高一些不就行了”确实高频下增益降低、电流变小但频率不可能无限拉高因为驱动电路、变压器磁芯、死区时间都有物理限制。更深一层的问题是输出电压的建立过程并非线性。输出电容充电时电压上升速度取决于充电功率和电容容值。电容越大电压爬起来越慢而这段时间里谐振腔一直处于“近似短路”的应力状态。我在实测中发现最恶劣的峰值往往不是出现在启动最开始而是出现在输出电容电压充到一半左右、控制环路开始有动作但还没稳定下来的那个阶段。1.2 为什么说这是“谐振电流”问题不是普通过流普通过流保护看的是输入电流或输出电流但LLC启动时的伤害源是谐振腔电流。谐振电流流过谐振电感、谐振电容、变压器原边以及开关管它的特点是正弦状、峰值高、持续数个开关周期后衰减。谐振电流峰值过大带来三个直接后果一是开关管关断电流过大关断损耗急剧上升管子结温瞬间冲高二是谐振电感和变压器磁芯在强电流下可能出现磁饱和或局部过热三是电流采样电阻和驱动线路上的耦合噪声会被放大干扰控制环路的正常工作。而且谐振电流的峰值和RMS值之间的比例关系和普通方波电流很不一样。同样RMS电流下谐振电流的峰值可以高出40%到60%所以按RMS电流设计保护阈值时看起来“没过流”实际上开关管已经承受了超出规格的峰值应力。1.3 容性区风险最怕的不只是电流大而是ZVS丢失LLC变换器的正常工作区间是感性区开关频率高于谐振频率时谐振电流滞后于激励电压开关管具备零电压开通ZVS条件。但启动过程中如果频率轨迹控制不当让工作点掉到容性区谐振电流相位反转ZVS条件丧失开关管进入硬开关状态。硬开关叠加高电流结果就是灾难性的开通损耗瞬间增加一个数量级还会伴随振铃和电磁干扰。更隐蔽的是工作在容性区时LLC的电压增益特性反转——频率越低增益反而越低系统呈现出类似正反馈的特性环路更难稳定。我用一句话给同事解释过这个风险“软启动最容易出事的地方不是电流最大那一刻而是频率越过谐振点掉进容性区的那一刻。”所以整套软启动方案的第一原则是保证频率轨迹始终停留在感性区同时把峰值电流限制住。2. 传统软启动的三种思路为什么都差点意思2.1 固定高频启动频率斜坡简单但容易“压不住”最常见的做法是启动时把开关频率设到最高然后按固定斜率往下降直到电压环接管。这种方案的好处是逻辑简单、纯软件就能做坏处是开环期间对电流完全没有约束。频率高的时候谐振腔阻抗大电流确实小但随着频率下降阻抗逐渐降低电流开始爬升。如果频率斜坡的斜率设置不当电流会以远超预期的速度增长。我见过不少项目为了缩短启动时间把斜率设得比较陡结果启动过程直接触发硬件过流保护反复重启。这种方案本质上是在“赌”频率斜坡刚好能让输出电容充上电、同时又不超过电流极限。负载条件一变输出电容增大、输入电压降低、满载启动之前调好的斜率就失效了。2.2 输出限流环/电压环干预环路被拖进饱和在电压环的基础上加一个限流环让控制器在检测到电流超限时主动拉高频率或限制占空比听起来很合理。问题在于限流环的响应速度。LLC的开关频率通常在100kHz左右一个开关周期只有10微秒。ADC采样、数字滤波、软件比较、修改PWM寄存器这一套流程走下来最快也要几个微秒再加上环路计算的周期通常在几十微秒量级。这意味着限流环最多只能做到“几个周期后反应过来”而这几个周期内谐振电流可能已经冲上去了。更麻烦的是启动过程中电压环的PI积分器一直在饱和状态因为输出电压离目标值很远。限流环介入时电压环已经积累了相当大的积分值等输出接近目标电压时这个积分值会让输出电压产生明显过冲。解决这个问题要么加积分器抗饱和逻辑要么启动期间改用开环调度但无论哪种都让软件复杂度上了一个台阶。2.3 增大死区/降低占空比治标不治本还有人尝试在启动期间增大死区时间或降低有效占空比通过降低能量传输速率来限制电流。死区增大确实能减少瞬态直通风险但对峰值电流的抑制效果有限因为LLC的谐振电流是在死区结束后的整个半周期内持续建立起来的。降低占空比的问题更明显LLC谐振变换器的增益特性跟占空比的关系不是线性的占空比太低会导致谐振电流不连续工作模态变得很奇怪电流波形从平滑正弦变成断续尖峰反而加剧了EMI问题。这种方案只适合作为应急手段不适合作为完整启动策略。2.4 共同的软肋检测-决策-执行链路太长把上面三种方案放在一起看它们的问题其实出在同一个地方检测谐振电流、判断是否超限、执行保护动作这条链路的延迟太长。要么是检测带宽不够要么是软件循环太慢要么是PWM寄存器更新需要等待下一个周期。LLC启动过程中谐振电流波形是逐周期变化的真正有效的干预必须在当前周期内完成。这就引出了本文的核心思路把检测、比较、决策、执行这几步全部放到硬件层面用可配置逻辑块和模拟比较器构建一条纳秒级延迟的通路实现对谐振电流的逐周期钳位。方案检测链路延迟干预粒度环路影响实现复杂度固定高频频率斜坡无检测开环无反馈低电压环限流环数十微秒跨周期积分饱和风险高增大死区/降占空比无检测周期级工作模态畸变低CLB-MACO逐周期钳位纳秒级周期内独立保护层中3. 把“眼睛”和“手”都放进硬件里CLB-MACO能干什么3.1 CLB和MACO到底是什么PSOC芯片里有一类经常被忽略的硬件资源可配置逻辑块CLBConfigurable Logic Block。它本质上是一小片放在MCU内部的通用逻辑阵列可以用硬件描述语言写出类似于FPGA的组合逻辑和时序逻辑然后配置进去。它在芯片里的位置很特殊——既能访问系统总线又能直接跟芯片内的模拟资源和定时器资源互连。MACO在本文语境里指的是芯片内的模拟比较/检测与控制输出通道组合不同系列芯片的叫法略有差异核心功能一致提供可配置的比较阈值、把模拟信号转换成数字边沿事件、并且支持多路并行检测。MACO的输出不是走内部总线绕一圈再进CPU而是可以直接作为信号输入到CLB的逻辑输入端。这两者放在一起的威力在于模拟信号经过MACO变成数字事件数字事件经过CLB的硬件逻辑处理处理结果直接作用于PWM驱动模块整个过程不经过CPU、不经过中断、不经过软件协议栈。用一句话概括它在MCU里搭了一条“模拟比较→硬件逻辑→功率级修正”的专线。3.2 关键优势确定性延迟与逐周期干预软件处理的延迟是“不确定的”——取决于中断优先级、总线负载、代码执行路径今天调试通过不代表明天换个工况还能通过。硬件逻辑的延迟是“确定的”——组合逻辑几纳秒时序逻辑取决于时钟周期无论什么工况延迟都是可预测的。对LLC启动这个场景确定性延迟意味着可以把检测点放在开关周期内的任意位置并且有把握在同一个周期内完成修正动作。比如在开关管导通期间检测到谐振电流超过阈值CLB可以立刻产出一个修正信号在死区到来之前把当前脉宽截断或者调整下一个半周期的驱动时序。这种“逐周期”粒度是软件方案给不了的。软件方案通常只能做到“下几个周期”或“下个PWM周期”的粒度而LLC启动阶段的电流峰值往往就发生在一个或两个异常周期内错过这个窗口后面的抑制效果大打折扣。3.3 为什么选这个组合而不是外挂比较器FPGA有人可能会问既然要硬件级响应为什么不干脆在外部加一个比较器加一片FPGA确实可以这么做工业级电源里确实有用FPGA做逐周期保护的方案但那是另一个成本量级。外挂方案的代价首先体现在BOM成本上一颗合格的比较器加一颗小规模FPGA单价加起来可能比主控MCU本身还贵其次体现在PCB面积和布局难度上高速模拟信号跨板级传输容易引入噪声比较器输出到FPGA的走线一旦过长延迟和抖动都上来了。而CLB-MACO方案用的是芯片内部资源模拟比较通道和逻辑阵列之间的互连在芯片内部完成不需要额外走线延迟小且一致性好。从开发流程上看CLB的配置跟MCU的固件开发在同一个工具链里完成不需要额外的下载器和仿真器对中小团队来说更容易接受。实话说如果项目里已经选了PSOC做主控这块资源不用白不用。4. 峰值抑制方案落地检测、比较、修正一条链4.1 系统链路设计CLB-MACO方案的完整信号链路如下谐振电流经采样网络转换为电压信号送入MACO的模拟比较器比较器输出产生过流事件边沿送入CLB的输入端CLB内部运行一个逐周期钳位状态机根据过流事件和PWM同步信号输出修正信号修正信号送到PWM驱动模块在开关周期内执行脉宽截断或驱动时序调整。链路的关键是同步。CLB的时钟和PWM模块的时钟必须同源否则修正信号可能出现在PWM周期的任意相位造成不可控的毛刺。我用的方法是让CLB时钟从TCPWM模块的时钟分频链上取保证两者相位关系固定。4.2 谐振电流采样点怎么选采样点的位置决定了你看到的是不是“真”的谐振电流。我把两种常见采样点对比一下采样点A谐振电感或谐振电容回路上的电流。这是最真实的谐振电流包含全部能量传输信息但采样点位于高频谐振回路中对采样电阻的寄生电感要求极高PCB布线稍差就会引入振铃。采样点B开关管源极或发射极的电流。这个位置更容易接入但只能看到半周期内流过开关管的电流。LLC原边电流是双向的开关管仅在半个周期内导通所以这个采样点天然丢失了负半周期的信息。我的建议是主保护用采样点A但采样电阻用同轴结构或四端开尔文接法尽量减少寄生电感辅助参考用采样点B用来判断上下管导通是否均衡。如果条件限制只能采一个点优先保A点。采样信号的调理也要注意LLC谐振电流上升速度极快运放增益带宽积不够会把波形前沿拉平导致峰值的真实高度被低估。我实测中发现用100MHz带宽的运放和用10MHz带宽的运放同一个电流尖峰测出来的峰值差了将近20%这在设置比较器阈值时是决定性的误差来源。4.3 MACO比较阈值规划两级阈值加窗口过滤阈值不能只设一个。单独一个高阈值虽然能兜住最坏情况但很容易让逐周期钳位过于频繁地动作导致启动过程被不断打断启动时间显著拉长。我采用两级阈值设计。第一级是“预警阈值”设定在目标峰值电流的80%左右CLB检测到预警事件后不立即钳位而是进入预判状态提前做好钳位准备同时记录事件次数。第二级是“硬钳位阈值”设定在目标峰值电流的110%一旦触发立即执行脉宽截断。比较器输出还需要做窗口过滤。谐振电流在每个周期都会有一次过零和峰值如果直接在比较器输出端取沿触发过零附近的噪声抖动会引发大量虚假事件。窗口过滤的办法是CLB只在PWM驱动信号有效的高电平窗口内检查比较器输出屏蔽死区时间和电流过零附近的检测盲区。这个窗口控制逻辑用软件做会带来额外延迟但在CLB里就是一条简单的逻辑门。4.4 CLB内部逻辑逐周期钳位状态机CLB内部的状态机设计是整个方案的核心。我用硬件描述语言写了简化版逻辑方便说明功能实际工程中用的是PSOC工具链里的CLB配置方式但状态转换关系是完全一致的// CLB内部逻辑示意——逐周期峰值钳位状态机 module llc_clamp_fsm ( input wire clk, // CLB时钟与PWM模块同源 input wire sync_start, // 软启动开始同步信号 input wire pwm_active, // PWM有效窗口用于屏蔽死区/过零盲区 input wire ov_warning, // MACO比较器输出预警阈值 input wire ov_hard, // MACO比较器输出硬钳位阈值 input wire pwm_primary, // 主PWM信号 output wire clamp_act, // 钳位修正输出送至驱动级 output reg [3:0] warn_cnt // 预警事件计数器 ); localparam IDLE 2d0; localparam ARM 2d1; localparam CLAMPING 2d2; localparam RECOVER 2d3; reg [1:0] state; reg clamp_ff; reg [3:0] recover_cnt; assign clamp_act clamp_ff pwm_active; always (posedge clk) begin if (!sync_start) begin state IDLE; clamp_ff 1b0; warn_cnt 4d0; recover_cnt 4d0; end else begin case (state) IDLE: begin clamp_ff 1b0; if (ov_warning pwm_active) begin warn_cnt warn_cnt 1b1; state ARM; end end ARM: begin // 预警后等待硬钳位或周期结束 if (ov_hard pwm_active) begin clamp_ff 1b1; state CLAMPING; end if (!pwm_active) state IDLE; end CLAMPING: begin // 当前周期剩余时间内持续钳位 if (!pwm_primary) begin state RECOVER; recover_cnt 4d8; end end RECOVER: begin // 软恢复逐步放宽修正避免二次冲击 if (recover_cnt 4d0) begin clamp_ff 1b0; state IDLE; end else begin recover_cnt recover_cnt - 1b1; end end endcase end end endmodule这段逻辑的关键点是钳位动作必须在pwm_active窗口内有效死区时间内不动作硬钳位触发后不是立即撤除而是保持到当前驱动脉冲结束然后进入一个8个周期的软恢复过程。软恢复的意义在于防止钳位撤除瞬间电流快速反弹产生新的尖峰。实际的CLB资源里这种状态机的资源占用很小一块CLB的查找表和触发器资源就能放下。但如果要同时处理多路阈值或逻辑更复杂的策略需要注意CLB资源的分配和布局布线约束。4.5 与PWM驱动模块的衔接死区、消隐、软恢复CLB输出的钳位修正信号不能直接去拉PWM输出脚中间必须经过驱动级的整合。原因很简单LLC的PWM波形带有死区直接截断脉宽而不考虑死区补偿会导致互补驱动信号出现直通的窗口。我的做法是钳位信号与PWM互补信号一起送入一个驱动逻辑宏该宏内部保证钳位动作只作用于当前导通管的脉宽尾部不影响死区时序钳位结束后恢复导通恢复点是固定迟延的不随负载波动。这一块逻辑同样放在CLB内部可以保证与钳位状态机的同步。消隐窗口的设定也要讲究。每次开关动作之后的初始阶段谐振电流信号会受驱动边沿的耦合噪声污染比较器在这个窗口内的输出不可信。我设置了一个固定消隐时间约100ns到200ns视采样电路的振铃时间而定在消隐时间内CLB忽略比较器事件。5. 实测结果峰值电流、启动时间与频率轨迹5.1 测试条件搭建的测试平台是一台半桥LLC变换器规格如下输入电压400V DC输出48V/30A额定功率1.5kW谐振频率100kHz输出电容总容值2200μF主控芯片选用带CLB的PSOC系列。测试覆盖三个工况轻载启动10%负载、半载启动50%负载、满载启动100%负载。每组工况分别测量不使用任何额外峰值抑制、使用传统限流环方案、使用CLB-MACO逐周期钳位方案三种情况下的启动电流峰值、启动时间、频率最低点。5.2 波形对比与数据实测数据汇总如下方案启动电流峰值相对满载电流启动时间频率最低点是否进入容性区无额外抑制2.8倍28ms82kHz是传统限流环1.9倍34ms92kHz否CLB-MACO钳位1.3倍41ms106kHz否无额外抑制时启动过程的频率斜坡会一路滑到82kHz低于100kHz的谐振频率系统明显进入了容性区电流波形不仅峰值高还出现了相位畸变。传统限流环方案把频率最低点拉回92kHz但依然贴着谐振频率边缘安全裕量不足而且启动过程中限流环和电压环相互拉扯输出电流出现明显的波动。CLB-MACO方案下逐周期钳位在电流接近阈值时就开始动作频率轨迹被物理性地限制在106kHz以上整个启动过程始终在感性区内。峰值电流压到满载电流的1.3倍这个数值对于电解电容充电的启动过程来说已经算相当理想的空间了。5.3 对启动时间和系统效率的影响有读者会问峰值压下来了启动时间长了多少从数据看无抑制的28ms变成有抑制的41ms长了接近50%。这个代价是可以接受的因为电源标准通常要求启动时间在100ms以内41ms依然留有余量换取的是开关管和安全性的巨大提升。需要强调的是启动时间的增加不是滤波器拖出来的而是钳位动作本身消耗了“等待时间”——电流被限制后输出电容的充电功率下降电压爬升速度变慢。如果你对启动时间有严格指标可以优化两级阈值的预警点在保证安全的前提下让钳位动作更少介入。我在后续调优中发现预警阈值从峰值电流的80%调整到90%启动时间可以从41ms缩到35ms峰值电流只增加了0.1倍。6. 参数调优与踩坑实录6.1 采样点选错检测到的“峰值”是假象最早一版设计里图省事把谐振电流采样点放在了变压器原边绕组的串联电阻上想着反正也是谐振电流的一部分。结果比较器阈值怎么调都不对波形貌似限住了但开关管还是很烫。后来用电流探头直接测谐振电感的电流波形才发现原边绕组采样点看到的波形在谐振电容参与换向的阶段和真实谐振电流存在明显相位差峰值出现的位置错开了近1/4周期。这意味着钳位动作总是“慢半拍”每次都在电流已经过了真正峰值之后才介入等于没保护。这个坑给我的教训是采样点必须经过波形对比验证不能只看测量位置“在谐振回路里”就想当然。用电流探头和采样电阻同时测同一位置对比幅值和相位的一致性确认无误后再固化采样电路设计。6.2 阈值不能拍脑袋要按最恶劣工况算另一个常见的坑是把阈值设成“额定满载电流的1.5倍”这种经验值。问题是LLC启动时的谐振电流峰值跟输入电压、输出电容容值、初始输出电压三个变量都相关。调试中出现过一次很奇怪的现象同一版固件在输入电压370V时启动正常输入电压降到320V时启动直接炸了驱动——就是因为我按额定输入电压工况设的阈值在低输入电压下完全不够用。低输入电压下谐振腔电流的幅值更高同样的阈值提前触发了钳位钳位动作和频率斜坡相互耦合产生了额外的控制波动。正确的做法是按源头算一遍最恶劣启动工况是“最低输入电压最大输出电容满载阻抗”在这个工况下仿真或实测得到基准峰值电流然后乘以安全系数再设定两级阈值。这样调出来的阈值在所有工况下都能稳定工作。6.3 CLB与PWM模块的异步握手导致的驱动毛刺这个坑最隐蔽。CLB逻辑和TCPWM模块虽然同源时钟但如果状态机的状态转换发生在PWM模块更新寄存器的那一个时钟周期附近会出现竞争状态驱动波形一侧已经更新、另一侧还在旧状态互补信号之间产生一个极窄的直通窗口。我在实验中发现这个毛刺的方式比较粗暴接上示波器看驱动波形发现下管开通前沿偶尔多出一个约20ns的毛刺。20ns看起来不长但对于GaN器件或者追求高频的LLC设计来说足以造成桥臂直通。解决办法是在CLB状态机里增加一个同步寄存器级把状态机的输出先打一拍再送到PWM整合逻辑确保状态切换和PWM更新错开至少一个时钟周期。这个修改代价极小但彻底消除了毛刺。6.4 启动结束后的切换别让环路过山车CLB-MACO钳位方案在启动期间基本处于“开环调度硬件钳位”模式电压环没有参与。启动接近完成时必须平滑地把控制权交还给电压闭环否则输出电压会在切换点附近出现明显台阶或过冲。我的做法是CLB持续监测输出电压的斜率当电压爬升速率低于某个阈值时判断软启动接近完成先撤掉预警阈值再逐步放开硬钳位阈值最后把电压环的积分器使能。整个切换过程持续5ms到10ms让电压环从软启动状态自然接管不会感受到突变。切换时机如果设置得过早电压环积分器还没建立好输出输出电压会回落切换得太晚又会拉长启动时间。建议把切换触发点设置在目标电压的90%到95%区间在这个区间内电压环已经具备正常控制能力又还有足够的缓冲空间避免过冲。7. 再往后还能怎么用7.1 把固定阈值升级为动态阈值固定阈值在单一工况下表现很好但在宽范围输入、宽范围输出的应用中不够灵活。MACO比较器的阈值大多是可以通过寄存器实时配置的所以可以让阈值随输入电压和负载状态动态调整。我在后续版本里做了一件事软启动的前半段用较低的硬钳位阈值限制住初始阶段的冲击当输出电压建立到一定程度后再把阈值抬高到正常保护值。这个过程中CLB里加了一个状态位来区分“启动初期”和“启动后期”阈值切换时机由CLB根据输出电压事件而不是时间戳来判断比定时器更可靠。动态阈值的另一个好处是可以把逐周期钳位的动作次数统计出来通过寄存器读出作为启动工况健康度的监控指标。如果每次启动钳位动作次数都很多说明负载条件或输入条件在恶化可以在上层软件中触发告警。7.2 把故障保护也做成硬件级逐周期钳位的基本框架稍加扩展就能变成完整的硬件级故障保护。除了谐振电流峰值还可以把输出电压过压、输入欠压、谐振电容过压等模拟信号都接入MACO比较器由CLB统一仲裁紧急情况下直接封锁PWM输出。这个思路下保护动作不依赖CPU跑完故障检测代码响应时间是硬件级的同时CPU仍然可以通过状态寄存器读取故障原因和时间戳方便诊断。对追求安全认证的电源产品来说这套“硬件保护软件诊断”的组合很有价值。7.3 多路交错并联时的逐周期限制分配如果项目里做的是多路LLC交错并联每路共享一个总输出电容启动时总电流是各路谐振电流的叠加。逐周期钳位可以分配到每一路但要注意各路之间的相位关系避免同一时刻所有路的钳位动作叠加造成输出电压骤降。我见过的一种做法是各路共享同一个预警事件总线任一路触发预警后所有路的CLB同时进入预判状态硬钳位仍然各自独立触发。这样能保证启动过程中各路的应力均衡又不会出现全局同时切断的剧烈波动。回到这个方案本身我心里最有感触的一点是LLC软启动的峰值抑制真正困难的不是“想到要做”而是“做得足够快”。CLB-MACO这套硬件链路让“快”这件事变得不那么依赖经验和运气而是可以量化、可以复现的工程能力。如果你手头的芯片正好有类似的硬件逻辑资源不妨把它从“休眠状态”里唤醒它解决的可能不只是软启动这一个问题。
返回列表