ARTICLE DETAIL

资讯详情

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

工业嵌入式电源保护实战:eFuse与MCU构建智能电源路径管理

工业嵌入式电源保护实战:eFuse与MCU构建智能电源路径管理 做嵌入式系统设计的人尤其是往工业方向走的同行对“电源路径保护”这六个字应该都不陌生。最近我在做一款工业控制板的电源部分核心方案用的是 TI 的 TPS259483AYWPR 电子保险丝搭配 ST 的 STM32F723ZE 主控。这套组合做下来正好构成一条完整的智能电源路径保护链路TPS259483AYWPR 负责硬件级的快速切断STM32F723ZE 负责状态监控、策略处理和对外上报。这套方案解决的是工业应用里一个很现实的问题负载端一旦出现过压、过流、浪涌或者短路如果只靠普通保险丝要么响应太慢要么烧断后需要人工更换现场维护成本相当高。换成电子保险丝加 MCU 联动之后保护速度能到微秒级而且故障类型、发生时间、恢复过程都能被记录下来故障定位比以前简单很多。这篇文章把我这次做项目时的硬件设计、选型思路、固件逻辑和踩过的坑都整理出来给正在做嵌入式电源保护或者工业产品供电方案的朋友作个参考。1. 为什么需要“智能”电源路径保护1.1 嵌入式与工业应用中电源系统的真实威胁很多做嵌入式开发的同学会把电源设计简化成“稳压芯片输出 OK负载就能正常工作”。其实在工业现场电源路径上的威胁远比实验室里看到的复杂得多。我这次做的是现场设备控制板使用环境是工厂配电柜旁边的金属机箱。实际运行中遇到过几种典型情况第一种是过压。现场接线工人偶尔会把 24V 接到本该是 12V 的输入端或者感性负载继电器、接触器线圈断开瞬间会产生比较高的反向尖峰。如果保护电路只靠稳压芯片前面的电容硬扛一次误接线就可能让后级电路大面积损坏。第二种是浪涌电流。控制板后面带了好几块需要独立供电的传感器板每块板子输入端都放着 100µF 甚至更大的电容。系统上电的一瞬间这些电容充电产生的浪涌电流可能达到好几安培直接冲击前面的电源开关管。第三种是短路。工业现场线缆多磨损、挤压、端子松动都可能造成短路。短路如果不及时断开线束会发热绝缘层会熔化甚至会引燃周围可燃物——这些问题不是靠“加个保险丝”就能完全解决的。普通保险丝能熔断但它熔断需要时间且熔断以后需要人工换故障响应和恢复都非常被动。这些问题的共同点是故障发生的位置很随机故障形态很多样但后果都非常严重。如果只是给电源加保护但保护动作之后系统不知道发生了什么、不知道要不要恢复、也不知道该向谁汇报这在工业场景里等于没有保护。1.2 传统保护方案为什么不够用早期做这类电源保护最常见的方案是玻璃管保险丝、自恢复保险丝PTC、或者自己用 MOSFET 搭一个电子开关。玻璃管保险丝便宜、简单在很多老产品里至今还在用。但它的缺点非常明显响应速度取决于过流倍数过流 1.5 倍时可能要几十秒甚至几分钟才熔断这段时间后级电路可能已经损坏了。而且熔断后必须人工更换没人值守的现场设备只能停工等待维护。自恢复保险丝PTC在消费类产品里用得比较多它的优势是能够自动恢复不需要更换。但 PTC 是靠温度动作的对环境的温度依赖性很强同一颗 PTC 在 25℃ 和 70℃ 环境下的动作电流差异很大。而且 PTC 动作后的漏电流也不为零在要求严格断电的工业安全场景里并不理想。此外PTC 的阻抗很少参与产品全生命周期的精确核算反复动作后会老化一致性也比较差。还有一类是把 P-MOSFET 和驱动电路组合成电子开关的方案。这种方案灵活性高成本可控但要做到过流保护就得加检流电阻和比较器要做到过压保护就得加相应的分压采样电路。分立元件一多保护阈值、响应时间的一致性就变得很难控制批量生产时每一批的表现都有差异而且一旦发生短路分立元件组成的保护电路自身的响应速度往往是瓶颈。传统方案还有一个通病保护完了就完了没有信息输出。设备为什么断电、是什么原因导致断电、故障发生在哪个电源轨上这些信息对工业现场的设备维护和远程诊断非常关键。没有故障记录的保护电路本质上是一个“黑盒”。这也是我这次最终选择 eFuse 加 MCU 的最根本原因。1.3 电子保险丝eFuse带来的思路转变电子保险丝简称 eFuse本质是一颗内部集成功率 MOSFET、限流比较器、过压比较器和故障控制逻辑的保护芯片。它不再是一次性元件也不是靠热效应动作而是靠半导体开关在微秒级时间内完成通断控制。和传统方案相比eFuse 有几个明显的优势一是响应够快。大多数 eFuse 在发生过流或者短路时几百纳秒到几微秒就能把 MOSFET 关断这个速度是普通熔断器做不到的。对于工业设备里那些精贵的 FPGA、传感器、通信模块来说快速切断意味着硬件损坏风险大幅下降。二是参数可配置。电流限制值可以通过外部电阻或者寄存器来设定过压阈值也可以通过分压电阻调整。同一个电路板改几颗电阻或者写一个寄存器就能适配 12V、24V、48V 不同电压等级的供电系统这比重新设计一版分立保护电路灵活得多。三是有状态输出信号。典型的 eFuse 会提供故障指示引脚过流、过压发生后引脚电平会变化。把这个信号接到 MCU 的中断引脚上MCU 就能立刻感知到下端供电异常进而执行关机程序、记录日志、上报消息。这种软硬件协同的闭环才是工业应用真正需要的智能电源路径保护。2. 核心器件拆解TPS259483AYWPR 到底是什么2.1 一颗 eFuse 的内部组成和定位TPS259483AYWPR 是 TI TPS25948 系列中的一款电子保险丝属于电源路径保护和热插拔控制类器件。这类器件通常集成在系统前端位于电源输入接口和后级 DC/DC 之间起到“看门”的作用。从内部结构来看一颗 eFuse 通常包含一个功率 MOSFET 作为主开关、电流采样和限流电路、输入过压检测电路、电压上升斜率控制电路、欠压锁定电路以及故障逻辑输出。有些型号还支持可编程的电流限制、可编程的输出电压斜率、甚至带有电流监视输出方便 MCU 实时读取负载电流。TPS25948 系列给我的第一印象是集成度非常高。以前做保护电路需要好几个分立元件配合现在一颗芯片就能完成上电时限制浪涌电流正常工作时提供低阻抗通路故障时快速切断并且把状态信号送给 MCU。这颗芯片本身的导通电阻很低在不需要散热片的情况下也能承受几安培的持续电流。这类芯片在工业应用里的定位非常明确它不是替代后级的 DC/DC 稳压器而是在 DC/DC 之前增加一道安全屏障让后端电路在执行各自功能的同时不需要担心瞬态故障。我拿到 TPS259483AYWPR 对应的评估板和手册时第一时间看的就是它的电流限制精度和响应时间。工业场景里电流限制如果偏差太大设计裕量就会很难定限制值设得太松后面电路可能扛不住设得太紧负载正常工作时的电流尖峰又会触发误动作。好在这类 eFuse 的限流精度比分立方案高得多而且可以通过软件或者外部电阻校准这是它比传统 MOSFET 方案强很多的地方。2.2 过压、过流、浪涌限制是如何工作的TPS259483AYWPR 这类 eFuse 的核心工作逻辑可以用一句话概括它持续监测输入电压和输出电流一旦发现异常就立即切断内部 MOSFET同时通过故障引脚上报。过压保护通常是靠输入电压采样。芯片内部的比较器会把输入电压分压后的反馈值与内部基准电压比较当输入电压超过设定的过压阈值时MOSFET 会在很短的时间内被关断。过压阈值一般通过外部 OVP 分压电阻来设定选择不同的分压比就能适配不同的耐压需求。过流保护则是通过内部电流采样来实现。eFuse 内部有一个采样 FET 或者采样电阻实时获取流经主 MOSFET 的电流。当电流超过限流设定值时芯片会进入限流模式主 MOSFET 进入线性区控制输出电流不再继续上升。如果电流继续增大到超限状态持续一段时间或者短路电流大到一定程度芯片就会直接关断输出。浪涌电流限制是 eFuse 非常关键的优点。系统上电瞬间后端电容相当于短路如果没有限制输入电源会被瞬间拉低还可能烧坏连接器。eFuse 通过控制内部 MOSFET 的栅极电压上升速率让输出电压按设定的斜率逐渐建立从而把浪涌电流限制在一个可控范围内。这个特性有点像软启动但它比软启动更精确上升斜率可以通过外部电容或者寄存器配置不同负载可以设置不同的启动速度。我实际测试时发现同样一块后端带 470µF 电容的板子不加斜率控制时上电峰值电流超过 8A把斜率调缓之后峰值电流能控制在 2A 以内效果立竿见影。2.3 TPS259483 选型与数据手册关键页型号里的“AYWPR”后缀对应的是具体封装和温标。对于工业应用我个人一般优先关注数据手册里的几个关键页而不是只看首页的 title 列表。第一是绝对最大额定值确认输入电压范围是否符合系统母线电压。有些工业设备标称 24V 输入实际可能瞬间到 30V 以上如果输入电压范围不够前面还要加 TVS 管或者附加降压措施。第二是导通电阻 RDS(on)。这个参数直接决定正常工作时芯片自身的功耗。比如负载电流 2A、RDS(on) 为 50mΩ芯片上的功耗就是 0.05Ω×2A×2A0.2W。听起来不大但在密封机箱里如果长期运行0.2W 的温升也会影响可靠性。负载电流更大的场景里RDS(on) 的影响会更明显。第三是限流精度和响应时间。工业设计需要知道设定限流值的实际误差范围以便确定保护阈值和后级电路的耐受能力之间的安全距离。响应时间则决定了在短路瞬间后级器件能承受多长的大电流冲击。第四是故障恢复模式。有的 eFuse 发生故障后会自动重试有的会锁存直到断电重启。TPS25948 系列的不同型号在这一点上有所差异。设计时必须想清楚现场设备发生瞬态过流后我是希望系统自动恢复还是希望保持关断等待人工排查如果设备处于无人值守环境自动重试可以快速恢复业务但在短路故障未排除时反复重试反而可能造成二次损害。通常我会把自动重试次数和间隔放在 MCU 侧来实现让 MCU 根据故障记录决定要不要重新开启电源。2.4 需要注意的选型歧义与误区很多人会把 eFuse 和“可恢复保险丝”划等号这是一个需要纠正的认知。eFuse 是靠半导体开关工作的主动保护器件它不仅仅是“断了还能恢复”更核心的是它提供了可编程、可监测、可通信的机制。实际项目中eFuse 更像是“一个可以远程控制的智能电源开关”而 PTC 只是一个被动电路元件。另外一个容易混淆的点是 eFuse 和后级负载开关的关系。eFuse 不是拿来替代 MOS 管负载开关的。负载开关通常只是普通通断不承担精密的过流过压保护。而 eFuse 集成了检测和保护功能。在做系统架构时我会把 eFuse 放在主电源入口把负载开关放在各个分路二者配合使用而非二选一。还有一点TPS25948 系列里不同后缀型号的配置能力不完全一样。有些型号支持通过 I2C/SMBus 动态读取故障寄存器有些型号可能只有硬件引脚配置方式。即使我手里拿到的是同一系列的芯片我也建议各位在画板之前去 TI 官网把对应具体型号的数据手册和勘误表下载下来仔细核对引脚功能。这个动作看起来繁琐但能避免后期改版的痛苦。像封装焊盘的散热设计、引脚是否带有内部上拉、故障引脚默认电平是否适配 MCU 的 IO 配置这些细节如果从规格书上确认清楚调试会顺利很多。3. 主控选型与系统架构STM32F723ZE 的角色3.1 为什么把 STM32F723ZE 放在这个设计里电源保护这个功能本身用一颗几块钱的 MCU 也能做但我最后选了 STM32F723ZE并不只是因为它的硬件性能有多强而是考虑到这个保护系统未来要承担的角色不只是切断电源而是要成为一个能记录、能判断、能联网汇报的嵌入式管理节点。STM32F723ZE 是一颗基于 Cortex-M7 内核的 MCU主频可以跑到 216MHz内部带双 bank Flash、大容量 RAM同时集成了以太网 MAC、多个 UART、CAN、I2C、SPI 以及丰富的高级定时器。M7 内核有比较强的浮点运算能力虽然做电源保护不太需要跑复杂算法但后面如果要通过电流波形估算负载特性、做故障录波这个余量就很有用了。在电源路径保护系统里MCU 的作用更像是一个“决策大脑”它负责解读 eFuse 上报的故障信号、采样电流和电压、管理上电时序、执行恢复策略、保存故障记录然后通过以太网或者串口把状态信息呈报给上层监控系统。我这里选 F723 还有一个很实际的原因它有足够多的独立 IO 和模拟通道。工业控制板通常不止保护一路电源可能同时要监控 12V、5V、3.3V 等多路轨道的状态。如果 IO 数量不够或者 ADC 通道不够就得扩展外部开关或者模拟开关板子复杂度立刻提升。F723ZE 的 LQFP 封装提供了足够的引脚减少了很多扩展电路对单板集成非常友好。3.2 软硬件分工快保护与慢决策电路系统设计最忌讳的是把所有的保护功能都交给软件去判断。软件再快也只是毫秒级的响应但在电源故障面前微秒级的差别就能决定芯片是否烧毁。所以在架构设计阶段我明确了一条原则快速切断由硬件完成策略决策由软件完成。换句话说TPS259483AYWPR 这类 eFuse 是最终快速动作的执行器。短路发生的瞬间eFuse 内部比较器检测到电流异常在几微秒内自主关断 MOSFET这个过程完全不需要软件参与。如果这个步骤要等 MCU 检测到 ADC 值变化再做 GPIO 关断至少需要几个毫秒对后级电路来说已经足够造成损害。STM32F723ZE 的工作重点放在故障发生后的处理。比如MCU 收到 eFuse 的故障中断后会记录当前系统时间、读取电源轨状态、判断是瞬态过流还是持续短路再决定是立即重新上电、延迟重试还是保持锁定。这套逻辑就属于“慢决策”它不需要和多快响应叫板但需要把产品逻辑梳理清楚。很多刚接触嵌入式电源设计的工程师会把“响应速度快”当成 MCU 主频高、循环里检测周期短。但实际上快速切断的活应该交给硬件比较器和 MOSFET。让硬件做硬件该做的事让软件做软件该做的事才是可靠设计的核心。3.3 对外上报以太网、串口与故障日志工业设备里的电源保护如果只在本机板上亮个 LED意义有限。真正有价值的是把故障信息上报到运维平台让现场人员和远程工程师都能看到。STM32F723ZE 内部带有以太网 MAC外部只需搭配一颗 PHY 芯片就能接入工业以太网。我们把 eFuse 的故障记录、当前电压电流数据、保护策略版本号通过 MQTT 或者私有 TCP 协议上传到上位机这样能够做到远程复位、远程调整保护参数。有一次现场反馈设备断电我在办公室里通过日志直接看到是输入过压触发时间点恰好和一台电焊机在附近启动的时间吻合。如果没有故障记录和远程上报这种问题只能现场蹲守排查。串口也是一种必要的保留通道。在开发调试阶段通过串口打印 eFuse 的状态寄存器、中断标志位和重试次数能够快速定位问题。量产之后串口还可以作为现场调试维护口维护人员用一根调试线就能读取设备的故障历史。我把故障日志存储在 STM32F723ZE 的内部 Flash 里。F723 的双 bank Flash 设计比较方便一个 bank 跑程序另一个 bank 存数据不会因为频繁写日志而影响程序存储可靠性。日志里主要记录故障类型、供电电压、负载电流、环境温度如果有温度传感器、发生时间。这些数据累积多了以后可以做简单的趋势分析比如判断某个传感器板的漏电流是不是在慢慢变大从而提前更换部件避免突发故障。4. 硬件设计与实测要点4.1 最小保护电路与外围器件计算TPS259483AYWPR 的外围电路不算复杂但每颗阻容都不能随便选。以我的 12V 输入母线为例介绍一下外围参数是怎么定的。首先是输入端的电容。输入端建议放置一个 10µF 陶瓷电容和一个 100µF 电解电容或钽电容。陶瓷电容负责滤除高频噪声电解电容负责吸收来自线缆的电感能量。输入电容太小eFuse 快速关断瞬间会产生很大的电压尖峰可能击穿芯片输入电容太大上电瞬间对上游电源的浪涌冲击又会变大需要在系统中权衡。然后是输出端的电容。输出电容的取值需要和 eFuse 的浪涌控制配合。就像前面说到的eFuse 会通过控制输出电压斜率来限制浪涌电流如果输出电容很大实际流过的浪涌电流依然会很大。所以设计时我会按公式估算一下如果输出电压斜率设定为 0.5V/ms输出电压 12V那么电压建立时间大约 24ms输出电容 470µF 时浪涌电流大约 12V/24ms×470µF0.235A这个值在可接受范围内。如果斜率设得太快或者输出电容没通知到设计里上电瞬间就可能误触发限流。电流限制值的设定需要根据后端最大负载电流来定。一般我会给正常工作电流留出 1.5 到 2 倍裕量。比如后级最大工作电流 2A限流值我会设定在 3A 到 4A 附近。设定方式要看具体型号是外部电阻还是寄存器设置外部电阻的精度会直接影响限流精度所以我会选择 1% 精度的电阻并且注意走线到芯片的引脚要短避免引入额外电阻。过压保护阈值的设定同样要靠分压电阻。假设系统允许输入最高 13.5V超过就关闭输出那么根据芯片 OVP 引脚内部基准电压以手册为准反推分压电阻比。先确定一个合适的流过分压电阻的电流比如 100µA 左右然后求上分压电阻和下分压电阻的值。这个计算在手册里一般有计算公式但实际选电阻时要兼顾输入漏电流的影响必要时在分压点并联一个小电容来滤除高频毛刺防止误触发过压保护。4.2 MCU 与 eFuse 接口设计TPS259483AYWPR 和 STM32F723ZE 之间我实际用到的接口主要有这几类。第一类是使能信号 EN。MCU 的 GPIO 通过一颗电阻连接到 eFuse 的 EN 引脚控制电源通道的打开和关闭。这个引脚在系统初始化阶段就会被操作比如上电先等各路电压稳定再依次打开受控电源轨。要注意 EN 引脚的电平范围和 MCU GPIO 的电平是否匹配如果 eFuse 的 EN 阈值比较高可能需要用三极管或者 MOSFET 做电平转换。第二类是故障输出 FLT/INT。eFuse 在发生过流、过压、超温等故障时会把故障引脚拉低或拉高具体看型号。我把这个引脚连接到 STM32F723ZE 的一个 EXTI 外部中断输入启用下降沿触发。硬件上注意 FLT 引脚如果有内部上拉就不需要再加大阻上拉如果没有要根据漏电流选择合适的上拉电阻保证静态电平可靠。第三类是可选的模拟量采样用于进一步掌握电源健康状况。如果芯片提供电流镜像输出IMON或者电压分压后输出我可以把这些模拟信号接到 F723 的 ADC 通道定时读取负载电流和输入电压。ADC 采样不需要太高的频率100Hz 左右就够用。我实际把 IMON 接到一个 1kΩ 电阻到地用 ADC 读取电阻上的电压换算成电流后形成一条实时曲线。这个数据对判断负载状态非常有用。第四类是通信接口如果型号支持 I2C/SMBus那么 SCL/SDA 需要接上拉电阻接入 MCU 的对应 I2C 外设。通过 I2C 可以读取更详细的故障状态寄存器甚至动态修改限流值。这个能力属于锦上添花但需要确认总线电平域一致避免通信失败。供电设计上我还要特别提醒一点STM32F723ZE 自身的电源尽量不要串在 eFuse 的受保护输出后面。有一次样机调试我把 MCU 供电也放在 eFuse 后面结果 eFuse 因负载短路保护关断后MCU 直接掉电故障记录也写不了整个系统成了一个死循环。后来改成 MCU 由前级独立电源供电即使后端保护动作主控依然能保持工作记录故障并上报。4.3 PCB 布局与热设计经验电源路径保护芯片的 PCB 布局和普通逻辑芯片完全不同它要处理的是功率电流。我这次画板时踩过一些坑总结下来有几条经验值得分享。第一功率走线要宽、要短。eFuse 的输入和输出引脚走线应按电流大小计算铜皮宽度。以 3A 电流为例1oz 铜厚下走线宽度至少需要 2mm 以上如果板子空间允许我会直接用铺铜加宽。走线太窄不仅会发热还会引入额外的线路压降导致输出电压比预期低。第二散热焊盘的处理非常关键。这类带功率焊盘的芯片底部通常有大焊盘设计时要通过多个过孔连接到背面或内层的地平面帮助散热。过孔数量不能太少孔径也不能太小。我一般会在功率焊盘区域放置 8 到 12 个 0.3mm 的过孔并用铜皮填充连接让热量尽快散出去。之前有一版过孔太少芯片在持续 2A 负载下温度明显偏高后来补过孔后温度下降了十几度。第三电流设定电阻和分压电阻要靠近芯片引脚放置走线要尽量短。这个细节经常被忽略。因为这些电阻的值决定保护阈值如果走线过长引入寄生电感或寄生电容阈值会变得不稳定甚至在干扰下出现误动作。分压电阻的分压点附近加一个小电容滤波能够提高抗干扰能力。第四故障信号线不能和大电流走线平行。FLT 信号本质上是状态输出抗干扰能力有限。如果 PCB 上让故障信号线与输入输出功率线长距离并行功率线上快速变化的电流会产生耦合噪声导致 MCU 收到虚假故障中断。我处理的时候是把 FLT 走线远离功率区必要时加一个 100pF 到 1nF 的滤波电容到地。第五接地要统一规划。输入地、输出地、MCU 地要作为整体铺铜处理不要出现细长地线连接。有一个实际项目里因为地线回路阻抗过大eFuse 关断瞬间输出地电位被抬高导致 MCU 复位后来通过加大接地铜皮和增加去耦电容解决。对于电源设计地平面是否完整会直接影响整体稳定性。5. 固件实现从“断一下”到“一套策略”5.1 初始化、自检与运行状态机硬件焊好之后固件要做的事绝不是“检测到故障就关断”这么简单。我建议把电源路径管理做成一个独立的任务采用状态机模型来管理。初始化阶段MCU 要做的事包括初始化 GPIO、配置外部中断、初始化 ADC、初始化日志存储区、配置通信接口。然后执行一次上电自检检查 eFuse 的状态引脚电平、读取电源电压采样值确认没有异常后再打开使能信号让 eFuse 后端电源缓慢建立。我设计的状态机分为四个状态正常运行态、故障处理态、重试等待态、锁存关断态。正常运行态下MCU 以低频轮询方式读取电压、电流采样一旦收到故障中断就进入故障处理态。故障处理态下MCU 记录故障标志和时间如果故障是短时过流并且系统允许则进入重试等待态如果故障持续或者次数超限就进入锁存关断态。锁存关断态需要有操作员或者上位机下发命令才能恢复避免在故障未排除时反复冲击系统。这种状态机的价值在于把模糊的判断过程清晰地拆解成可追踪的状态切换。每一状态切换都可以记录日志排查问题时只要看日志就知道系统经历了什么。5.2 故障中断处理与去抖中断服务函数里不能做太复杂的操作否则会影响系统其他任务的实时性。我的做法是外部中断回调函数里只做两件事——置一个全局故障标志记录当前系统 tick 作为故障时间戳然后立刻退出中断。真正的故障处理放到主循环或者低优先级任务里执行。这个做法能避免一种常见问题中断函数里调用 I2C 读取 eFuse 寄存器结果 I2C 通信本身耗时较长且通信失败会卡在中断里影响系统运行。故障信号在硬件上虽然经过滤波但软件去抖我仍然保留。收到中断后如果在一定时间内比如 10ms故障引脚仍然保持有效电平才确认是真实故障如果只是几微秒的毛刺说明可能是干扰不需要进入保护策略。这个软件去抖逻辑和按键消抖思路类似但时间常数更短。下面是故障中断部分的典型代码结构#define EFUSE_FAULT_GPIO_PORT GPIOE #define EFUSE_FAULT_GPIO_PIN GPIO_PIN_5 static volatile uint8_t efuse_fault_pending 0; static volatile uint32_t efuse_fault_timestamp 0; void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) { if (GPIO_Pin EFUSE_FAULT_GPIO_PIN) { efuse_fault_pending 1; efuse_fault_timestamp HAL_GetTick(); } }这段代码里我把时间戳放在中断里记录是因为中断触发时的系统时间最有价值如果等到主循环处理时再去读时间会引入几百微秒到几毫秒的误差。虽然这个误差对大多数诊断应用无所谓但保持时间戳的准确性是个好习惯。去抖确认之后再读取 ADC 采样值和电流镜像值判断故障的性质。如果当前电流远高于限流值基本上是短路如果电流略微超限可能是负载瞬时冲击如果输入电压超过阈值则是过压故障。不同的判断结果对应不同的恢复策略。5.3 动态调节保护参数在传统保护电路里保护阈值是固定的想改只能换电阻。但用了 MCU 加可配置 eFuse 之后保护参数可以做成动态调节的。一个很典型的场景是电机或者电磁铁负载。这类负载在启动瞬间需要的电流远大于稳态电流。如果我把过流保护阈值设置成“稳态电流 1.2 倍”启动瞬间就会频繁误保护如果设置成“启动电流的 2 倍”发生真实短路时电流可能已经超出危险范围。我的处理思路是让系统知道当前处于启动阶段还是稳态阶段。MCU 在使能 eFuse 输出之前先把限流值调高允许负载正常启动启动完成之后再调低限流限制进入严格的保护模式。如果型号支持通过 I2C 修改限流寄存器这个动作在代码里就是一次写操作如果需要通过外部电阻设定那么可以并联不同电阻通过 GPIO 切换也可以用数字电位器实现。除了限流值过压阈值也可以动态调整。比如设备在不同工作模式下允许的输入电压范围不同MCU 可以根据当前模式重新配置 OVP 阈值。不过要注意动态配置保护参数必须确认写入成功并读回校验否则配置失败会造成保护盲区。我一般会在配置后读取寄存器回读比对不一致则报配置失败并且不打开输出。动态调节参数还带来一个好处可以把保护逻辑做成可配置项通过远程下发的参数表来调整而不用修改固件。这样产品出厂后现场工程师只要通过串口助手或者上位机修改几项参数就能适配不同负载给项目验收和后期维护带来很大便利。5.4 故障记录和远程上报故障记录听起来简单但真正在 STM32F723ZE 上实现的时候要考虑几个实际问题。第一个问题是写 Flash 的次数。内部 Flash 是有擦写寿命的一般几千到一万次如果每次故障都完整擦写一个扇区可能没几个月 Flash 就废了。我的方案是在 RAM 里先累积故障记录比如每 10 条或者每条记录都缓存在内存中然后分批写入 Flash或者使用环形缓冲区只更新最新日志。另一个更稳妥的办法是把日志通过串口或以太网直接上报Flash 中只保留最近几条关键记录。第二个问题是故障记录的数据结构。我定义了一个固定长度的结构体包含故障编号、故障类型、时间戳、电压采样值、电流采样值、恢复策略。写入时按固定偏移覆盖最旧记录这样实现简单读取也方便。第三个问题是上报通道选择。调试阶段用串口最方便量产阶段则以以太网为主。STM32F723ZE 跑一个轻量 TCP 协议栈完全没问题我会在程序中创建一个独立的上报任务故障发生后主动推送一条告警消息。配上简单的时间戳和故障描述运维平台就能实时弹出告警。typedef struct { uint32_t timestamp; uint8_t fault_type; uint16_t vbus_mv; uint16_t iload_ma; uint8_t action; } power_fault_log_t;上面这个结构体是故障记录的一个简化版。实际使用时字段还需要根据项目需要增减比如增加环境温度、运行模式、电源轨编号等。结构体不要做太大每条记录尽量控制在几十字节以内方便存储和持久化。6. 常见问题与现场排查技巧6.1 典型故障现象排查表我在调试这套电源保护方案时遇到过不少看起来“玄学”的问题。把现象、可能原因和解决办法整理成表格方便大家对照排查现象可能原因解决办法上电瞬间就保护无法正常启动输出电容过大或者浪涌斜率设置太快调整 eFuse 斜率参数增大启动时间正常负载下频繁误保护电流限制值留的裕量不足用示波器抓取稳态与峰值电流重新选取限流值故障信号抖动MCU 频繁收到中断干扰耦合到 FLT 走线或者输入电压毛刺检查 PCB 布线给 FLT 加滤波电容必要时软件去抖带载后芯片发热严重RDS(on) 功耗过大或散热焊盘过孔不足降低限流值、增加散热过孔、选择更低导通电阻型号短路断开后无法自动恢复锁存模式未按预期配置检查恢复逻辑确定自动重试次数和间隔设定电流限制不准确设定电阻精度不够或走线寄生阻值大使用 1% 精度电阻尽量短走线输入电压正常却触发 OVPOVP 分压电阻选值错误或分压点受干扰复核分压计算分压点加高频滤波电容远程无法读取故障日志以太网配置错误或主控掉电确认主控供电不经过受保护通道检查网络参数这张表基本覆盖了我实际调试中遇到的绝大多数问题。看起来都不复杂但每项背后都是实打实踩过的坑。6.2 实测波形分析与排查思路排查电源保护问题光靠万用表远远不够示波器是必备工具。我调试这套电路时示波器一般接三路信号输入电压、输出电压、故障指示信号。第一步看故障发生瞬间的波形顺序。如果是短路造成的保护往往能看到输出电流快速上升然后故障信号拉低输出电压跌落。如果输入电压上出现很高尖峰接着才看到故障信号那很可能是输入端受到了浪涌干扰而不是负载短路。第二步看输出电压的下降斜率。如果输出电压在故障后迅速掉到零说明 MOSFET 被快速关断如果输出掉电很慢则可能是限流模式下 MOSFET 线性工作了一段时间回路里还有能量在释放。这个东西会直接决定后级电路是否还能继续工作一段时间。第三步是看恢复尝试。很多 eFuse 在自动重试时会有规律的通断波形通过观察重试周期和占空比可以大致判断芯片内部逻辑是否符合预期。然后用 MCU 打日志功能把每次故障发生的时间戳和恢复结果记录下来看有没有出现重试成功、重试失败交替的情况。这里想特别提一点测量时要采用短接地弹簧探头或者差分探头不要用长夹子线直接勾引脚。电源开关节点的高速电流变化会让长接地线形成一个天线示波器捕捉到的波形可能夹杂大量振铃影响判断。我第一次调试时用了一个长夹子接地线看到输出电压波形上有 200MHz 左右的振荡差点以为是芯片环路不稳定后来换了探头接地方式才发现是测量假象。6.3 工业现场电磁干扰下的额外防护工业现场的电磁环境比实验室恶劣得多。变频器、伺服驱动器、接触器通断都是常见的干扰源。eFuse 芯片虽然内部有保护逻辑但如果输入端的电磁干扰过高仍可能导致误触发或者芯片损伤。我在设计中加入了几道防线。第一道在输入端靠近 eFuse 输入引脚放置 TVS 管把过高的瞬态电压钳位在安全范围。TVS 的钳位电压选择很重要既不能太低否则正常电压波动都会触发导通也不能太高否则起不到保护作用。通常选择钳位电压高于系统最大稳态电压 20% 到 30% 左右的规格。第二道是输入滤波。在输入端放一个共模电感配合 X/Y 电容来做 EMI 滤波可以显著降低进入芯片的高频干扰。这个在实验室阶段可以不加但到工业现场测试时如果出现误保护优先考虑添加。第三道是接地处理。机箱接地、板卡地、电源地要形成一个低阻抗路径。我曾经遇到一个项目故障信号频繁触发但最后发现不是 eFuse 的问题而是板卡地和机箱之间存在较大的共模电压差导致输入输出之间产生额外电流。重新整理接地以后问题消失。第四道是让 MCU 具备抗电源抖动的能力。STM32F723ZE 的供电要加足够容量的去耦电容并且独立于受保护电源轨。否则在 eFuse 动作或重启瞬间MCU 会因为电源瞬间跌落而复位状态记录全部丢失。写在最后的个人体会电源路径保护这件事表面上看是硬件问题但真正把它做好的时候你会发现自己需要把硬件选型、软件状态机、故障记录、远程通信全部打通。我这次的方案里TPS259483AYWPR 负责“快”在几微秒内切断故障STM32F723ZE 负责“懂”理解发生了什么、该以什么策略应对、怎么把信息传递出去。如果让我再做一次这个项目我会把保护策略做得比现在更早期模块化。不同客户现场对保护行为的要求差别很大有的希望故障自动恢复有的希望绝对锁死有的需要限制特定能量阈值。把这些策略做成可配置表通过通信接口下发以后产品适配新场景就不需要改固件了。还有一个小技巧每块板子在出厂测试阶段可以用电子负载做一次故障注入把保护动作阈值和响应时间记录到日志里形成出厂基线数据。后期设备到现场出现问题把现场日志和出厂基线对比能快速判断是器件老化还是外部诱因。这套思路我感觉在接下来的工业产品项目中会越来越有价值。
返回列表