尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

eFuse+MCU双层电源保护架构,工业嵌入式设计实战

eFuse+MCU双层电源保护架构,工业嵌入式设计实战 嵌入式系统里的电源路径保护我一直觉得是个“平时没人夸、出事全怪你”的活儿。尤其在工业现场电机启停的母线波动、电磁阀线圈的反冲、现场接线不小心短一下都有可能把板子上的主控、传感器、通信芯片一波带走。最近我手里一个项目就是做工业数据采集终端原本用的是一颗普通LDO加自恢复保险丝结果连续两轮样机测试都出现“莫名其妙的复位”和“电源芯片过热”后来干脆把方案整个推翻换成了TI的TPS259483AYWPR电子保险丝做主路径保护再搭配GD32VF103VBT6RISC-V内核MCU做系统级监控和策略响应。这套组合实测下来抗住了不少暴力场景今天把设计思路和实操细节整理出来给正在做同类嵌入式或工业板卡的朋友一个参考。这篇文章适合三类人一是做工业控制、仪器仪表、现场采集设备正在为电源入口保护发愁的硬件工程师二是想深入了解电子保险丝eFuse选型和外围参数计算的嵌入式开发三是关注国产RISC-V MCU在真实项目中怎么落地的人。我会从选型逻辑、电路参数计算、固件配合到实测数据一条线讲完。1. 项目思路与硬件选型为什么是“eFuse MCU”双层架构1.1 传统电源保护方案的痛点先说说我之前为什么执意要换掉自恢复保险丝和分立MOSFET那套老办法。自恢复保险丝的问题是动作精度太差标称1A的PPTC实际上要到1.3A甚至1.5A才会触发而且触发的速度受温度影响非常大冬天和夏天同一个故障电流动作时间能差出一倍以上。对于工业设备来说这种不确定的保护行为很容易造成下游器件损坏之后保险丝还没反应。分立方案则面临两个尴尬。第一个是过流检测用采样电阻加比较器精度能做到但响应速度受限于比较器带宽和MOSFET栅极驱动的关断速度一旦遇到输出端硬短路电压跌落速度远超比较器响应还没等保护动作输出电容和负载已经受伤了。第二个是反极性保护、过压保护、浪涌抑制这些功能都要单独电路堆PCB面积和BOM成本都很感人。我当时那块主控板空间已经非常紧张再塞一堆保护分立器件实在不现实。所以我把目光转向了集成的电子保险丝。TPS259483AYWPR是TI推出的eFuse产品它把过压保护、过流保护、短路保护、软启动、反向电流阻断、热关断这些功能全部集成在一个小封装里。最关键的一点是它的保护响应是硅片内部的模拟电路直接完成的不需要MCU参与中断从故障发生到关断MOSFET的时间可以做到微秒级这是软件方案根本追不上的。1.2 GD32VF103VBT6 在系统架构里的定位可能有人会问既然TPS259483自己就能保护为什么还要挂一颗MCU这里要区分两个概念芯片内部的“模拟保护”和系统级的“策略保护”。模拟保护负责第一时间切断故障保护下游设备不损坏但切断之后怎么办是保持关断、自动重试、还是锁死这个策略问题必须由系统主控来决策。同时电源路径的状态信息——比如过压了多少次、过流发生在哪个负载上、芯片温度是否逼近极限——都需要上报给上位机方便现场运维定位问题。GD32VF103VBT6在这套系统里的作用就是干这个。它是兆易创新基于RISC-V内核Nuclei N200系列的32位MCU有100脚封装128KB Flash和32KB SRAM外设资源对这个项目来说完全够用。我选择它有几个现实理由第一RISC-V架构代码和传统的ARM内核产品不直接通用但对于我们这种新项目来说无所谓反正是从头写驱动第二GD32的生态和STM32非常接近库函数风格相似迁移成本低第三国产器件工业长尾料号供货稳定性比进口芯片好得多这个在2024年到2025年大家应该深有体会。所以GD32VF103在这套方案里不是“主角”而是负责监军和决策的大脑。1.3 双层保护架构的核心思路我的整体设计思路是一句话硬件兜底软件干预。TPS259483AYWPR作为电源路径上的第一道防线用纯模拟方式实现最快速度的保护动作GD32VF103VBT6作为第二道防线通过I2C或GPIO读取TPS259483的状态信息记录故障现象并根据预设策略决定下一步动作。比如瞬时过流可能是负载启动浪涌可以自动恢复而持续过流则是真正故障需要锁存并报警。这种架构还有个好处是——在MCU自身出问题的时候保护功能依然有效。比如MCU程序跑飞了或者死机了eFuse依然会根据硬件阈值执行保护不会出现“主控挂了整个板子就没人管”的尴尬情况。这在工业现场的可靠性设计里非常重要电源路径保护不能依赖一个可能会死机的CPU。2. 硬件电路核心设计TPS259483 外围要怎么搭2.1 引脚功能和最小系统搭建TPS259483AYWPR的引脚不多但每个引脚的作用在系统设计时都要想清楚。关键引脚包括电源输入VIN、电源输出VOUT、片选/使能EN、限流设定ILIM、软启动设定dV/dT、故障输出FLT、以及地PGND。可能有的版本和封装引脚命名会有差异以官方数据手册为准。先说使能引脚EN。我这边的做法是接一个100kΩ下拉电阻然后由GD32VF103的一个GPIO通过MOS管或三极管去控制。上电之初MCU还没启动时EN保持低电平eFuse输出被封锁避免系统在上电瞬间面对未稳定的输入电压。等到MCU完成启动、时钟稳定、外设初始化之后再主动拉高EN开启电源路径。这个顺序非常关键尤其是板上还有外部存储和通信模块的时候如果电源上电太早这些器件可能进入不确定状态。dV/dT引脚是设置软启动时间的决定输出电压爬升斜率。ILIM引脚接一个电阻到地设定过流保护阈值。FLT是开漏输出正常工作时为高阻态发生故障时被拉低。我把它接到了GD32VF103的外部中断引脚上这样eFuse一旦动作MCU就能立刻感知不用轮询。PGND要注意和信号地单点连接避免大电流噪声干扰控制电路。2.2 dV/dT软启动时间计算细节软启动时间看起来只是一个“慢一点起来”的问题但实际选不好会踩坑。dV/dT引脚的电容大小决定输出端的电压上升速率同时也要兼顾输出端容性负载的充电电流。计算公式按芯片手册提供的关系来算核心思路是输出负载电容C_load、启动时间t_softstart、充电电流I_charge这三者的关系公式是 I_charge C_load × (Vout / t_softstart)。我举个例子。我的输出端负载包括GD32VF103系统、一块4G模组、若干传感器输出电容折算下来大约有82μF4个22μF陶瓷并一个电解。如果软启动时间设为10ms那充电电流就是 82μF × 12V ÷ 10ms 98.4mA这个数值本身不大但如果把软启动设成1ms充电电流就会冲到近1A正好撞上过流阈值导致每次上电都误触发保护。这是我第一次调板时真实踩过的坑——一开始我嫌启动慢把dV/dT电容调小了结果系统一上电就FLT拉低排查了整整半天。所以给个经验值对于输出端总电容在50~100μF范围的应用软启动时间建议不要低于5ms。更好的做法是先算清输出电容的总和再根据允许的启动浪涌电流反推dV/dT电容取值。留30%的裕量是比较稳的。2.3 ILIM限流电阻计算与裕量设计过流阈值的设置是整个电路设计里最有学问的地方。ILIM引脚通过外部电阻R_ILIM设定电流限制值芯片手册里会给对应关系表格或计算方式。选这个电阻不能只盯着额定工作电流必须把负载的瞬态电流考虑进去。比如我这套系统正常工作电流只有600mA但4G模组在发射瞬间TX slot会从电源抽掉2.2A的电流持续时间在几百微秒到1ms左右。如果把阈值卡在1A模组一发射就误保护整机就无法正常工作。正确做法是分析负载波形找最大瞬态电流和持续时间然后结合eFuse的过流响应延时通常有个短暂容忍窗口响应时间随过流倍率增大而缩短来定阈值。我的最终方案是设到3A这样正常瞬态电流约2.2A不会触发保护而真正的短路电流一般会瞬间冲到10A以上会以极快速度被切断。这里有个容易被忽略的细节限流电阻本身也有精度问题加上ILIM引脚内部的参考电压误差整体限流精度可能在±10%左右。所以设定阈值时不要卡到理论值刚好等于最大瞬态电流一定要留15%到20%的裕量。工业上还要考虑高温环境下芯片参数会漂移保守一点总没错。还有一点ILIM电阻的功率不用选大的因为正常工作时流过ILIM引脚的电流非常小但要注意电阻的温漂系数。我建议选温漂在±100ppm/°C以内的精密电阻这样在不同温度环境下阈值一致性会好很多。3. 固件配合GD32VF103 的监控与策略逻辑3.1 系统状态读取接口设计TPS259483和MCU之间的接口设计我用了两个信号一个是FLT故障中断GPIO外部中断另一个是用I2C读取芯片内部的电压/电流遥测如果型号和配置支持的话有些eFuse会有ADC和寄存器读取能力如果只是纯逻辑输出就通过GPIO分压采样输入输出电压来实现监测。FLT中断进GD32VF103后我第一件事不是立刻恢复而是把当前系统时间戳和相关状态记录下来然后延时50ms再读eFuse的状态电平确认故障是瞬时的还是持续的。因为我之前遇到过FLT因为浪涌毛刺产生几十微秒的脉冲如果MCU响应太快容易误判。稍微延时再确认可以滤掉很多高频干扰。I2C接口则用来定时读取输入电压、输出电压、电流、芯片温度这些信息。GD32VF103的硬件I2C在标准模式下100kHz速率足够用没必要开高速因为电源监控并不需要高刷新率我实际是每200ms读一次存到环形缓冲区里供上位机查询。采样间隔太长看不到瞬态细节太短又占CPU和总线资源200ms在工控场景是个不错的折中。3.2 分级保护策略与自动重启逻辑保护策略不能一刀切我在固件里做了四个级别。一级是“提示级”电流在额定值的80%以下属于正常工作范围只是记录数据便于后续分析负载趋势。二级是“告警级”电流达到额定值但未超过限流点此时系统还能工作但我会启动看门狗计数器如果连续告警超过30秒就主动降载或通知上位机。三级是“瞬态容忍级”出现过流但持续时间在500μs以内比如4G模组发射瞬间这时候eFuse自身大概率不会真正锁死取决于响应延时MCU只记录事件不做干预。四级是“故障级”FLT信号被拉低且持续时间超过10ms说明保护已经动作此时MCU进入故障处理流程。自动重启逻辑我采用“指数退避次数上限”的思路。首次故障后延时100ms重启第二次延时500ms第三次延时2s第四次延时5s最多重试5次。如果连续5次都失败就把状态标记为“永久故障锁存”并且eFuse的EN引脚保持拉低必须人工断电或按复位键才能恢复。这个策略在很多工业设备里都有应用目的是避免不断重启对故障点施加高频冲击扩大损坏范围。3.3 故障日志与上报实现要点故障日志我会同时存在内存和外部Flash里。内存里放最近的20条事件固件里做好覆盖保护外部Flash记录的是带时间戳的历史记录用循环覆盖的方式存最近500条。Flash擦写次数有限所以不能每发生一次事件就立刻写入我在RAM里先缓存等到攒够一定数量或者系统空闲时再批量写入减少擦写次数。上报方式我这里是用串口输出到上位机调试维护时打开串口就能看实时状态。代码框架大概是这个思路typedef struct { uint32_t timestamp; // 事件时间戳 uint8_t event_type; // 事件类型过压/过流/短路/温度/恢复 uint16_t voltage_mv; // 事件发生时输入电压 uint16_t current_ma; // 事件发生时电流 uint8_t temperature; // 芯片温度 } power_event_t; void power_protection_isr(void) { // 外部中断服务函数记录FLT动作事件 save_event_to_ram_buffer(); } void power_protection_task(void) { while (1) { if (fault_retry_count MAX_RETRY) { set_en_pin(GPIO_HIGH); // 重新使能eFuse delay_ms(retry_delay_table[fault_retry_count]); } else { set_en_pin(GPIO_LOW); log_permanent_fault(); } } }代码本身不复杂复杂的是状态机的设计。我在实际实现中踩了一个坑没有做好事件去重导致FLT引脚抖动时一条故障被记成了三条日志里同一时间戳出现了多次记录。后来在确认逻辑里加了“同类型事件10ms内只收一条”的过滤问题就解决了。4. 实测过程与参数调整记录4.1 短路测试与波形观察样机焊好之后最紧张的就是短路测试。我的测试方法是输出端焊了一个香蕉插座直接用粗铜线短接VOUT和GND。使用电子负载的恒定电流模式来模拟过流场景更安全但短路测试更直观。第一次短接时我测到FLT信号从高电平拉低的时间大约在2μs左右VOUT在10μs内掉到接近零整个过程没有明显的火弧。对比之前用自恢复保险丝时短路要几十毫秒才有保护动作这个差距在半导体器件面前简直是代差。用示波器抓了FLT和VOUT的同步波形可以看到FLT拉低在VOUT还没来得及完全跌落之前就已经触发说明eFuse是在输出电流超过阈值的那一瞬间就启动了内部限流关断而不是等到电压跌了才反应。不过也发现一个问题短路电流如果过大VIN侧的输入电压也会被拉出一个明显的凹陷。这就是前面提到要加输入TVS管的原因我用了一颗SMBJ系列TVS在VIN和地之间把瞬态尖峰钳位在器件的耐压范围内。4.2 热插拔与浪涌场景工业现场经常需要带电插拔传感器或通信模块带电插拔对电源路径的伤害在于瞬间的接触阻抗变化会产生电弧拉弧同时负载电容接入瞬间需要极大的充电电流。TPS259483的软启动机制在这里作用非常大它能限制输出电压爬升速率从而控制热插拔时的浪涌电流。我在模拟热插拔时用的是一个小功率电机驱动板作为负载每次插上时观察VOUT和输入电流波形。设置软启动时间10ms时插入瞬间电流尖峰只有约1.1A远远低于3A的保护阈值但如果把软启动时间降到1ms尖峰会冲上3.5A触发保护。这个对比实验充分说明了软启动参数对热插拔场景的重要性。实际应用中如果你的系统需要频繁热插拔软启动时间宁长勿短。另一个容易被忽视的场景是输入电压缓慢爬升比如适配器插入瞬间。eFuse内部有个欠压闭锁UVLO功能输入电压低于某个阈值之前不会开启输出这个功能对于防止电源在上电不稳时带着负载硬启动很有帮助。4.3 参数调整记录表我把整个调试过程中的关键参数调整记录整理成了表格方便大家直接对照参考参数初始值问题现象调整后说明dV/dT电容1nF对应约1ms软启动上电即过流误触发10nF对应约10ms匹配82μF负载电容过流阈值1.5A4G模组发射时就断3.0A覆盖2.2A瞬态电流裕量EN上电延时0ms直接使能MCU之前外设乱序500msMCU启动完成后开电源FLT去重时间无同一故障重复记录10ms窗口过滤日志准确性提升I2C采样周期50ms总线负担偏重200ms足够覆盖瞬态记录需求这张表想传达的核心是电源路径保护不是焊上芯片就能高枕无忧的每个参数都要和你的实际负载、实际场景匹配。别人用的设定值只能做参考不能直接抄。5. 常见问题与排查实录5.1 FLT引脚异常复位问题调试中碰到一个比较典型的问题系统正常运行但FLT引脚会不定期产生几十微秒的窄脉冲导致MCU中断频繁触发。波形抓下来发现脉冲宽度只有大概30μs而且和负载动作的时间有模糊的对应关系但负载电流明明没有超过阈值。排查思路是怀疑eFuse内部有周期性自检或限流检测动作也可能是我PCB布局导致的噪声耦合到FLT走线上。我用示波器的探头点在FLT引脚附近确认信号不是外部干扰后把FLT引脚到MCU之间串联了一个1kΩ电阻加了一个10nF的旁路电容到地构成一个低通滤波器把窄脉冲完全滤掉了。同时把MCU中断改成双沿触发并在中断里去抖确认问题彻底解决。这里想提醒大家FLT引脚这种状态输出信号虽然看起来是数字量但在高频噪声环境里一样要小心布局和滤波。5.2 软启动时间过短导致MCU掉电前面提过我一开始把软启动时间设得很短结果是上电瞬间充电电流巨大瞬间压降导致MCU还没跑起来就掉电复位甚至反复重启。这个问题在只有纯阻性负载的板子上不容易暴露但一旦挂了大电容负载就非常明显。排查办法是分段排除先断开所有负载只留输出电容上电测VOUT波形然后逐步增加负载每加一路都观察启动波形。最后定位到问题不是eFuse本身而是软启动参数没有配合负载电容。这种“排查法”建议大家都养成习惯先最小系统验证再逐步加负载不要一上来就全负载通电。另外一个小经验如果板子上的MCU对电压跌落特别敏感可以在MCU的供电轨上额外加一个几十μF的储能电容相当于一个微型UPS能在电压短暂跌落时保证MCU不死机。这个电容容值不用大能撑过最恶劣的跌落时间就行。5.3 PCB布局与散热注意事项TPS259483在工作时当负载电流几安培导通阻抗即便只有几十毫欧功耗依然有几瓦到几十瓦的量级。我自己实测3A电流、导通阻抗约45mΩ时芯片表面温度能到85度左右如果再叠加工业现场本来就有的高温环境这个余量是很紧张的。所以PCB布局必须把热考虑进去。我的做法是芯片下方铺设大面积铜皮并且打过孔阵列连接到背面和电源平面形成一个散热通道。VIN和VOUT的铜皮尽量加宽不要只用细线连接减少走线电阻本身带来的温升。另外ILIM限流电阻、dV/dT电容这类小信号器件要尽量靠近芯片引脚避免长走线引入寄生电容干扰内部基准。PGND处理上用独立的岛连接输入电容、输出电容和芯片PGND再通过一个0Ω电阻或磁珠连接到系统的模拟地和数字地防止大电流瞬变污染控制电路。如果板子空间允许可以在eFuse边上留一个温度检测电阻的焊盘通过ADC实时读取PCB温度作为“触电预警”参考。这个在工业现场非常实用有时候设备内部的温度会静静升到危险值等你发现时芯片已经出现间歇性保护了。6. 个人实操心得与后续扩展方向这套TPS259483AYWPR加GD32VF103VBT6的方案跑下来我最大的体会是电源路径保护设计的重点不在选哪颗芯片而在对系统负载特征的把握。你得清楚每个负载的稳态电流、瞬态电流、耐受时间才知道阈值该设多少、软启动该设多快。芯片只是一把锁锁的力度和开锁的策略才是设计者的功夫。后续我打算在这个基础上加一个电流监测环通过eFuse的电流遥测数据在MCU里做长时间统计识别哪些负载出现了老化趋势——比如电机轴承磨损初期电流会缓慢增大这种“渐进式异常”比突发短路更难发现但通过电流趋势分析是可以提前预警的。另外GD32VF103的RISC-V内核跑轻量级RTOS也很合适下一步我准备把电源监控任务放到RTOS里管理配合低功耗模式让整个终端在待机时把功耗降下来。如果大家有类似项目遇到问题欢迎在评论区一起讨论。
返回列表