基于eFuse与STM32的电源路径保护及监控方案
前阵子做一块工业控制板的电源部分24V输入要给后级各种负载供电板卡要求热插拔不损坏、负载短路不烧板、故障能远程上报。用TPS259483AYWPR这颗eFuse加上STM32F302VC来做电源路径保护算是把嵌入式系统的电源管理这个环节做扎实了。这块方案解决的核心问题说直白点就是让功率路径上的异常由硬件快速切断同时让MCU看得见、管得着。适合正在做工业控制、车载电子或者电池供电产品的工程师参考。1. 为什么要给电源路径加保护传统方案和eFuse的真实差距1.1 嵌入式和工业应用中的电源路径风险工业控制板卡里电源路径上最常见的问题就是过流、短路、浪涌和电压异常。比如工人带电插拔一个接口模块板卡输入端会瞬间出现大电流冲击后级DCDC输入端若有大容量电解电容上电的一瞬间几乎等于短路负载老化或者接线错误也会导致输出侧对地短路。这些问题如果单纯靠“保险丝加TVS”去挡效果其实很有限。保险丝的问题在于它是一次性的烧断以后必须人工更换在无人值守的设备里基本上等于故障停机。并且普通保险丝的动作电流离散性很大标称3A的保险丝可能要到5A才断留下很大的不确定性。自恢复保险丝虽然能自动恢复但它的动作速度慢几百毫秒级别的响应时间对后级芯片来说早就烧穿了。更重要的是保险丝不会告诉系统“我断了”只能靠后级没电了才能发现这种被动保护很难满足现代工业设备对状态监控的要求。很多人第一反应是“那用分立MOSFET搭一个电子开关再加上采样电阻和比较器不也能做吗”。确实能做但一个可靠的分立方案至少需要功率MOSFET、栅极驱动、电荷泵、电流采样放大器、比较器、基准源、延时电路、辅助电源光物料就是一长串。调试中还要处理MOSFET开关速度、振铃、防直通、温度漂移这些细节板子面积也很大。对于量产产品来说分立方案的可靠性往往取决于设计者的功力极容易在EMI和瞬态响应上翻车。1.2 eFuse如何把“快速切断”和“状态可感知”做进一颗芯片里eFuse也就是电子保险丝本质上是一个集成了功率开关、电流采样、保护逻辑和驱动电路的智能功率器件。它把传统分立方案里的“功率级”和“控制级”封装到了一颗芯片里使用起来很像一个带保护功能的MOSFET但内部远比MOSFET复杂。TPS259483AYWPR属于TI的TPS25948系列eFuse这种芯片内部有一个低导通电阻的功率FET并且配备了可编程的电流限制、输出压摆率控制、输入过压/欠压保护、过热关断和反向电流阻断等功能。它能够独立完成微秒级的短路保护不需要MCU干预同时又把故障状态通过开漏输出引脚FLT报告出来让处理器能感知故障。在实际项目中我把eFuse当作电源路径上的“硬件保镖”而STM32F302VC则是“值班经理”。保镖负责在异常发生的那一瞬间把电路切断值班经理负责观察、记录、决定什么时候重新放行。两者职责不同但配合紧密。2. 方案选型与系统架构TPS259483AYWPR和STM32F302VC的角色分工2.1 为什么选择TPS259483AYWPR这颗eFuse选eFuse的时候我最看重四点输入电压范围是否覆盖实际母线电压限流精度和响应速度是否够导通阻抗导致的损耗能不能接受还有是否带状态输出。TPS259483AYWPR所在系列覆盖了从低到高的电压输入范围24V工业母线可以很从容地使用。它的导通阻抗很低正常工作时压降很小发热不明显。另一个关键是它的限流功能是“可编程”的通过一颗外部电阻就能设定限流点。这意味着同一块PCB可以通过更换电阻适配不同负载场景甚至在固件里配合电子开关切换多档电阻实现动态限流。这种灵活性在传统保险丝方案里完全不可想象。此外TPS259483系列有输出压摆率控制引脚。这个功能在热插拔场景里特别重要——当板卡插入背板连接器时如果后级有几十微法甚至几百微法的滤波电容瞬间充电电流会非常大。如果任由它冲不仅会拉低母线电压还可能把连接器打火花。通过调节压摆率控制电容的容值可以控制输出端电压爬升的斜率也就是限制浪涌充电电流让热插拔变得平滑。2.2 STM32F302VC的模拟外设优势STM32F302VC是ST的一款ARM Cortex-M4内核MCU主频72MHz这个主频在MCU里不算极高但它的亮点在于模拟外设集成度。它内部有多路12位ADC、两路DAC、三个快速比较器以及最多两个运算放大器。这些模拟模块对于电源监测来说简直是量身定做。如果只用普通MCU比如F103系列要检测电流和电压就得外接运放、比较器、基准源PCB上多一片料就多一份失效风险。F302VC自带比较器和运放可以直接把eFuse的电流监测信号接入片内比较器通过DAC设置一个阈值当电流超过阈值时比较器输出立即触发中断或者事件。这个响应比ADC采样要快得多对于捕捉过流波形和紧急事件记录非常有价值。另外F302VC的ADC支持多通道同时采样和注入通道可以在不停主循环的情况下完成数据采集。对于需要同时采集输入电压、输出电压和电流信号的场景灵活性很高。2.3 系统职责分配硬件快速保护软件策略控制整个系统我将其划分为三个层次。第一层是eFuse自己的硬件保护层。过流、过压、欠压、过温这些危险状况都由TPS259483内部的模拟电路直接处理响应时间在微秒级别。这一层不需要代码参与甚至MCU死机也不影响安全性。第二层是MCU的快速事件层。利用STM32F302VC的比较器和DAC对电流监测电压做阈值比较把“电流异常上升”这个模拟信号转换成数字事件并打上时间戳记录。这一层不直接控制eFuse的开关但能为系统诊断提供证据。第三层是策略管理层。MCU通过普通GPIO控制TPS259483的使能引脚通过FLT引脚获取故障状态。固件运行一个状态机在正常、故障、重试之间切换。这样设计的好处是即使固件写了很多功能逻辑电源保护的基本盘也不会受到干扰。三层的功能分配见下表层次承载器件功能响应速度硬件保护层TPS259483AYWPR限流、过压、欠压、浪涌控制、热关断微秒级快速事件层STM32F302VC内部比较器 DAC电流越限事件捕捉、时间记录亚微秒级策略管理层STM32F302VC固件使能控制、状态判断、自动重试、远程上报毫秒级3. 硬件电路设计要点从功率回路到MCU接口3.1 功率通路设计与电容布局TPS259483AYWPR的典型用法是串联在电源正极路径上输入接电源输出接负载负极为公共地。输入端必须放置足够的输入电容一般至少10µF陶瓷电容并一个大容量的电解电容。原因是一旦下游出现短路eFuse关断时存储在输入电缆上的寄生电感会产生电压尖峰如果没有足够电容吸收可能直接把芯片打坏。输出端的电容也不是越小越好它和压摆率控制一起决定了热插拔时电流脉冲的形状。PCB布局上我吃过不少亏。功率回路要尽量短而宽输入电容和输出电容的地脚要直接回到芯片的地焊盘不能绕了一圈再回来。如果地回路被信号线分割开关瞬间的高频电流会在地平面产生压差轻则导致ADC采样乱跳重则影响eFuse内部比较器的判断。芯片底下建议做大面积铺铜散热最好打上过孔连接到内层地。eFuse长时间通过几安培电流发热不可小视。不要只看芯片最大电流还要算一下实际温升。我曾经在一个封闭壳体内做过带载测试表面温度比裸板高20°C差点触发热关断后来重新覆铜才解决。3.2 限流电阻、电压阈值和压摆率参数的设置限流点的计算公式在TPS259483的手册里写得很明确一般是用一个基准电压除以限流电阻再乘以一个比例系数。实际设计时不能按理论值顶格设置我习惯留20%到30%的余量。比如负载正常工作电流为1.5A限流点我会按2A左右配置因为启动瞬间难免有额外电流留余量可以避免正常工况误触发。过压和欠压阈值通过外部电阻分压设置。以我的24V系统为例我会把欠压锁定值设置在18V过压锁定值设置在30V。这要根据电源母线波动范围来定。分压电阻的取值不能太大否则引脚输入偏置电流会产生误差也不能太小否则待机功耗会增加。精度上我通常选1%或0.5%的贴片电阻并且在软件里做一次ADC校准。压摆率控制电容是很多人容易忽视的参数。TP S25948系列一般有一个专门的引脚通过外接电容设定内部电流源给输出栅极充电的速度。这个电容容值越大输出电压上升越慢浪涌电流越小但也不能无限慢否则负载长时间处于欠压状态反而会误动作。实际调试时我用示波器同时抓输出波形和输入电流波形在浪涌电流和后级上电时间之间取一个平衡点。3.3 与STM32F302VC的接口设计TPS259483给MCU提供了几个关键信号使能EN、故障输出FLT、电流监测输出IMON。EN和FLT都是数字信号。FLT通常漏极开路我加了一个10kΩ上拉电阻到MCU的3.3V电源。需要注意的是如果TPS259483输出故障时FLT拉低MCU供电可能会存在时序问题——故障发生时MCU可能还在运行接受到中断后需要能够正常处理。因此FLT上拉的3.3V最好是MCU同一路电源且留一点余量。IMON信号是模拟信号它输出一个与负载电流成比例的电压。MCU通过ADC采集这个电压换算成电流值。由于工业现场往往有电机、变频器这些干扰源IMON信号需要加一级RC低通滤波时间常数大约1ms到10ms。如果后续要用到片内比较器做快速事件监测则应该从RC之前引出信号避免滤波延迟导致事件丢失。STM32F302VC的ADC基准电压我建议接到独立的基准源或者至少使用内部的VREF引脚并接去耦电容。如果直接用3.3V电源作基准3.3V电源本身的纹波会直接影响电流采样精度。工业应用里即使不追求高精度也希望尽量减少共模噪声。VREF脚不要空着可以接一个AVDD、一个小电感或者磁珠再做一点滤波。4. 固件实现让STM32F302VC管好状态而不是管保护4.1 状态机的设计保护动作是硬件完成的但固件要管“接下来怎么办”。我把系统状态定义为四态正常运行、故障触发、延时重试、永久锁死。正常运行时MCU周期采集电压电流数据检查FLT引脚。一旦检测到FLT拉低立即停止正常流程记录当前时间和故障发生前后的采样数据然后切到故障触发状态。在故障触发状态MCU不会马上使能eFuse而是先等待几百毫秒确保故障源不再短路。接着进入延时重试状态MCU把EN引脚拉高一次尝试重新启动。如果启动成功后FLT正常复位系统回到正常运行状态。如果连续重试三次都失败则进入永久锁死状态此时MCU不再自动使能而是通过串口或CAN向上位机上报“硬件故障需要人工介入”。这个策略的灵感来自于断路器重合闸避免瞬时故障导致设备长时间停机同时防止顽固性故障反复冲击电路。4.2 ADC采集与滤波实现STM32F302VC的ADC可以配置为扫描模式我使用DMA循环采集三路电压信号输入电压、输出电压、IMON电流。采集数据放到一个环形缓冲区里主循环每100ms做一次均值滤波。均值滤波能滤掉大部分高频噪声但要注意平均值会掩盖一些瞬态变化。因此我同时保留了“峰值保持”逻辑ADC使用注入通道比较器触发时注入通道立即采集当前IMON值并存入寄存器这样既能获得平稳的稳态数据又能捕捉到故障瞬间的峰值。伪代码如下// ADC DMA 循环采集 void ADC_DMA_Start(void) { HAL_ADC_Start_DMA(hadc1, (uint32_t*)adc_buf, 3 * SAMPLES); } void Process_Power_Monitor(void) { for (int i 0; i SAMPLES; i) { vbus_sum adc_buf[i * 3]; imon_sum adc_buf[i * 3 1]; vout_sum adc_buf[i * 3 2]; } vbus_mv vbus_scale * vbus_sum / SAMPLES; imon_mv imon_scale * imon_sum / SAMPLES; vout_mv vout_scale * vout_sum / SAMPLES; }工业环境下ADC输入的参考地不能和功率地混在一起。尽量把模拟地单独走线在MCU底层单点连接到功率地否则大电流切换瞬间地弹会让ADC数值出现“毛刺”。4.3 比较器与DAC的快速事件捕捉为什么要用比较器因为ADC即使使用DMA和注入通道从发生模拟信号到软件看到数据仍然有几十微秒延迟而比较器是纯硬件模拟比较输出可以连接定时器输入捕获或者EXTI中断。它的响应速度远快于ADC。我把IMON信号经过分压接到比较器的正端DAC输出作为负端的阈值。DAC的好处是阈值可以在线设定不用改电阻。正常运行时DAC输出设为正常电流对应电压的1.5倍。一旦IMON超过这个电压比较器立刻翻转触发EXTI中断。中断服务程序里读取当前时间戳和这之前的ADC峰值寄存器然后拉高或者拉低某个状态标志。这样做的价值在于当eFuse已经因为过流而切断时MCU仍然能记录到故障电流的大致等级和发生时刻方便故障分析。由于比较器翻转不代表MCU要介入保护固件只做记录不会干扰eFuse正常工作。5. 实际调试中的典型问题与排查心得5.1 上电瞬间就故障锁死第一次把板子连上24V电源时TPS259483的FLT信号瞬间拉低输出电压一点都没起来。当时第一反应是限流电阻算错了后来仔细查发现输出端接的电容总容量达到220µF而我的压摆率控制电容是按10µF负载设置的。eFuse在启动时要给输出电容充电充电电流等于CdV/dt。压摆率太慢时启动时间很长但压摆率太快就会产生大电流直接触发限流保护。解决方法是把压摆率控制电容加大到合适的值实测看到输出从0V爬到24V用了大约5ms电流峰值控制在限流点以内。调试技巧把示波器电流探头夹在输入电源线上观察启动电流波形。一边调整压摆率电容一边看波形效果比光算公式直观得多。5.2 FLT引脚反复抖动导致误报另一种常见故障是FLT引脚在带载时偶尔拉低、又很快恢复MCU还没来得及处理FLT又变高了。用逻辑分析仪抓FLT和EN发现是IMON信号上叠加了开关电源的纹波在临界点附近来回穿越比较器的阈值。解决办法分两步一是把FLT上拉电阻从10kΩ减小到4.7kΩ加快上拉速度减少噪声干扰二是固件中对FLT信号做软件消抖连续采样到低电平超过2ms才认定故障。对于真实短路来说2ms消抖不会造成实质损失因为eFuse本身早已把输出切断MCU只是确认状态。5.3 自动重试频率太高烧坏了连接器我原来设计的自动重试间隔只有100ms。结果在负载短路时eFuse不断尝试启动每次启动都会在连接器处产生一个小的放电火花时间一长连接器引脚被烧黑了。后来我把重试间隔拉长到1秒并且规定连续重试3次后就锁死直到收到远程复位命令。这个代价是故障恢复时间变长但对工业设备来说稳定的故障响应比快速试探更重要。5.4 IMON精度校准IMON电压和实际电流并不是绝对的线性关系尤其在低电流段可能有偏移。我在生产测试中加了一步校准先空载读取IMON电压作为零点再用电子负载拉一个标准电流读取第二个点算出斜率和截距写入MCU的Flash。这样电流显示精度可以做到相对误差在5%以内。如果要求更高精度可以在功率路径上串联精密采样电阻用差分放大器接入STM32F302VC的运放。但对于大多数保护场景来说eFuse内部IMON精度已经足够判断过流趋势和估算功耗。6. 实测效果与应用扩展6.1 实测数据最终样机在24V供电下设置了2.2A的限流点。做短路测试时用一个继电器瞬间把输出端对地短路eFuse的切断时间在几个微秒级别输出端电压波形几乎是一条竖线被截断。连续做了几十次短路测试板卡没有损坏MCU每次都准确记录到了故障事件。热插拔方面后级接了一个约50瓦的负载电路输入端插入背板时输出电压平稳上升输入电流没有出现巨大尖峰。整个板卡在常温环境下连续运行24小时eFuse表面温度在可接受范围内。系统通过串口每50ms上报一组数据包括输入电压、输出电压、电流、温度预估、故障计数和当前状态。上位机可以随时看到电源是否健康。6.2 还能怎么扩展这个方案做完后我把部分功能做成了可配置选项。比如通过STM32F302VC的DAC动态调整比较器阈值可以实现在不同负载模式下有不同的预警值。如果配合数字电位器切换ILIM限流电阻MCU就能在低功耗模式和满载模式之间动态调整限流点在保护策略上更加灵活。另外STM32F302VC还有CAN控制器工业设备大多有CAN总线。目前我已经把故障记录挂到了CAN报文里上位机可以远程读取故障历史和当前状态。将来甚至可以做到远程下发“允许重启”指令替代人工断电复位。6.3 个人的一点体会做电源路径保护最忌讳的是把“保护功能”全部寄托在固件上。固件会跑飞、会被中断卡住、会有bug而功率电路上的短路才不管你的代码有没有写好。所以我的架构原则是任何有可能造成硬件损坏的保护都必须由模拟硬件完成MCU只能做策略和报告不能做最后的防线。用TPS259483AYWPR之后省去了分立采样电阻、比较器、驱动电路一大片物料PCB面积小了很多逻辑也清爽了。STM32F302VC的模拟外设则让“监控”这件事变得轻而易举不用再去外挂一堆芯片。这套组合在嵌入式和工业应用里我认为值得推广。