资讯动态

基于eFuse与MCU的工业电源智能保护系统设计

发布时间:2026/10/8 19:09:31 来源:尧图企业网站定制
工业现场的24V供电总线永远比实验室里那张台架要残酷得多。电机启停的瞬态过冲、变频器串进来的尖峰噪声、操作员带电插拔传感器连接器时的打火、负载端电容充电时高达几安培的浪涌电流任何一个都能让脆弱的板卡当场“暴毙”。我这次要分享的项目就是围绕一颗电源路径保护器件 TPS259483AYWPR 和一颗 32 位 MCU PIC32MX675F256L 搭起来的嵌入式电源保护系统——简单来说它相当于在电源入口装了一道“带大脑的智能闸门”TPS259483 负责快速切断过流、过压和浪涌PIC32 负责设定保护策略、记录故障现场、上报异常状态。这套方案面向的是嵌入式和工业应用中最常见的电源路径保护需求。如果你是做仪表、控制器、网关这类设备的硬件工程师或者正在为“板子上电瞬间烧保险丝”“现场偶发短路导致接口芯片打穿”这类问题挠头那这篇文章应该能帮你少走不少弯路。下面我把整个项目的选型逻辑、硬件设计、参数计算、固件配合和调试过程完整复盘一遍全部是基于我实际跑过的电路和踩过的坑。1. 为什么要在电源路径上加一道“智能闸门”1.1 工业现场的电源真的没你想的那么干净很多人第一次做工业产品觉得“24V 进来经过 DC-DC 变成 3.3V不就完事了吗”实际现场的问题远比这个复杂。第一类是瞬态过压。电磁阀、继电器、接触器都是大电感负载断电瞬间的反电动势可以在母线上打出上百伏的尖峰。虽然绝大多数工业设备前端会加 TVS 和防反接电路但 TVS 的钳位电压往往远高于系统正常工作电压能量大的时候电压尖峰还是有机会顺着电源路径窜进后级电路。第二类是浪涌电流。嵌入式板卡后级往往有一排大容量电解电容和多个 DC-DC 模块上电瞬间这些电容相当于短路充电电流可以轻松冲到实际工作电流的十倍以上。如果电源入口没有限流机制这一个浪涌就可能把 PCB 上的铜箔、连接器触点、甚至上游电源模块直接打坏。第三类是真正的硬短路。可能是线缆被压伤、PCB 焊桥、连接器内部进水任何一路负载短路如果不及时切断电流会持续释放发热集中在故障点轻则烧板子重则烧到整个机柜的电源模块保护跳闸。更麻烦的是这种故障往往不是一次性烧断的而是“损坏-重启-再损坏”的连锁过程。1.2 传统方案有什么不靠谱的地方我早期做项目电源保护就是一颗玻璃管保险丝或者自恢复保险丝。玻璃管保险丝的问题是动作太慢、精度太低而且熔断之后必须人工干预远程设备根本没法自动恢复。自恢复保险丝好一点能自动复位但它的动作曲线随温度漂移很大60℃环境下的动作电流和25℃环境下差不少设计时很难精确把控。更关键的是这两种方案都没有“主动控制”能力——工程师没法通过 MCU 去关断、复位、记录故障。后来有人用分立 PMOS 加采样电阻搭限流电路确实可以实现电子开关功能。但分立方案有个通病采样电阻上的压降随电流变化大电流时损耗高比较器阈值受温度和器件离散性影响一致性差短路保护响应速度完全取决于比较器带宽和外围 RC 参数很容易在微秒级短路面前反应不过来。在量产产品里这种电路很难保证每一台的保护点都一致。1.3 eFuse 的思路把保险丝做成一个可控的功率开关这就是 TPS259483AYWPR 这类 eFuse电子保险丝器件存在的意义。它把功率 MOSFET、电流采样电路、比较器、驱动逻辑、电荷泵、热保护全部集成在一颗芯片里。外部只需要很少的电阻电容设置参数就能实现精确的限流、可编程的软启动斜率、输入过压保护、短路快速关断、反向电流阻断和过热保护。在整套系统里TPS259483AYWPR 扮演的是“执行层”它负责在几百纳秒到几微秒的时间尺度上响应故障。而 PIC32MX675F256L 扮演的是“决策层”它负责设定什么时候允许开启、什么时候关断后尝试恢复、如何把故障信息上报给上位机。这种“模拟硬件快速响应 数字逻辑策略决策”的分工是我后来一直坚持的设计思路。因为再快的 MCU 也不可能在主频 80MHz 的中断里完成微秒级的短路保护快速保护必须靠硬件本身完成MCU 要做的只是善后和决策。2. 方案选型为什么是这两颗料2.1 TPS259483AYWPR 的核心特性拆解TPS25948 系列是 TI 的电源路径保护器件后缀 AYWPR 对应的是特定的封装和电气规格。它面向的是 4V 到 18V 级别的供电系统正好覆盖了我这次项目里 12V/24V 工业总线的需求。选这颗器件时我主要看重它几个特性。首先是可编程电流限制。eFuse 内部有精密的电流采样通过一颗外部电阻就能把限流点设定在一个很宽的范围内精度比分立方案高一个数量级。这颗料能让我把限流点设定在额定电流的 120% 到 150% 之间既给瞬时浪涌留出空间又不至于让故障电流烧毁后端。其次是可编程的输出压摆率控制。通过 SS 引脚上的电容能决定输出从 0V 爬升到目标电压的时间。这个功能单独拿出来就值回票价它能把上电瞬间的浪涌电流从几安培压到几百毫安让后级电容从容充电。第三是集成的输入过压保护和热关断。OVP 引脚配合电阻分压就能设置过压阈值省掉一颗额外的电压检测芯片。芯片内部结温超过阈值时自动关断输出防止故障点持续发热导致灾难性损坏。此外FLT 故障开漏输出引脚能直接把过流、过压、热关断等故障状态拉低给 MCU 送一个干净的中断信号。配合 EN 使能引脚MCU 就能像开关一样控制电源通断。2.2 PIC32MX675F256L 为什么够用很多人一看 PIC32 就觉得冷门觉得“怎么不用 STM32”这里有个很重要的考量角度项目要的是“够用”且“好供货”。PIC32MX675F256L 是 Microchip 的 MIPS M4K 内核 MCU主频 80MHz256KB Flash、64KB RAM。这个配置在如今的嵌入式领域不算高但在这个项目里刚刚好我需要的是可靠的 GPIO 控制、多通道 ADC 采样、CAN 或 UART 通信、以及足够存放故障日志的外部 Flash 接口这些它都具备而且 MIPS 内核的抗干扰口碑在工业圈里并不差。更重要的是工业场景的长期供货。Microchip 对工业级型号的承诺供货周期通常比消费级长得多对于要卖五到十年的工控产品来说这是隐性成本里很关键的一环。而且这颗料有带 CAN 控制的型号可以直接对接工业现场总线省掉一颗独立的 CAN 收发器之外的协议处理负担。256KB Flash 除了跑应用逻辑还能塞下一套简单的 Bootloader 和通信协议栈扩展性也够。2.3 系统供电架构的设计考量选完核心器件之后必须先确定一个架构问题PIC32 的供电到底从哪里取方案 A 是让 MCU 直接从 eFuse 的输出侧取电。好处是电路简单eFuse 关断时 MCU 也跟着断电整体状态一致。坏处很明显一旦 eFuse 因为过流动作关断MCU 自己也失电了根本没法执行故障记录和上报远程设备发生故障后只剩一团迷雾。方案 B 是让 MCU 从 eFuse 的输入侧取电用一级独立的 DC-DC 降压到 3.3V。eFuse 只负责控制负载主回路的通断即使它关断了MCU 依然活着能记录故障现场、尝试恢复、通过 CAN 向上位机发送故障码。这个方案唯一的代价是多了一路小功率电源成本增加不大但系统的可诊断性完全不一样。我最终选了方案 B。整个供电链路是这样的24V 输入先经过 TVS 和输入滤波电容分两路走——一路进入 TPS259483 的主功率回路输出给负载另一路进入一个宽压输入的 DC-DC 降压模块我用的是 TPS5436060V 耐压留了充足的电压余量降出 5V 或者 3.3V 给 PIC32 及外围逻辑供电。这样做的结果就是哪怕主回路被打到短路保护状态板上的“大脑”还是清醒的。3. 硬件电路设计与关键参数计算3.1 典型电路拓扑和引脚功能TPS259483AYWPR 的外围电路很简洁我列一下核心引脚和它们在电路里的角色引脚功能接入方式VIN功率输入接 24V 输入并联输入电容VOUT功率输出接负载回路并联输出电容EN使能输入接 PIC32 的 GPIO低电平关断FLT故障开漏输出经上拉和 RC 滤波接 PIC32 中断引脚SS压摆率控制接对地电容决定 VOUT 爬升速度OVP过压检测经电阻分压接 VINRLIM限流设定接设定电阻到地输入侧放了 10μF 陶瓷电容加 100μF 电解电容的组合陶瓷电容负责滤除高频噪声电解电容负责吸收输入端的长时能量波动。输出侧同样放了 22μF 陶瓷电容和 47μF 电解电容保证负载瞬变时输出电压不会掉太多。重点说一下两个“不能省”的设计。第一个是 FLT 的上拉电阻因为它是开漏输出必须接一个 10kΩ 上拉到 3.3V而且这个上拉电压要和 MCU 的 I/O 电平匹配不能直接上拉到 24V。第二个是 EN 引脚的默认状态我会在 PIC32 的 GPIO 初始化里强制把它配成默认低电平再配合一个 100kΩ 下地电阻确保 MCU 在复位和启动的几十毫秒里eFuse 处于关闭状态不让负载在上电瞬间无人看管地通电。3.2 限流电阻和软启动电容的取值计算限流设定是这个设计里最核心的一个参数。我按负载额定电流 2A 来设计把限流点设定在 3A。为什么留了 50% 的余量因为负载启动时可能有短暂的浪涌阈值定得太死容易误动作但也不能定太高否则短路时流过故障点的能量就太大了。实际取值时我参考数据手册里限流设定电阻和电流之间的关系曲线在 3A 附近取对应的电阻标称值。需要提醒的是不同批次的数据手册给出的系数可能略有差异量产设计一定要以你手头那颗料对应版次手册里的图表为准别在网上随手抄一个电阻值。软启动电容的计算比限流电阻有意思因为它是直接决定浪涌电流大小的关键。TPS25948 的 SS 引脚内部有一个恒流源恒定电流大约 4.2μA 给外部电容充电输出电压就跟着电容电压线性上升。我需要把输出从 0V 爬到 24V 的时间控制在约 3 到 5 毫秒。计算方式很简单充电电流 4.2μA如果目标是 5ms 内完成 24V 跳变等效的压摆率是 24V/5ms 4.8V/ms那么电容值就是 4.2μA ÷ 4.8V/ms ≈ 0.88nF。我取了一个 1nF 的标称值实测输出爬升时间约 5ms后级电容的浪涌电流被限制在合理范围内。如果后端接了很大容量的电容比如 1000μF那么启动电流就是 1000μF × 4.8V/ms 4.8A这时候就要把 CSS 加大到 2.2nF 左右把爬升时间拉长到 10ms 以上否则软启会失去意义。3.3 OVP 过压阈值的分压计算OVP 功能是通过检测 OVP 引脚电压实现的。芯片内部的参考电压大约是 1.2V只要 OVP 引脚电压超过这个值就判定为输入过压。我的系统标称 24V要求把过压保护点设在 28V。分压电阻的选择要兼顾静态功耗和输入阻抗我习惯取分压网络总电流在 100μA 上下。计算方法设分压电阻 R1 在上连接 VIN 到 OVP 引脚R2 在下OVP 引脚到 GND那么 OVP 引脚电压就是 VIN × R2/(R1R2)。当 VIN 28V 时要求 OVP 1.2V所以 R2/(R1R2) 1.2/28 0.0429。若取 R2 10kΩ则 R1 10kΩ × (1/0.0429 - 1) ≈ 223kΩ取标称值 220kΩ 即可。实际测试时我把电压往上调到 28.5V能明显看到 VOUT 迅速拉低响应速度比让 MCU 的 ADC 去判断快得多。有一点必须注意OVP 分压电阻走线要尽量短直接从 VIN 引脚附近取电如果从远端线缆上引长走线本身会带来寄生电感过压瞬态时反而会在 OVP 引脚上感应出尖峰导致误触发。3.4 PCB Layout 的实操要点这类带功率路径的板子Layout 比原理图更能决定成败。我在几轮改板中总结了几条特别值得注意的经验。第一输入电容要贴着 VIN 和 GND 引脚放输出电容贴着 VOUT 和 GND 放。功率回路里的 dI/dt 很大任何一段走线电感都会变成电压尖峰陶瓷电容和高频去耦必须放在电流路径起点不能隔着一个过孔。第二限流设定电阻 RLIM 和软启动电容 CSS 的地要单独走一小段线回到芯片底部的功率 GND 引脚千万不要把它们的地串进功率大电流回流路径里。有一次我为了省事把 CSS 的地直接接到了旁边负载的接地端结果上电瞬间噪声干扰导致限流点抖动查了好久才发现是地平面被功率电流污染了。第三散热设计不能只看引脚。TPS25948 的封装底部有散热焊盘必须打过孔连接到内层或底层的大面积铜皮形成散热通道。工控产品往往装在密封机箱里空气对流差全靠 PCB 铜皮往外导散热焊盘空焊或者过孔太少芯片结温很容易冲到保护值导致设备明明没故障却频繁热关断。第四FLT 信号线的处理。它是开漏输出走线不宜太长最好就近上拉后再进 MCU。如果在长走线之间遇到功率继电器或者大电流开关切换辐射噪声很容易耦合进来表现为偶发的中断触发。可以在 MCU 输入串一个 1kΩ 电阻并在对地并一个 100pF 电容压低噪声敏感度。3.5 与 MCU 接口的电平匹配策略PIC32MX675F256L 的 I/O 是 3.3V 逻辑电平而 TPS259483 的 EN 和 FLT 都工作在芯片自己的电源域。EN 引脚通常直接兼容逻辑电平但稳妥起见我加了一颗 2N7002 小信号 MOSFET 做电平转换用 MCU 的 GPIO 控制栅极漏极接 eFuse 的 EN 上拉到 VIN。这样不仅能解决电平匹配问题还带来一个额外的好处MCU 掉电或程序跑飞时MOSFET 栅极自然拉低eFuse 自动回到关断状态不会出现“主控死了、输出还开着”的危险局面。FLT 方向正好相反是 eFuse 输出到 MCU因为它是开漏直接上拉到 3.3V 就可以唯一要注意的是 FLT 的高电平绝对不能超过 MCU 的 VDD 太多所以我把它和 MCU 的 3.3V 系统严格共地避免地电位漂移导致引脚过压。4. 固件实现让保护策略“活”起来4.1 初始化与自检先把底盘打好固件第一件事不是保护负载而是先保护自己。PIC32 上电后第一时间完成以下动作配置时钟。用内部的 8MHz 振荡器经过 PLL 倍频到 80MHz所有外设总线时钟配置完成后才能进入正式逻辑。初始化 GPIO。先把控制 eFuse EN 的引脚强制输出低电平确保上电到初始化完成的时间窗口里输出是关闭的。这里有个非常隐蔽的坑有些 PIC32 引脚复位后的默认状态是输入高组如果外部使能线上有上拉电阻MCU 还没来得及初始化eFuse 就已经被拉高导通了。我的对策就是加那颗 100kΩ 下拉电阻让默认电位钳在低电平。配置外部中断。FLT 引脚接到 INT 外部中断配置为下降沿触发。注意要开内部上拉或者依赖外部上拉电阻确保非故障状态下引脚是高电平不会出现悬空抖动。初始化 ADC。用一个通道监测 VOUT 分压后的电压另一个通道监测负载回路电流采样信号用于记录故障时刻的“现场数据”。自检流程正常启动后先短暂打开 eFuse比如 100ms然后读取 FLT 状态和 VOUT 电压。如果 VOUT 没有建立起来或者 FLT 被拉低说明负载回路存在短路或者板子焊接有异常此时直接进入故障锁存状态并上报错误码。这一步在产线测试时特别有用能迅速暴露焊接短路、电容焊反这类低级问题。void power_path_self_test(void) { // 使能 eFuse eFuse_EN_SetHigh(); delay_ms(100); if (eFuse_FLT_IsLow()) { system_set_fault_code(FAULT_INIT_SHORT); eFuse_EN_SetLow(); report_error(Self-test failed: short at power path); } else { uint16_t vout_adc adc_read(VOUT_CHANNEL); if (vout_adc VOUT_VALID_THRESHOLD) { system_set_fault_code(FAULT_NO_OUTPUT); report_error(Self-test failed: no output voltage); } // 自检通过正常进入运行模式 } }这段代码的逻辑很直白但价值在于它把“硬件有没有问题”和“软件有没有问题”的边界划清楚了。如果自检失败要么是负载确实短路要么是 eFuse 焊接有问题测试人员不用拿着万用表一点点去量能直接根据故障码定位。4.2 运行时的保护控制与故障恢复策略系统运行起来之后固件的核心是一个分优先级的保护策略。我把保护分成了几层各有各的触发条件和动作。第一层是硬件微秒级保护。过流、短路、过压、过热这些动作全部交给 TPS259483 自己做它会在微秒量级把通道关断并把 FLT 拉低。这是整条防线里速度最快的MCU 在这里完全不需要参与。第二层是 MCU 的毫秒级响应。FLT 下降沿触发外部中断后MCU 进入故障处理函数记录当前时间戳、读取 ADC 通道里的电压和电流数据、保存到日志缓冲区然后通过 CAN 或 UART 上报故障码。紧接着MCU 会执行一条“重试策略”等待 1 秒让故障点冷却再次尝试开启 eFuse。为什么是重试一次而不是反复重试我的切身感受是短路故障发生后故障点往往温度很高、甚至有电弧碳化反复通电只会让故障扩大而且 eFuse 内部的热积累也经不起高频冲击。重试一次的逻辑是假设瞬时过流已经消失如果重试后故障依旧就彻底锁存输出除非收到上位机的远程解锁指令否则不允许再自动开启。第三层是软件预警。不直接触发关断的故障我先记录下来——电流持续高于额定值 80% 时向监控后台发预警消息。这一招在处理电机启动这种合法大电流场景时非常有用否则板子会频繁误触发过流保护。void __ISR(_EXTERNAL_0_VECTOR, ipl2) FLT_Int_Handler(void) { // 清除中断标志 clear_int_flag(); // 记录现场数据 log_add_entry(LOG_FAULT, adc_read(VOUT_CHANNEL), adc_read(CURRENT_CHANNEL), get_uptime_ms()); // 关闭输出避免继续向故障点供电 eFuse_EN_SetLow(); // 上报故障代码 can_send_fault_frame(FAULT_EFLAG); // 更新状态机 power_state STATE_FAULT_LATCH; }这里要强调一点中断服务程序里只做“记录 关断 上报”把“重试”这件事放到主循环的状态机里处理。因为中断里做延时、做重试是大忌会阻塞其他更紧急的中断而且 lay off 时间很难准确。状态机的好处是可以处理各种组合情况比如故障发生在自检阶段和运行阶段处理策略就应该不同。4.3 故障记录与远程诊断只把故障上报给上位机还不够现场设备掉电后故障信息就丢了这是工程师最头疼的。我在固件里加了一个 Flash 日志区把每次故障的时间戳、电压、电流、故障类型写进去。为了避免 Flash 频繁擦写损坏我用环形缓冲区结构最多保存最近二十条记录当下一批新记录写入时覆盖最旧的一条。每次板卡上电在启动日志里专门输出一条存储的故障总数这样服务工程师一到现场不用拆机就能通过串口或者 CAN 看到上一次故障的确切原因。在我的项目里CAN 总线是主要的对外接口。故障上报帧的数据格式包括设备地址、故障码、电压电流的 ADC 原始值、时间戳。上位机收到后可以自动弹窗告警也可以存库供事后分析。这个思路对设备维护很有价值——客户报修“设备不定时重启”远程 ID 日志一看“故障码 0x21电流 3.2A时间凌晨 2:47”基本就能判断是深夜电压波动导致的过压保护根本不用跑现场。5. 调试阶段踩过的坑和排查技巧5.1 上电瞬间的误锁存问题第一次打样回来接上 24V 电源TPSS259483 直接过流锁存连自检都过不去。排查用的方法是同时挂三根示波器探头VIN、VOUT、FLT再用一个电流探头看输入电流。波形显示VOUT 刚开始爬升的几十微秒里输入电流瞬间冲到了 5A 多超过了我设置的 3A 限流点。原因很典型后级 DC-DC 输入端有一个 100μF 电解电容和一个大容量的陶瓷电容阵列eFuse 虽然有软启动功能但 VOUT 爬升到接近 24V 时后级电容充电电流加上 DC-DC 初期反灌的冲击短时能量还是超了。解决方式不是单纯加大限流点而是两条路同时走一是加大软启动电容从 1nF 加到 2.2nF把爬升时间延长到 10ms 左右二是在负载侧加了 PTC 缓启动或者让后级 DC-DC 采用带内部软启的型号两级延迟错开不让所有电容同时充电。改完实测启动电流峰值降到了 2.1A安全落在限流点以内。5.2 高温环境下“无故”热关断设备进了高温老化箱60℃环境下跑两个小时就开始保护。刚开始怀疑是负载有问题翻日志发现故障码是热关断。查原理图才发现是散热问题eFuse 底部的散热焊盘确实接了内层铜皮但那层铜皮被走线割裂成了几块有效散热面积小得可怜。重新改板后把散热焊盘下的整层铜皮全部保留再打过孔接到底层大面积铺铜同样工况下芯片表面温度降了大概 15℃。所以说这类功率器件在布局时候散热区域的“完整性”比“面积大”更重要铜皮被走线切成一条条散热效果会大打折扣。5.3 FLT 信号的偶发误中断FLT 中断在没有真实故障时偶尔触发现象是设备忽然上报过流故障但负载电流明明正常。用示波器长余辉模式抓 FLT 波形发现在一个继电器吸合的瞬间FLT 引脚上出现了一个宽度约 1 微秒的负向毛刺——这个毛刺是 PCB 走线耦合的开关噪声宽度足够触发外部中断。我用 RC 滤波1kΩ 串联 100pF 对地把噪声尖峰压平同时在中断服务程序里做连续两次读取确认从硬件和软件两个层面把这个问题解决掉。自此以后凡是接中断功能的信号线我都要检查它附近有没有功率开关和大电流走线经过。5.4 MCU 上电时序导致的意外开闸还有一个很容易被忽略的问题PIC32 复位期间GPIO 引脚默认是高阻输入状态如果外部 EN 有上拉eFuse 在 MCU 还没有跑起来时就已经导通了。更麻烦的是MCU 初始化过程需要几十毫秒这几十毫秒恰恰是没有保护的“裸奔期”。我前面说过的下拉电阻方案就是专门对付这个问题的此外还可以在固件初始化的最前面用最快的速度把 EN 对应的引脚拉低双保险。实际测试中这两个“保险”缺一个都有可能在特定电源爬升速率下触发启动闸误开。5.5 故障排查速查表把这几个真实踩过的坑整理成一张速查表方便大家对照自己的问题故障现象最可能原因排查方法解决办法上电瞬间过流锁存软启动电容太小后级电容浪涌超限观察 VIN/VOUT 波形和输入电流峰值加大 CSS或改进后级缓启动高温下热关断散热铜皮散热不足内部结温过高看日志确认故障码测芯片表面温度加散热焊盘过孔保留完整铺铜FLT 偶发误触发长走线耦合开关噪声干扰中断输入示波器长余辉抓 FLT 毛刺加 RC 滤波中断内二次确认上电自动导通且无法受控EN 有上拉MCU 复位期间引脚高阻测 MCU 复位期间的 EN 电平加下拉电阻初始化先拉低输出带载能力不足限流点设置偏低线缆压降过大实测满载电流和 VOUT 跌落重新计算 RLIM或在负载端反馈最后再聊聊我的体会做到这里回头看这套方案真正让它有价值的不是某颗料多先进而是“硬件负责快速断电软件负责策略决策”这个分工关系。我还在这套基础上扩展过一个版本板子上接了四路负载每路一个 eFusePIC32 做集中监控可以通过 CAN 远程控制每一路的通断。遇到某一路短路系统会把其他正常负载保留运行只隔离故障支路整个设备的可用性提升了一大截。如果你要做类似功能方向就是往“多路独立保护”和“远程管理”上靠。最后送大家一个小技巧调试这类电源保护电路示波器四个通道一定全部用上VIN、VOUT、FLT、电流四线同抓任何异常波形都无处藏身。很多疑难杂症还原现场波形比空想原因有效得多。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑