ARTICLE DETAIL

资讯详情

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

eFuse与MCU协同:工业电源路径保护设计与故障恢复策略

eFuse与MCU协同:工业电源路径保护设计与故障恢复策略 1. 为什么保险丝防反MOS在工业现场还是不够用去年做一块工业 IO 控制板从 24V 总线上取电同时给主控、传感器、显示屏和无线模块供电。前几版我用的是保险丝加 PMOS 防反接看着简单结果一次现场操作短路把保险丝烧了换保险丝要开壳、断电、找备件一套流程下来大半个小时。后来我把电源路径整体换成了 TPS259483AYWPR 这颗 eFuse 做第一道硬件保护PIC18F85K22 做主控负责状态读取和恢复策略现场问题才算彻底解决。这篇文章就把当时的选型思路、参数计算、固件配合和调试期间的坑一次说清楚适合正在做嵌入式电源保护、工业控制器、传感器节点或者想了解热插拔保护的硬件/固件工程师参考。先说结论电源路径保护这件事真正做到位的标志不是坏了能断而是断了能知道、能恢复、能防误动——这就需要硬件保护器件和 MCU 协同工作而不是一根保险丝单打独斗。1.1 一个真实的现场故障那块控制板工作时负载电流大概 0.8A峰值 1.2A我在电源入口串了一根 2A 的玻璃管保险丝。现场操作员用螺丝刀调整接线端子的时候不小心把输出端短路了短路持续了大约几百毫秒才被保险丝熔断。事后我检查负载端发现一块传感器板已经烧掉——保险丝确实完成了断开这个动作但熔断时间太长能量已经穿过去了。更麻烦的是保险丝熔断之后系统处于完全不可用的状态必须人工到现场更换。工业现场最怕这种不确定性你不知道什么时候短路的、什么时候换上的、换完之后还有没有隐患。1.2 保险丝和分立防反方案的三个局限第一个局限是一次性。保险丝断了就是断了没有恢复能力也没有自动重启的可能。对于无人值守的设备一次短期浪涌或瞬时短路就可能导致长时间停机。第二个局限是精度差、响应慢。普通保险丝的熔断特性受环境温度影响很大同一根保险丝在 85℃ 环境里和 0℃ 环境里实际熔断电流可能差出 20% 以上。而且慢熔保险丝在过流较轻的时候可能几秒都不断短路严重的时候又来不及限制峰值电流。第三个局限是没有状态输出。保险丝烧断后主控完全不知道发生了什么只能靠设备没反应来判断。分立方案采样电阻比较器PMOS倒是能做出过流关断但零件数量多、占面积大、阈值受温漂影响调一个稳定的阈值往往要折腾很久。我最早也试过这种方案最后发现仅仅是一个基准电压的温漂问题就够喝一壶的。1.3 加了 MCU 之后的分工把 TPS259483AYWPR 放在电源路径上相当于加了一个带断路器功能的电子开关。它自己就能完成过流限制、欠压/过压检测和快速关断响应速度在微秒到毫秒量级这是任何保险丝都做不到的。但硬件保护器件本身不具备思考能力它要么锁死要么按固定的时序重试。PIC18F85K22 在这里不是简单的被保护对象而是保护策略的执行者它读取故障状态、判断故障类型、决定是立即重启还是锁存告警并且把故障事件记录到非易失存储里。硬件负责挡住危险软件负责决策和恢复两层配合之后电源路径才算是真正完善了。2. TPS259483AYWPR 的内部逻辑和引脚级设计在贴片焊上去之前还是先把这颗器件的家底说清楚。TPS259483AYWPR 属于 TI 的集成 FET 电源路径保护器件本质上是一颗 eFuse——把功率 MOSFET、电流采样、限流比较器、过压/欠压检测逻辑和故障输出集成在一颗芯片里。正常工作时它就是一个阻抗很低的开关异常时它能自己判断并切断或限制电流。标题里那个 AYWPR 是封装和后缀信息这类后缀通常对应小尺寸 QFN 封装底部有大面积散热焊盘焊接时要注意接地和散热设计。具体到每个应用引脚功能要以数据手册的封装图和引脚说明为准。2.1 它本质上是一个带大脑的开关传统保险丝是纯物理元件靠电流加热熔丝来断开eFuse 则用半导体开关加控制逻辑实现同样的功能但控制逻辑可以编程各种保护阈值可以通过外部电阻设定。一颗典型的 eFuse 内部结构可以拆成三部分功率通路、采样检测、控制逻辑。功率通路就是一颗低导通阻抗的 MOSFET正常时完全导通采样检测部分监控电流和输入/输出电压控制逻辑根据检测结果决定是维持导通、进入限流还是快速关断。用生活化的类比普通保险丝是一个烧掉就换的保险丝座eFuse 是一个可以自动跳闸、可以设定额定电流、可以告诉你跳闸原因、还可以远程合闸的智能断路器。后者能做的事情比前者多得多。2.2 核心保护功能逐个拆解我在这个项目里重点用到了五个功能。第一是可编程限流。通过 ILIM 引脚外接电阻设定限流阈值当过流发生时器件不会像保险丝那样直接断开而是先进入限流状态把电流压在设定值附近。这个特点非常重要很多负载在启动瞬间需要大电流如果保护器件一过流就立刻断开系统根本无法正常上电限流模式相当于先顶住给负载一个缓冲机会。第二是快速短路关断。输出端出现硬短路时电流上升速率非常快这时候器件通过检测电流变化率触发快速关断而不是慢慢限流。这个能力比保险丝的熔断速度快几个数量级能有效保护后级的电源模块和负载器件。第三是过压/欠压锁定。输入电压过高或过低都会触发保护避免末端设备在电压异常时工作。设定窗口通常靠电阻分压接到器件的电压监测引脚具体分压比按手册公式计算。第四是软启动。通过外部电容设定输出电压的上升速率限制上电瞬间对负载电容的充电浪涌。后面我会专门讲软启动参数怎么算。第五是故障输出。器件检测到故障后会把 FLT 引脚拉低MCU 通过这个引脚就能知道电源路径出事了。2.3 选型时为什么是这颗型号如果你去翻 TI 的 eFuse 产品线会发现有好多型号不同输入电压范围、不同电流档位、不同封装都有。我当时选 TPS259483AYWPR 主要看四点一是系统是从 24V 总线取电这颗器件的输入范围要覆盖得住二是系统最大负载电流在 1.5A 左右器件的限流可调范围要在这个区间附近留出裕量三是工业环境温度范围要满足 -40℃ 到 85℃四是封装要在 PCB 上好布局好散热。我特意强调一句不同型号的 eFuse 在输入耐压、导通阻抗、限流精度、软启动电容范围上差异很大选型千万不要只看是颗 eFuse就完事必须拿着系统最恶劣工况去核对数据手册里的绝对最大额定值和保护阈值精度。3. PIC18F85K22 在这里扮演的角色不是被保护者电源路径保护如果只有硬件参与系统会变得很笨。举一个实际场景现场一个电机启停造成瞬间大电流eFuse 触发了短路保护并关断输出。如果没有 MCU这个关断之后器件可能一直锁着必须断电重来如果器件支持自动重试又可能因为短路线还在而反复重启把电源和负载都折腾一遍。PIC18F85K22 的职责就是把保护这件事做成可管理的状态机确认故障、判断是瞬时干扰还是持续故障、决定重试次数和延迟时间、最终把状态上报给上位机或者点亮告警灯。3.1 为什么只有硬件保护不够纯硬件保护能解决切断的问题但解决不了恢复策略的问题。一个可以自动重试的 eFuse 面对持续短路时会陷入关断-重启-再关断的循环每一次重启都会对电源系统产生一次冲击面对瞬时干扰时又会因为一次误触发就彻底锁死导致不必要的停机。MCU 参与之后就能做到差异化处理如果是单次瞬时故障延迟几百毫秒后自动恢复如果是连续多次故障说明负载侧可能存在持续短路必须锁存并通知维护人员。这种决策能力是纯硬件方案给不了的。3.2 PIC18F85K22 的资源匹配情况我选 PIC18F85K22 有一些生态和历史原因但从资源角度看它确实适合这个场景。80 引脚的封装在 IO 数量和 PCB 布局自由度上都很充裕内置 12 位 ADC直接采样输入电压、输出电压和外部电流检测芯片的输出分辨率完全够用I2C/SPI 外设可以挂载 INA226 这类电流检测芯片硬件看门狗能保证主控跑飞时系统还能恢复而且它工作在工业级温度范围不需要额外加散热。对于这种项目完全没有必要上 RTOS裸机状态机就足够了。整个保护逻辑的核心是状态切换的时机而不是并发处理能力。3.3 监控回路怎么搭我在实际板子上搭了四条信号通路。第一条是输入电压采样。24V 输入经过电阻分压后接到 PIC18F85K22 的 ADC 引脚分压比按 ADC 参考电压和电阻精度选择用来判断输入电压是否在正常范围内。第二条是输出电压采样。eFuse 输出端同样通过电阻分压接到 ADC用于确认输出是否建立成功。第三条是故障状态读取。FLT 引脚接 MCU 的外部中断输入端下降沿触发。这样故障发生时 MCU 不需要轮询而是立刻被中断唤醒。第四条是使能控制。MCU 的普通 GPIO 接 eFuse 的 EN 引脚控制电源路径的通断。这里有个重要细节EN 引脚不能悬空必须在硬件上加一个下拉电阻到无效电平保证 MCU 还没完成初始化时输出是关闭的后面第 6 章我会重点讲这个坑。如果还希望精确统计系统电流可以额外挂一颗 I2C 接口的电流检测芯片读取电流样本并计算功率。我最初做功耗分析时挂了 INA226它输出的是数字量直接用 PIC18 的 I2C 外设读取非常干净。4. 硬件参数计算、散热与 PCB 布局很多工程师拿到 eFuse 之后照着参考设计把电阻电容一贴就能工作但参数为什么这么选不一定清楚。下面几个计算直接关系到保护效果是否可靠。4.1 限流阈值设成多少限流阈值不能拍脑袋我的做法是先列出系统最大连续电流再留出 30%~50% 的裕量然后对比启动瞬间的浪涌电流确保两者之间有明显区分。以我的板子为例正常工作 0.8A峰值 1.2A我把限流阈值设定在 2A 左右。这样既不会在正常峰值时误触发又能在异常短路时快速起作用。具体到 ILIM 电阻的阻值需要根据数据手册里给出的 ILIM 引脚电流输出特性和限流公式来算不同型号公式差异很大直接套手册曲线最靠谱。有一点必须强调ILIM 电阻一定要选高精度、低温度系数的电阻最好 1% 精度、温漂 100ppm 以内。这个电阻直接决定限流阈值的精度如果它在高温下漂了保护阈值也会跟着漂。4.2 软启动和浪涌电流软启动的本质是让输出电容充电过程变缓从而限制浪涌电流。计算公式是I_inrush C_load × dV/dt其中 C_load 是负载侧总电容dV/dt 是输出电压上升速率。举个例子负载侧有 470µF 电容我希望浪涌电流不超过 1A那么 dV/dt 必须小于 1A ÷ 470µF ≈ 2127 V/s也就是约 2.1V/ms。如果输入是 12V输出建立时间大约是 5.7ms这个时间对绝大多数嵌入式系统完全够用。反过来如果系统要求几十毫秒内必须完成上电那就不能把压摆率设得太慢否则负载侧的电源监控电路可能因为上电超时而误报。软启动电容值越大压摆率越慢浪涌越小但上电时间越长。这个平衡要看具体系统的上电时序要求。4.3 输入输出电容怎么配输入端我习惯放一个 10µF 陶瓷电容再加一个 22µF/50V 电解电容。陶瓷电容负责高频去耦电解电容负责吸收低频能量和抑制输入线上的电压跌落。输出端电容需要兼顾两方面一是为负载瞬态提供能量二是配合软启动限制浪涌。要注意陶瓷电容的直流偏压特性一颗标称 10µF 的 X7R 电容在 24V 偏压下实际容量可能只剩 40%。如果你按照标称值计算浪涌电流实际系统往往比计算值更小容量缩水但如果你需要精确的软启动时间就必须把偏压折损算进去否则时间会比你设定的快很多。4.4 散热怎么算eFuse 正常工作时压降很低损耗不大但限流状态下输入输出之间的压差全部落在内部 MOSFET 上功耗就是压差乘以电流。最恶劣的情况是输出被短路输入 24V限流 2A那么器件内部损耗接近 48W。实际工程中这种状态不会持续太久器件自己会关断或锁存但散热焊盘和 PCB 铜皮面积必须按照最坏限流状态下能撑住几百毫秒来设计。我通常会在器件底部打阵列过孔连接到中间层和底层的大面积铜皮增强散热路径。4.5 PCB 布局的几条硬规矩第一条是大电流路径要短而宽。输入到 eFuse 再到输出负载的走线能铺铜就不走细线减少路径电阻和寄生电感。第二条是 ILIM 电阻紧贴器件引脚。这个电阻的信号很弱走线越长越容易耦合噪声导致限流阈值抖动。第三条是 FLT 引脚需要上拉电阻。FLT 一般是开漏输出不接上拉的话 MCU 永远读不到高电平。第四条是散热焊盘过孔不要堵死。焊接时焊锡会顺着过孔流走孔径和数量要平衡。第五条是输入输出电容尽量靠近器件引脚尤其是输出端的陶瓷电容它既是储能又是吸收快速关断尖峰的关键元件。5. 固件侧的故障处理状态机与恢复策略硬件调通之后固件侧的逻辑决定了整个保护系统是聪明还是呆板。我的固件实现了一个四状态状态机正常、故障确认、重试等待、锁存告警。5.1 初始化必须先保证输出关闭MCU 上电后首先要保证 eFuse 输出是关闭的。因为 MCU 从复位到 GPIO 初始化之间有一段不确定时间GPIO 可能处于高阻态如果 EN 引脚只靠 GPIO 默认状态控制外部干扰可能把 EN 拉高导致输出在系统还没准备好时就启动。我的做法是 EN 引脚通过 100kΩ 电阻下拉到地GPIO 配置成推挽输出后再拉高开启输出。这样 MCU 没起来时EN 被电阻固定在低电平输出一定是关闭的。全部外设初始化完成、确认输入电压正常之后才把 EN 拉高让 eFuse 软启动。5.2 状态机核心逻辑四个状态的定义如下ST_NORMAL正常工作无故障。ST_FAULT_WAIT收到故障中断进入确认阶段。ST_RETRY_WAIT确认是真实故障后关闭输出并等待重试。ST_LATCHED连续故障次数超限锁存并告警。下面这版代码是我实际工程里的简化版本去掉了具体的寄存器操作保留核心逻辑typedef enum { ST_NORMAL, ST_FAULT_WAIT, ST_RETRY_WAIT, ST_LATCHED } sys_state_t; static sys_state_t state ST_NORMAL; static uint8_t fault_count 0; static volatile uint8_t fault_flag 0; void fault_isr(void) { // 外部中断下降沿触发 fault_flag 1; } void main_loop(void) { switch (state) { case ST_NORMAL: if (fault_flag) { state ST_FAULT_WAIT; } break; case ST_FAULT_WAIT: delay_ms(10); // 去抖 fault_flag 0; if (flt_pin_read() 1) { // FLT 已恢复高电平说明是瞬时干扰不作处理 state ST_NORMAL; } else { // 故障仍然存在进入重试流程 fault_count; en_set(0); state ST_RETRY_WAIT; } break; case ST_RETRY_WAIT: if (fault_count 3) { state ST_LATCHED; } else { delay_ms(200); // 等待故障源消散 en_set(1); // 重新开启输出 state ST_NORMAL; } break; case ST_LATCHED: alarm_led_on(); // 等待人工复位或上位机指令 break; } }有一点值得说明故障确认阶段必须有去抖延时。工业现场存在大量电噪声导线电感和负载切换都可能造成 FLT 瞬时抖动如果你不确认就去重启系统会非常不稳定。5.3 重试次数的选择逻辑我设定的连续故障次数上限是 3 次。这个数字不是随便写的瞬时故障通常只会出现一次如果连续 3 次上电后仍然立刻触发故障说明负载侧大概率存在持续短路再试下去只会反复冲击电源系统。锁存之后MCU 点亮告警灯并通过串口输出故障标志等待维护人员处理。重试间隔我用了 200ms这个时间足够让 eFuse 完成关断和散热也足够让短路点周围的功率元件冷却。如果负载是一次性电容充电过程200ms 之后通常已经恢复正常。5.4 事件记录与看门狗每次故障发生我会把一个结构体写入片上数据 EEPROM包含故障时间戳、当前故障计数和故障类型。这样即使设备断电重启现场维护人员也能通过上位机读到最后几次故障的原因。主循环里必须喂狗。电源保护系统最怕的不是外部故障而是 MCU 自己跑飞了导致保护策略失效。PIC18F85K22 有硬件看门狗配置好超时时间之后主循环正常往复时喂狗一旦代码跑飞看门狗复位 MCU整个保护流程重新初始化。我建议看门狗超时时间设置在几百毫秒级别太短容易误复位太长又起不到保护作用。6. 实测与踩坑从样机到量产我改过的三处设计这个方案从第一版样机到现在稳定运行中间踩了不少坑。这几个问题很有代表性列出来给后来者参考。6.1 上电时序的坑EN 悬空导致误开启第一版原理图里EN 引脚只接了 MCU 的 GPIO没加下拉电阻。当时想的是反正 GPIO 上电默认是输入不会主动拉高。结果实测发现样机上电瞬间 eFuse 的输出会瞬间抖一下——因为 GPIO 高阻态时EN 引脚悬空感应到的噪声把 EN 抬到了开启阈值附近输出电容被抢着充了一小段。解决办法就是前面说的EN 引脚并一个 100kΩ 下拉电阻MCU 初始化完成前输出始终关闭。这个改动虽然只加了一个电阻但可靠性提升明显。6.2 限流电阻温漂导致误保护第二版我图省事ILIM 电阻用的普通 0603 厚膜电阻。样机在常温调试时没问题温度循环测试到高温段85℃时系统正常启动居然触发了限流保护。排查后发现是 ILIM 电阻在高温下阻值漂移导致限流阈值下移把本来应该通过的启动电流给掐掉了。后来换成 1% 精度、低温漂的薄膜电阻高温下阈值稳定下来误保护消失。这个问题的隐蔽性在于常温环境下你很难复现只有在接近产品极限温度时才会暴露一旦暴露就是一片一片的返修。6.3 快速关断时的负压尖峰用示波器观察短路关断波形时我发现 eFuse 输出端在关断瞬间会出现一个明显的负压尖峰。原因是快速关断时 di/dt 很大功率回路上的寄生电感会产生反向电动势把输出端电压打到地平面以下。负压尖峰如果幅度过大可能损坏 eFuse 内部电路或者后级负载上的电源芯片。解决思路是在输出端紧靠器件的位置加大容量陶瓷电容同时加一个低正向压降的肖特基二极管负极接输出、正极接地。这样负压尖峰刚出现就被钳位在 -0.3V 左右风险大大降低。6.4 短路测试的方法做短路测试时不要用很长的测试线去短接输出端测试线本身的电感会让波形完全失真甚至产生比真实短路更恶劣的尖峰。我的做法是用一段短而粗的铜导线直接焊接在输出端和 GND 的测试点上用示波器探头的地簧直接测量尽量缩短测量回路。第一次做破坏性短路测试时建议把输入电源的电流限制设得很小比如 100mA 甚至更小先观察保护是否动作、波形是否合理确认逻辑正确后再逐步提高输入限流。我见过有人一上来就满电压满电流去短接结果 PCB 走线都烧黑了。6.5 热验证最后一项是长时间热验证。我带着 1.2A 负载连续运行用热成像仪观察 eFuse 和周边 PCB 的温度。QFN 底部散热焊盘如果焊接不好器件温度会明显偏高时间久了可能触发自身过温保护或者加速老化。如果实测温度接近器件规格限值优先考虑增加 PCB 铜皮面积而不是加大散热器——这类封装主要还是靠 PCB 导热的。这套硬件 eFuse 保护 MCU 策略管理的架构我已经在新项目里复制了两块板子改动集中在限流阈值和软启动参数上核心状态机几乎没有变化。电源路径保护从来不是加一个器件就完事关键还是硬件和固件之间怎么配合、遇到故障怎么决策。如果你也在做类似的系统建议先从最简单的FLT 读取 EN 控制开始跑通之后再逐步加入故障记录、上报和策略恢复每一步都能踩实。
返回列表