ARTICLE DETAIL

资讯详情

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

用PSOC CLB-MACO硬件方案抑制LLC软启动谐振电流尖峰

用PSOC CLB-MACO硬件方案抑制LLC软启动谐振电流尖峰 做 LLC 电源的人多半都被启动波形折磨过。示波器上那一下窄窄的电流尖峰能把谐振腔里的 MOSFET、变压器、输出整流管全部拖进高温状态好端端的软启动因为一两个周期的过冲就前功尽弃。标题里说的“给软启动降降温”本质就是用 PSOC™ 的 CLB-MACO 硬件逻辑去压制 LLC 启动阶段的谐振电流峰值让启动电流包络变得平缓可控。这篇文章围绕这个项目展开把“为什么会有启动尖峰”“CLB 怎么拦住它”“参数怎么定”“踩了哪些坑”完整讲一遍适合正在做 LLC 电源或者刚接触 PSOC 方案的硬件、嵌入式工程师参考。1. 谐振电流尖峰是怎么“烧”起来的1.1 启动瞬间发生了什么LLC 谐振变换器启动时输出电容上的电压为零反馈环路会认为输出电压严重偏离目标值立刻给出“最大增益”指令。而 LLC 的增益特性是靠近谐振频率时增益最高控制器为了尽快把输出电压拉起来会倾向于让开关频率快速落回谐振点附近。问题就出在这个过程里谐振腔里的励磁电感和谐振电容在启动前能量几乎为零第一个开关周期注入的能量虽然不大但输出电容电压低相当于负载直通谐振腔电流在几个周期内就会以极快的速度累积起来。实测中启动瞬间的谐振电流包络常常冲到满载稳态峰值的 4 到 5 倍持续时间短则几百微秒长则几毫秒。这个电流尖峰带来的后果很直接MOSFET 的导通损耗和开关损耗同时上升结温飙升变压器和滤波电感因为高频大电流产生额外的铜损和磁损温度跟着往上走输出整流管的电流应力也远超额定。很多电源在满载老化没问题一上电冷启动就炸管罪魁祸首往往就是这一下。1.2 传统软启动为什么压不住峰值最常见的软启动手段是频率斜坡先把开关频率设定到谐振频率的 1.5 到 2 倍以上然后按一定速率往目标频率扫描。因为频率远离谐振点时 LLC 增益低输出电压缓慢上升电流也就小。这个思路本身没问题但实际操作中发现两个明显痛点。第一频率斜坡如果走得太快前几个周期依然会过冲。频率切换是离散的每步跳变之间谐振腔状态不连续跳变幅度稍大一点电流尖峰就冒出来了。第二斜坡走得慢虽然安全但启动时间被人为拉长对输出大电容或者负载快速启动的应用非常不友好。占空比受限方案在 LLC 上也不好使因为 LLC 的驱动占空比基本固定在 50% 附近调整空间很小。突发模式能限制平均功率但单个开关周期的电流峰值依然可能很高。所以真正需要的不是“平均能量限制”而是在一个开关周期之内、甚至半周期之内就能做出反应的“逐周期电流峰值看门机制”。这才是 CLB-MACO 方案要解决的核心问题。2. 为什么选 PSOC™ CLB-MACO硬件逻辑的实时性优势2.1 CLB 是什么能干什么CLB 全称 Configurable Logic Block是 PSOC 系列里一块可编程的硬件逻辑阵列内部包含查找表、D 触发器和组合逻辑可以类比成“嵌在 MCU 里的小规模 FPGA”。它不占用 CPU 时间也不依赖中断响应所有逻辑由硬件电路直接完成。CLB 最实用的特性是能独立于 CPU 和 PWM 模块运行并且支持与片内的定时器、比较器、GPIO 任意互连。也就是说外部比较器送来的电平信号可以直接进 CLBCLB 算完之后直接把结果送到 PWM 的 kill 引脚或者门控引脚上。整个过程相当于一条纯硬件链路不经过 ADC、DMA、总线、中断服务程序这些耗时的环节。我习惯用一个类比CPU 处理过流事件就像交警接到报警电话再赶去现场而 CLB 处理过流事件就像路口早就铺好的联动信号灯车流一超限信号灯当场自己就变红了。对于 LLC 这种开关频率动辄几十上百 kHz 的场景这个差异是决定性的。2.2 MACO比较器直连逻辑块的“快车道”CLB-MACO 里的 MACO在 PSOC 相关应用里通常指模拟比较器与可配置逻辑块协同工作的机制。谐振电流通过电流互感器或者采样电阻转成电压信号进入芯片内部的高速模拟比较器比较器的输出电平直接引到 CLB 的输入端口。这样模拟前端感知到过流、数字逻辑做出封锁动作中间没有任何软件参与。这条链路的传输延迟主要由比较器的传播延迟和 CLB 的逻辑门延迟决定典型值在几十纳秒以内。拿 100kHz 开关频率举例一个周期才 10μs几十纳秒的反应时间可以保证过流信号在本周期内就能触发封锁而不是像固件方案那样要等到下一个周期甚至更晚。需要说明的是MACO 并不是一个独立的硬件模块而是“模拟比较器 CLB 可编程逻辑 内部互连”的组合用法。理解到这一层就够了做工程不是背缩写关键是知道哪条路径能实现纳秒级响应以及怎么配置出来。2.3 与固件方案的量化对比对比维度传统 ADC 中断固件方案CLB-MACO 硬件方案响应时间ADC 采样加转换时间约 1~2μs加上中断响应和占位调整整体约 10~50μs比较器加逻辑门延时约 20~80ns是否依赖 CPU 负载依赖中断优先级冲突会延迟响应完全不依赖CPU 可以做别的事逻辑复杂度软件代码容易实现复杂策略复杂策略需要精心设计 LUT/DFF 组合调试难度串口打印方便直观需要借助逻辑分析仪和 CLB 调试通道可靠性受固件 bug、看门狗、死机影响纯硬件死机不影响保护表格里的数据来自我实际调试时的测试结果。固件方案不是不能用但它的响应时间上限决定了它只能做“平均电流限制”做不了“逐周期峰值抑制”。而启动尖峰恰恰是逐周期出现的所以用固件兜底总有种隔靴搔痒的感觉。CLB 方案的响应速度足够接近“下一微秒就封锁”这才是 LLC 启动过流抑制真正需要的水准。3. 峰值抑制方案的参数设计与计算3.1 谐振电流采样与阈值设定谐振电流采样一般有两种做法原边串联采样电阻或者用电流互感器。高频 LLC 里原边电流可能是几安培到几十安培采样电阻损耗太大了所以工程上更常用电流互感器。举个例子项目里原边满载谐振电流峰值为 4A启动时我们希望把峰值限制在 6A 以内于是抑制阈值就定在 6A。电流互感器匝比选 1:50副边并联 10Ω 采样电阻。原边电流 6A 时副边电流是 120mA采样电阻上得到 1.2V 电压。这样比较器的参考电压就设为 1.2V一旦采样电压超过这个值比较器立即翻转。这里有几个容易忽略的细节。电流互感器副边不能开路否则会产生极高的感应电压所以采样电阻一定要可靠并联。另外谐振电流是正弦状波形峰值附近停留时间很短比较器的带宽或者传播延迟如果太大会漏掉这个窄脉冲。我推荐选传播延迟在 30ns 以内的比较器并且采样电阻两端并联一个小电容取值在几十皮法到几百皮法之间既能滤掉高频振铃又不会把 6A 峰值对应的电压沿磨平。3.2 过流封锁逻辑的状态机设计CLB 内部要实现的逻辑其实不复杂核心是一个“过流锁定、定时解锁”的状态机。检测到比较器输出高电平后CLB 内部锁存器置位把 PWM 输出封锁封锁的持续时间用比较器输出脉冲宽度和开关周期计数一起来决定。比如设定封锁 8 个开关周期期间谐振腔能量通过负载和损耗自然泄放电流下降8 个周期结束后锁存器清零PWM 恢复输出。如果恢复后电流依然超过阈值比较器再次触发重复上述过程。之所以要“定期解锁”是因为如果封锁后永远不再恢复软启动根本走不完。比较好的策略是每次解封只放行两三个周期观察电流是否回落到安全范围没回落就再封一轮。这样在启动初期会看到 PWM 驱动波形一段一段地输出很像间歇打嗝工作但每一段输出对应一次电流冲击验证整体电流包络是收敛的。逻辑实现上可以用 CLB 里的一到两个 D 触发器配合一个计数器。比较器输出作为置位信号周期计数器的输出作为清零信号置位信号优先于清零信号这样就能保证过流触发一定生效不会被清零信号抢掉优先级。3.3 软启动扫描参数与封锁周期的配合CLB 只负责“踩刹车”软启动本身还是要靠频率扫描来推进。频率扫描参数要和封锁周期配合好否则容易出现“刹车踩得太频繁、车完全动不了”的情况。我的做法是先把频率扫描总时长定在 20ms 到 50ms 之间扫描起点设在谐振频率的 1.8 倍附近终点落在目标工作频率。整个扫描过程分 100 到 200 个频率台阶每步停留时间约 0.2ms 到 0.5ms。封锁周期数则按负载电容大小选择一般取 4 到 16 个开关周期。配合逻辑很简单频率高、增益低、电流小CLB 基本不触发软启动按正常节奏往下走只有电流真正冒尖时CLB 才封几个周期。此时 PWM 停止但频率扫描计时器还在走不会卡死。有一点要注意封锁期间如果扫描计时器已经越过了当前频率台阶恢复输出时会突然切换到一个更低频率这个台阶差会导致电流突变所以频率扫描台阶要设置得密一些或者让 CLB 封锁期间把频率计时器也暂停。后一种方式更稳妥虽然实现上多一根连线但电流包络会平滑很多。4. 实操过程将 CLB-MACO 方案落地到工程4.1 工程搭建与资源分配我用的开发环境是 PSOC Creator新建工程后先做资源规划。一个典型的 LLC 控制资源组包括一个 TCPWM 模块配置成两路互补 PWM带死区插入用于驱动半桥或全桥一个 CLB 模块用于实现过流封锁状态机一个高速比较器输入端接电流互感器采样电压输出端接 CLB 的输入一个 UART用于把 CLB 触发的次数、当前频率值打印出来方便联调。听起来资源不多但 CLB 的引脚连接是最容易出错的地方。CLB 的输入信号必须通过内部互连矩阵显式接进来不能靠代码里随便写一个变量名。我建议在图形化设计界面里先把比较器输出到 CLB 输入的连线画出来再回到代码里配置逻辑关系两边对照检查。PWM 的 kill 引脚也值得提前验证。TCPWM 的 kill 功能有自动触发和手动触发两种模式接入 CLB 输出后要确认电平极性是低电平封锁还是高电平封锁不同系列的默认极性不一样。4.2 CLB 内部逻辑的具体配置CLB 内部逻辑通常用 Verilog 描述然后在 Creator 里映射到 LUT 和 DFF。我当时写的核心逻辑类似下面这段// 过流脉冲检测与周期封锁 reg overcurrent_flag; reg [3:0] blank_cnt; assign pwm_gate ~overcurrent_flag pwm_raw; always (posedge sw_clk or posedge comp_out) begin if (comp_out) begin overcurrent_flag 1b1; blank_cnt 4d0; end else begin if (overcurrent_flag) begin blank_cnt blank_cnt 1b1; if (blank_cnt 4d7) // 封锁约8个周期 overcurrent_flag 1b0; end end end这段逻辑映射到 CLB 后占用了两个 D 触发器和一个比较逻辑剩下的 LUT 还可以留下来做别的功能。关键点是 comp_out 要接比较器输出sw_clk 要接和 TCPWM 同源的时钟否则封锁周期计数和 PWM 周期会对不齐。实际配置时我踩过一个坑把 sw_clk 直接接成了系统时钟而不是开关频率时钟导致“8 个周期”实际变成了几万个系统时钟周期封锁时间长得离谱启动波形看起来像完全没输出。后来用示波器看 CLB 输出的 pwm_gate才发现是时钟接错了。这个问题在图形界面里只差一根线但表现出的故障现象特别迷惑。4.3 波形联调与效果验证逻辑配置完成后先把反馈环路断开用固定频率开环测试 CLB 的封锁动作是否可靠。调试时用示波器同时看四路原边谐振电流、驱动 Vgs、CLB 输出的 pwm_gate、比较器输出。开环测试通过后再接上电压反馈和频率扫描恢复成完整的软启动流程。我实测的数据未加 CLB 抑制时启动瞬间谐振电流峰值约 8.5AMOSFET 壳温在连续启停 10 次后升到 92°C加上 CLB 抑制后峰值被压在 6A 以内同样连续启停 10 次壳温稳定在 76°C 左右。温升降下来变压器也没有了之前那种尖锐的啸叫声。波形上还有一个明显变化改进前的启动电流包络尾部拖得很长带有明显的连续冲击痕迹改进后包络分成了若干小段每段之间是封锁间隙整体像一个逐级爬升的阶梯。这个阶梯形状反而说明逐周期看门机制在正常起作用。5. 踩坑实录常见问题与排查技巧5.1 高频误触发问题出在阈值还是噪声CLB 方案上电后最常见的问题是误触发PWM 动不动就被封锁效率报表正常但启动过程走走停停。我先怀疑比较器参考电压设置太低把阈值从 6A 往上调到 7A改善不明显才意识到是噪声问题。排查后发现电流互感器次级采样电阻上的高频振铃在 MOSFET 开关时刻尤其严重。开关管开通瞬间副边二极管反向恢复和寄生电容震荡会叠加到采样信号上幅度达到正常峰值的三分之一。比较器把这些振铃当成了过流信号。解决思路是加消隐时间。在 CLB 里让比较器输出信号先经过一个单向延时逻辑只在 PWM 开关沿之后的一小段时间窗口内允许触发过流。这个窗口一般取 200ns 到 500ns足够避开开关管开通尖峰又不会影响真实过流检测。同时在采样电阻上并联几十皮法电容也有帮助两者配合起来误触发基本消除。5.2 封锁后无法恢复、启动变慢怎么定位另一个高频问题是封锁后永远不恢复表现为启动过程中 PWM 输出几个周期后彻底停摆输出电压卡在某个低电平。我调试时先检查 blank_cnt 计数是否到达了设定值结果发现计数正常但 overcurrent_flag 的清零始终不生效。原因是比较器的输出在封锁期间并没有回到低电平。谐振腔出现持续过流时比较器一直输出高电平代码里置位优先级高于清零所以锁存器永远不释放。这个场景在短路或者输出严重过流时是合理的但在软启动阶段就显得过于“板滞”。解决办法是把单次锁存改成“连续 N 次检测到低电平后再解锁”。即比较器输出连续保持低电平超过一个完整开关周期才认为电流确实降下来了允许解除封锁。这个逻辑加了一级滤波牺牲少量响应速度但启动恢复的可靠性好很多。5.3 调试建议与避坑清单容易踩的坑提前避开的做法时钟连接CLB 计数时钟误接系统时钟导致封锁时长异常确认 sw_clk 与 TCPWM 同源用示波器波形核对比较器带宽低速比较器漏检窄峰值脉冲选传播延迟小于 30ns 的型号采样电路CT 副边开路或采样电阻选大导致电压饱和副边并联电阻电压峰值不超过比较器输入范围逻辑优先级过流置位与周期清零竞争置位信号优先清零前先确认过流已消失调试流程直接接闭环联调问题定位困难先开环验证封锁动作再恢复反馈调试顺序上我强烈建议先开环后闭环。开环测试时固定频率、固定负载人为拉大电流让比较器稳定触发确认 CLB 输出的 pwm_gate 波形干净利落。这一步验证的是“硬件链路通不通”和软启动算法无关。链路通了之后再去调频率扫描和封锁周期的配合问题面会小很多。最后再分享一个小技巧CLB 触发的封锁次数可以通过 UART 周期性地打印出来比如每秒打印一次。如果打印值随负载增加而明显上升说明阈值设定太靠近正常工作点需要拉高或者优化消隐窗口。这个参数不用示波器慢慢数波形也能快速判断系统裕量是我这次项目里用得最多的调试手段。这个方案后续还可以继续扩展比如把 CLB 检测到的过流信号同时用于短路保护和输入欠压保护联动CLB 里空闲的 LUT 完全够用。LLC 启动“降降温”只是第一步把这套硬件级看门机制做扎实后面的可靠性设计会省心很多。
返回列表