ARTICLE DETAIL

资讯详情

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

嵌入式电源路径保护设计:基于eFuse与MCU的可控可恢复过流保护系统

嵌入式电源路径保护设计:基于eFuse与MCU的可控可恢复过流保护系统 做嵌入式硬件这几年跟电源较劲的时间可能比写代码还多。最近完成的工业远程I/O模块里客户要求很直白任何一个输出接口短路或者过载都不能把板子上5V电源拉垮最好还能在监控界面上看到是哪一路出了问题。我把原来的保险丝分立MOS方案整个推掉换成 TI 的 eFuse TPS259483AYWPR 和 Microchip 的 PIC18LF46K42 这套组合电源路径从这里变成了一个可控、可上报、可恢复的系统。下面把这个方案的思路、计算和踩坑一次性说清楚如果你也在做嵌入式或工业电源路径保护应该能少走不少弯路。1. 为什么要把电源路径保护做成一个系统1.1 裸保护方案的三个漏洞以前很多模块的电源保护就是“保险丝TVS一个大电容”简单场景其实也够用但放到工业现场就非常难受。第一保险丝是一次性器件现场一旦短路客户只能断电拆机换保险丝维护成本极高而且换上去之前如果不排查负载问题上电瞬间还可能再烧一次。第二保险丝没有电信号输出MCU完全不知道电源路径发生过什么想远程定位问题根本做不到。第三也是最容易被忽略的普通保险丝熔断时间受电流大小影响非常大轻微过载时可能要隔很久才断这期间主板已经工作在异常电压/电流下芯片寿命早已受影响。后来又有人用“PMOS采样电阻比较器”做电子开关这种方案能把保护阈值调得更细但分立器件的离散性和温漂很麻烦。比较器的翻转是靠外部电阻比例定的电阻一偏差阈值跟着偏温度一变化采样电阻的阻值又变了。而且这种电路要做得可靠需要很多附属元件PCB面积、物料成本、调试难度都上去了很难复用。所以当我看到 TPS259483AYWPR 这类集成式 eFuse 的时候第一反应是这玩意儿才应该是工业模块电源路径保护的标配。它在内部把功率MOS管、限流放大环路、过压/欠压比较器、热关断全部集成好外围只需要按照目标电流和外接负载特性放几个电阻电容保护逻辑就立起来了。配合 MCU 做状态读取和开关控制电源路径才算真正变成了一个系统。1.2 设计目标可控、可测、可恢复动手之前我先给这个方案定了几条验收标准免得做着做着跑偏。首先是额定负载 2A限流点设在 3A 左右既保证正常 20%~50% 的过载余量又不能让轻微冲击就触发保护。其次输出端短路时系统必须在 1ms 内切断电源通路且输入母线的电压跌落不能超过 10%避免同一个母线上的其他模块跟着复位。第三个要求是可测MCU 要能实时读取负载电流和输出电压出现故障时至少能通过串口或总线把故障代码发出去。第四个是可恢复瞬时性过载时可以自动重启但连续重试三次仍然失败就必须锁存防止现场反复打嗝把板子搞出更严重的问题。这些要求单独用保险丝、PTC、分立MOS管都不是最舒服的解法但一颗带监测输出的 eFuse 加一颗有丰富模拟外设的低功耗单片机正好全部覆盖。这是我选 TPS259483AYWPR PIC18LF46K42 的基本出发点。1.3 为什么用 eFuse 而不是自恢复保险丝自恢复保险丝 PTC 在消费电子产品里很常见价格也确实便宜但用在工业模块上有个问题它是靠自身发热来触发阻值跳变的动作速度慢环境温度一高动作阈值就漂。同样的故障夏天可能很灵敏冬天就迟钝这种不确定性在工业现场没法接受。eFuse 的动作是电子式的限流环路实时采样输出电流超过设定点后立即进入限流状态再严重就直接断开温度影响小得多。而且 eFuse 有一个非常实用的特性就是它可以做“电子打嗝式限流”过流瞬间先把电流限制在安全值附近同时以一定周期做开关动作让故障点只承受很小的能量。这跟继电器、MOS管手动关断完全不是一个体验。设备端如果有大电容负载传统方案上电瞬间会产生巨大充电电流eFuse 还可以通过软启动引脚控制输出电压爬升速度把这个浪涌平滑掉。把这些行为组合起来才是工程上真正省心的电源路径保护。2. TPS259483AYWPR 与 PIC18LF46K42 的角色拆解2.1 TPS259483AYWPR 内部到底做了什么从应用角度看TPS259483AYWPR 就是一个串联在电源通路上的智能开关。它内部的 N 沟道功率 FET 承担主电流外部配一个 ILIM 电阻决定限流点配一个 dv/dt 电容决定启动斜率再用分压电阻设置过压/欠压阈值。正常状态下内部 FET 完全导通导通压降很低负载电流超过设定限流点时内部模拟环路会把 FET 的栅极电压往回拉让输出电流被“钳”在设定值附近而不是直接粗暴断开。这个限流钳位的过程很有意思。它不像保险丝那样非要等到烧断才动作而是先让电流不再继续上升给后面MCU和处理逻辑争取反应时间。如果限流状态持续太久芯片内部的结温不断升高热关断最终会介入把FET彻底关断并通过 FLT 脚输出故障信号。这套行为相当于把“过流检测、功率限制、热管理、故障上报”全放在了一颗芯片里面。当然这颗芯片不是万能的它的输入电压范围、持续电流能力都有上限具体数值一定要以数据手册为准。我个人的习惯是选型时至少留 30% 电流裕量输入电压工作范围靠近中间档位不要顶着极限值跑。工业应用里输入母线经常有各种浪涌和跌落顶着极限用风险很大。2.2 PIC18LF46K42 在这里不是一个普通单片机PIC18LF46K42 是 Microchip 的 8 位低功耗 MCU单看主频和算力并不起眼但它的模拟外设非常适合做电源监控。它内部有 12 位 ADC采样电源路径的电流和电压足够用有 DAC 和比较器可以拿来做过流阈值比较不一定非要等 eFuse 的 FLT 输出还有可配置逻辑单元 CLC理论上可以把故障信号和定时器组合成硬件自动重试逻辑MCU 即使在休眠状态电源路径自己也能做一轮简单的恢复动作。对我这个项目来说MCU 的核心任务有三块一是实时读 ADC把 eFuse 电流监测引脚的模拟量换算成实际电流值二是根据 FLT 信号和 ADC 采到的电流趋势决定重新使能 eFuse 还是直接锁存三是通过板上的 RS-485 或 CAN 接口把状态和故障信息上报给上位机。PIC18LF46K42 主频不高但做这种低频监控和策略判断绰绰有余而且低功耗特性在需要现场电池供电的设备里是实打实的优势。2.3 整套信号链路是怎么连起来的电源路径控制的信号链并不复杂。MCU 的 GPIO 接到 eFuse 的 EN 引脚控制芯片开和关eFuse 的 FLT 输出接到 MCU 的普通输入引脚用于捕获过流、过压、过温事件电流监测引脚接到 ADC 输入通道中间加一级 RC 滤波方便 MCU 观察负载电流的实时变化。如果有电压分压采样那再单独用一路 ADC。这里要特别提醒一点MCU 侧 I/O 的电平和 eFuse 逻辑引脚的电平必须匹配。如果 eFuse 的逻辑高电平是 5V而 MCU 的 VDD 是 3.3VEN 和 FLT 之间最好加电平转换或分压不能想当然直接连。我的方案里 MCU 和逻辑供电统一由同一颗 LDO 提供 3.3V所以连接相对简单。信号流向清楚了后面的硬件参数才有地方落。3. 硬件电路设计与关键参数计算3.1 限流电阻怎么选才不容易误触发限流点的计算是 eFuse 设计里最核心的一步。不同 eFuse 的 ILIM 引脚内部有一个参考电流源外部接电阻到地通过设置这个电阻把内部电流镜的基准定下来最终决定限流环路的目标值。一般数据手册会给出类似 “ILIM K / RILIM” 的公式K 是器件相关的常数。我的做法是先按额定负载的 1.5 倍左右选目标限流点再反推电阻值。比如额定 2A目标限流 3A按常见 K 值估算RILIM 会选择在 1kΩ 到 1.5kΩ 之间最终用 1% 精度电阻。选电阻的时候不要只看标称阻值还要看电阻功率和温度系数。ILIM 支路电流很小功率不是重点但温漂会影响限流精度。工业场景温度变化大建议选低温漂的薄膜电阻或者金属膜电阻。另外限流点太接近额定电流时电机启动、电解电容充电、接口热插拔产生的瞬时尖峰都会造成误保护限流点太高又起不到保护作用。我一般会留 50% 到 100% 的启动裕量具体看负载类型。3.2 软启动电容给上电浪涌踩一脚刹车eFuse 的输出端往往对地挂着不少电容单片机、传感器、通信收发器都有去耦电容加起来可能有几百微法。如果上电瞬间直接把输入电压加到输出端充电电流会非常大很容易触发限流甚至让输入母线跌下去。解决办法是利用 eFuse 的 dv/dt 引脚在输出端人为控制电压爬升速度。dv/dt 引脚上接的电容越大输出从 0V 升到目标电压的时间越长。我常用的经验值是输出电容每增加 100μF软启动时间额外加 1ms 到 2ms。项目里输出侧电容大约是 330μF我把软启动时间设置在 5ms 左右。实际调试时可以先放一个偏大的电容用示波器看输出爬升曲线再逐步调小直到既有平滑的斜率又不会让输出电压建立太慢。上电斜坡太慢同样有问题MCU 可能因为供电电压上升太慢而无法完成 POR 复位所以这个值需要实测平衡。3.3 过压/欠压分压电阻计算实例工业输入母线经常不是干净的 5V 或 12V比如一个标称 12V 的电源实际可能从 10V 波动到 16V。eFuse 的 OVLO 和 UVLO 引脚可以用外部电阻分压设定一个合理的窗口。分压原理很简单就是让 OVLO 引脚电压在输入电压达到阈值时等于芯片内部的参考电压 VREF。芯片内部参考通常是 1.2V 左右具体查手册。举个例子希望欠压保护点在 9V过压保护点在 18V。如果选择从上到下串联三个电阻 Rtop、Rmid、Rbot让 OVLO 连接到 Rmid 和 Rbot 之间UVLO 连接到 Rtop 和 Rmid 之间通过电阻比例就能分别算出这两个窗口。计算时要注意引脚输入漏电流如果电阻值选的太大漏电流产生的电压误差会变得明显如果选太小静态功耗又不划算。我一般让整个分压支路的电流控制在 100μA 到 200μA这个量级既稳定又不会对电池类应用造成太大负担。电阻全部用 1% 精度布局时尽量靠近 eFuse 引脚。3.4 采样接口与抗混叠设计电流监测端的信号质量直接决定 MCU 看到的电流曲线是真实情况还是噪声。eFuse 电流监测引脚通常会输出一个与负载电流成比例的电流外部接一个落地电阻转成电压然后进 MCU 的 ADC。这个落地电阻很重要它既影响转换比例也会影响信号带宽。我的做法是先估算满载时监测引脚的输出电流选一个能让 ADC 输入电压接近满量程 80% 的电阻既充分利用分辨率又留出过流时的余量。紧接着加一级 RC 低通滤波截止频率大概设在 1kHz 左右用来消除开关电源纹波和数字电路串扰。RC 时间常数选大了会让电流信号响应变慢选小了又滤不干净。经验值是 R1kΩ、C0.1μF截止频率约 1.6kHz在这个项目里效果不错。FLT 输出同样建议并联一个小电容到地滤掉毛刺但要注意不能把信号边沿拖得太慢否则 MCU 检测故障会延迟。4. MCU 固件状态机与诊断实现4.1 状态机设计从正常到故障的完整循环有了硬件基础MCU 固件就不应该只是“看 FLT 亮了就复位一下”而是要有一个清晰的状态机管理整个电源路径。我定义了五个状态IDLE、RAMP、RUN、FAULT、LATCH。上电后先处于 IDLE此时 eFuse 的 EN 保持低电平等 MCU 自己完成初始化再把 EN 拉高进入 RAMP也就是输出电压爬升阶段。RAMP 期间 MCU 持续采样输出电压如果输出电压没有在预期时间到达阈值说明输出侧短路或者负载异常直接转 FAULT。RAMP 结束并且电压稳定之后进入 RUN这是正常的工作状态。RUN 期间如果收到 FLT 引脚中断MCU 立刻读取电流采样值区分故障类型。如果是瞬时过载进入 FAULT 后延时 500ms重新拉高 EN 做自动重试。如果三次重试都失败进入 LATCH只有收到远程清除命令或者本地按键才允许恢复。这套状态机逻辑写得越严格现场的故障定位就越容易。typedef enum { FS_IDLE, FS_RAMP, FS_RUN, FS_FAULT, FS_LATCH } FS_State; const char* stateName[] { IDLE, RAMP, RUN, FAULT, LATCH };状态机实现时最重要的一点是状态切换必须基于事件和超时不能在一个大循环里靠延时阻塞。fault 处理、自动重试、看门狗喂狗这些动作应该分散到不同的时间片里执行否则一旦 MCU 在某个延时里卡住电源路径就真的没人管了。4.2 ADC 电流采样滤波、换算和零点校准PIC18LF46K42 的 ADC 是 12 位分辨率不是问题问题在参考电压和 PCB 噪声。我直接用 VDD 3.3V 做参考电压这样换算简单但 LDO 本身的精度和温度漂移会被带入测量结果。如果项目对电流精度要求更高建议改用外部精密基准。软件侧我用了一个 16 点的滑动平均每 10ms 采一次把瞬间毛刺平滑掉又保留了负载变化的趋势。ADC 原始值到实际电流的换算必须校准。原理上电流监测引脚输出的电流和负载电流有一个比例系数 K外部电阻转成电压后再乘以 ADC 的分辨率系数就能得到实际电流。但芯片的 K 值手册上给的是典型值和实际会有偏差所以我上电后用一个精密电阻负载提供已知电流记录 ADC 读数做两点校准算出实际的斜率和零点漂移。校准参数存在 PIC18LF46K42 的 Data EEPROM 里设备出厂前写一次后续开机直接读取。4.3 自动重试策略和故障记录自动重试听起来简单做起来有不少细节。重试前必须先确认输入电压正常否则 eFuse 重新打开也会立即失败。重试时 EN 拉高后不要立刻认为系统恢复正常还要重新走一遍 RAMP 的电压检测流程。如果故障电流是负载真的短路重试只会让 eFuse 反复热关断所以我加了重试次数限制并且记录每次故障发生时 MCU 采到的电流幅值。故障记录我用了一个简单的结构体包括故障代码、当前电流值、输入电压值、发生时刻的累计运行时间。这些记录写入 Data EEPROM掉电不丢。上位机通过串口发查询命令MCU 就能把最近五次故障信息回传。这个功能在工业现场非常有用因为很多时候维护人员到场时故障现象已经消失只有历史记录能告诉我们问题出在哪里。typedef struct { uint16_t faultCode; uint16_t currentRaw; uint16_t voltageRaw; uint32_t uptimeSeconds; } FaultRecord;自动重试不是越勤越好。我最终把重试间隔设为 1 秒到 3 秒之间太短会让故障点不断累积能量太长又影响现场恢复速度。如果是容性负载短路重试间隔可以适当增加如果是通信等间歇性负载过流间隔短一点反而体验更好。5. 调试中的高频问题与避坑实录5.1 上电就触发限流LED 狂闪却找不到短路第一次打样回来我把板子接到可调电源上准备测软启动结果一上电 eFuse 就进入限流状态输出只有零点几伏指示灯疯狂闪。起初以为贴错了元件查了半天发现根本不是短路而是输出侧电容太大了。软启动电容的值是按 330μF 输出电容估的实际板上还接了外部传感器模块输出电容被叠加到接近 800μF启动电流超过了限流阈值eFuse 每次都能限流成功但电压永远拉不起来。解决方法是把软启动时间从 5ms 调大到 10ms同时把限流点从 3A 提到 3.6A 重新计算电阻值。注意调大限流点要重新核算 PCB 走线宽度和 eFuse 的持续电流能力不能无脑往上加。这个坑提醒我软启动参数不能按原理图原始输出电容算一定要算上实际负载板上的所有去耦电容。5.2 FLT 引脚误报单片机老是被打扰还有一次是 FLT 信号不停地跳变MCU 端检测到一堆伪故障。用示波器抓 FLT 脚发现上面叠加了很高频率的振铃正好和板子上的 DC-DC 开关频率同步。原因是 FLT 引脚到 MCU 的走线太靠近电感并且 FLT 外部上拉电阻的阻值偏大微弱的高频电流耦合过来之后在输入引脚上产生了超过逻辑阈值的噪声尖峰。处理办法不复杂把 FLT 到 MCU 之间加了一个 100Ω 串联电阻和一个 10nF 对地电容构成一个低通滤波器同时把这条走线挪到平面边缘远离电感投影区域。我还把固件里的故障检测加了一个极短的软件消抖连续两个周期都是高电平才认为是真实故障。从那之后伪故障就消失了。经验是逻辑信号线上的滤波不能省特别是在开关电源密布的板子上。5.3 电流采样值跳动ADC 看到的不是真实电流电流采样 ADC 的值在负载固定的情况下还有 ±5% 左右的波动一开始以为是 eFuse 的监测输出有问题后来发现是采样回路的参考地选错了。电流监测电阻上的电压是相对功率地平面的而 MCU 的 ADC 参考地却在数字地平面两个地之间有大电流回流产生的电压差这个压差被直接叠加到了采样信号上。后面我把采样电阻的参考端用一根单独的走线连到 ADC 引脚附近相当于做了开尔文连接确保 ADC 测到的是采样电阻两端的真实压差。同时把功率地上的大电流路径和 MCU 的模拟地做了单点连接两地之间的噪声从几百毫伏降到了几个毫伏。电源设计里的“地弹”问题真的很隐蔽采样类电路都要按这个思路检查一遍。5.4 常见问题速查表现象可能原因处理方式上电后输出起不来软启动电容偏小/输出电容偏大增大 dv/dt 电容延长启动时间轻载也频繁触发限流限流点设置过低重新计算 ILIM 电阻预留启动余量FLT 频繁误报走线耦合噪声/上拉电阻偏大加 RC 滤波调整走线和上拉值电流采样值跳动大采样参考地不合理开尔文连接单点接地自动重试后仍然打嗝负载持续短路三次重试后锁存等待人工介入输入电压纹波大时误关断OV/UV 窗口设置过窄重新计算阈值必要时加输入电容6. 往下一版迭代我会改什么这个方案跑完测试之后我自己也在复盘有哪些地方可以做得更好。第一个想改的是把自动重试逻辑从 MCU 软件搬到 PIC18LF46K42 的 CLC 硬件里利用定时器生成周期脉冲用故障信号去门控重试次数。这样即使 MCU 正在跑通信任务或者进入休眠电源路径自身也能完成有限次数的恢复尝试安全性和实时性都会更好。第二个想扩展的是把每条电源路径做成独立的“电源岛”多路输出各自配一颗 eFuseMCU 分别控制。这样不同外设之间彻底隔离一路短路不会拖垮其他路。配合 CAN 总线把每一路的电流、电压、故障码周期上报整个系统的可维护性会上一个台阶。第三个想法是把电流采样的两三点校准放到产线上做通过出厂测试工装自动写入校准系数消除每块板的个体差异。最后说一个贯穿全程的体会电源路径保护这件事硬件参数定了只是开始真正决定可靠性的往往是你对负载特性的理解以及固件里每个状态切换的细节。那些看起来多余的软启动电容、滤波电阻、重试次数限制关键时刻都是救命的。
返回列表