ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

eFuse与STM32联动:工业12V电源路径保护方案设计

eFuse与STM32联动:工业12V电源路径保护方案设计 做嵌入式项目多了之后你会发现板上最容易翻车的从来不是逻辑代码而是电源。工业设备尤其如此12V/24V 背板上插着好几块负载板热插拔、电机启动、线缆磨破短路任何一个工况都能让整机重启甚至烧板。这篇要聊的就是我用 TI 的 eFuse 器件 TPS259483AYWPR 加上 STM32F207ZG给 12V 工业供电轨做的一套电源路径保护方案。以前我习惯用保险丝加 TVS 的土办法但保险丝一炸就要停机换料故障原因也看不出来。换成 eFuse 和 MCU 联动之后整个链路从“被动挡刀”变成了“可监控、可控制、可恢复”的数字闸门。下面把选型、参数计算、电路设计、固件联动和现场排障的完整过程写出来给正在做嵌入式电源管理和工业控制板卡的朋友作参考。1. 为什么这条电源路径需要“数字闸门”1.1 工业现场的电源乱象远比你想象的严重先把问题说透。我们常说的电源路径保护指的是从电源输入端到负载之间这段供电链路。你手里的板子无论前端输入是从 AC-DC 电源模块出来还是从背板 12V 总线上取电只要中间没有过流、过压、反向和浪涌这几道关后面所有电路都是在裸奔。我这边最典型的场景是这样的机柜里一个 12V 电源模块带 8 个槽位每个槽位插一块负载板整机允许热插拔。热插拔的瞬间负载板输入端那一堆滤波电容要充电插头接触电阻还在抖动浪涌电流轻轻松松冲到十几安培。背板连接器触点就那么几平方毫米瞬间电流一大会拉弧、烧触点。这还没算负载板自己出故障短路、外部检修时接错线导致反接、以及电源模块在满载纹波下电压跌到 10V 以下这些情况。任何一个发生要么整柜断电要么把 DC-DC 模块烧掉。所以工业上对这个链路的要求从来不是“能通电”就行而是要在微秒到毫秒级的时间内切断故障并且在故障消失后能自动或者按策略恢复。这也是为什么现在越来越多的设计把 eFuse 和热插拔控制器放在电源入口而不是只靠一颗熔断器。1.2 eFuse 和传统保险丝完全是两种思路传统保险丝靠熔化来断开本质是一次性器件电流越大断得越快但动作时间和过流倍数之间是非线性关系没法做到精确。自恢复保险丝 PTC 虽然能恢复但响应速度慢动作时还发热精度也一般。TVS 只管过压不管过流样样通样样松。eFuse 的思路完全不同内部用一个功率 MOSFET 当电子开关靠电流采样和比较器实时监控流过 MOSFET 的电流一旦超过设定阈值在几微秒内把 MOSFET 关断或者把电流钳位在设定值。和保险丝比它的动作时间快了几个数量级阈值可以精确设定可以重复动作而且还能把“现在发生了什么故障”通过状态引脚告诉你。这也是我选它做电源入口的第一理由它不只是保护负载也保护上一级的电源和连接器。1.3 STM32F207ZG 在这里的角色定位光有一颗 eFuse 只能“保护”还不能“管理”。TPS259483AYWPR 这样的器件自身有 FLT、PG 状态输出也能用外部电阻设定保护阈值但它没有大脑不会记录故障历史不会自动调整策略也无法通知上层系统“我这路电出了问题”。这时候就需要一颗 MCU 来接管。我用的是 STM32F207ZG。这颗属于 STM32F2 系列Cortex-M3 内核跑到 120MHzFlash 有 1MB、SRAM 超过 128KB在速率和外设数量上比 F1 系列宽裕不少。关键是它有三路 ADC、多路 UART/SPI/I2C还有以太网和 CAN一个控制器就能同时完成电源状态采集、故障事件记录、和上层系统联网上报这几件事。对于工业槽位这种“一路电源管一筐板卡”的场景主控的通信接口丰富程度直接决定了系统能做到什么程度。2. TPS259483AYWPR 关键特性与参数设计2.1 内部结构和引脚分工先看器件本身。TPS259483AYWPR 属于 TI 的 TPS25948 系列是集成 MOSFET 的 eFuse输入电压范围按手册典型在 4.5V 到 16V 左右适合 5V、12V 这类常见工业供电轨。YWP 后缀是小封装具体引脚间距和封装尺寸以订单型号对应的数据手册为准反正比常规 SOIC 小得多打样焊接时要有心理准备。这类 eFuse 的引脚分工通常很清晰VIN 和 VOUT 分别接输入输出EN/UVLO 引脚接分压电阻用来设定开启电压OVP 引脚接另一个分压电阻设定过压阈值ILIM 引脚接电阻设定电流限制dV/dt也叫 SS引脚接电容设定软启动斜率PG 是电源正常开漏输出FLT 是故障开漏输出。具体到 TPS259483 这颗引脚定义以官方数据手册为准但思路是一致的。内部结构可以理解为一颗带电流采样的大功率 MOSFET、一个误差比较器、一组电压比较器、一个斜坡发生器还有逻辑控制和驱动电路。MOSFET 是串联在电源路径上的电流流过它时会产生压降内部通过采样电路把电流转换成电压信号和 ILIM 设定电压比较从而实现精准限流。这和你用分立器件搭“电阻采样比较器MOSFET 开关”的原理是一回事只是人家把精度、速度和可靠性都做到位了。2.2 电流限制电阻 RILIM 的计算方法这是整个设计里我最先算的参数。电流限制值设多高直接决定系统的鲁棒性。设太低负载正常工作时瞬时电流一大就误触发设太高真的短路时保护效果打折。数据手册通常会给出 ILIM 与 RILIM 的关系常见形式是 I_LIM K / R_ILIM。以这种形式为例假如手册给出的 K 在 1100 左右单位按 mA 和 kΩ 算我来演示一下计算过程设负载正常工作最大电流为 800mA留 30% 裕量电流限制目标值取 1.2A那么 R_ILIM K / I_LIM 1100 / 1200 ≈ 0.917kΩ取标称值 910Ω。如果你有电机、加热丝这类启动电流大的负载还得另算比如瞬时启动电流 3A 持续 200ms那就把限制值放到 4A 以上再配合软启动去抑制浪涌。我做了一个示例表实际设计时请以你手上的型号数据手册为准目标限流值RILIM 估算K≈1100 示例标称值推荐0.5A2.2kΩ2.2kΩ1.0A1.1kΩ1.1kΩ1.5A733Ω750Ω2.0A550Ω560Ω3.0A367Ω360Ω这里特别提醒一句RILIM 是精密相关引脚电阻精度最好选 1% 的薄膜电阻走线要短并且要从电阻端直接回到器件 GND不要和负载大电流路径共用一条地线否则大电流在地线上产生的压降会让限流点漂移。2.3 软启动电容决定浪涌电流如果说 RILIM 决定“能过大电流”那 dV/dt 电容决定“大电流以多快的速度出现”。软启动的本质是把输出从 0V 爬升到 12V 这个过程拉长把容性负载的充电电流限制住。公式很简单I_inrush C_load × dV/dt。举个例子负载板输入端有 100µF 的电解电容和若干陶瓷电容如果你不控制软启动输入 12V 一上来初始充电电流理论上可以达到安培到几十安培。假设我们希望通过软启动把充电电流控制在 1A 左右输出爬升斜率 dV/dt 1A / 100µF 10,000 V/s也就是 12V 电压用 1.2ms 爬完。这个斜率通过 dV/dt 引脚上的电容设定内部通常是一个恒流源给这个电容充电产生斜坡斜坡时间和电容值基本成正比具体系数看手册方向就是这个方向。实际项目里我习惯的做法是先按负载总电容算一个理论斜率再在示波器上看实际浪涌电流如果 FLT 被触发就把电容往大调一档。这个调参过程很快但能给后续生产环节省下大量误触发投诉。2.4 过压、欠压与反向保护逻辑过压保护和欠压锁定都是靠电阻分压实现的。EN/UVLO 引脚内部有一个参考电压当引脚电压超过这个参考值时器件才允许开启OVP 引脚类似当它检测到输入电压超过设定值时立即关断输出。拿 12V 系统举例。假设 EN/UVLO 内部阈值为 1.2V我们想让输入电压低于 9V 时禁止启动高于 9V 才工作那分压比就是 9V:1.2V。选下拉电阻 10kΩ上拉电阻就是 10k × (9 - 1.2) / 1.2 65kΩ取 64.9kΩ 或者直接用 65kΩ 标称。OVP 同理比如我们设置 15V 断电保护分压比 15:1.2下拉 10kΩ 时上拉取 115kΩ 左右。算完之后记得留一点窗口欠压阈值和过压阈值之间最好有 1V 以上的回差避免输入在临界电压附近波动时反复开关。反向保护这块eFuse 内部结构天然解决了一部分MOSFET 导通时是双向导通的但控制逻辑检测到 VOUT 高于 VIN 时会关断回流路径避免负载端的储能倒灌到输入端。对于 12V 背板这种双电源场景很关键两块板同时供电时要防止互相倒灌。3. 与 STM32F207ZG 的硬件接口与固件联动3.1 最小接线方案我这个项目里STM32F207ZG 和 eFuse 之间的接口不多实际上就 4 根线加一个可选通道FLT 接到 STM32 的一个支持外部中断的 GPIO开漏输出上拉到 3.3V。平时是高电平故障时拉低MCU 用下降沿中断立刻知道出事。PG 接到另一个 GPIO查询方式读取即可不需要中断。ENEN/UVLO接到 STM32 GPIO 或经过三极管/逻辑门控制让 MCU 能主动开关电源路径。注意如果 EN 引脚电压域是 VIN 级别而 STM32 是 3.3V中间最好加电平转换或者用一个 NMOS 拉低控制不要直接怼 3.3V GPIO。如果手上型号支持 I2C/遥测那再加一对 I2C 引脚STM32F207ZG 的 I2C1 主模式跑 400kHz 完全够用可以读输入电压、输出电压、电流、温度等遥测数据。需要说明的是不同批次和具体后缀的 TPS259483 可能带不同功能集合拿到芯片后先确认是否有遥测接口。如果只有 GPIO也一样能完成保护和监控只是拿不到精确的实时电流读数。我把这棵信号关系整理一下信号eFuse 端STM32 端说明FLTFLT 开漏输出GPIO 外部中断下降沿故障触发PGPG 开漏输出GPIO 查询输出电源正常ENEN/UVLOGPIO/电平转换主动通断SCL/SDA遥测接口(可选)I2C1 主模式读实时参数ADC_VIN输入电压分压ADC1 通道冗余监控ADC_VOUT输出电压分压ADC2 通道冗余监控3.2 固件状态机从正常到故障再到恢复固件这块我建议不要写成那种“中断里复位一下”的草台逻辑而是做一个明确的状态机。状态分为正常、故障、等待重试、永久关闭四态typedef enum { PWR_IDLE, // 上电初始化中 PWR_NORMAL, // 正常工作 PWR_FAULT_ACTIVE, // FAULT 拉低故障确认 PWR_RETRY_WAIT, // 等待重试时间 PWR_LATCH_OFF // 重试次数用尽锁死 } pwr_state_t;状态迁移逻辑大致是这样初始化后检查 PGPG 为高且无 FLT进 NORMAL。收到 FLT 下降沿中断先做一次软件消抖比如读电平连续 10 次都是低才确认进入 FAULT_ACTIVE。在 FAULT_ACTIVE 里关断 EN记录故障时间戳然后切到 RETRY_WAIT等待比如 1 秒。重试时打开 EN如果 FLT 又拉低重试计数加一连续重试 3 次都失败进入 LATCH_OFFEN 保持关闭只能通过外部命令或人工上电复位来恢复。这个状态机最大的好处是防止“故障-恢复-再故障”的震荡把系统搞死。工业现场偶发的瞬时短路通常一次重试就恢复了真短路则会被锁死避免在烧毁的边缘反复试探。3.3 故障记录与上报机制STM32F207ZG 有 1MB Flash拿一部分做故障日志毫无压力。每次事件至少记录事件类型过流、过压、欠压、过温、不确定、发生时的累计运行时间、FLT 持续时间、重试结果。为了延寿日志不直接擦写主 Flash 的同一个扇区而是在驱动层做简单的环形覆盖。上报通道看你的系统有什么。我在项目里同时用了 UART 和以太网UART 输出调试日志给维护口以太网把告警帧发给上位机。代码层面就是一个事件队列状态机每跳变一次就往队列里塞一条记录后台任务负责出队、格式化、发送。这样即使 MCU 因为别的原因复位了上电后也能把上一次的故障记录读出来分析。3.4 用 ADC 给故障诊断加一双眼睛虽然 eFuse 自带 FLT/PG但只有这两个信号时你只知道“坏了”不知道“哪里坏了”。我在 VIN 和 VOUT 上都加了电阻分压引到 STM32F207ZG 的 ADC1、ADC2。F207ZG 的 ADC 是 12 位3MSPS 采样率监控电源绰绰有余。故障时做什么诊断我举个例子FLT 拉低同时 ADC 读到 VIN 正常 12V、VOUT 掉到接近 0V那大概率是过流或输出短路如果 VIN 也掉下来了那问题可能在前级电源模块或线缆如果 ADC 读到 VIN 远高于 12V那说明触发了 OVP。把这些判断逻辑放在中断里的一个状态确认函数中就能在事件记录里写出具体原因而不是只记一条“FLT occurred”。4. 原理图、布局与实测记录4.1 外围器件怎么选、怎么摆整个电路的外围器件不多但每一颗都有讲究。输入端电容我用的是 100µF 电解加 10µF 陶瓷并联。电解电容负责扛大电流纹波和输入瞬态陶瓷电容负责高频去耦。注意陶瓷电容放在 eFuse 的 VIN 引脚旁边走线越短越好否则引脚寄生电感会让片上电压在开关瞬间振荡。输出端电容主要考虑负载板的实际需求但也要算清楚它对浪涌电流的贡献。我在项目里测过一块负载板输入端挂了两个 47µF 电解加一堆 100nF/1µF 陶瓷总电容摸到 130µF 左右。按第二节的算法要让浪涌电流控制在 2A 以下软启动时间至少 12V×130µF/2A 780µs那就把 dV/dt 电容选到能给出 1ms 左右斜坡的档位。OVP 和 EN/UVLO 分压电阻我用 1% 精度温漂选 25ppm 或更好。分压节点到引脚走线短一点必要时加一个 1nF 的滤波电容到地防止输入端浪涌时耦合噪声误触发比较器。PCB 布局上最核心的一条原则是大电流路径和小信号采样路径分开。VIN 到 eFuse 的功率输入、eFuse 到负载的功率输出走粗线或铺铜ILIM、OVP、EN 这些采样线从器件的引脚出来之后立即走自己的细线不要在功率铜箔下面穿过。GND 用星型连接输入电容地、输出电容地、负载回流地、eFuse 的 GND 引脚先在一点汇合再接到系统地这样地弹噪声不会污染采样参考点。4.2 示波器下的软启动与短路波形调试时的标准动作是这样的示波器四个通道分别接 VIN、VOUT、I_IN用电流探头夹输出线或串采样电阻、FLT。第一次上电前把直流电源限流设在预期值的 150%比如预期正常 2A电源限流先设 3A防止意外烧板。正常的软启动波形应该是VOUT 呈近似线性爬升斜率由 dV/dt 电容决定I_IN 在启动瞬间有一个尖峰峰值等于 C_load × dV/dt然后回落到负载正常工作电流FLT 保持高电平。如果看到启动过程中 FLT 瞬间拉低说明限流值还没超过浪涌电流先别急着调大 RILIM优先把 dV/dt 电容加大让斜坡变缓。短路测试我用电子负载直接打在输出端设置从正常到短路的跳变。理想波形是短路瞬间电流迅速冲到限流点并维持一个平台VOUT 被拉低FLT 在微秒到毫秒级拉低随后 MCU 关断 EN。这里有个细节不要只看 VOUT一定要看电流波形有没有出现振荡。如果电流在限流点附近来回甩通常是限流环路的带宽和 PCB 寄生参数不匹配先检查 ILIM 引脚到地线这一段是否太绕再考虑在 ILIM 引脚并联一个小电容补偿。4.3 热设计与小封装焊接提醒YWP 这种小封装散热主要靠引脚和芯片底部的散热焊盘往 PCB 上传导。我的习惯是芯片正下方铺满过孔阵列连接到内层地和底层铜用作散热通道如果电流长时间接近限流值eFuse 上会有明显的功耗封装的热阻决定了它能扛多久。功耗估算很简单P I × V_DS。假设 2A 电流、MOSFET 导通压降 50mV功耗 100mW不算大但如果是 5A 限流、输入 12V 输出短路MOSFET 在限流状态下承受 12V 压降功耗能到几十瓦这种状态只能靠过温保护及时关断。所以反复做短路测试时同一个板子不要连续轰太多次用热像仪看一眼芯片表面温度超过手册建议的结温范围就停下来冷却再测。焊接 YWP 小封装时我踩过最大的坑是手焊虚焊导致 FLT 脚虚接表现为“时好时坏”。对策很土但有效焊完用放大镜逐个引脚检查再用万用表二极管档量芯片引脚到测试点的连通性。有条件的话直接上回流焊或热风枪配合钢网别相信自己手焊小封装的能力。5. 现场排障实录与经验速查5.1 上电即 FLT 的排查思路这是群里被问最多的问题新的板卡回来一上电 FLT 就拉低根本开不了机。我的排查顺序固定是这样也建议大家按这个顺序来别一上来就怀疑芯片坏了现象可能原因排查动作FLT 一直为低EN 没拉起来 / UVLO 分压不对量 EN 引脚电压对照开启阈值上电瞬间 FLT 闪一下浪涌电流超过限流值加大 dV/dt 电容或调高 ILIMFLT 随负载加重而出现限流值裕量不够测实际负载峰值电流重新算 RILIMFLT 偶发且无规律采样路线受干扰检查 ILIM/OVP 走线加滤波电容FLT 一直为低且 VOUT 为 0焊接虚焊 / 器件损坏引脚连通性检查更换样品复测最容易被忽略的是 EN 引脚的分压电阻规格出了问题导致输入一上电器件就被锁定在关断状态。先量电压再查计算最后才怀疑芯片本体。5.2 输出电容和电流裕量的世纪难题输出电容越大后级供电越稳但启动浪涌越大限流值设得越高短路保护又不那么灵敏。这对矛盾没法绕开只能平衡。我的经验值如果负载板输入端总电容超过 200µF光靠 dV/dt 电容压浪涌已经不太够启动时间会拉到几毫秒这时候可以考虑在 eFuse 输出端先加一个预充电路或者把 dV/dt 电容换成更大的值组合使用。另一个实用技巧是让 STM32 在启动阶段临时把限流值调高如果 RILIM 用固定电阻可以在电阻旁边并一个 MOSFET 开关再并一个电阻MCU 在启动完成前把开关导通等效降低 RILIM启动完成后再关断切回正常限流值。这样兼顾了“启动能起来”和“运行中保护灵敏”。我在后续迭代里用的就是这套实测效果不错。5.3 MCU 意外复位与地弹处理调试过程中遇到过这么个诡异问题短路实验做得很顺利eFuse 保护动作正常但每次短路后的瞬间STM32 偶尔会复位。查了很久问题出在地弹短路瞬间大电流在地线上产生巨大 di/dt数字地和功率地之间的阻抗让 STM32 的地电位被短暂抬升导致内核供电瞬间掉压复位。对策分三层第一布局上把功率地和数字地明确分区最后单点汇合第二STM32 的 VDD 引脚附近放足够容量的去耦电容并且让电源从背板独立一路过来不要串在负载电流路径后面第三如果前后级必须共地考虑用光耦或数字隔离器把 FLT/PG/EN 信号隔开。我最后是布局和去耦都改了一版复位问题再没出现过。5.4 温度对 eFuse 行为的隐藏影响电流检测精度在不同温度下会漂。数据手册会给出电流限制的温漂系数通常在你选型时就要评估设备在 -20℃ 启动浪涌电流特性和常温差多少夏天机柜 60℃ 时限流点又比标称值低多少。我的建议是限流值设计时把温度系数也折进去保证最坏温度下仍然高于负载峰值电流。另外过温保护阈值和热关断恢复有回差器件从过温关断到恢复可重新启动之间有一段时间。如果系统在高温环境反复尝试重试状态机里的重试间隔一定要大于这个恢复时间否则每次重试都会因为芯片还在过热而立即失败。我在固件里把重试等待从 1 秒改成 5 秒后高温环境下的自动恢复成功率明显提升。最后说点实在的。这套方案我自己从前期的立项目标、器件选型、到画板、调固件、打样测试全套走下来前后两个多月踩过的坑比想象中的多但带来的收益也很直接原来靠保险丝的板子故障现场完全靠猜现在靠 eFuse 和 STM32F207ZG 联动每一次保护动作都有记录、有原因、有自动恢复策略。如果你也正在做嵌入式电源保护、工业背板、或者任何“电源路径不能断也不能烧”的应用我强烈建议你先拿一颗 eFuse 加一块手头现成的开发板搭个最小系统验证一下思路很多设计上的问题只有看到真实的波形才会想明白。你第一次上电时记得把直流电源限流先调小一点别问我怎么知道的。
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进