ARTICLE DETAIL

资讯详情

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

eFuse+MCU电源路径保护:从原理到落地实践

eFuse+MCU电源路径保护:从原理到落地实践 1. 为什么我最终放弃了“保险丝MOS管”组合方案以前做嵌入式和工业控制板的电源入口保护我基本都是老一套保险丝加一颗P沟道MOS管再配几个电阻电容做延迟关断。这套方案在大多数场合确实能用但真正让我下决心换掉的是一次现场事故——一块12V转5V的板卡在热插拔的瞬间输入端的MOS管直接被击穿后续板卡全部断电。拆下来分析电流尖峰上升速度太快分立MOS管的响应速度和保护阈值都跟不上等它反应过来器件已经烧了。传统方案的问题不在于“能不能保护”而在于“保护得太粗糙”。普通保险丝热容量大熔断时间随过流倍数变化很大1.2倍过流可能要几分钟才断而工业现场更常见的是几十微秒的浪涌尖峰。自恢复保险丝PPTC虽然能复位但动作精度更差内阻随温度漂移非常明显。分立MOS管方案可以做电子开关但过流检测要么靠采样电阻加比较器要么靠MOS管的饱和区电流特性去估精度和温度稳定性都不理想更别提过压、欠压、反向保护这些功能都要单独搭电路。我后来在一款电源路径保护专用芯片上找到了答案——TI的TPS259483AYWPR。这是一颗电子熔断器eFuse把功率开关、电流采样、限流控制、过压/欠压检测、软启动、故障输出全集成在一个封装里。配合一颗PIC18F86J10单片机做策略控制和状态上报就构成了一个比较完整的电源路径保护单元。这个组合好用的地方在于高速的、需要硬件电路微秒级响应的保护动作交给eFuse内部的模拟逻辑来完成而“故障之后怎么办”、要不要重试、要不要记录告警、怎么和上位机通信这些需要软件决策的事情交给MCU来做。几种方案放一起对比会更清楚对比维度传统保险丝自恢复保险丝分立MOS管方案eFuse方案过流响应速度毫秒到秒级秒级与比较器/驱动器相关微秒级保护精度低受温度影响大低内阻漂移中等依赖采样电阻高内置精密检测可恢复性不可恢复自恢复视电路设计可自动重试或锁存过压/欠压保护不支持不支持需额外搭电路支持阈值可编程诊断输出无无需自建有FLT和电流监视输出那次事故之后我在一个新的工业控制板项目里正式采用了TPS259483 PIC18F86J10的组合本文就把整个设计、计算、调试过程和踩过的坑完整记录下来。2. TPS259483AYWPR的硬件能力拆解2.1 这颗eFuse到底集成了哪些保护机制TPS259483属于TI的TPS25948系列定位是紧凑型的电源路径保护器件。它的输入电压范围覆盖4.5V到18V具体以所选版本和最新数据手册为准内部集成低导通阻抗的功率FET额定连续电流能力足以覆盖大多数工业板卡的入口需求。它最核心的价值是同时提供了以下几道防线第一道是过流保护OCP。eFuse内部有采样网络持续监测输出电流一旦超过设定阈值内部开关会在微秒级时间内关断。这里的关断不是简单的断开而是通过内部恒流源控制栅极放电实现受控的快速关断避免太大的dv/dt对后端电路造成二次伤害。第二道是过压保护OVP与欠压保护UVLO。通过外部分压电阻设置监控点当输入电压超过上限或跌落到下限以下时器件会关断输出。对于输入电压不稳定的工业环境比如电机启停造成的母线电压跌落、电源时序错乱导致的电压过冲这功能非常实用。第三道是软启动可调dV/dt。在输出端挂一个电容到地内部电流源对这个电容充电从而控制输出电压的爬升斜率。作用是把启动瞬间的浪涌电流抑制住避免给前级电源带来冲击。第四道是故障输出和电流监视。FLT引脚是开漏输出发生故障后拉低IMON引脚输出与负载电流成比例的电流或电压信号可以直接接MCU的ADC做实时采集。我之前踩过的一个误区是很多人以为eFuse就是个“智能保险丝”只能断电。实际上它的重试模式才是精髓。TPS25948系列支持故障后的锁存模式Latched或自动重试模式Auto-Retry。锁存模式下故障后器件保持关断直到外部使能信号被拉低再拉高自动重试模式下器件会在一定延时后重新尝试导通。这两种模式各有适用场景我后面会详细说MCU如何配合使用。2.2 典型应用电路与引脚配置下面是我在实际项目中用到的典型连接方式引脚/功能位连接方式作用说明IN接输入电源靠近引脚放0.1uF10uF去耦电容输入供电电容用于稳定电压OUT接后端负载受控输出EN接MCU GPIO串联1k电阻软件控制使能/关断ILIM通过限流电阻接地设定过流阈值dV/dt接软启动电容到地设定启动斜率OVLO/UVLO若引脚配置分压电阻接输入设定过压/欠压阈值FLT接MCU外部中断引脚上拉到3.3V故障信号上报IMON接MCU ADC通道并联滤波电容电流监视有一点必须提醒刚接触这类芯片的读者引脚序号和功能定义一定要以最新数据手册为准。我印象很深的一次是原理图库里的符号和实际封装引脚序不一样差点把ILIM和IMON接反。画原理图时建议先下载封装核对表逐个引脚确认后再连网络。2.3 关键参数的计算方法参数计算是整个设计里最见功力的一步。我以几个核心参数为例说明思路具体系数以手册曲线为准过流阈值I_LIM的计算。芯片手册通常会给出ILIM电流与限流电阻的关系式一般形式是I_LIM K / R_ILIM其中K是器件相关的比例常数。我习惯先确定最大正常负载电流然后把限流点设定在它的1.5到2倍留出启动浪涌和负载波动的裕量。比如正常负载12V / 2A我把限流点设置在3A附近对应的R_ILIM就可以从手册曲线查出来。注意ILIM引脚的走线要短避免引线电阻影响设定精度。软启动电容C_dV/dt的选择。内部恒流源对软启动电容充电输出电压爬升率约为dv/dt I_SRC / C_dV/dt如果后端负载有比较大的输入电容比如3000uF的铝电解电容阵列启动瞬间的浪涌电流会是C×dv/dt。为了让浪涌电流小于限流点软启动电容不能选太小。我通常是先估算总输入电容设定一个能容忍的启动电流反推出需要的dv/dt再确定C_dV/dt。实测中如果发现启动瞬间FLT被拉低第一反应就是看软启动是不是太快。3. PIC18F86J10在保护链路中的分工为什么有了这么强的eFuse还要加一颗PIC18F86J10因为硬件保护只能做“瞬间动作”它不知道也不关心系统运行的上下文。举个真实例子一块板卡在运行中偶发过流如果是瞬时干扰自动重试一次就能恢复但如果是后端负载真的短路了自动重试只是不断给故障点充电打火花反而可能扩大损坏范围。这种“到底该不该恢复”的决策就需要软件介入。PIC18F86J10是Microchip的8位MCU80引脚封装带多路ADC、UART、I2C/SPI和充足GPIO。它的任务不是做高速保护而是作为“电源保护系统的大脑”上电后对eFuse进行初始化配置EN引脚状态、处理预充电时序运行时周期性读取IMON引脚的电流值监视负载健康状况接收FLT中断进入故障处理状态机根据故障次数和时间戳决定自动重试还是锁存关机通过UART把电源状态上报给上位机或者PLC控制系统在电路连接上PIC18F86J10的RB0外部中断引脚接FLTRA0接IMONRC0接EN。FLT是开漏输出需要接一个上拉电阻到3.3V这样空闲时为高电平故障时被拉低正好触发下降沿中断。IMON信号建议在ADC引脚前加一个RC低通滤波具体取值我会在第5章的噪声问题里详谈。这里有个容易犯的错误有些人试图用MCU去“接管”过流保护靠软件中断去关断输出。8位MCU的中断响应再快从故障发生到GPIO翻转也需要几十微秒而eFuse内部模拟逻辑做到的是微秒级甚至亚微秒级关断。安全相关的快速动作必须交给硬件MCU只做后处理和容错决策。这个设计边界的划分是整个方案可靠性的关键。故障处理状态机我设计成了五态状态触发条件动作IDLE系统上电等待启动命令STARTUP收到开机指令EN置高开始监控电流RUNNING启动电流进入正常范围周期读取IMON等待故障事件FAULT_RETRYFLT下降沿中断记录故障次数关闭EN延时后重试FAULT_LOCK重试次数超过阈值或故障持续锁存关闭上报故障码等待人工干预重试策略我是这么定的瞬时过流比如机械卡顿导致的电机电流尖峰连续重试3次每次间隔200ms如果3次内恢复系统继续运行故障次数清零如果第3次仍然失败进入锁存状态必须人工断电或通过上位机下发恢复指令。这套策略在实际项目中兼顾了自恢复和故障安全比单纯的自动重试模式稳妥得多。4. 从原理图到固件的完整落地过程4.1 原理图设计与PCB布局要点原理图部分我按功能块拆成三部分输入EMI滤波和去耦、TPS259483保护电路、PIC18F86J10最小系统。输入端的10uF电容需要选择低ESR的陶瓷电容或者用多个陶瓷电容并联因为输入端除了给负载供电还要吸收eFuse快速关断时电感产生的能量。输出端的电容同样重要它决定了关断瞬间的输出电压保持时间电容越大负载看到电压跌落越晚但启动浪涌也会更大需要在软启动电容上做平衡。地线和采样走线是这次设计最容易踩坑的地方。ILIM电阻的接地端要单独回接到芯片GND引脚不要和功率地混在一起否则功率电流的压降会叠加到ILIM参考地上导致限流点漂移。IMON走线要远离开关节点和电感为了抗干扰可以在引脚旁并联100pF到1nF的电容。输入和输出的功率回路尽量短特别是输入电容到IN引脚、OUT引脚到负载的环路环路面积越大寄生电感越大关断时的电压尖峰越高。散热同样不能忽视。eFuse内部FET在长时间大电流下会有明显温升芯片底部如果设计有散热焊盘通常接地要在PCB对应位置打足够数量的过孔连接到背面铜皮。我最早的版本只打了四个过孔负载15W满负荷跑了半小时芯片外壳温度到了90多度后面增加到九个过孔并加大底层铜皮才压住。这个经验我会在第5章展开。4.2 固件代码骨架PIC18F86J10这边我用的开发环境是MPLAB X XC8编译器。初始化部分的核心思路是先把所有外设配置好再拉高EN使能输出避免上电瞬间的GPIO电平不确定导致误动作。#include xc.h // 引脚定义 #define EN_PIN LATCbits.LATC0 #define FLT_PIN PORTBbits.RB0 #define IMON_ADC ADC通道0 volatile unsigned char flt_flag 0; volatile unsigned int fault_count 0; void System_Init(void) { // EN引脚输出默认低电平 TRISCbits.TRISC0 0; EN_PIN 0; // FLT引脚外部中断下降沿触发 TRISBbits.TRISB0 1; INTCONbits.INT0IE 1; INTCON2bits.INTEDG0 1; // ADC初始化10位采样IMON接AN0 ADCON1 0x0E; // 设为数字IOAN0模拟输入 ADCON0 0x01; // 使能ADC模块 // 中断优先级和全局中断使能 INTCONbits.PEIE 1; INTCONbits.GIE 1; } void PowerPath_Enable(void) { EN_PIN 1; } void PowerPath_Disable(void) { EN_PIN 0; } unsigned int Read_LoadCurrent(void) { ADCON0bits.GO 1; // 启动转换 while (ADCON0bits.DGO 1); // 等待转换结束 return (ADRESH 2) | (ADRESL 6); } void __interrupt() ISR(void) { if (INTCONbits.INT0IF) { INTCONbits.INT0IF 0; // 清除中断标志 flt_flag 1; // 置位故障标志 fault_count; } }主循环里不直接处理中断里的复杂逻辑而是轮询标志位做状态机切换。这样做的原因是让故障处理有明确的优先级避免在中断上下文里做延时等时间敏感操作。void main(void) { System_Init(); PowerPath_Enable(); while (1) { if (flt_flag) { flt_flag 0; Handle_Fault(); // 按状态机策略处理 } // 周期性读取电流做长期健康监测 unsigned int adc_val Read_LoadCurrent(); if (adc_val 过流阈值) { // 上报上位机记录日志 } __delay_ms(50); } }这里要说明一点IMON读到的电流值要经过标定才能转成真实安培数。我通常在调试阶段用电子负载拉几个已知电流点然后对IMON电压做两点标定计算出线性系数。那个系数在程序设计阶段很难精确估算因为涉及芯片内部电流镜比例和采样电阻误差所以必须实测校准。4.3 联调顺序先裸跑再进MCU调试这个系统的最大心得是不要一上来就让MCU接管一切。我的顺序是第一步先不给MCU参与把EN直接由跳线控制短接或断开用电子负载做负载验证eFuse本身的功能。这个阶段主要确认各部分参数是否合理设定限流点后用超过限流的负载测试OCP是否在预期电流值动作输入电压调到OVP阈值之上确认输出被切断给后端挂大电容测试启动浪涌是否在预设范围内。第二步断开跳线把EN接到MCU引脚让软件来控制使能但故障处理逻辑先做最简单的——收到FLT中断就关断不复位。这一步验证MCU和eFuse之间的信号链路是否正常重点检查FLT上升/下降沿是否毛刺过多、IMON采样读数是否稳定。第三步把全部重试策略和上位机通信代码加上做完整的故障注入测试。全部通过后再运行老化测试确认热设计没有隐患。5. 实测中发现的几个关键坑5.1 软启动太快FLT误动作第一个坑出现在第一版硬件上。我把软启动电容按手册里的“推荐最小值”去选结果在给一块带多个大电容的负载板供电时启动瞬间系统直接断电。用示波器抓输出波形发现电压爬升还没走完输出电流已经顶着限流点跑了FLT被拉低eFuse判定过流关断。原因很好理解后端电容大启动时电容充电电流就是I C×dv/dt软启动斜率太陡充电电流就超过限流阈值。解决方法是把软启动电容加大一倍让电压爬升时间从0.5ms延长到2ms。从那以后我设计时都会先算负载板的总输入电容而不是机械地复制参考设计。5.2 芯片温度高到怀疑人生前面提到过散热问题这里说具体数据。我的板子在室温25度环境下负载12V/2.5A连续运行一开始选用小封装并只打了4个散热过孔用热成像看芯片表面温度超过95度。TPS259483内部有热关断保护温度到阈值会直接断开输出表现出来就是运行一段随机时间后系统掉电过一会温度降下来又能启动。排查这个问题的过程比较曲折。一开始以为是过流保护误动作但查了FLT引脚的波形又不是定时规律后来用示波器同时监测IMON和OUT发现断电时电流远没到限流阈值才意识到是热保护。解决方法是增加底部散热过孔、扩大底层铺铜面积并且在结构上让芯片靠近通风位置。改版后满载温度稳定在75度以内问题彻底消失。这里提醒一下热关断和过流保护是两个完全不同的保护机制排查时一定要先分清触发的是哪一个可以同时监测FLT引脚和芯片结温来判断。5.3 电感性负载导致关断瞬间电压尖峰第三个坑来自一个直流电磁阀。电磁阀线圈是典型的感性负载eFuse关断瞬间电感电流不能突变会产生反电动势尖峰。这个尖峰串回输出端不仅可能击穿后端的驱动电路还会让eFuse的输出电压反冲到输入端造成输入侧电压过冲。解决办法是在输出端和地之间加TVS管做吸收TVS的击穿电压选取要高于正常工作电压低于芯片和负载器件的最高耐受电压。我用的12V系统加了一个SMBJ16A关断尖峰从最高的32V被钳位到约20V后续器件再没有因为这个原因损坏。如果是带续流二极管的感性负载尽量让负载本身的反电动势泄放路径更近TVS只是最后一道防线。5.4 长线缆和地电位差导致的误触发最后一个问题是现场调试才遇到的。设备通过一条两米长的线缆连接外部传感器线缆本身有分布电容和电感传感器上电瞬间线缆分布电容充电产生一个比较大的瞬态电流。这个电流持续的时间很短但幅度可能超过限流阈值。我最初把限流点设得比较紧1.8倍额定电流传感器接入时偶尔会触发过流保护。解决思路是分两个方向一个是在软件上利用eFuse的“瞬态过流耐受时间”特性把线缆充电尖峰滤除具体做法可以查阅手册中的过流响应延时曲线另一个是从硬件上增加软启动时间降低传感器侧电容充满前的浪涌幅度。我最后把限流点稍微放宽到2倍额定电流并且配合了合适的响应延时实测再没有出现误触发。这个问题的教训是设定限流值时不仅要考虑稳态负载还要评估线上所有分布电容和热插拔场景的瞬态电流。6. 这套方案目前的使用体验和体会TPS259483 PIC18F86J10这套组合经过一整个项目的验证后我对它的看法是最适合的场景是那些有MCU主控、需要电源诊断和容错控制的工业板卡尤其是多板互连、支持热插拔、后端负载种类比较多的系统。它不适合的场景反而是最简单的单板供电——如果你只需要一路纯粹的过流保护不需要远程诊断那单用一颗eFuse不接MCU也完全够用没必要为了用MCU而用MCU。我在后续版本里还做过一个扩展把IMON的ADC采样值做了滑动平均在固件里记录每天的电流峰值和平均值用于预测性维护。电机负载如果出现轴承磨损电流波形会逐渐异常MCU在上位机告警之前就能捕捉到趋势变化。这个功能只需要占用很少的固件资源却能把一颗电源保护芯片用出额外的价值来。最后想说的是电源路径保护这个领域方案本身的门槛并不高真正拉开差距的是对故障场景的理解是否充分——你是否考虑了热插拔、感性关断、长线缆、温度漂移这些实际工况。用eFuse把硬件保护做好用MCU把故障策略做活这个架构在嵌入式和工业应用里我评估还能用很久。
返回列表