ARTICLE DETAIL

资讯详情

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

eFuse+单片机:构建可监控的工业级电源路径保护方案

eFuse+单片机:构建可监控的工业级电源路径保护方案 做嵌入式硬件这些年谁还没烧过几块板子。尤其是工业现场的设备24V 总线一接错、电机一启停、感性负载一拉闸电源路径上那点事儿就全来了过压浪涌把后级 DCDC 打死限流不够把接插件烧黑上电瞬间的冲击电流把前级电源拉垮。以前大家习惯用保险丝加 TVS 的组合硬扛但保险丝动作慢、不可恢复、阈值不可调调试的时候想复现一次故障都难。后来我把方案换成了TPS259483AYWPR这颗 eFuse 搭配PIC18F86J10单片机做监控整套电源路径的保护才算是真正活了——既能硬件级限流、过压、软启动又能让 MCU 实时读状态、做策略、记故障。这篇文章就把这个组合从选型、计算、画图到调试的完整过程捋一遍适合正在做嵌入式电源保护、工业控制板硬件设计或者想给自己的设备加一道可靠保险丝的朋友参考。1. 为什么要在电源路径上做硬保护需求拆解与器件组合1.1 工业嵌入式设备电源路径的真实痛点先说说我在实际项目里遇到的典型场景。一块工业控制板外部输入是 12V 或 24V 直流电后级接 DCDC 降压成 5V、3.3V 给单片机、传感器、通信芯片供电。听起来很简单但现场的电源环境远没有实验室干净。最常见的是过压浪涌。工厂里大功率设备启停、变频器动作都会在总线上拉出几十伏甚至上百伏的尖峰。如果输入端只放了一个普通的电解电容和 TVSTVS 能把尖峰钳位到一定范围但能量太大时 TVS 自身会烧掉而且 TVS 的钳位电压通常比后级芯片的绝对最大额定值高浪涌还是会有相当一部分灌进后级。另一个典型问题是过流和短路。板子上的接插件被线束短路、后级电源模块损坏、现场接线失误任何一路出问题如果只在总输入端放一个保险丝要么保险丝还没熔断先把 PCB 铜箔烧了要么熔断之后现场人员很难快速更换。还有一个特别容易被忽略的是上电冲击。板子输入端有大容量电解电容上电瞬间充电电流非常大前级开关电源会因此进入过流保护打嗝整个系统反复重启。这些问题的共性是它们都发生在电源路径上而且靠一个保险丝加一个 TVS这种被动器件很难同时解决。核心矛盾在于——传统保护器件不具备可控性。阈值不可调、动作时间不可调、动作之后不可恢复、状态不可上报。于是我开始考虑用半导体方案替代传统熔断器件这就是 eFuse 进入视野的原因。1.2 方案对比为什么选 eFuse 而不是传统保险丝先看一张对比表是我当时选型时给团队做的整理。维度传统玻璃管/贴片保险丝自恢复保险丝PPTC分立 MOSFET 保护电路eFuse 集成电路动作速度慢几十毫秒到秒级很慢秒级到分钟级取决于分立设计微秒到毫秒级触发阈值固定出厂决定固定温漂明显可调但精度差电阻可调精度高可恢复性不可恢复可恢复但需断电冷却可恢复可控恢复状态上报无无电路复杂故障标志输出直接接 MCU软启动能力无无需额外电路集成反接保护需额外二极管无可设计按型号支持看完这张表应该很明显了传统保险丝是一次性消耗品自恢复保险丝是慢半拍的胖子分立 MOSFET 方案能做但电路复杂度高而且就算做了限流和软启动保护和监控的深度还是不如专门的 eFuse 芯片。eFuse 本质上是把功率 MOSFET、采样电阻、控制逻辑和保护电路封装在一起的集成电路它把电源路径保护这件事从搭电路变成配置参数。我当时选TPS259483AYWPR有几个现实原因首先它来自 TI 的 TPS25948x 系列这类 eFuse 在工业市场用得比较多参考设计和应用笔记齐全其次它的输入电压范围覆盖了 12V 和 24V 这两个最常见的工业总线电压且支持可调的过压、欠压、限流、软启动参数最关键的是它带故障输出标志恢复策略可以通过 EN 引脚由外部控制这正好可以和单片机做联动。1.3 PIC18F86J10 的角色定位管软策略的那个很多人有个误区觉得既然 eFuse 集成了这么多保护功能那单片机在这里是不是多余的不是的。eFuse 解决的是硬件级的硬保护——只要超过阈值它立刻断开或限流不依赖任何软件。但硬保护管不了的问题恰恰是故障发生之后怎么办是立即恢复还是保持断开故障期间要不要记录限流的时候电压跌了多少当前负载电流是不是已经接近阈值了这些策略层面的问题需要一个大脑来决策。我选择PIC18F86J10就是充当这个角色。它是一颗 80 引脚的 8 位单片机工作电压在 2.0V 到 3.6V 区间片内集成多通道 ADC、多个串口、SPI/I2C 模块外设资源对付一个电源监控任务绰绰有余。选它而不是更常见的 STM32是因为在这个场景里我根本不需要跑复杂协议栈只需要稳定的 GPIO 读取、ADC 采样、状态判断和看门狗喂狗8 位机的可靠性和开发成本在这里反而是优势。这两颗芯片的关系可以这样理解TPS259483AYWPR 是那个手快眼快的保安PIC18F86J10 是坐在监控室里的值班经理。保安负责在事发的瞬间把门锁死值班经理负责判断要不要开门、每次开门间隔多久、把每次报警记录下来。没有保安经理反应再快也来不及没有经理保安锁死之后就没人指挥后续动作了。2. 核心细节拆解TPS259483AYWPR 的关键机制与参数设计2.1 引脚速读与上电工作流程想要用好一颗 eFuse先得把它当成一个智能开关来理解。TPS259483AYWPR 这类器件的核心引脚大致包含输入 IN、输出 OUT、使能 EN/UVLO、限流设置 ILIM、软启动斜率设置 dV/dT、故障标志 FLT、电源良好 PG。上电工作时序是这样的输入端 IN 得电后如果 EN/UVLO 引脚上的电压超过了内部设定的阈值芯片内部的上电斜率控制电路会缓慢导通功率 MOSFET输出电压沿着设定的斜率爬升而不是像机械开关那样啪一下直接加上去。这个过程就是软启动它能有效抑制输入端的浪涌电流。输出电压稳定后PGPower Good标志拉高告诉单片机电源路径就绪。此后芯片内部持续监控输出电流如果电流超过 ILIM 设定的阈值内部限流环路会主动把输出电流限制住同时 FLT 引脚拉低通知 MCU 发生了过流事件。这个流程里有几个值得细说的设计软启动斜率不是越快越好限流的动作也不是瞬间把 MOSFET 完全关断。很多 eFuse 在过流时会先进入恒流模式让电流稳定在设定值附近只有在持续过流或短路时间过长时才会彻底断开。这样做的好处是很多瞬时过流场景比如后级 DCDC 输入电容充电可以安全度过不会动不动就触发一次开断循环。我当时在项目里遇到的一个典型场景就是后级电源模块输入端有 100uF 电容上电瞬间如果不设软启动电流尖峰能到十几安培直接让前级电源打嗝。靠 dV/dT 引脚接电容把爬坡时间拉到几毫秒这个问题就消失了。2.2 关键参数计算ILIM、dV/dT、过压/欠压分压先声明一句不同批次和具体型号的手册细节会有差异我的话主要是讲通用设计方法和带大家理解背后的物理逻辑最终布板之前一定以你手头那颗芯片的官方 datasheet 为准。限流电阻 ILIM。大多数 eFuse 都是通过 ILIM 引脚外接一个电阻来设定限流值的。手册里会给出一个比例系数 K典型关系是Ilim K / Rilim这里的 K 是芯片内部电流镜像的比例单位通常是 AΩ。比如某型号 K45000你想把限流设在 3A那么 Rilim 45000 / 3 15000Ω也就是 15kΩ。限流值不是越小越好尤其后级有容性负载时启动电流本身就很大限流值设得太低会导致系统上电都困难。一般我会按照正常工作最大电流的 1.5 到 2 倍来设定限流值再通过实测调整。软启动电容 CdVdT。这个电容决定了输出电压的爬升速率。其原理是芯片内部有一个恒流源给这个电容充电电容电压的变化速率决定内部参考电压爬升速率进而控制 MOSFET 导通的快慢。爬升时间可以这样估算t_softstart Vout × CdVdT / I_ss其中 I_ss 是内部软启动恒流源的典型值。如果输出是 12V希望爬升时间在 5ms内部恒流源典型值假设为 2uA那么 CdVdT 2uA × 5ms / 12V ≈ 0.83nF取标称 1nF 即可。这里要特别注意电容值太大爬升太慢后级单片机可能因为供电建立太慢而出现上电时序问题电容值太小浪涌抑制效果就不够。我自己的经验是12V 输入、输出总电容在 200uF 上下时爬升时间取 3~10ms 是个比较舒服的范围。过压/欠压分压电阻。eFuse 的 EN/UVLO 引脚内部有一个比较器阈值通过外接分压电阻可以设定输入电压的开启点和关闭点。假设内部阈值是 1.2V想让输入电压高于 18V 时才开启低于 10V 时关闭即欠压保护点 10V那分压比就可以这样推输入电压为 10V 时分压点正好是 1.2V所以上分压电阻与下分压电阻的比值 R1/R2 10 - 1.2/ 1.2 ≈ 7.33。确定了这个比值之后再根据分压电阻本身的功耗选择阻值范围一般取总电流在 0.1~1mA 之间避免电阻功耗过大也避免分压点对噪声太敏感。如果是带独立 OVLO 引脚的型号同理用另一组分压电阻设定过压关断点。2.3 故障响应机制自动恢复还是锁存使用 eFuse 有一个必须提前想清楚的问题过流或过压触发之后芯片的行为是自动重试还是保持锁存。不同型号的 eFuse 策略不一样有些是限流模式持续存在电流恢复后自动回到正常有些是锁存模式必须把 EN 拉低或者断电才能复位。从系统可靠性角度我更倾向于把恢复策略交给 MCU而不是放任 eFuse 自动恢复。原因很简单如果后级是持续短路自动重试等于让系统在上电-短路-断开-再上电之间循环这个过程中 MOSFET 和 PCB 承受的是反复的热冲击次数多了对可靠性是隐患。我的做法是FLT 引脚接 MCU 的外部中断故障发生时先把 eFuse 的 EN 拉低强制进入关断状态然后由 MCU 程序决定什么时候重新使能重新使能前可以顺便检测一下后级的负载阻抗或者做一个延时重试比如第一次故障后等待 100ms第二次 500ms第三次 2s实现一个简单的退避算法。这里也体现了硬件保护 软件策略的组合价值硬件保证故障时不会造成破坏软件保证故障发生后的行为是可控、可解释、可记录的。你的嵌入式项目以后如果要做故障诊断上报这种设计天然就能提供故障类型、故障次数、恢复过程这些高价值数据。3. 实操过程原理图搭建、固件状态机与 PCB 布局3.1 原理图设计从 24V 输入到 3.3V 单片机的完整信号链我直接说我在项目里的接法大家按自己的板子调整。输入端从工业总线进来先经过一个防反接二极管或者选用 eFuse 内部集成反接保护的能力按手册确认再进入 TPS259483AYWPR 的 IN 引脚。IN 引脚前面放一组陶瓷电容加电解电容陶瓷电容负责高频去耦电解电容负责吸收浪涌能量。输出端 OUT 同样放一组电容作为 eFuse 输出侧的储能和稳压。EN/UVLO 引脚接分压电阻网络同时预留一个 MCU GPIO 通过一个小电阻或者二极管连接到 EN 节点让单片机也能参与使能控制。这里有一个细节如果直接用 MCU GPIO 拉 EN一定要确认 EN 引脚的电压域和 MCU 的电压域是否匹配。TPS259483 是 3.3V 兼容的可以直接和 PIC18F86J10 的 GPIO 相连但如果换成耐压更高的型号中间可能就需要加电平转换或者开漏驱动。ILIM 引脚经电阻接地dV/dT 引脚经电容接地这两个器件在布局时要靠近芯片引脚走线尽量短避免寄生参数影响设定值。PG 和 FLT 是开漏输出各接一个上拉电阻到 3.3V再连到 PIC18F86J10 的两个 GPIO 上。值得注意的是这颗 MCU 的大部分 I/O 都是 5V 容限还是 3.3V 容限接之前要把对应引脚的输入模式配好别让开漏上拉电平超出引脚承受范围。MCU 侧还用 ADC 监控两个点一个是分压后的输入电压一个是 eFuse 输出电流的采样信号如果芯片有电流采样输出引脚的话。这样 MCU 不只是被动等 FLT 信号还能主动发现趋势性问题——比如电压缓慢跌落、电流持续偏高等。3.2 固件实现状态机视角下的电源监控电源保护这种底层功能固件设计我强烈建议用状态机而不要用裸奔的满屏 if 嵌套。状态划分很简单上电自检、正常运行、故障锁定、恢复等待。上电复位后MCU 先做自检读取 FLT 和 PG 状态确认 eFuse 是否已经正常建立输出。如果 PG 正常进入正常运行态。正常运行态下周期性通过 ADC 采集输入电压和负载电流和阈值比较同时监控 FLT 引脚是否被拉低。一旦检测到 FLT 变低立即把 EN 拉低进入故障锁定态在 RAM 里记录故障次数和时间戳然后根据故障类型决定恢复策略。下面给一个核心的 C 代码片段基于 PIC18F86J10各位可以根据自己手上的编译器修改。// 状态定义 #define PWR_STATE_INIT 0 #define PWR_STATE_NORMAL 1 #define PWR_STATE_FAULT 2 #define PWR_STATE_RETRY 3 // 关键 IO #define EFUSE_EN_LAT LATBbits.LATB0 #define EFUSE_FLT_PORT PORTBbits.RB1 #define EFUSE_PG_PORT PORTBbits.RB2 unsigned char pwr_state PWR_STATE_INIT; unsigned char fault_cnt 0; unsigned int retry_delay_ms 100; void PowerPath_Task(void) { switch (pwr_state) { case PWR_STATE_INIT: EFUSE_EN_LAT 1; // 使能 eFuse if (EFUSE_PG_PORT 1) { // 输出正常建立 pwr_state PWR_STATE_NORMAL; } break; case PWR_STATE_NORMAL: if (EFUSE_FLT_PORT 0) { // 故障触发 EFUSE_EN_LAT 0; // 立刻断开 fault_cnt; pwr_state PWR_STATE_FAULT; } // 这里可以周期采集 ADC判断电压电流趋势 break; case PWR_STATE_FAULT: // 等待故障状态稳定延时一会再恢复 if (delay_elapsed_ms(50)) { pwr_state PWR_STATE_RETRY; } break; case PWR_STATE_RETRY: EFUSE_EN_LAT 1; // 重新使能 retry_delay_ms retry_delay_ms * 2; // 退避 if (retry_delay_ms 4000) retry_delay_ms 4000; pwr_state PWR_STATE_INIT; break; } }这段代码只体现核心逻辑实际工程里还需要加看门狗喂狗、故障次数上限判断和串口日志输出。我特别想强调一点FLT 引脚的处理不要用简单的轮询在正常态下应该配置为外部中断输入边沿触发把状态机从 Normal 踢到 Fault。这样即使主循环被其他任务占用比较久硬件断链的响应也能保持在微秒级别——当然真正的快速切断是 eFuse 本身完成的MCU 的响应是收尾和善后。3.3 PCB 布局与散热别让寄生参数毁了你的保护电路电源保护电路最怕的就是设计软件算得挺好一上板实测参数全漂。问题根源大多是 PCB 布局。第一优先是输入电容和输出电容的位置。电容必须紧贴 eFuse 的 IN 和 OUT 引脚放置中间不要有过孔绕路否则引线电感在瞬态切换时会产生额外压降和振铃。第二是 ILIM 和 dV/dT 引脚上的电阻电容这些是设定精度器件走线要短旁边不要跑开关节点避免噪声耦合影响设定值。第三是功率路径的走线宽度。限流 3A 的场景如果 PCB 铜厚 1oz走线宽度至少要按 2A/mm² 的经验去算必要时在功率路径上铺铜加宽并用过孔阵列过渡到其他层。散热也要特别提一提。eFuse 内部那颗功率 MOSFET 的功耗在限流时会比正常工作时大很多。假设输入 24V、输出被短路、限流 2A那么 MOSFET 上承担的最大压降接近 24V瞬时功耗接近 48W。当然恒流限流状态不会持续太长时间芯片有热保护但如果板子散热条件差频繁触发限流会导致芯片表面温度快速升高进而影响限流精度甚至让 PCB 局部发黄。所以 TPS259483 这类芯片底部的散热焊盘一定要连接到足够大的铜皮区域并布置散热过孔这一点在项目评审时我就会重点检查。3.4 与嵌入式系统集成的三个细节第一个细节是电平域。PIC18F86J10 工作在 3.3V而工业输入总线是 12V 或 24V。所有需要 MCU 直接读取的信号FLT、PG都来自 eFuse 的 3.3V 逻辑域这没问题但 EN 如果要由 MCU 控制要确认 EN 引脚逻辑阈值是否兼容 3.3V GPIO 输出。第二个细节是复位状态。MCU 在复位期间 GPIO 默认是什么状态如果高电平会把 eFuse 使能那上电瞬间 eFuse 就会先于 MCU 程序初始化打开这未必是坏事——但你必须知道这个行为并设计好默认状态。第三个细节是调试接口。板子上一定要预留测试点输入电压点、输出电压点、ILIM 引脚、dV/dT 引脚、FLT 信号。后面调试时你会发现这些测试点是排查问题最快的手段。4. 调试实录常见问题与排查技巧4.1 上电就过流限流输出爬不起来这个故障是我在项目里遇到最多的症状是每次上电后 FLT 立刻拉低用示波器看 VOUT 波形发现输出电压刚爬升到零点几伏就被打断了。排查思路先不要把锅甩给 eFuse先用电子负载断开后级单独给 eFuse 上电看输出是否正常。如果单独上电正常问题就出在后级的启动特性如果单独上电也不正常优先怀疑 dV/dT 电容是不是太小导致软启动过快输出电容充电电流超过了限流阈值。我在一块输出总电容 300uF 的板子上一开始用的 CdVdT 是 0.47nF软启动时间只有 1ms 左右启动峰值电流算下来远超限流值 2A结果就是每次都限流失败。把电容换成 2.2nF爬升时间拉到 5ms 左右问题立刻消失。这里面有个计算上的常见误区限流值算的是负载电流但启动瞬间还要叠加上输出电容充电电流这两个加起来不能超过限流设定值。4.2 实测限流值和计算的偏差很大如果你发现芯片的限流动作电流和用 K/Rilim 算出来的值对不上先别急着骂手册。测量方法、电阻精度、温度三个因素分别排查。首先示波器电流探头测到的往往包含输出电容的充电电流和限流动作点的稳态限流值不是一回事。要测准把输出短路到电子负载的恒定电流模式逐步加大电流观察输出电压跌落的临界点这才是限流动作点的真实值。其次ILIM 电阻本身用 1% 还是 5% 精度直接影响设定值的离散度。我遇到过一开始为了省成本用了 5% 电阻四块板子限流点差了 15%后来全部换 1% 精密电阻才解决。最后就是温度芯片温度升高后内部采样电阻和基准都会漂移造成限流点轻微变化这在工业设备高温环境下要留够余量设计时不要把正常工作电流推到限流值的 90% 以上。4.3 FLT 信号抖动导致 MCU 误动作FLT 引脚在限流临界状态或者系统刚上电时偶尔会出现几十微秒的短暂拉低如果 MCU 外部中断对下降沿过于敏感就可能误判一次故障把正常的启动过程打断了。处理办法分两级。硬件上FLT 引脚的上拉电阻不要太大10kΩ 以下比较稳再在 MCU 侧并联一个 1nF 左右的滤波电容可以滤掉大部分窄脉冲。软件上外部中断服务函数里只做一件事——置一个标志位主循环里读到这个标志后确认 FLT 连续拉低超过一定时间比如 50us才算真故障。这样既保证了快速响应又不会因为一个毛刺就误入故障状态。这类软硬结合去抖的思路在嵌入式按键扫描、继电器检测里也通用。4.4 PIC18F86J10 引脚配置的两个坑用这颗单片机接 eFuse 信号时最容易配错的不是 GPIO 方向而是数字和模拟功能的切换。PIC18F 的很多引脚复用模拟输入功能如果默认是模拟模式外部中断就触发不了。开发环境里配置引脚时要显式将 FLT、PG 对应的引脚设为数字输入模式并把相应的模拟功能禁用寄存器ANSEL 相关位清零这一步漏了后面查起来非常隐蔽。另外一个坑是开漏引脚的内部上拉。FLT 和 PG 在 eFuse 侧是开漏输出板子上已经接了外部上拉电阻这时如果 MCU 内部上拉也同时启用两个上拉并联会让信号电平稍微偏高但更难受的是内部上拉通常比较弱在噪声环境下抗干扰能力有限。所以建议外部接 4.7kΩ 上拉同时把 MCU 内部上拉关掉让电平状态干净、确定。4.5 常见问题速查表故障现象可能原因排查方法上电后输出一直为 0EN/UVLO 分压设置错误输入未达到开启阈值测量 EN/UVLO 引脚电压核对分压比上电瞬间 FLT 拉低输出爬升中断软启动过慢/输出电容充电电流超限流值增大 dV/dT 电容或提高限流设定负载正常但偶发过流报警感性负载启动冲击电流过大示波器抓电流峰值判断持续时间FLT 信号频繁抖动上拉电阻过大、干扰耦合减小上拉电阻并联 1nF 滤波电容限流实测值和计算值偏差大ILIM 电阻精度不足、温度漂移换 1% 电阻标定温度下复测MCU 收不到 FLT 中断引脚复用为模拟功能、配置错误检查 ANSEL 相关寄存器改为数字模式5. 工程化落地可靠性验证、扩展玩法与个人体会5.1 可靠性验证清单方案从能工作到敢量产中间还差一整套验证。电源保护电路尤其要看几个维度浪涌耐受、温度循环、重复故障恢复和长期老化。浪涌的摸底测试建议参照常见的工业设备浪涌等级来做比如给输入端打 ±1kV 和 ±2kV 的浪涌波形观察 eFuse 是否动作、是否损坏、后级是否掉电。温度方面eFuse 的限流点和软启动时间在 -40℃ 到 85℃ 都会有变化我在高低温箱里实测过限流值在低温下会偏高一点高温下偏低一点余量设计时要把这个偏移算进去。重复故障恢复测试也值得专门做用程序控制电子负载周期性地制造短路让系统反复进入限流-断开-恢复的循环跑上千次看 MOSFET 的导通电阻有没有明显上升看 FLT 上报有没有漏报。这些测试看起来繁琐但电源保护电路本身就是不被经常触发的部件正因为不经常触发才更需要验证触发的可靠性不然出厂第一年没问题第二年现场来一次浪涌就失效了那才是最尴尬的。5.2 一个方案复用到多条电源轨这个设计的另一个好处是架构天然可扩展。一块板子上往往有多个电压域24V 进来5V 给传感器3.3V 给逻辑1.8V 给内核。重要负载完全可以各放一颗 eFuse把 FLT 和 PG 信号接到 PIC18F86J10 的不同引脚上MCU 只需要维护一张电源轨状态表就能对所有关键电源做统一监控。我后来在一台设备上就是这么干的五路电源轨各挂一颗 eFuseMCU 每 10ms 扫一遍状态一旦某路故障就把故障轨编号、故障类型、故障时刻存进日志通过串口上报到上位机。这在以前用保险丝的时代根本做不到维护人员只能在板子烧了之后靠闻味道找故障点。现在故障一目了然排除时间从小时级降到了分钟级。5.3 最后再分享一个小技巧调试这种电源保护电路时万用表真的不够用示波器才是主角。我通常把四个通道这样分配CH1 测输入电压、CH2 测输出电压、CH3 测 FLT、CH4 测 ILIM 引脚或者电流探头测输入电流。上电瞬间把所有通道同时触发抓一帧波形故障是过压、欠压、过流还是软启动不足一眼就能分辨出来。这个习惯帮我省了非常多排查时间。如果你正在做的嵌入式项目也经常被电源问题困扰建议从一块小板子开始把 eFuse 加 MCU 这套组合跑通。用的时候你可能会发现它解决的不仅是保护问题还让整个电源系统的状态变得可见了——而这恰恰是工业设备可靠性设计里最值钱的部分。
返回列表