ARTICLE DETAIL

资讯详情

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

用PSoC CLB-MACO硬件逻辑抑制LLC软启动谐振电流峰值

用PSoC CLB-MACO硬件逻辑抑制LLC软启动谐振电流峰值 LLC谐振变换器以其高效率、低EMI和天然软开关特性在中大功率电源、充电桩、服务器电源领域几乎成了标配。但很多工程师第一次调试LLC软启动时都会被示波器上那根“竖起来的尖峰”吓一跳——谐振电流在启动瞬间往往能冲到满载电流的好几倍连带着MOSFET发热、磁性元件啸叫甚至一上电就触发过流保护。这其实就是标题里说的“谐振电流峰值抑制”要解决的问题。本文要聊的是怎么用PSoC芯片里的CLB-MACO硬件逻辑给LLC软启动降降温让启动过程既快又不冒尖适合正在做数字电源、LLC拓扑调试或者对PSoC可配置逻辑感兴趣的工程师。1. 为什么LLC软启动的谐振电流会“上头”1.1 冲击电流是怎么冒出来的先还原一下现场。一台典型的半桥LLC变换器输入是前级PFC出来的380V母线输出48V/6.25A谐振频率100kHz谐振电感20uH谐振电容15nF变压器匝比12:1。这种参数在300W级别的电源里很常见。上电瞬间输出电容电压为零反馈环路还没建立控制芯片通常会先把开关频率拉到最高比如1.4倍谐振频率然后让频率缓慢下降输出电压逐步建立。这个过程叫软启动目的是让谐振腔的工作点平稳地从“高增益区”过渡到“谐振点附近”。但问题恰恰藏在启动瞬间。当开关管第一次开通时谐振电容上电前没有电压功率管直接给谐振电感和谐振电容充电。你可以把它理解成往一个干涸的水池里开闸放水——刚开始水管里没有任何背压水流的冲击力必然是最猛的。谐振电流的初始峰值由母线电压和阻抗决定和负载关系不大即使输出空载变压器原边照样会窜出大电流。实测下来这种冲击电流通常能达到满载电流的4到6倍。以刚才那台300W电源为例满载原边电流折算下来大概3A左右但启动瞬间示波器上捕捉到的峰值能到15A甚至20A以上。负载越轻、输出电容越大尖峰越明显。这里有个容易忽略的细节LLC是靠谐振腔的阻抗来限流的谐振点附近阻抗最低低频开关频率下增益高、输出能力强但阻抗也低。软启动的实质就是让系统先在一个“高阻抗、低增益”的状态下建立输出再逐步走进低阻抗区。然而如果初始频率拉得不够高、或者频率下降速度太快谐振电流就会在输出尚未建立时提前冲起来——这就是绝大多数启动过流的根源。1.2 光靠软件软启动为什么不够传统数字电源做软启动最常见的做法是让MCU按时间步进改变PWM频率。代码逻辑很简单启动时frequency f_start每隔几百微秒frequency - delta直到frequency降到f_min完成软启动。这套方案在理论上是可行的但工程上有几个绕不开的问题。第一是响应延迟。MCU的PWM频率调整通常需要经过事件中断、查表、计算新周期值、更新比较寄存器这一整套流程。哪怕用FPGA或者高端DSP从检测到电流异常到真正修改PWM输出至少也要几个微秒。而对LLC谐振电流来说几个微秒已经足够冲出很高的尖峰。更关键的是软件中断是异步的——它不知道PWM此刻正在哪个相位也不知道谐振电流是不是正处于峰值附近打出去的“刹车”指令很可能错过最佳时机。第二是阈值设置僵化。软启动过程中谐振电流天然是变化的——开始小、中间冲、平稳后回落。如果软件用固定阈值判断过流阈值设低了会误判、设高了又不安全。用一个随时间变化的动态阈值MCU实现起来既繁琐又占资源。而且中断服务程序里做比较运算在高频PWM环境下对CPU占用率也是负担。第三是策略单一。软件软启动本质上是“开环跑频率斜坡”它对输出电容充电速度、负载状态没有任何感知。一旦负载特性偏离预设模型比如输出端接了很大的电解电容或者负载端恰好在启动时挂了重载斜坡曲线就失效了冲击电流照样超标。这些痛点放在一起指向一个结论LLC软启动的峰值电流抑制需要一个能在硬件层面独立运行、对PWM控制信号直接产生作用的机制而不是等CPU反应过来再处置。2. 方案选型CLB-MACO凭什么能干这个活2.1 CLB和MACO到底是什么角色PSoC家族里有一个常被开发者忽略但又非常强悍的功能块——CLB全称Configurable Logic Block可配置逻辑块。你可以把它理解成嵌在MCU里的一块微型FPGA。它由若干可编程的逻辑单元组成支持通过Verilog或者图形化配置方式在芯片内部搭建一套完全并行运转的硬件逻辑电路。这套逻辑电路最大的特点是它不占CPU不需要软件轮询一旦配置完成上电就开始自动运行。而且它的时钟可以和PWM外设彻底同步也就是说它能以硬件速度、以及确定性极强的时间关系和PWM产生模块协同工作。CLB内部包含多个数据通路Data-path这些数据通路中集成了算术逻辑单元、累加器、比较器和移位寄存器等资源。标题里提到的MACO就是数据通路里这套数学运算架构的简称它支持在单个时钟周期内完成像“值与阈值比较”“计数比较”“累加”这类操作。翻译成大白话CLB-MACO相当于一个不需要睡觉、也不需要写代码的硬件哨兵你告诉它“电流超过阈值就拉高一个引脚”它就会在每个时钟周期都盯着输入信号一旦条件满足立刻在硬件层面改变输出逻辑状态。拿一个生活场景类比软件软启动像是你定了个闹钟每隔几分钟去厨房看一眼水烧开了没而CLB-MACO像是装了个温控器水温一到100度煤气阀直接自动关掉不用任何人盯着。这就是硬件逻辑和软件轮询的本质区别——确定性、反应速度和零延迟。2.2 和三种常规方案对比为什么选CLB做峰值电流抑制其实有几种可选的技术路线我把它们放在同一张表格里对比一下方案响应速度灵活性开发成本典型问题纯MCU软件限制微秒级~几十微秒高可随时改策略低CPU中断延迟导致峰值漏过模拟比较器硬件过流保护纳秒级很低固定阈值中阈值不可动态调整无法区分启动与稳态CPLD/FPGA外挂硬件纳秒级极高高增加物料、BOOM成本高布线复杂PSoC CLB-MACO纳秒级中等偏高可在线配置中低需要学习CLB配置方法纯软件方案便宜但性能垫底模拟方案性能好却不够聪明——它不知道系统当前是在软启动阶段还是稳态运行阶段一旦阈值设置和工况不匹配要么在启动时误触发要么在瞬态重载时完全失效。外挂FPGA当然是最强的但对于一台几百瓦的电源来说为了一个峰值抑制功能上一颗CPLD成本完全划不来。CLB-MACO方案的甜点位在于它跑在PSoC内部不需要额外物料和PWM模块天然共用同一颗芯片、同一个时钟域接线路径极短同时它又具备可编程能力你可以在软启动阶段启用一个比较严苛的电流阈值等进入稳态后通过固件把它旁路掉或者自动切换到另一套保护逻辑。这个“既能硬件级响应、又能软件级配置”的特性是其他三种方案都不具备的。3. 落地实现给启动电流装一个硬件“门卫”3.1 系统框图与核心信号路径先不急着写代码把整个方案的信号流理清楚。我们要做的事可以拆成三个环节感知电流、硬件判断、干预PWM。感知环节用一颗高速模拟比较器完成。谐振电流经过采样电阻或者高频电流互感器后得到一路电压信号送到PSoC内部的比较器正输入端比较器负输入端接一个由DAC或者分压电阻设置的参考电压。比较器输出COMP_OUT是纯硬件信号它实时反映“当前谐振电流是否超过阈值”。这路COMP_OUT信号直接连到CLB的输入引脚。在CLB内部我们配置一段逻辑对COMP_OUT做消抖滤波滤掉开关动作引入的毛刺滤波后的信号再送入MACO数据通路由它进行计数和阈值判断。最后CLB输出一个控制信号接回PWM模块的kill或者trigger输入端——TCPWM外设通常都支持外部事件强制改变输出状态。整个信号链路从电流超过阈值到PWM做出反应可以做到大约几十纳秒级别的延迟。这个速度对于LLC谐振电流控制来说已经足够因为谐振周期是10微秒量级硬件门卫完全可以在电流峰值形成之前就把它按住。还有一路软件通道也很重要。CPU通过固件配置CLB的阈值参数、使能信号以及在软启动结束后将CLB的干预功能旁路。软件不需要参与快速响应只需要做慢速的“设定”和“切换”工作。3.2 三个关键参数怎么定这套方案要想调好三个参数必须花心思。第一个是电流阈值。它的确定原则是必须高于正常软启动过程中的最大工作电流又要明显低于功率器件和磁性元件的安全限值。以我们那台300W典范来说满载原边电流有效值约3A考虑谐振电流的波形系数峰值大约5A。功率管选的规格能承受20A漏极脉冲电流于是我们把阈值设在12A——这个值留出了2.4倍的正常运行余量同时在器件安全区以内。注意阈值不能顶格设温度升高、样品参数离散都会让谐振电流偏移留至少20%的裕量才保险。第二个是消抖时间。高频开关电源的电流采样信号上必然叠加开关噪声尤其在MOSFET开通过程中寄生电容放电会形成窄毛刺。如果COMP_OUT直接进数据通路一个毛刺就可能触发误动作。我们给CLB配置了一个5个时钟周期的消抖窗口——只有COMP_OUT持续拉高超过这个窗口才认为真的过流。时钟用的PWM同源时钟10MHz消抖时间就是500纳秒。这个值对谐振电流来说不敏感却能滤掉绝大多数开关毛刺。第三个是触发后的反应策略。最简单的做法是CLB输出给TCPWM的kill信号一触发就把PWM输出全部强制拉低若干个周期。这种“打嗝式”限流的好处是简单粗暴、有效代价是输出电压建立速度变慢。进阶一点的方案是触发后不是关断PWM而是让CLB输出一个信号给PWM周期寄存器把频率强制拉高一档让谐振腔重新退回高阻抗区。实测中我推荐先用kill方案完成功能验证等波形干净了再升级成频率调整方案。3.3 在PSoC Creator里配置CLB的实操步骤下面给出具体的配置路径。这里以PSoC Creator开发环境为例芯片型号选用带CLB资源的PSoC 4系列比如PSoC 4100S Plus或者带更多datapath的PSoC 6流程是通用的。第一步新建工程后在原理图编辑器中放置一个CLB组件。打开组件配置界面你会看到多个datapath单元。我们用一个datapath来承担比较和计数任务。第二步配置CLB的输入输出。把模拟比较器的输出宏连线到CLB的输入引脚命名例如comp_in再分配一个输出引脚给PWM模块的kill信号命名pwm_kill。在连线时留意时钟同步CLB的时钟建议直接选择TCPWM使用的时钟源保证两个模块时钟边沿对齐。第三步在CLB的配置选项卡里选择Verilog模式写入datapath的逻辑描述。下面这段是等效逻辑的示意便于理解行为模型// 等效逻辑描述实际CLB工程中需按datapath规则配置 reg [7:0] count; reg hold_flag; always (posedge clk) begin if (!hold_flag) begin if (comp_in) begin count count 1; if (count THRESHOLD) begin hold_flag 1; end end else begin count 0; end end end assign pwm_kill hold_flag;这段逻辑实现的就是comp_in连续超过阈值一定次数后pwm_kill拉高并保持直到固件通过寄存器清除hold_flag。实际配置时你可以利用CLB数据通路自带的比较器和累加器直接完成这个功能不需要真的去写通用Verilog图形化配置界面里可以选中“Compare Accumulate”模式填入8位阈值即可。两种方式实现的效果一致新手建议从图形化开始。第四步生成代码后在PWM模块TCPWM的配置界面里找到kill输入信号源选择来自CLB的输出引脚设置极性为高有效。这一步非常关键——很多人配置了半天CLB发现没效果最后查出来是PWM模块的kill引脚根本没连上或者极性选反了。第五步在固件里实现软启动状态机。启动前通过API函数写CLB的阈值寄存器使能CLB输出然后将PWM初始频率设为140kHz开始斜坡下降每毫秒下降2kHz直到降到100kHz附近检测到输出电压达到48V的95%后通过API将CLB的hold标志清除并禁用它系统转入正常闭环控制。3.4 联调时的观察要点把系统通了电第一件事不是看启动效果而是验证门卫本身是否在正常工作。怎么验证最简单的方式是做一个“虚假的过流”把比较器参考电压临时调到极低比如对应电流2A此时系统上电后应马上触发保护PWM输出立刻被拉低示波器上看到驱动波形出现一个明显的时间空隙。这一步通过说明信号链路是通的。然后逐步把阈值调回12A测真实的启动波形。观察三个关键指标谐振电流峰值是否被压住、启动完成时间是否在允许范围内、以及启动过程中有没有出现“门卫反复触发”导致输出卡住的情况。我们实测的数据可以分享一下。未加CLB-MACO时这台300W电源空载启动原边谐振电流峰值约18A持续时间约2个谐振周期波形像是被猛抽了一鞭子。加入硬件门卫后峰值被限制在11.5A触发后PWM会中断约3个开关周期然后自动恢复输出电压建立时间从原来的20ms变成26ms——增加了6ms但换来的是功率管电流应力下降了接近40%。这个代价值得非常划算。满载启动条件下效果更明显未加保护时峰值能超过25A接近管子极限加上保护后稳定在14A以内。4. 实测调参记录与常见问题排查4.1 一组实测波形数据的读法不卖关子先上数据。测试条件输入电压380VDC输出负载为空载和半载两档谐振频率设定100kHz谐振电感20uH谐振电容15nF。空载启动不加抑制峰值电流18A启动时间20ms波形上能看到明显的高频振荡衰减包络。空载启动CLB启动周期使能峰值电流11.5A启动时间26ms波形包络平缓很多谐振幅值全程受控。半载启动不加抑制峰值电流26A启动时间12ms此时已经逼近MOSFET的脉冲电流极限散热片温度在连续启停测试中明显升高。半载启动CLB工作峰值电流14A启动时间17ms器件表面温度改善明显连续启停20次无异常。这里想提醒一个容易被误解的点CLB-MACO并不是把冲击电流“消除”了而是把本来集中在头几个谐振周期的大电流摊开成一段更长时间、更低幅度的充电过程。它本质上是用启动时间换电流应力。所以调参时不要追求极限低压峰值否则启动时间会恶化到不可接受。工程上通常以“峰值电流不超过满载电流的2.5倍”为设计目标这个值下启动时间增幅一般控制在30%以内。4.2 新手必看的5个避坑点第一阈值不能只看满载电流倍数要算瞬态因素。LLC启动过程中输出电压建立初期谐振电流还有一个低频包络包络的峰值往往出现在输出电容刚充到一半电压的时候。建议用示波器比对多次启动波形找出电流最高点出现在第几个谐振周期再根据这个值去反推阈值。第二CLB时钟必须与PWM时钟同源。CLB和TCPWM如果用了不同的时钟分频它们之间的相位关系就是不确定的kill信号到达PWM的时机可能每次启动都不一样保护效果大打折扣。在PSoC Creator里把所有外设时钟挂到同一个时钟树上是最保险的做法。第三消抖参数不能一刀切。谐振电流的基频是100kHz周期10us但谐波含量很高。如果把消抖时间设得太长比如超过2us真正的过流信号也会被滤掉门卫形同虚设。我们实测下来300k到800ns是比较合适的选择区间具体数值根据实际噪声宽度调整。第四软启动结束后一定要“解雇门卫”。CLB如果一直保持使能状态正常运行遇到负载瞬态或者环路波动时谐振电流可能会短暂越过阈值引发误关断。正确做法是软启动完成后通过固件把CLB输出与PWM kill信号断开或者把阈值寄存器改成远高于正常值的保护值比如2倍过载点让它退化成一道“安全网”而非“限流器”。第五不要忘了复位逻辑。CLB触发后如果固件不清除hold标志系统会一直锁死。需要用一个GPIO或定时器事件在每次启动开始时自动复位CLB状态。这个看代码很简单但很多人在联调时遇到“上电一次后第二次启动无反应”十有八九就是Hold标志没清理。4.3 常见问题速查表现象可能原因解决办法启动瞬间仍有明显尖峰比较器带宽不够信号到达CLB时已失真换用高速比较器采样电阻走线加宽、引线缩短启动时误触发PWM频繁中断消抖时间过短开关噪声被识别为过流增大消抖时钟周期数或提高比较器参考电压CLB触发了但PWM无任何反应TCPWM的kill信号未连接或极性配置反了检查PWM配置界面中的kill来源和有效电平启动时间增加过多初始频率太低或阈值设置过保守提高软启动初始频率按2.5倍满载电流设定阈值正常运行中偶发输出跌落CLB在稳态下仍然启用瞬态电流触发保护软启动结束后通过固件旁路CLB或大幅抬高阈值多次上电后第二次启动失败hold标志未复位CLB一直锁死在启动初始化中增加CLB复位寄存器操作5. 一点个人的实操体会做完这个项目后我最大的感受是数字电源的“数字”二字不应该只体现在环路控制上更应该体现在硬件逻辑的灵活运用上。PSoC这种MCU加可配置逻辑的架构恰恰给了工程师用低成本实现“定制化硬件外设”的能力。一个CLB-MACO解决启动尖峰问题花掉的开发时间不过两三天但换来的可靠性和器件应力的改善是纯软件方案做不到的。这块还有很大的扩展空间。既然用CLB能监测谐振电流峰值那同样的逻辑完全可以延伸到输出短路保护、逐周期限流、甚至多相LLC的均流控制。我后来在另一款双路输出电源上就用两个CLB数据通路分别做两路谐振电流的独立限流效果很理想。如果你也在折腾LLC的启动问题不妨打开PSoC的CLB配置界面自己试一试——先从一个比较器加一个计数模式开始点亮那颗LED再逐步加逻辑你会发现硬件逻辑其实没有想象中那么高不可攀。
返回列表