ARTICLE DETAIL

资讯详情

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

基于eFuse与DSC的嵌入式电源路径保护与故障记录方案

基于eFuse与DSC的嵌入式电源路径保护与故障记录方案 搞嵌入式时间长了迟早会在现场遇上这类问题一块工业控制板返修回来说是上电就冒烟打开壳一看电源入口的保险丝炸了后面的 DC-DC、LDO 也没幸免更头疼的是负责记录的 Flash 也一起损坏连事故原因都查不了。换成更大电流的保险丝下次故障只会烧得更难看。真正的矛盾在于传统保险丝只有熔断这一个动作而现代嵌入式和工业系统的电源路径需要的是可控、可观测、可恢复的保护。这篇笔记记录的是我在一套工业控制板上做电源路径保护改造的完整过程核心是 TI 的电子保险丝 TPS259483AYWPR 和 Microchip 的 dsPIC33EP512MU814 的组合——前者用硬件在微秒级掐断异常电流后者用软件把电源状态读回来决定什么时候恢复、要不要锁存。这套方案适合正在做嵌入式电源设计、工业控制板保护或者想把板子从坏了就换升级为坏了能查原因的工程师参考。1. 电源路径保护难在哪保险丝思维和看门狗思维的区别1.1 传统保险丝的关键短板不是动作慢而是信息缺失我见过很多工程师把电源保护简单理解为加个保险丝包括我自己早期也这么干。保险丝确实能保护板子不会彻底烧穿但它有几个天然问题。第一熔断时间与故障电流不成严格比例它靠的是 I²t 积分特性对小过流不敏感对短路又不够快。举个例子一个 5A 的慢熔保险丝在 50A 短路电流下可能需要数毫秒才彻底断开而后级的同步降压芯片内部 MOSFET 在这个时间里早就因为过流和过热损坏了。第二保险丝熔断之后不可恢复现场必须拆壳更换维护成本高。第三也是最关键的它不告诉你故障到底是怎么回事。故障电流是多大、持续了多久、是输入端短路还是负载过流这些问题在保险丝方案里全部无解。很多从消费电子转工业设计的工程师容易忽略一个事实消费电子的电源坏了大不了换一台工业设备在现场一旦烧毁涉及停机、排查、备件更换一小时的停产损失可能远超板子本身。所以工业应用里保护的要求不是烧得慢一点而是尽量别烧、烧了也留证据。1.2 eFuse 把执行和感知集成到了一颗芯片里标题里提到的 TPS259483AYWPR 属于 TI TPS25948 系列里的电子保险丝eFuse本质上是一个带限流、软启动、故障报告和功率开关功能的智能电源开关。和保险丝采样电阻运放MOSFET这种传统分立方案比它最大的优势是把采样、比较、关断、升温保护全部集成在了内部。正常工作时导通电阻很低可以看作一个低损耗开关电流超过设定限值内部 FET 在微秒级把输出限制住或直接关断自身温度过高还会触发过温保护。更实用的是它把状态外露了出来故障输出 FLT 会给 MCU 一个干净的触发沿电流镜像 IMON 会按比例输出一个与负载电流相关的信号。这样一来电源路径第一次变成了一个会说话的部件。从硬件角度看这就是从保险丝到智能开关传感器的升级。1.3 为什么还需要一颗 DSC 来处理上下文如果只用 eFuse系统只是把一个物理执行器做得更快更准但该不该恢复供电这种决策它做不了。很多过流不是永久短路电机启动瞬间、负载电容充电瞬间、热插拔瞬间电流都会短暂超过稳态值。eFuse 如果每次动作都锁死设备就没法用了如果完全不锁死反复短路的能量又可能热积累损坏 PCB。这个判断需要系统上下文也就是 MCU 或 DSC。我用的是 Microchip 的 dsPIC33EP512MU814它是一颗 16 位数字信号控制器带 12 位 ADC、模拟比较器、DMA、CAN/USB 通信外设最高跑 70 MIPS用来做电源管家刚好合适。选它还有一个原因512KB Flash 足够放完整的故障日志和策略代码52KB RAM 也能支撑 ADC DMA 环形缓冲不用额外扩存储。eFuse 负责物理截断DSC 负责读懂状态、执行策略、记录日志这就是我理解的分层保护硬件层保证不会烧软件层保证能恢复日志层保证查得到原因。2. TPS259483AYWPR 的外围电路怎么定限流点、软启动、故障上报2.1 一个可用的引脚连接参考先给出我最终用到的连接关系标注一下具体引脚命名请以手上批次的数据手册为准不同后缀存在差异TPS259483AYWPR dsPIC33EP512MU814 VIN ← 12V 输入总线注意输入极性 VOUT → 后端 DC-DC / LDO 负载 EN/UVLO ← GPIO1高有效使能 FLT → GPIO2外部中断开漏输出需上拉到 3.3V IMON → AN0经过 RC 滤波后进 ADC SS → 对地电容 C_SS决定软启动斜率 ILIM/ISET → 对地电阻 R_ILIM决定限流点 GND → 系统 GND这只是参考接法不代表所有批次完全一致。总体设计思路是eFuse 串在输入总线和后级负载之间MCU 不直接参与功率通路只通过几个信号引脚和 eFuse 交互。这样即使固件跑飞硬件保护依然在线不会因为软件卡死导致电源失控。这个架构原则做工业控制板的人一定深有体会。2.2 限流点到底怎么设别只看稳态要算启动瞬态限流点是整个设计里最重要的参数。定小了正常启动都会误动作定大了保护形同虚设。我习惯按三步走。第一步列出后级所有负载的稳态电流求和得到 I_nom。第二步评估启动瞬态输出电容充电电流是 C_load × dV/dt。如果软启动斜坡是 4ms、输出电压 12V、负载端有 200µF 电容那么这个电流大概是 200µF × 12V / 4ms 0.6A需要叠加到后级负载的启动电流上。第三步把两个量加起来再乘一个 1.2~1.5 的裕量系数得到目标限流点。举个例子I_nom 是 1A启动充电电流 0.6A瞬态峰值就是 1.6A乘 1.3限流点取 2.1A 左右。然后查数据手册里 R_ILIM 和限流值的换算曲线取标准阻值用 1% 精度电阻。这里必须提醒不同型号的 eFuseILIM 换算公式差别很大有的内部还会带温度补偿所以最终限流点一定要在实验室用电子负载实测校准不能只信计算。还有个细节如果系统里存在周期性脉冲负载比如 GSM 模块发射、继电器线圈吸合限流点还要覆盖脉冲峰值否则每次脉冲都会触发 FLT日志会被刷屏。此时更好的做法是提高 eFuse 限流点同时在 MCU 侧做短时积分判断让硬件放行短期脉冲、软件跟踪累积能量。2.3 软启动电容决定输出爬坡斜率别卡在限流边缘SS有的叫 dV/dt引脚接的电容决定了输出电压从 0 到稳态的爬坡速度。原理很简单内部恒流源给电容充电电容电压控制内部基准变化速率从而实现输出斜率的控制。选电容的思路是先定期望的启动时间 t_ramp再根据手册给出的内部充电电流 I_SRC 和电压摆幅用公式估算 C_SS或者直接参考手册里的容值-斜率对应表格。比如希望 12V 输出在 4~6ms 内建立从几 nF 到几十 nF 量级的电容开始试通常就能覆盖。这里我吃过亏软启动时间不要顶格卡在限流点边缘要给温度变化留裕量。电解电容在低温下 ESR 变大充电电流特性会变化如果软启动太快低温启动时更容易假过流。我一般会留 30% 以上的时间余量上电测试时用示波器同时抓 VOUT 和 FLT确认 VOUT 上升期间 FLT 始终保持高电平。如果 VOUT 还没爬到稳态 FLT 就拉低了先别怀疑限流点没设对加大软启动电容往往立竿见影。2.4 故障输出、IMON 和输入保护一起规划FLT 通常是开漏输出动作时拉低所以必须外接上拉电阻到 MCU 的 3.3V 电源域。这个信号我强烈建议接外部中断不要用轮询。eFuse 的过流响应时间在几微秒到几十微秒量级轮询根本反应不过来。FLT 被拉低后MCU 只能知道出过流/过温/过压事件具体是哪一种需要配合 IMON 和输入电压采样一起判断。IMON 是电流镜像输出通常以电流形式送出来要接对地电阻转换成电压再进 ADC。设计时先确定电阻阻值保证满量程电流对应的 IMON 电压不超过 DSC 的 ADC 输入范围。dsPIC33EP 的 ANx 输入范围一般是 0~3.3V有的型号允许到 3.6V。比如希望最大电流 3A 时 IMON 输出 1.5V就按数据手册的 K_IMON 比例算电阻。IMON 引脚出来后我习惯串一个 1kΩ 电阻、并一个 100nF 电容再进 ADC先做一轮硬件降噪。输入保护也不要忽略。TPS25948 这类 eFuse 一般有 UVLO 和 OVP 功能通过 EN/UVLO 引脚的分压电阻设置最低启动电压过压阈值则按手册里的 OVP 引脚或内部固定挡位来配。我用 12V 总线时会把 UVLO 设在 9V 左右过压设在 16V 左右避免上游电源模块输出异常时直接冲击后级。工业现场的很多故障源头其实就是上游电源模块的输出漂了。3. dsPIC33EP512MU814 的电源管家角色外设怎么接、怎么采样、怎么响应3.1 为什么不是随便一颗单片机电源路径保护对 MCU 的要求是采样准、响应快、通信全。dsPIC33EP512MU814 是一颗 144 脚的 16 位 DSC供电 3.0~3.6V最高 70 MIPS512KB Flash、52KB RAM。外设里对我最有用的三样是12 位 ADC多通道、支持 DMA、模拟比较器、丰富的串行接口UART/CAN/USB。普通 8 位单片机也能点灯、读 ADC但要在微秒级响应外部中断的同时维护 I²t 积分、故障日志和多机通信资源明显吃紧。DSC 的优势在于数字信号处理指令集不干扰通用控制ADCDMA 可以做到无 CPU 干预地持续采样CPU 专注做策略判断。3.2 IMON 采集链路量程、滤波和参考电压前面说了 IMON 要转成电压进 ADC设计采集链路时三个参数必须确定满量程电流对应的电压、ADC 的参考电压、滤波截止频率。假设满量程 3A 对应 IMON 电压 1.5V使用 3.3V 外部参考12 位 ADC 的分辨率就是 3.3V/4096 ≈ 0.8mV折合电流分辨率约 1.6mA。实际应用里电流分辨率越高越好但要警惕负载的开关噪声。DC-DC 的开关纹波会通过供电回路串进 IMON如果采样点刚好踩在开关边沿读数会跳得很厉害。我的做法是模拟输入串 1kΩ、并 1nF~100nF 电容组成低通同时让 ADC 在每个开关周期的固定相位触发采样避开纹波尖峰。dsPIC33EP 的 ADC 支持 DMA 连续转换我习惯配置成定时触发DMA 自动把结果搬到 RAM 环形缓冲CPU 每毫秒做一次均值。这样 IMON 的测量几乎不占用 CPU 时间均值后的电流值非常稳定适合作为软件保护的判据。3.3 抓住 FLT 的边沿外部中断优先还可以加一路比较器预报警eFuse 的 FLT 是最重要的告警信号一定要用中断方式接收。dsPIC33EP 的外部中断或者引脚变化中断都可以。我在代码里用外部中断 INT0边沿触发ISR 里只做三件事关中断、记录当前 tick 时间戳、置故障标志其余处理全部放到主循环或高优先级状态机里。这样 ISR 可以短到几个微秒不会影响其他实时任务。另外IMON 电压还可以同时接进 DSC 内部模拟比较器的正输入端比较器负端用内部参考电压设一个预报警阈值比如正常工作电流的 1.3 倍。这样电流快接近 eFuse 限流点时MCU 会先收到比较器触发而不是等 FLT 拉低才反应。预报警可以在负载还在可控范围内时提前介入比如主动降速、断开非关键次级负载把故障消灭在 eFuse 动作之前。这个两层告警的结构比单靠 FLT 信号稳得多。4. 固件里的三层保护策略瞬时、短时、长时决策4.1 第一层eFuse 硬件瞬时保护MCU 只负责见证TPS259483 内部过流和短路保护不需要软件参与这是它存在的意义。发生硬短路时内部 FET 在数据手册规定的几微秒到几十微秒内关断FLT 拉低。MCU 的中断被触发后把时间戳和当前输入电压保存下来进入故障状态。此时绝对不能急着重新使能 EN因为短路点可能还在应该先等故障类型确认。这一层的核心原则是固件永远不要试图比硬件更快而是要比硬件更冷静。4.2 第二层软件短时积分容忍浪涌、识别异常很多工程师容易走另一个极端只要电流超过某个阈值就报警。结果负载电容充电、电机启动稍大一点全变成误报。我在 DSC 上实现了一个滑动窗口电流监视器把 DMA 采到的 IMON 每毫秒算一个均值 I_1ms然后维护最近 100ms 的平均电流 I_avg以及一个能量估算值 E_sum Σ I² × Δt。判定分两档档位 AI_1ms 超过 1.5 倍限流但持续时间小于 20ms判定为瞬态浪涌只记录不动作。档位 BI_avg 或 E_sum 超过阈值持续 50ms 以上判定为持续过载启动降载流程或者主动关断 EN。为什么用 I² 积分而不是单纯看平均值因为功率器件和线缆的温升通常与电流平方成正比E_sum 更接近实际热积累。这个思想就是从 I²t 保护曲线衍生的和保险丝曲线的物理基础同源只不过由软件实现参数可以随时调整不用换料。4.3 第三层锁存与自动重试的取舍故障发生之后eFuse 是自动恢复还是锁存可以通过外部电路和 EN 控制来配置。工业现场我默认用锁存策略发生二次确认的持续过载后MCU 拉低 EN 并保持同时点亮告警灯、通信上报必须人工复位或者上位机下发恢复命令。原因很简单反复自动重启的板子在现场比干脆锁死的板子更难排查而且有些故障比如负载短路每次重启都在冲击硬件容易扩大损坏范围。对于已知的瞬态负载场景比如带偶尔启动的电机可以采用有限次数重试重试 3 次间隔按指数退避1s、2s、4s、8s全部失败后锁存。状态机代码可以这样组织typedef enum { ST_NORMAL, ST_FAULT_DETECT, ST_RETRY_WAIT, ST_LATCH_OFF } pwr_state_t; /* * 主循环里周期调用返回当前保护状态。 * 状态迁移 * NORMAL - FAULT_DETECT : 收到 FLT 中断或软件积分超阈值 * FAULT_DETECT- RETRY_WAIT : 关断 EN等待退避时间 * RETRY_WAIT - NORMAL : 重试成功恢复供电 * RETRY_WAIT - LATCH_OFF : 重试次数耗尽或故障再次出现 */ pwr_state_t power_protect_step(pwr_state_t st, uint32_t now_ms) { static uint8_t retry_cnt; switch (st) { case ST_NORMAL: break; case ST_FAULT_DETECT: /* 关断 EN启动退避计时 */ break; case ST_RETRY_WAIT: /* 退避计时到期后重新拉高 EN */ break; case ST_LATCH_OFF: /* 等待人工复位 */ break; } return st; }伪代码不需要逐行解释关键点是状态迁移要有一个独立的计时基准不要在 ISR 里做延时重试间隔用 tick 计数避免阻塞主循环。4.4 故障日志与远程上报让现场少拆一次机每次故障我除了把 FLT、I_avg、E_sum、输入电压、板载温度打包之外还会在数据 Flash 里写一条记录故障类型、持续时间、退出方式自动恢复还是锁存、时间戳。这些数据通过 UART 或 CAN 发到上位机现场人员不用拆板子就能知道什么地方、什么条件下出了问题。这是这套方案比单纯依赖保险丝最有说服力的优势。很多传统方案做不到这一点不是因为硬件不支持而是压根没把故障记录当成系统设计的一部分。5. 实测和调试最容易翻车的几个地方5.1 假故障一上电就 FLT限流点没问题是软启动不够慢我在第一版 PCB 上就遇到了。12V 输入、后端总电容 330µF按 I_nom 1A 取限流 2A手算启动充电电流 0.8A 不到觉得稳了。结果一上电FLT 立刻拉低。查示波器才发现DSC、DC-DC 等芯片的上电时序没有真正同步多路电源几乎是同时开始工作瞬时叠加电流远大于手算的稳态启动电流。解决办法不是调限流点而是把 SS 电容从 4.7nF 换成 22nF让 VOUT 爬坡时间从 2ms 拉到 10ms 左右然后分路依次使能后级电源问题才消失。这个现象很典型我建议所有人在电源改动后都要做一次冷启动瞬间电流测量别只信手算。5.2 假故障二IMON 采样噪声让软件层误报警硬件层 FLT 没动作但软件层频繁报持续过载这种情况最折磨人。抓 IMON 波形发现上面叠加了约 50mV 的开关尖峰正好卡在软件阈值边缘。后来做了三个修改IMON 前置 RC 滤波增强ADC 采样相位避开 DC-DC 开关沿把软件判断窗口从 1ms 均值改成 10ms 滑动均值。修改之后误报彻底消失。这提醒我模拟保护靠电路数字保护靠时间窗口两者缺一不可。5.3 散热是 eFuse 最容易被低估的坑eFuse 的过温保护非常灵敏因为它要保护自己的内部 FET。在大电流连续工作场景下如果 PCB 散热不够芯片温度很快会逼近热折返点即使负载电流没超限流点也会因为 OTP 动作导致 FLT而且是一种频率很低、难以复现的间歇性故障。看数据手册的热阻参数然后保证底部散热焊盘有过孔阵列连接到大面积铜皮。我用的规则是2A 以上应用裸露焊盘下方至少排 4×4 过孔铺铜连接到内层地平面整版供电走线尽量用 2oz 铜厚。对 TPS25948 这类小封装器件热设计不到位再好的芯片也会自己保护自己。5.4 地弹FLT 误触发的隐蔽元凶有一次做短路测试发现 MCU 收到了 FLT 中断但示波器看 eFuse 的 FLT 引脚波形是稳定的高电平芯片实际没动作。排查了很久原因终于找到短路测试瞬间功率回路 di/dt 极大控制板地电位瞬间被抬升MCU 中断引脚出现了虚假边沿。解决办法功率地、模拟地、数字地单点汇接FLT 信号线加 2.2kΩ 串联电阻和 10nF 对地电容增强抗噪能力MCU 的 3.3V 电源加强去耦。经此一役我把信号完整性在电源板上的重视程度提高了一档。5.5 功能验证短路注入测试怎么做功能验证不能只用万用表测通断。我用电子负载做过流测试用继电器短路输出端做硬短路测试示波器抓四个信号VIN、VOUT、FLT、IMON。判据是短路瞬间 VOUT 下降FLT 拉低VIN 保持平稳IMON 在动作前能反映出电流峰值记录进日志。电子负载还可以做不同等级的过流验证限流点是否落在设计范围内。建议在室温、高温、低温各测一遍因为限流精度和热折返特性会随温度明显变化。很多出厂没事、现场抽风的问题都是没做温度扫描留下的隐患。这套电源路径保护方案在产线上跑了一段时间我最直接的感受是以前电源故障只能靠拆了看、换了试现在变成了先物理掐断、再软件判断、最后留日志的三级体系。如果你想在自己板子上复现我建议不要一上来就堆功能先把限流点、软启动、FLT 中断这几个基础链路调通再逐步加上积分判断和重试策略。最后再提醒一句芯片的具体参数和引脚定义不同批次、不同后缀之间可能存在差异动手之前一定要以手上那颗料的实际数据手册为准这篇笔记只是提供一个设计思路和排查方向。
返回列表