ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

eFuse与MCU协同:嵌入式系统电源路径保护设计

2026/10/7 12:57:05 拓冰建站 浏览量
eFuse与MCU协同:嵌入式系统电源路径保护设计 做嵌入式系统设计时电源路径保护这件事看着不起眼但真出问题的时候烧掉的可不只是几毛钱的保险丝。我最近在做一个面向工业应用的控制板供电方案输入侧是24V直流板上同时有传感器供电和逻辑供电两条路径需要可靠的过流、过压保护还要能在故障时告诉主控到底发生了什么。最终我选择了TI的TPS259483AYWPR配合Microchip的PIC32MX664F064L一起把硬件保护和软件监控拆开做整个系统跑下来的稳定性比我预想中好很多。如果你也在设计工业控制板、传感器节点、电池供电设备或者任何对供电可靠性有要求的东西这篇文章里的选型思路、参数计算和踩坑记录应该能直接拿来参考。1. 选型思路为什么电源保护要交给eFuse和主控协同1.1 工业环境里电源侧的典型故障工业控制柜里的24V电源看着平平淡淡实际上干扰一多起来什么怪问题都可能出现。电机启停的瞬间母线电压可以冲高到40V以上接线端子被误碰输出端可能直接短路热插拔板卡的时候输入端会产生很大的浪涌电流。这三类故障如果只靠保险丝处理保险丝熔断后需要人工去换耗时不说熔断时的弧光还可能损坏PCB。更麻烦的是普通保险丝不具备任何诊断能力故障发生之后主控完全不知道是过流、过压还是后级短路。工业客户真正需要的是保护动作要快、可以被软件复位、故障状态要能上报。这三个需求传统被动器件很难满足。所以我在做这类项目时不太愿意把保护重任全压在保险丝上尤其是需要长期无人值守的设备。1.2 eFuse、自恢复保险丝和分立MOS管怎么选自恢复保险丝虽然能自动恢复但动作速度慢精度也不理想同一个限流点在-40℃和85℃下差别很大。分立MOS管方案要自己搭过流检测、驱动、滞回比较器PCB面积大器件一致性难以保证。而eFuse这类电子保险丝把功率MOSFET、电流采样、限流比较器、过压比较器、热关断全部集成在一个小封装里外部只需要几个电阻电容。TPS259483AYWPR就是这类芯片。它内部集成了一个低导通电阻的功率FET通过外围电阻和电容就能设置欠压锁定、过压保护、限流点、软启动时间。最关键的是它的输出是可控的主控可以通过EN引脚随时断开负载也可以通过FLT引脚及时知道故障发生。对嵌入式系统来说这种“可以被软件管理”的保护器件价值远高于一个只会熔断的保险丝。1.3 PIC32MX664F064L在这个方案里扮演什么角色选主控的时候我考虑过STM32和PIC32两条路线。最终选了PIC32MX664F064L原因是这个项目里还要兼顾现有的CAN节点改造和USB固件升级需求PIC32MX系列的CAN和USB外设不需要额外加芯片而且MIPS内核在工业温度范围下表现稳定Flash容量对存储故障记录和参数表来说绰绰有余。PIC32MX664的角色不是简单地读个ADC而是整个电源管理的大脑。它要负责读取TPS259483的电流监测输出、捕获FLT中断、控制EN使能还要通过CAN或者USB把电源状态上报给上层同时配合看门狗实现故障复位策略。这样硬件保护和软件管理职责分开保护动作由硬件瞬间完成不依赖固件响应速度监控、诊断、恢复策略交给固件处理灵活性更强。2. 硬件设计关键引脚与上下电阈值计算2.1 TPS259483外围电路那些容易忽略的细节TPS259483的典型外围电路看起来不复杂但每个引脚上的电阻电容都有明确的责任。输入IN脚要放一个至少10μF的陶瓷电容用来支撑启动瞬间的能量输出OUT脚也要放电容容量和负载特性相关。EN/UVLO引脚通过两个电阻分压设定欠压锁定阈值OVP引脚同样通过分压电阻设定过压保护阈值。这两个分压网络有个常见矛盾阻值不能太小否则会额外消耗输入电流也不能太大否则分压点会受到芯片内部漏电流影响。我在实际设计里通常把下分压电阻选在10kΩ级别上分压电阻按阈值计算后取标准值这样分压网络的电流在微安级对24V输入系统的损耗可以忽略。ILIM引脚接一个电阻到GND用来设定限流点。数据手册里会给出ILIM电阻与限流电流的关系曲线设计时先根据负载最大需求确定限流值再反查电阻值最后用可调电阻实测微调。软启动引脚则接电容决定输出电压上升的斜率。软启动电容如果太小冷启动瞬间的浪涌电流会触发限流保护导致上电失败电容太大则上电时间过长后级DC/DC会一直被锁住。2.2 一个12V输入系统的参数计算实例我以12V输入系统为例把计算过程走一遍。假设目标是UVLO启动阈值10.5V关闭阈值9VOVP阈值18V。选择下分压电阻R210kΩ上分压电阻R175kΩ。按典型的内部基准1.2V计算启动阈值约为1.2×(7510)/1010.2V和10.5V的目标很接近。如果要精确设置关闭阈值需要把芯片内部的滞回电流算进去。滞回电流会在R1上产生一个额外的压降具体值在数据手册的应用章节里有完整公式。我在调板时发现工业总线上偶尔会有很窄的电压尖峰OVP阈值如果设得太紧一个尖峰就会导致保护误动。所以我把OVP阈值适当放宽到19V左右让保护窗口覆盖瞬态尖峰同时确保后级器件的耐压足够。限流点设置在5A按照ILIM曲线反查得到电阻值后我特意选了一个1%精度的0603电阻并在实际带载时用电子负载从1A往上慢慢拉观察电流监测电压在哪一档开始进入恒流状态再微调电阻。这个步骤很重要因为不同批次芯片的ILIM曲线存在离散性完全靠理论值容易差出10%以上。2.3 PIC32MX664与TPS259483的接口怎么搭PIC32MX664与TPS259483的接口其实很简洁核心信号就四个EN输出GPIO、FLT输入带中断、电流监测输出接ADC引脚另外再预留一个电源状态指示灯。EN引脚的控制时机很讲究不能一上电就立即放开需要等输入电压稳定、FLT引脚确认没有上电故障之后再拉高。FLT引脚是开漏输出外部必须加上拉电阻到MCU的电源域阻值选10kΩ比较常见。电流监测引脚输出的是与负载电流成比例的信号接到PIC32MX664的ADC引脚之前我加了一个RC低通滤波时间常数大约1毫秒用来抑制开关电源纹波。为了防止异常情况下监测电压超过MCU模拟输入范围又在ADC引脚上并联了一个3.3V钳位肖特基二极管。这些看似小细节的处理在实际现场测试时能省掉很多麻烦。如果直接把FLT和电流监测信号RAW地接到MCU大概率会出现误触发或者ADC采样值乱跳后期的排查时间远大于初期补这几个元件的时间。3. 固件实现状态机、电流采样与故障上报3.1 用状态机管理整个电源流程固件里我实现了一个电源管理状态机状态包括IDLE、STARTUP、RUN、FAULT和RECOVERY。上电后PIC32MX664先初始化时钟和GPIO在IDLE状态等待主程序就绪。确认FLT引脚为高电平、输入电压在预期范围内后进入STARTUP状态拉高EN引脚并启动一个500毫秒的启动超时定时器。STARTUP期间会持续读取电流监测数据和FLT电平如果在超时时间内没有出现故障就进入RUN状态。RUN状态下主循环每10毫秒采样一次电流值并做滑动平均滤波。如果电流连续三次超过额定值的120%固件先记录一条告警日志但不断电因为一些电机启动或者继电器吸合会产生短暂过流直接切断会造成误动作。如果电流超过150%并且持续超过两次采样则判定为真实过流进入FAULT状态拉低EN关闭输出同时把故障代码写到Flash日志区域。这段逻辑我用的是标准的嵌入式代码分层驱动层封装寄存器读写中间层实现eFuse控制接口应用层跑状态机。以后换其他保护芯片只需要替换驱动层和中间层的适配代码状态机基本不用动。3.2 电流采样滤波与ADC零漂校准PIC32MX664的ADC是12位的参考电压用内部3.3V。我最初直接采样电流监测电压不做任何处理结果发现数据跳动有正负30mA左右在5A量程下不算大但到了软件告警阈值附近就会出现频繁的边界抖动。后面做了三处处理硬件上把RC滤波时间常数从0.1ms提高到1ms软件里对连续10个采样点做移动平均另外在系统初始化时做一次零电流校准。零电流校准这个步骤容易被忽略但实际效果很明显。因为ADC引脚上即使没有电流输入也会存在微小的失调电压加上PCB地线上的压降差异零点偏移可能达到几十毫伏换算到5A量程就是几百毫安的误差。我当时的滤波代码很简单就是一个10点的滑动平均大致长这样#define IMON_CH 4 #define SAMPLE_CNT 10 uint16_t imon_raw[SAMPLE_CNT]; uint16_t imon_sum; uint16_t adc_average(uint16_t ch) { uint16_t i; imon_sum 0; for (i 0; i SAMPLE_CNT; i) { imon_sum adc_read(ch); } return imon_sum / SAMPLE_CNT; }代码只解决均匀噪声如果噪声是周期性的尖峰还是得靠硬件滤波兜底。每次采样后减去零点偏移再套用线性校正系数最终电流显示误差控制在正负1%以内这个精度在工业监控场景里完全够用了。3.3 FLT中断处理与看门狗联动FLT引脚下降沿会触发PIC32MX664的外部中断。在中断服务程序里我只做一件事把故障标志位置1并记录一个精确的故障发生时间戳不做任何复杂处理。复杂逻辑放在主循环状态机里去判断避免在中断里执行耗时操作导致其他实时任务被阻塞。这个思路和嵌入式里常说的“中断快进快出”是一致的。看门狗联动的设计上我让正常RUN状态下每100毫秒喂一次狗。如果主程序跑飞看门狗复位后PIC32会先检查故障日志区发现上次复位原因是看门狗超时就执行一种缓慢恢复策略等待10秒后重新尝试上电而不是立刻恢复。这样做的理由是如果电源侧还有故障快速恢复只会反复冲击TPS259483不如给系统一个冷却窗口。4. 实测避坑浪涌、噪声与FLT误报排查4.1 上电瞬间浪涌导致误保护第一次打板回来我在实验室用电子负载做上电测试结果发现一个问题空载上电一切正常但带着后级DC/DC和电容负载上电时TPS259483偶发关断。用示波器观察电流监测信号波形发现启动瞬间电流尖峰超过了限流点。原因是软启动电容的值取得太小输出电压爬升太快后级电容充电电流叠加负载电流瞬间冲击超过了ILIM设定值。解决方法是把软启动电容从1nF加到10nF让输出电压上升时间从几百微秒拉长到几个毫秒。调完之后启动尖峰明显下降但在电容负载更大的情况下仍然会触发最后我把限流点从5A放宽到6A并保留了软启动时间的裕量。实测下来空载、满载、热插拔场景都能稳定完成上电。4.2 电流监测引脚的噪声和ADC抖动第二个问题是开关电源带来的高频噪声串入电流监测引脚。板上的DC/DC开关频率是300kHz虽然监测引脚附近有滤波电容但布线时我把信号走线放在了电感下方导致高频噪声耦合明显ADC采样值在负载稳定时依然波动。后来我把监测走线改到GND屏蔽层的另一侧并远离开关节点同时把RC滤波的极点从1kHz降到300Hz问题基本消失。这里给我的经验是这类模拟信号的低通滤波不能只靠软件平均值先要从布局上隔离噪声源。PCB布线阶段就要把电流监测信号当作敏感模拟信号对待而不是随手拉一根线过去。改一次板周期很长这个教训我记得很牢。4.3 FLT误报与感性负载反电动势还有一次现场测试中后端一个继电器突然释放感性负载产生反电动势导致TPS259483的FLT引脚瞬间拉低但几毫秒后又恢复。起初以为是芯片质量问题后来抓波形发现是反电动势在FLT引脚上产生的电压尖峰触发了误检。我在FLT引脚上加了一个100pF的小电容并且把上拉电阻从10kΩ改成4.7kΩ增强了抗干扰能力之后没有再出现类似问题。从这些排查过程来看工业现场的问题很多时候不是芯片本身的问题而是外部干扰没有控制好。eFuse的故障输出引脚、电流监测引脚本质上都是敏感节点都需要当作模拟信号来对待否则再好的保护芯片也会被噪声误导。现象可能原因排查方法处理方式上电偶发关断软启动时间过短观察电流监测波形增大软启动电容、放宽限流点电流采样值波动开关节点的噪声耦合检查PCB走线位置走线远离电感、加强RC滤波FLT误报感性负载反电动势尖峰抓FLT引脚波形加100pF电容、上拉电阻改小电流显示偏差大ADC零点未校准0A电流下读取ADC记录偏移量并做软件校正4.4 方案复用价值和个人体会整个方案做完之后我又把同一套硬件设计复制到另一个24V输入的产品上只改了UVLO和OVP分压电阻以及ILIM限流电阻PIC32MX664的固件完全复用只调整了参数宏。这让我明显感觉到把eFuse和MCU配合使用最大的价值在于保护阈值可以按产品配置故障行为可以通过软件灵活调整而不是每个产品都重新设计一套保护电路。如果后续要做得更完善可以增加电流监测的DMA采集、把故障日志通过CAN上传到上位机、增加远程复位命令甚至把配置参数表放到Flash的独立扇区支持出厂校准。这些增量功能我还没来得及全部做完但基础框架已经留好了接口改起来并不难。对我来说这套组合最值得推荐的地方不是单个芯片有多强而是硬件保护和软件管理各司其职排查问题时能很快定位到底是谁触发了保护光这一点就省下了大量联调时间。