ARTICLE DETAIL

资讯详情

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

eFuse+STM32实现智能电源路径保护:架构设计与实战调测

eFuse+STM32实现智能电源路径保护:架构设计与实战调测 做嵌入式电源设计这几年我换得最多的小零件就是保险丝。早年在给一套工业控制器做电源输入板时24V母线一旦被插错板子上的自恢复保险丝当场“罢工”设备离线只能带着示波器和万用表去现场拆机、量板、换件一来一回就是一整天。后来我把整套保护方案改成了TPS259483AYWPR这颗eFuse配合STM32F745VG做监控电源路径保护才真正从“一次性的消耗品”变成了“看得见、管得住、留得下记录”的系统功能。这篇文章就围绕这套组合聊清楚三件事为什么电源路径保护要选eFuse而不是传统保险丝或分立MOS方案TPS259483AYWPR的外围电路怎么搭、关键参数怎么定STM32F745VG在软件层面怎么把这颗eFuse的价值榨干。最后再把我在实际调测里踩过的一些坑原原本本列出来。如果你正在做嵌入式或工业设备的电源设计或者准备用这类项目撑场面这篇应该能给你一个可以直接开工的思路。1. 为什么eFuse比传统保险丝更适合智能电源路径保护1.1 换保险丝换怕了传统保护方案的三个硬伤先说最传统的方案一次性保险丝。它的优点是便宜、无源、不占控制资源但缺点在嵌入式设备里非常致命——熔断特性受环境温度影响很大。同一颗保险丝在北方冬天零下20度和南方夏天40度的机柜里动作电流可能差出20%以上。而且一旦熔断必须人工更换。对于装在现场控制柜里的设备哪怕只是换一颗几毛钱的保险丝也要花掉大量交通和人工成本。更頭疼的是保险丝熔断以后你很难知道它是为什么断的是过流是短路还是上电瞬间电容充电太猛故障不可记录排查全靠经验和运气。自恢复保险丝PPTC解决了“不用换”的问题但并没有解决“看得见”的问题。PPTC的动作是靠温度累积触发的过流以后电阻迅速增大等冷却下来又恢复这种特性用在电池保护、USB口保护上够用可放到24V工业母线下级别指望它有多准。它的动作电流精度通常只有±20%~30%多次动作后阻抗还会漂移长期可靠性根本谈不上。再就是很多人绕过成品保险丝自己用“采样电阻运放比较器MOS管”搭一套分立保护电路。这条路我也走过问题主要集中在两点。一是响应速度慢分立器件从检测到关断整个信号链路至少几十微秒碰上输出端真正短路MOS管可能在保护动作前就进入SOA不安全区烧掉了。二是调试成本高运放偏置、比较器迟滞、RC滤波每个环节都要调板子上多出一堆元件故障率反而比被保护对象还高。1.2 eFuse在电源路径中扮演什么角色eFuse的全称是电子保险丝本质上是一颗把功率MOSFET、采样电路、比较器、驱动逻辑、状态输出全部集成进单个封装里的芯片。我用的TPS259483AYWPR属于TI TPS25948x系列里的电源路径保护器件。它在电路里做的事可以类比成一个小区的入口闸机正常情况下完全放行让电流顺畅流过一旦进来的“人流量”电流超过设定值它先把门夹窄限制流量如果持续超限直接关门。具体到嵌入式场景这颗eFuse能同时管好几件事可编程限流通过一颗外部电阻设定输出电流上限超过上限后先限流防止铜箔、连接器、后级器件被大电流烧毁软启动控制通过一颗电容设定输出电压爬升斜率避免热插拔时浪涌电流过大也防止瞬间冲击让后级DCDC输入过压过压/欠压检测输入母线电压超出窗口时快速关断保护后级电路状态反馈FLT引脚把故障状态送出去让MCU知道“我现在被保护了”。注意这里有一个关键区别eFuse在过流时不一定瞬间切断。很多器件在过流初期会进入限流模式先把电流钳在设定值附近如果故障持续一段时间才关断。这种设计对容性负载和电机类负载非常友好避免了一过流就“一刀切”导致的误动作。1.3 一个MCU能赋予eFuse什么额外价值如果只是把eFuse当作一个智能一点的保险丝来用那其实浪费了大半价值。真正有意思的地方是给它配一个“大脑”也就是STM32F745VG。这颗MCU基于Cortex-M7内核主频216MHz带FPU、多路ADC、DMA、以及丰富通信外设用它来盯着电源路径有点“杀鸡用牛刀”的意思但恰恰是这种余量让电源保护从单纯的硬件动作升级成了闭环控制系统。我在这套设计里让MCU承担了四件事第一遥测通过ADC连续采集eFuse输出的电流镜像信号IMON和输入母线电压实时掌握电源状态。第二控制用GPIO控制EN引脚实现远程上电、断电和复位。第三决策根据电流变化趋势判断是启动浪涌还是真短路从而决定是否重试。第四记录故障发生时把时间戳、电流值、故障类型写到本地Flash供日后分析。说白了传统保险丝是“断了拉倒”带MCU的eFuse是“故障了先帮你分析、尝试恢复实在不行锁死并告诉你原因”。对于工业现场设备这两种体验的差距就是一次内地到现场的出差成本。2. TPS259483AYWPR外围电路设计与参数计算2.1 限流阈值电阻算出来还是“猜”出来的TPS25948x这类eFuse限流阈值一般通过外部电阻设定。不同型号的计算公式略有差异核心思路都一样确定一个电流值让系统正常工作时离它足够远同时故障时又能及时反应。具体公式里的比例系数K需要查对应型号的数据手册我这边不背具体数字只讲计算逻辑。以我的项目为例后级负载是一套带DCDC的控制器板峰值工作电流约1.2A。设计目标有两点一是正常跑步不能碰到限流值否则限流一启动电压被拉低控制器反而会复位二是要留出容性负载启动时的额外电流。我按峰值电流的1.6倍取限流点也就是2.0A再留10%的器件精度余量最终按2.2A去选电阻。计算公式很简单Ilim K / Rilim把目标电流代入反算出电阻值再选一颗E96系列、精度1%的贴片电阻。这里有个经验提醒限流电阻的精度直接影响保护点的精度别贪便宜用5%的普通厚膜电阻尤其在高低温环境下电阻温漂会叠加到保护点上可靠性很难保证。为什么限定2.0A而不是更保守的1.3A因为eFuse在限流模式下并不是瞬间切断如果限流点太贴近正常工作电流负载略微波动就会让输出电压被强制拉低这种“被保护”比故障本身更影响设备运行。真正的短路故障电流会远远超过限流点保护动作根本不受这个设定值影响。所以限流点的价值主要是保护“持续过载”而不是保护“短路”。2.2 软启动时间与热插拔浪涌怎么压下来在工业设备里最常见的板级电源问题其实不是稳态过流而是上电瞬间给大电容充电造成的浪涌电流。如果电源输入直接接一个220uF的电解电容插电瞬间电流可能冲到十几安培拉弧、烧连接器都是轻的严重的会把输入端的整流桥或者磁珠震坏。eFuse一般都有软启动控制引脚通过外接电容设定输出电压的上升斜率。我用的TSP259483AYWPR对应的是dV/dT引脚接电容大小决定斜坡时间。这里需要一个简单计算如果输出电容Cbulk 220uF目标输出电压24V我们希望启动电流控制在1.5A以内。充电电流的近似公式是 I C × dV/dt。若斜坡时间设为10ms那么 dV/dt 24V / 10ms 2.4V/ms充电电流 220uF × 2.4V/ms 0.53A。再加上负载本身的1A总电流约1.5A低于限流点2A上电过程就不会触发限流。实际调试中这个斜坡时间不是越大越好。软启动太长输出建立电压的过程就会显得“拖泥带水”后级DCDC的输入欠压锁定可能反复触发太短起不到限制浪涌的作用。我调了几次之后最终选了一个能保证热插拔不拉弧、且输岀在50ms内稳定建立的值。2.3 过压和欠压保护如何配置工业24V母线并不总是干净的24V。我见过不少现场电柜里有大电机启停母线电压瞬间冲到35V以上也有电池供电的低压系统电压一路慢慢掉到18V以下还不干脆掉电。这种情况下如果后级DCDC输入范围不够宽设备会进入一种“半死不活”的状态——输入接近欠压阈值DCDC反复重启MCU也跟着反复复位这种间歇性故障最难排查。TPS259483AYWPR这类器件通常都有过压保护OV和欠压锁定UVLO功能。配置上分两种情况如果芯片自带分压电阻网络引脚直接按数据手册计算窗口电压如果外部分压设定同样是把阈值点算好后用电阻分压器实现。我的设计里把正常工作窗口设在18V到30V超出这个范围立即关断输出并让FLT引脚拉低报故障。这里有一个容易被忽略的概念滞回。如果欠压阈值不设滞回输入电压在阈值附近抖动时eFuse会进入一种“保护-恢复-再保护”的振荡状态后级电路可能每秒复位好几次。所以配置UVLO和OV时一定要按数据手册留出滞回量比如欠压恢复点比关断点高2V这样电压在被干扰波动时才不会反复触发。2.4 布局走线的四个细节直接影响保护动作的可靠性原理图设计得再漂亮PCB布局拉胯同样会出问题。我在这个项目里踩过几个与布局直接相关的坑总结成四个细节第一输入和输出电容必须贴近芯片的电源引脚和GND引脚。多股长走线带来的寄生电感会在短路关断瞬间产生尖峰电压轻则让后级芯片受损重则击穿eFuse本身。输入侧至少放一颗10uF和一颗0.1uF的电容组合输出侧电容按实际负载需求摆放。第二IMON电流监测信号走线要远离电感、开关节点等噪声源。IMON是模拟信号虽然幅值通常不高但如果横穿DCDC的SW走线区域ADC采集到的数值会有明显毛刺。我给IMON加了一级RC滤波位置尽量靠近MCU引脚。第三FLT状态输出要确认是否需要上拉电阻。有些eFuse的FLT是开漏输出需要在外部拉一个10kΩ左右的上拉到MCU电源配置错了MCU读到的永远是低电平故障功能形同虚设。第四芯片底部散热焊盘过孔要足量。限流模式下eFuse本身就是一个大功率热源如果散热焊盘底下只打两三个过孔长时间接近限流点工作结温上来之后保护点会漂移甚至提前热关断。我后来在焊盘区域打了9个过孔并铺铜连接到背面地平面现象立刻改善。3. STM32F745VG在系统里怎么当“电源管家”3.1 用一颗Cortex-M7管电源性能是不是浪费每次提到STM32F745VG总有人觉得拿216MHz的Cortex-M7去管一颗eFuse简直是杀鸡用牛刀。但从系统角度看这颗MCU在整台设备里本来就要承担通信、控制、逻辑处理等职责电源保护只是它的兼职工作。用F745而不是用一颗8位单片机最大的好处在于三个点一是ADC资源充足且精度高。F745内置多路12位ADC支持扫描序列和DMA可以同时、连续地采集电流和电压不需要牺牲主控制性能去轮询采样。二是通信接口齐全。工业现场常见CAN、RS485、以太网F745都能直接驱动物理层故障信息可以通过现场总线直接上送。三是Cortex-M7的运算余量可以做一些“稍微复杂”的诊断比如RMS电流计算、趋势判断、滤波算法这些在8位机上做起来有点吃力在M7上就是顺手的事。所以说这颗MCU不是为电源保护而选的而是系统本来就需要一个主控只是顺带把电源保护做进了它的功能清单里。3.2 监控信号怎么接从原理图到引脚规划硬件接线上我整理了一个通用的引脚规划表。实际项目里引脚会随板子布局调整但接口关系基本不变信号名来源MCU引脚/外设功能说明IMONeFuse电流镜像输出ADC1_IN1实时电流采样经RC滤波后接入VBUS_SENSE输入母线分压后ADC1_IN2母线电压监测分压比按ADC参考电压算ENMCU GPIO输出PB0eFuse使能控制高/低有效要看数据手册FLTeFuse故障开漏输出带EXTI的GPIO故障中断触发同时保留GPIO读取电平PGOODeFuse输出良好指示GPIO输入可选用于上电完成确认有两个细节需要特别小心。一是ADC参考电压。如果F745的VREF直接接3.3V那么ADC的满量程就是3.3V采集IMON和母线分压时必须保证信号最大值不超过这个范围。二是EN引脚的逻辑电平。有的eFuse EN是高压使能高电平阈值可能是1.2V以上直接用3.3V GPIO控制没问题但有的器件支持EN引脚做可编程欠压锁定接法会复杂一些务必先看数据手册再接不要想当然。3.3 ADC循环采样和事件响应程序框架软件方面我的思路是“ADC后台跑逻辑前台算”。ADC1按扫描序列循环采集两个通道DMA把结果持续搬到内存数组MCU主循环只负责从数组里取平均结果做阈值判断。这样做的好处是采样不受主循环里其他任务阻塞的影响电流波形抓得比较完整。代码骨架大概长这样// ADC通道映射示意IMON-ADC1_IN1, VBUS-ADC1_IN2 static uint16_t adc_buf[2][8]; // 双缓冲DMA乒乓 void ADC1_Init(void) { // GPIO配置为模拟输入 GPIOA-MODER | (3U 2) | (3U 4); // PA1/PA2 analog RCC-APB2ENR | RCC_APB2ENR_ADC1EN; ADC1-SQR3 (1U 0) | (2U 5); // 第一通道IN1第二通道IN2 ADC1-SQR1 (2U - 1U) 20; // 序列长度2 ADC1-CR2 | ADC_CR2_ADON | ADC_CR2_DMA; DMA2_Stream0-M0AR (uint32_t)adc_buf; DMA2_Stream0-NDTR 16; DMA2_Stream0-CR | DMA_SxCR_EN; ADC1-CR2 | ADC_CR2_SWSTART; // 启动连续扫描转换 }这是非常典型的ADCDMA连续采集模式不用每毫秒进一次中断做转换DMA满了以后通过传输完成中断置一个标志主循环里做二次过滤和阈值判断就行。FLT事件处理上我用EXTI边沿触发。故障发生瞬间硬件先把eFuse保护动作完成了此时MCU中断里做的事情非常有限清标志、置一个ps_fault_flag、记录一个时间戳然后立即退出中断。至于到底要不要复位、要不要重试、要不要通知上位机全部放主循环状态机里处理保证中断服务函数足够短。4. 电源保护状态机的设计与故障重试策略4.1 一过流就锁死这种设计最省事但也最坑最初版固件里我的策略非常简单粗暴只要FLT被拉低立刻关闭输出并永久锁死等待人工通过按键或上位机确认复位。逻辑倒是清楚代码也少但用起来发现一个严重问题某次调试中继电器线圈吸合的瞬间产生了一个几百微秒的过流尖峰eFuse触发保护输出被锁死整个设备当场停机而故障原因根本算不上“设备坏了”只是负载特性的正常波动。这个案例说明了一件事电源路径保护不能只有“保护”这一个行为它需要一套故障分级和恢复策略。真正需要锁死的是持续短路、器件损坏这类硬故障而瞬时浪涌、电机堵转这类软故障应当在限流模式下给一个短暂的从容时间或者允许有限次数的自动重试。4.2 核心状态定义与转移条件我把保护逻辑拆成了六个状态用一张表描述状态进入条件主要动作退出条件NORMAL上电完成电压电流正常保持输出持续监测检测到过流或FLT事件ILIM_ACTIVEIMON电流持续超过警告阈值记录电流值启动超时计时电流回落回到NORMALFAULT_CONFIRMFLT拉低或ILIM_ACTIVE超时去抖确认不立即关断去抖结束确认故障进入RETRYRETRY确认故障后关闭输出按策略延时后重新使能重试成功回到NORMALFAULT_LATCH重试次数用尽锁死输出置故障标志点亮告警收到外部复位命令OFF_SWITCHMCU主动断电指令关闭使能保持低功耗收到上电指令这里最核心的设计是FAULT_CONFIRM。它相当于给故障处理加了一个“缓冲窗口”收到FLT下降沿后不立刻关闭或重试而是先用轮询方式读取FLT电平和ADC电流像按键消抖一样连续确认10ms。如果真的是持续故障再进入RETRY如果是瞬态尖峰这个窗口还没结束电流已经恢复了状态机就直接回到NORMAL整个过程对外表现为“有一次波动但设备没停机”。4.3 滤波、去抖、重试把“误伤”降到最低在正常采样路径上我是先用滑动窗口均值滤波再送到状态机判断。窗口长度选8个采样点采样率1kHz的话就是8ms延迟这点延迟在电源保护里完全可以接受却能把大部分随机噪声滤掉。FLT信号用EXTI触发但触发次数会被记录下来若在100ms内触发了3次以上我认为这不是偶发浪涌而是稳定故障会加快进入FAULT_LATCH。自动重试策略上我采用了指数退避第一次故障立即重试第二次等待500ms后重试第三次等待2s第四次不再重试直接锁死。这样既给软故障留了恢复机会又不会在硬故障下反复向短路点灌能量把故障扩大。状态机的C语言骨架大概是这样的switch (ps_state) { case PS_NORMAL: if (ps_flt_flag 1) { ps_state PS_FAULT_CONFIRM; ps_confirm_cnt 0; } else if (adc_i_avg ILIM_WARN_MA) { ps_state PS_ILIM_ACTIVE; } break; case PS_ILIM_ACTIVE: if (adc_i_avg ILIM_RELEASE_MA) { ps_state PS_NORMAL; } else if (ps_timer 50) { // 持续50ms ps_state PS_FAULT_CONFIRM; } break; ... }4.4 故障记录与上报让售后不用到现场工业设备最贵的其实是“人力到场”所以故障记录这个功能从一开始就在需求列表里。我在项目里用MCU内置RTC记录故障时间戳把故障类型、当时电流平均值、输入电压、重试次数、最终是恢复还是锁死打包成一条结构化记录写入外部SPI Flash。上位机通过CAN或RS485发送查询指令MCU上送最近100条记录现场工程师不用到场也能大概判断故障原因。如果设备要接入物联网平台这些数据还可以通过网口直接上报给云端做远程诊断。这个扩展不在本文范围内但设计时的数据格式已经预留了设备ID、版本号等字段后续加MQTT上报也只是多一个适配层的事。5. 实测波形、调试经历与常见坑5.1 搭建一个能“测断电”的测试环境调电源保护电路测试环境和做逻辑控制完全是两回事。我在台架上用的装备如下一台可编程直流电源至少能设限流和输出开关用来模拟24V母线一台电子负载最好支持动态模式不然没法模拟瞬间短路和冲击负载一台带宽不低于100MHz的示波器配上差分探头测输入输出电压再用电流探头抓IMON或输入电流波形一根短而粗的接线用于模拟真实短路场景总感抗越小越好。测试顺序也很重要。先做低负载上电确认软启动坡度和启动电流峰值符合预期再做限流测试从0A慢慢加载观察电流被钳住后输出电压是否下降最后才做短路测试并且一定要确认示波器探头量程和接线安全短路瞬间的能量不小。5.2 三个真实坑IMON噪声、FLT抖动、启动误判第一个坑是IMON信号噪声。我第一版直接把IMON接到MCU的ADC引脚没加任何滤波结果发现稳态电流采集值波动有±15%之多。原因是IMON输出的scale比较小微弱信号很容易被DCDC开关噪声和板上的地电位差污染。解决方案是靠近MCU引脚加一个100Ω电阻和一个1nF电容构成低通滤波转折频率约1.6MHz足够滤掉开关噪声又不会把电流波形细节抹掉。同时软件里对IMON采样值做了8点滑动平均噪声影响基本消失。第二个坑是FLT引脚抖动。输出端接了一个感性负载断电瞬间反电动势让FLT电平在几十毫秒内反复跳变。虽然逻辑上faqult确认状态有去抖但EXTI中断里的计数只增不减导致一次正常关断之后系统重新上电时误以为出现了多次故障而直接锁死。这个问题的修复分两步硬件上在输出端补了TVS管钳位反电动势软件上给FLT计数加了时间窗口窗口内最多计一次超过窗口自动清零。第三个坑是启动误判。最开始我把软启动电容按10ms斜坡配好之后测试热插拔一切正常但带上实际负载板之后只要一上电十次里面有两三次会触发过流保护。抓电流波形才发现负载板上的DCDC输入电容充电完成之前电流一直压在限流点上而我的ILIM_ACTIVE超时判断是50ms就进入确认启动过程稍慢就被误判为故障。后来把启动阶段的电流判断单独处理在EN使能后的200ms内只记录状态不上报故障同时把软启动斜坡稍微加长问题彻底解决。这个坑特别容易在“空载测试没问题带载就出错”的阶段出现排查时优先怀疑时序而不是怀疑硬件。5.3 如何用串口时间戳估算保护关断时间不是每个人手边都有电流探头这里分享一个实用的土办法。在FLT下降沿的中断里记录一个32位时间戳同时把eFuse的EN引脚连到示波器另一通道然后在串口里打印出从“MCU上电设置EN”到“FLT触发”的时间差。配合示波器观察EN拉低后输出电压的跌落波形就能大致估算出从故障发生到输出完全关断的时延。我实测发现TPS259483AYWPR的硬件关断动作发生得非常快FLT信号给出时输出已经被切断了。MCU这边收到FLT中断的时间比真正关断晚了几微秒但这部分延迟对系统决策没有影响因为MCU处理的本来就是“故障已经发生”的事件不需要参与硬件级快速响应。硬件快速响应靠eFuse内部比较器软件负责的是“接下来怎么办”这个分工要明确。5.4 一点收尾体会这套组合到底值不值得上把TPS259483AYWPR和STM32F745VG放在一起做电源路径保护成本比一颗保险丝高很多但换来的是现场故障不再需要“带板子出差”设备具备远程复位能力故障在发生的时候就被记录、被分类、被处理。如果你的产品只是消费级小功率设备用自恢复保险丝确实够了但如果产品要挂在工业24V母线上面对的是各种说不清的现场工况这套组合的投入是划算的。最后再分享一个小技巧把FLT信号接到MCU的输入捕获引脚用定时器通道记录两次故障间隔。如果间隔逐渐缩短说明负载在劣化系统可以在完全锁死之前提前预警。这个“预测性保护”的思路是我在后续项目里新加的功能效果很不错。
返回列表