ARTICLE DETAIL

资讯详情

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

eFuse+MCU的工业电源入口保护:热插拔浪涌与故障恢复实战

eFuse+MCU的工业电源入口保护:热插拔浪涌与故障恢复实战 在工业板卡上做电源入口保护我最怕的不是芯片选型而是设备被一根脏电源线或者多次热插拔逼到烧板。最近这个项目我就把TPS259483AYWPR和PIC18F65K40搭在一起前者负责电源路径的过流、过压和浪涌钳制后者负责系统级监控和恢复策略。这套方案解决的是嵌入式和工业应用里最头疼的问题热插拔浪涌、意外短路、电压尖峰以及故障之后设备怎么自动恢复。下面这篇是完整的设计笔记从器件选型、参数计算、固件状态机到实测调试都覆盖了适合正在做电源入口保护、热插拔板卡或工业控制器的硬件和嵌入式工程师参考。1. 为什么需要MCU来管eFuse热插拔与电源路径保护的真实战场1.1 传统保护方案在工业现场的三个短板早些年我在工控板上做电源入口保护常用的是自恢复保险丝加PMOS开关再自己搭一个比较器做限流。这套东西在小功率、负载稳定的场合也能凑合但放到工业现场就暴露出不少问题。第一是响应速度。自恢复保险丝的动作是热过程短路电流要先把内部的PTC材料加热到居里温度附近电阻才会骤然变大。这个过程少说几十毫秒而现在的嵌入式处理器、FPGA板卡电源模块往往几百微秒就能被过压打穿。我用示波器抓过最糟的情况12V输入短路自恢复保险丝还没动作后端的DC-DC输入电容已经鼓包了。第二是恢复行为不可控。自恢复保险丝冷却之后会自动复位如果设备正在电机启动或容性负载充电短路消失后瞬间又碰上浪涌它可能反复进入保护态现场表现就是设备抽风——亮一下灭一下极难诊断。传统PMOS加比较器方案倒是可以做到锁存但锁定后需要人工断电重新上电这在无人值守的工业站点里很麻烦。第三是状态不可见。保险丝熔断了你得拿万用表去量自恢复保险丝处于保护态时阻值变大你也要等它冷却下来才能确认。整个电源路径有没有发生过过流、过压、短路传统方案几乎无法记录更别说上报给控制系统了。这也是我最终转向eFuse方案的原因。eFuse把功率MOSFET、电流采样、比较器、驱动逻辑、故障输出全部集成到一个芯片里毫秒甚至微秒级完成关断。更重要的是它提供了FAULT、PG这类状态引脚能让旁边的MCU知道发生了什么并由MCU来决定之后怎么办。1.2 eFuse与MCU的职责分工硬实时保护与软策略管理很多人觉得eFuse已经够用再加一个MCU纯属多余。我的看法是eFuse擅长的是硬实时保护它能在5微秒内响应过流这是MCU做不到的但MCU擅长的是策略管理比如判断这次故障是启动浪涌还是真短路、决定故障后多久重试、把故障日志通过串口上报。两者是互补关系。以这个项目为例TPS259483AYWPR承担的是最前面那道防线输出电流超过设定阈值时内部比较器直接限制输出电流或关断FET输入电压超过设定的过压门限时快速关断防止浪涌窜到后级启动期间通过dVdT引脚控制输出电压爬升斜率避免热插拔瞬间大电容充电造成打火故障发生后FLT引脚拉低或者按配置自动重试或者锁存等待外部干预。而PIC18F65K40负责的事情则属于带大脑的保护上电前主动控制EN让电源路径在系统自检完成后再开启读取PG引脚判断输出是否稳定避免在输出电压没建立起来时就开始干活响应FLT中断记录故障时间、故障类型、重试次数根据故障特征决定恢复策略短暂过流可以自动重试反复短路就锁存并上报最后通过UART把状态实时送给上位机或控制总线。这套分工下来eFuse不需要知道系统在干什么MCU也不需要跟过流比速度。两个器件各干各的系统的电源路径才算真正有了快保护和慢管理两层防线。2. TPS259483 的核心工作机制与关键参数速算2.1 内部架构拆解一个带刹车的电动阀门TPS259483的外观就是个普通功率芯片但内部结构可以理解成一个电动阀门加一套刹车系统。输入端的VIN引脚接电源输出端的VOUT引脚接负载中间是一个低导通电阻的N沟道MOSFET。MOSFET的栅极由电荷泵电路驱动因为N沟道管子需要栅压高于源极电压才能完全导通所以芯片内部必须自己产生一个升压后的栅极驱动电压。电流采样不是靠外部分流电阻而是通过功率MOSFET本身的导通电阻和内部一个精密的感应放大器来实现。感应放大器实时监测流过FET的电流当电流接近设定阈值时内部比较器开始介入。如果电流超出阈值且持续时间超过消隐时间芯片就会把FET关断同时把FLT引脚拉低。这里有个容易误解的点eFuse的限流不是机械式熔断更像电子式电流源。部分故障条件下它会先限制电流让输出电压跌落如果过流一直存在才会触发硬关断。这种两级行为对容性负载非常友好启动瞬间的大充电电流可以被限流吸收掉而不是直接触发保护把正常上电也拦下来。TPS259483还集成了反极性保护和反向电流阻断。输入端接反了或者输出端电压高于输入端时内部FET和寄生体二极管都不会形成通路这能在工业现场接线错误时保住后级设备。2.2 电流限制、过压阈值和软启动时间的手算方法参数计算是设计eFuse电路最核心的环节我按12V/3A的工业控制器电源入口场景来走一遍。电流限制电阻RILIM芯片数据手册会给出ILIM引脚的设定公式一般形式是ILIM K / RILIMK是一个随芯片批次和温度会有偏差的常数。选型时不要卡着最大负载电流去设计我通常按目标电流的80%左右设置限制点。比如这个板卡正常工作电流是2.5A峰值短时3.3A那我把限流点设到3.0A而不是3.5A。原因很简单限流点设得太高保护意义就弱了设得太低虽然不会误触发但遇到真短路时电流尖峰通过的时间太久能量积累同样很危险。算出RILIM的理论值后我会在样板阶段用电桥微调把实际限流点验证到设计值的±10%以内。过压保护分压电阻OVP引脚通过电阻分压检测VIN电压。内部有一个基准电压VREF分压点电压等于VREF时触发保护。如果选VREF1.0V实际以手册为准分压电流取100uA那么下分压电阻Rbottom 1.0V / 100uA 10kΩ设OVP阈值13.8V上分压电阻Rtop (13.8V - 1.0V) / 100uA 128kΩ取标准值124kΩ或130kΩ然后根据标准值反推实际阈值。这里要注意电阻精度。工业环境温度变化大分压电阻建议用0.5%精度以下的否则常温下设定得很准到60℃环境里阈值就飘了。另外OVP引脚上并联一个小电容几十pF即可可以滤掉输入线上的高频毛刺防止电源模块开关噪声把过压保护误触发。软启动时间dVdT引脚通过外接电容设置输出电压爬升速率。公式大致是tdVdT CdVdT × VOUT / ICHARGE其中ICHARGE是内部给dVdT引脚充电的恒流源。电容越大启动越慢。这个时间不能太短否则后端板卡上的几十微法电解电容加上去充电浪涌会直接触发限流也不能太长因为工业设备要求上电响应时间一般几百毫秒之外就不能接受。我常用1nF到22nF之间的值配合实测调整。我在这个项目里把dVdT电容初选为4.7nF软启动实测大约1.8ms板子后端4个470uF电解电容上电时没有触发限流示波器上看输出电压平滑爬升到12V没有台阶和振铃。2.3 关于限流点误差和温度漂移的工程考虑eFuse的限流精度不会像精密DAC那么准数据手册上通常会给出一个百分比的误差范围。这个误差在常温下可能还好但芯片温度上来后内部比较器和感应放大器的失调电压会变化限流点会有偏移。温度引起限流点偏移的后果在工业现场很隐蔽。设备在冷启动时一切正常运行半小时后PCB温度升高限流点上移或下移。上移意味着保护变钝下移则可能在电机启动瞬间误保护。我测过一个板子在25℃和85℃环境下限流点相差超过20%当时就意识到设定限流值时必须留出足够的温度裕量并且尽量把芯片放在空气流通的位置PCB铺铜要处理好热通道。另外ILIM引脚这个设定电阻不能用普通电流路径的走线方式去连。它是芯片内部一个比较精密的模拟节点走线引出的寄生电阻会直接叠加到RILIM上。之前我犯过这个错把RILIM放在板子角落走线绕了大半圈结果实测限流点比理论值偏了十几个百分点。后面改成把电阻紧贴ILIM引脚放置用开尔文方式单独布线精度马上就回来了。3. PIC18F65K40 与 TPS259483 的连接方案与控制逻辑3.1 硬件连接EN、FLT、PG、ILIM与MCU的引脚规划PIC18F65K40在这套系统里管四个关键信号我做了如下的引脚分配功能TPS259483引脚MCU引脚信号方向说明使能控制ENRA0MCU→TPS高有效低电平关断故障输出FLTRB0/INT0TPS→MCU开漏输出故障时拉低电源正常PGRB1/ADC1TPS→MCU开漏输出输出稳定时拉低输入电压采样VINRA1/ADC2模拟输入分压后接入量程匹配状态上报UART TXRC6MCU→上位机115200,8N1EN引脚我直接用MCU的GPIO控制没有加电平转换因为两边电压一样。开机时序上MCU复位后默认EN为低整套电源路径处于关断状态等MCU完成寄存器配置和外设初始化后再把EN拉高。这个小细节能避免很多问题——如果让TPS259483在MCU初始化期间就上电后级外设可能在没有配置好的状态下跑起来出问题就只能硬断电。FLT引脚必须接MCU的中断引脚而不是普通IO轮询。故障发生到芯片拉低FLT的时间非常短如果主循环正在做别的事轮询可能延迟几百微秒甚至几毫秒对于需要快速记录故障现场的应用来说不够。我会把FLT接到PIC18F65K40的RB0/INT0上配置成下降沿中断一来就通知CPU。PG引脚我建议接到ADC通道上虽然它只是数字电平但通过读取电平并加上简单的RC滤波可以确认输出稳定状态而不是只依赖瞬间跳变。启动过程中PG从高到低的时刻就是后端电压真正建立起来的时刻比延时估算可靠得多。IRILIM设定电阻占用的是TPS259483的模拟引脚理论上不需要MCU参与。但如果你的系统需要在运行时动态改变限流点可以在ILIM引脚上叠加一个由MCU控制的DAC或PWM滤波输出把限流点从硬件固定变成软件可调。我目前没有做这个动态调整理由后面说。3.2 固件状态机正常、限流、故障、恢复的四态逻辑这套系统的固件我写成四个状态POWER_OFF、STARTUP、RUN、FAULT_LATCH。状态迁移不复杂但边界条件一定要想清楚。POWER_OFF是初始状态。MCU上电后通常先自检然后收到上位机的上电命令才把EN拉高进入STARTUP。这个设计让我可以让后级设备在启动时处于完全断电状态避免因为GPIO未初始化导致电源在半高电平下糊着。STARTUP状态里MCU启动一个500ms的定时器等待PG引脚出现有效电平。如果在时间内PG变低说明输出正常建立进入RUN状态如果超时还没等到那就说明后级负载可能短路或者软启动参数没设对此时直接把EN拉低上报启动失败。RUN是正常工作状态。在这个状态下我只周期性地读取VIN和芯片温度如果板上有温度传感器并通过UART发心跳包。真正处理故障靠的是FLT中断不在主循环里轮询。FAULT_LATCH状态是所有故障的汇总处理点。一旦FLT中断触发MCU先把EN拉低然后记录当前时间戳和故障类型。这里我加了一个重试策略如果故障在3次以内允许清除故障并重新启动超过3次则彻底锁存直到上位机发复位命令。前三次重试间隔分别取1秒、2秒、4秒做指数退避。这样处理的好处是短暂过压或插拔抖动可以在无人干预下自动恢复而反复短路的硬故障不会让设备反复跳闸把现场的电都折腾乱。PIC18F65K40的中断服务程序尽量精简到只做标志位翻转volatile uint8_t flt_flag 0; volatile uint16_t flt_count 0; void __interrupt() isr(void) { if (PIR0bits.INT0IF) { flt_flag 1; flt_count; PIR0bits.INT0IF 0; } }主循环里的状态机逻辑大致如下for (;;) { switch (pwr_state) { case POWER_OFF: LATA0 0; if (cmd_power_on) { pwr_state STARTUP; startup_timer 500; LATA0 1; } break; case STARTUP: if (pwr_good) pwr_state RUN; else if (startup_timer-- 0) { LATA0 0; uart_report(STARTUP TIMEOUT); pwr_state POWER_OFF; } break; case RUN: if (flt_flag) { flt_flag 0; LATA0 0; if (flt_count 3) { uart_report(FAULT, retry); pwr_state STARTUP; startup_timer 500 / (flt_count * flt_count); } else { uart_report(FAULT LATCH); pwr_state FAULT_LATCH; } } break; case FAULT_LATCH: LATA0 0; if (cmd_reset) { flt_count 0; pwr_state POWER_OFF; } break; } }代码本身没什么复杂的关键在重试策略。自动恢复不是越勤越好工业现场往往存在周期性干扰如果设备一恢复就被打断整个现场的总线都会被反复上电断电的噪声干扰。锁存加指数退避是我用过的最稳妥模式。3.3 为什么不用动态限流从系统可靠性角度的取舍前面提到过可以用DAC或PWM改变ILIM引脚电压实现动态限流我在原型上试过最后放弃了。原因不是做不到而是动态限流会让系统的故障边界变得模糊。固定限流点的好处是任何时候你都知道芯片的红线在哪里测试也好、故障分析也好都有确定的预期。一旦限流点变成软件可调就可能出现这种情况系统刚启动时限流点设得高电容充完电后还没来得及降低这时来一个短路电流被放过去了后级先遭殃。软件可调限流更适合那些需要适应不同供电场景的设备比如同一个板卡既要在12V/5A电源下工作又要兼容24V/2A电源。如果你的场景没有这种需求固定电阻最可靠。我在这套设计里只留了一个跳线位置想改限流点就换一颗电阻简单直接。4. 从原理图到PCB布局里容易翻车的三个细节4.1 电流设定电阻的开尔文接法问题前面提到RILIM电阻的放置问题这里展开说。原理图上就是一根线把ILIM引脚和电阻连到GND但实际画PCB时这根线的电感、寄生电阻都算数。我踩过的具体坑是RILIM到芯片的走线过了一段过孔换层然后和开关节点的铜皮相邻。调试时发现限流点偏低用万用表根本量不出那几毫欧的差异但芯片内部的感应放大器精度足够高能把这一点寄生电阻都折算进限流公式。而且这段走线靠近开关节点后寄生电容让ILIM引脚耦合进了高频噪声示波器上看芯片外部正常但内部比较器一直在抖动。正确做法是把RILIM放在芯片ILIM引脚旁边走线不要超过5mm尽量从芯片引脚PN旁直接出来不要绕。ILIM引脚周围不要铺普通电源铜让它保持干净的地参考。这样做的本质是给芯片内部的精密模拟电路一个无噪声的观察窗口。4.2 输入输出电容的位置和地回路功率路径的输入和输出电容位置比容量更重要。输入电容要尽量贴近TPS259483的VIN引脚输出电容贴近VOUT引脚。在短路瞬间输出电容上的能量会通过FET流向输入侧形成巨大的di/dt。如果输入电容离芯片远回路上寄生的电感会让VIN产生几十伏的尖峰可能直接把芯片打坏。正规的做法是输入侧至少并两个电容一个10uF左右的陶瓷电容负责瞬态一个100uF或更大的电解电容负责能量储备。10uF陶瓷必须放在VIN和GND引脚正对面走线粗短让短路电流的回路面积最小。输出侧同样道理。热插拔时后级电缆和板卡上的电容会在上电瞬间充电输出电容的位置决定了这个充电电流的路径。如果输出电容放在负载侧而不是芯片输出引脚旁边那么芯片到负载之间的走线电感就会和负载电容形成LC谐振启动时可能拉出振铃电压。4.3 实测中遇到的三个高发问题振荡、误触发、发热板子第一次打样回来后我集中做了电源相关的功能测试三个问题最典型。第一个是限流点附近的振荡。用电子负载在限流点附近扫电流时输出电压出现了低频振荡。排查后确认是负载电容和输出电感谐振导致的芯片内部限流环路在临界状态下来回调整。解决办法是在输出端增加一个0.1uF的高频去耦电容并用dVdT把启动斜率降缓。这个振荡不会损坏器件但会让板子上的LED或继电器出现低频闪烁现场检修人员会误认为设备坏了。第二个是MCU在启动期间被FLT中断反复打断。现象是只要后端负载电容大每次上电必然触发一次FLT中断MCU进入FAULT处理流程把EN拉低然后又重试。根因是我在STARTUP状态里没有屏蔽FLT中断而启动瞬间电容充电电流超过了限流点芯片按规则触发保护。解决问题有两个思路一是把dVdT时间拉长让充电电流降到限流点以下二是在STARTUP期间暂时忽略FLT中断。我两个都做了先加软启动再在状态机里增加一个启动中故障不立即锁存的判断这样既能记录故障事件又不会把正常的冷启动当成故障处理。第三个是发热。连续满载测试时TPS259483的温度比预估的高不少。算了一下功耗限流电阻RILIM本身没问题主要损耗来自FET导通电阻与电流的平方乘积。2.5A电流流过20mΩ的导通电阻功耗就是2.5 × 2.5 × 0.02 0.125W封装热阻再叠加环境温度表面温度能到70℃以上。布局时我特意在芯片底部和VIN/VOUT铜皮上做了大面积散热孔实测温度降到可接受范围。5. 系统级调试与故障注入实测我把电源路径虐待了一遍5.1 故障注入测试的项目设计与观察点电源保护电路不能只看上电正常就结束我专门做了一轮故障注入测试。核心思路是模拟工业现场最恶劣的电气工况观察TPS259483和MCU配合是否按预期工作。测试条件VIN12V限流点3.0AOVP阈值13.8V软启动1.8ms后端挂4个470uF电解电容和一个1Ω的假负载电阻。测试项目注入方式预期行为实测结果冷启动直接连接12V电源输出平滑爬升无浪涌VOUT约1.8ms内爬升到11.8V正常热插拔用MOSFET模拟电源快速切换输出不掉电或短暂跌落输出电压跌落小于200mV恢复正常输出短路在VOUT与GND之间接一根粗短路线FLT拉低芯片关断MCU记录MCU记录故障并执行自动重试策略输入过压把电源调到14.5V芯片关断FLT拉低后级无过压输出在几微秒内关断PG拉高反复短路每10秒短路一次连续50次3次后锁存不再自动恢复第3次后进入FAULT_LATCHUART上报欠压启动输入电压从8V缓慢升到12V在UVLO以下不启动达到后才启动正常测试时我特别关注两个点一是芯片从检测到短路到FLT拉低的时间直接决定后级能扛多少能量二是MCU的中断响应时间因为MCU需要记录故障状态不能等到主循环轮询。实测从FLT拉低到MCU进入中断处理并置标志位大约在15微秒内完成完全满足工业控制场景的监控要求。5.2 示波器抓到的关键波形特征与参数调整故障注入测试中最值得看的是启动和短路两个波形。正常启动波形VIN在12VEN拉高后VOUT在1.8ms内线性爬升启动电流呈一个馒头状峰值大约2.7A没有超过3.0A限流点也没有出现阶跃式台阶。这说明dVdT参数设置对了。如果我把dVdT电容改小到1nF启动电流峰值会冲到接近5A直接打上限流点FLT就会闪一下。短路波形用MOSFET开关瞬间短路VOUT电流在几微秒内冲到限流点输出引脚电压迅速跌落到接近0VFLT引脚上升沿内部开漏被释放或下降沿根据触发方式而定VIN侧电压稳定没有被拉垮。这里我用了示波器电流探头测输入电流发现输入电流尖峰被限制在3.5A左右没有出现失控的大电流尖峰说明芯片内部限流环路工作正常。过压保护波形输入电压从12V缓慢升到14.5V当分压点电压跨过内部基准时VOUT几乎瞬间关断。这里有个细节过压保护触发后芯片不会自动恢复需要EN重新拉起。如果不做手动恢复输出会一直保持关闭。这个特性和自恢复保险丝完全不同写给需要维护现场设备的人看。测试中我也测过把输入电压快速从12V跳到18V用继电器切换另一路电源TPS259483在十几微秒内关断输出。后级的板卡没有复位MCU也只是收到FLT中断并记录事件。这说明OVP分压参数和电容选择是合理的。5.3 连做50次故障注入后的状态检查连续做了50次短路和热插拔测试后我没有急着拆板子而是先量了几个关键参数芯片的VIN引脚在短路瞬间的最高电压、RILIM电阻的实际阻值、MCU的复位计数。实测结果VIN引脚在50次短路中的最高电压为14.2V低于芯片最大额定电压和安全裕量要求RILIM电阻阻值没有漂移说明它承受的功率在规格范围内MCU一次都没有复位说明FLT中断没有干扰到MCU的电源轨MCU电源从TPS259483输出取电时故障瞬间的跌落被后级LDO和电容缓冲住了。这轮测试做完我才敢说这套方案可以在工业现场的恶劣工况下用。虽然芯片本身集成了很多保护功能但真正让系统可控的还是MCU那套状态机。硬件保护保证设备不坏软件策略保证设备能自己判断要不要恢复。6. 几点超出芯片手册的个人体会选型时有人问我为什么不干脆选一颗自带SPI/I2C接口的eFuse这样连MCU都省了。这类智能eFuse确实存在但我权衡过带数字接口的eFuse在配置上更灵活也省掉了MCU的BOM可一旦出现非正常故障它没有独立的中断和观测能力调试反而更麻烦。TPS259483加PIC18F65K40的组合等于把保护器件和管理器件解耦了哪一层出问题都可以单独定位。如果后续想扩展我会做两件事。一是把这套单路保护改成多路用一颗PIC18F65K40管理三到四路TPS259483每路独立限流和故障记录二是利用PIC18F65K40的可配置逻辑单元CLC把FLT信号直接硬件连到EN信号上做一个无固件的硬联锁MCU即使死机或跑飞eFuse之间的保护联动也不受影响。这个思路适合对安全等级要求更高的设备。最后分享一个经验电源路径保护电路做完一定要花半天时间做故障注入测试不是简单短路一两次而是连做几十次并记录每次的波形和状态。很多问题是在第20次、第30次测试时才暴露出来的。芯片手册上只写参数和典型应用不会告诉你它和旁边那颗MCU配合时MCU会犯什么错这才是实际设计中最花时间的部分。
返回列表