ARTICLE DETAIL

资讯详情

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

eFuse+MCU构建工业电源路径保护:热插拔浪涌与短路防护实践

eFuse+MCU构建工业电源路径保护:热插拔浪涌与短路防护实践 如果你做嵌入式或者工业控制板一定撞过这种场景现场调试时把控制器往带电的背板插插座边上啪一声火花示波器一测12V导轨被拉出一个大坑旁边几块板跟着复位或者是负载端DC-DC输入电容充电瞬间的浪涌电流直接把上游电源打进限流保护。问题的根源几乎都指向同一个地方——电源路径上缺一个会思考的开关。这篇文章要聊的是我用 TPS259483AYWPR 和 PIC18F97J94 搭的一套电源路径保护方案前者是集成FET的电源保护器件eFuse负责限流、限制浪涌、过压欠压关断后者是负责监控、记录和恢复控制的8位MCU。整套东西用在工业控制器上主要解决热插拔打火、输出短路、输入电压异常三类问题。文中会给出架构选择的理由、限流和阈值的计算方法、PIC18上的非阻塞监控固件写法以及联调时踩过的几个坑适合正在做嵌入式电源设计、想给板子加保护的工程师参考。1. 电源路径保护的定位这颗eFuse到底替我们挡了什么1.1 保险丝和自恢复保险为什么不顶用做嵌入式的人对保护电源的第一反应往往是串保险丝或者PPTC。这两样东西在消费类产品里够用扔到工业现场就差口气。传统玻璃管保险丝的熔断电流通常要超过额定值好几倍才动作而且动作时间在毫秒级甚至更长等它断开上游电源已经被拉垮了一次旁边的板子也复位了。PPTC自恢复保险丝的毛病是压降大、阻值随温度漂移动作之后要等冷却才能恢复而且这两样都只能管过流管不了过压、欠压和浪涌。工业现场真正的需求更苛刻热插拔的时候不能打火、不能把母线电压拉塌输出短路要快速切断而不是慢慢等保险烧断输入电压掉得太低或者升得太高要主动关断保护后级电路最后还得能上报状态让MCU知道刚才发生了什么。这些功能靠分立元件拼出来不是不行但调试周期会很长可靠性也不如集成方案。1.2 TPS259483AYWPR 的本质是一扇带门禁的门TPS259483AYWPR 属于 TPS25948 系列是一颗带集成功率MOSFET的电源路径保护器件行业内通常叫 eFuse 或者 hot-swap 控制器。它把开关管、电流检测、比较器、基准源和保护逻辑全部做在一颗芯片里外部只需要少量电阻电容去设定限流点、斜率、欠压过压阈值。理解它的核心是别把它当成普通MOSFET开关。普通开关只有开和关两个状态eFuse相当于一扇带门禁的门进门之前先测重超过体重就不让进这是限流限制开门的速度不能让人一下子全涌进来这是浪涌控制看到门外有危险自动关门这是过压欠压和过温保护。除此之外它还能告诉你刚才门禁为什么响了这就是故障标志输出。这颗芯片的工作电压覆盖几伏到十几伏的常见工业单电源轨我这边12V主供电正好落在它的舒适区。1.3 为什么监控任务交给 PIC18F97J94先说明一下我这里说的监控不是拿MCU去做模拟端的实时保护——那部分靠TPS259483AYWPR自己完成响应速度在微秒级任何MCU都追不上。MCU的角色是事后处理和策略决策收到故障信号后判断是瞬时干扰还是真故障决定是否自动重试恢复记录故障日志把状态显示给人看。PIC18F97J94 是 Microchip 的增强型8位MCU带段码LCD驱动、12位ADC、多个定时器、外设引脚选择PPS和常见的串行接口。对工业人机界面来说段码LCD直接驱动是个很实用的特性能省掉一颗LCD驱动芯片。PPS 让 FLT、EN、PG 这些信号可以映射到任意IO脚PCB布局的自由度高很多。有人会问为什么不用32位MCU答案很简单成熟工业项目里主控平台往往早就定死了增加一个电源监控功能应该尽量少改架构8位MCU的功耗更低代码也容易审核维护。2. 硬件设计TPS259483AYWPR 的外围参数与PCB细节2.1 供电架构上最关键的决策监控者不能自己也断电很多人在这一步犯错误把MCU直接挂在被保护的电源输出后面。如果输出侧发生短路eFuse切断后MCU立刻没电故障日志写不进去也谈不上什么自动恢复策略整个监控功能直接失效。我采用的架构是双轨供电12V输入进板后先分出一路小电流给一个宽压输入的3.3V LDO专门给PIC18F97J94和逻辑电路供电12V输入的另一路进 TPS259483AYWPR经过保护后输出 12V_BUS供给后面的DC-DC、传感器和继电器负载。MCU的电流只有几十毫安LDO前面不需要再加eFuse因为这么小的电流很难造成破坏。这样就保证了无论被保护的总线发生什么情况监控者始终活着能记录、能决策、能上报。2.2 限流电阻和启动斜率的计算逻辑限流点的设定是所有参数里最需要想清楚的。设得太低负载启动时可能误触发设得太高保护就失去了意义。我这次的负载结构是2.5A典型电流、短时峰值接近3A于是把限流点定在4A留了大约60%的裕量既不影响正常工作又能在异常时真正起到约束作用。TPS25948 系列的限流值通过 ILIM 脚到地的电阻设定数据手册给了一个近似线性的换算关系我按照手册公式反算后取了最接近的1%标准阻值。这一步要注意的是换算公式里的系数在不同系列版本里可能不同千万别直接抄前一个项目的值实测时也要用电子负载验证一下实际限流点是否和设计值吻合。启动斜率通过 dVdT 脚对地的电容设定这个参数的物理意义非常直接它决定了 12V_BUS 从0V爬到12V需要多长时间从而决定了充电电流的大小。总线上我放了一个470µF的电解电容作为DC-DC输入储能如果输出瞬间直接冲到12V理论浪涌电流会非常大。按5ms的爬升时间估算充电电流约等于 C × dV/dt也就是 470µF × 12V ÷ 5ms算下来1.13A左右远低于4A的限流值启动时对上游电源基本没有冲击。顺便说一句很多工程师以为限流点设好了浪涌就自动被限住了其实不完全对。eFuse的限流环路在启动期间虽然也在工作但更干净的做法是先把dVdT的斜率放慢让启动电流本身就不撞限流线两者配合使用效果最好。2.3 UVLO 和 OVP 分压电阻的实操计算欠压锁定和过压关断都是靠芯片内部比较器实现的外部分压电阻网络把输入电压按比例送到 UVLO 和 OVP 引脚。我设计的目标是输入电压低于10.8V时关断高于16V时关断12V正常工作时两个引脚都在安全区间内。以内部比较器阈值为1.2V计算先算UVLO分压。想让分压点在10.8V时正好到1.2V取上臂电阻100kΩ下臂电阻就是 100kΩ × 1.2 ÷ (10.8 – 1.2)结果是12.5kΩ我选了12.4kΩ的1%标准值。OVP这边想让16V触发同样取上臂100kΩ下臂电阻是 100kΩ × 1.2 ÷ (16 – 1.2)约8.11kΩ选8.06kΩ。在12V正常电压下OVP引脚分压只有0.9V左右离1.2V阈值还有一大段距离不会发生误触发。这两个分压网络建议在靠近芯片引脚处各加一个小电容对地滤波尤其是OVP引脚。工业现场里感性负载关断时会产生很高的电压尖峰如果尖峰通过寄生路径耦合到OVP分压点上瞬时超过阈值就会让eFuse误关断。这个问题我在联调时真实遇到过后面会专门讲。2.4 状态信号和使能控制的接法TPS259483AYWPR 的故障输出 FLT 和电源正常 PG 通常都是开漏结构需要外部上拉。我这里 FLT 用10kΩ上拉到3.3V并联一个1nF电容滤除高频噪声然后接到 PIC18F97J94 的一个 IO。PG 同样上拉到3.3V用来告诉MCU输出侧已经完成上电。信号线在PCB上要尽量远离功率电感的开关节点FLT 线尤其要注意否则每路DC-DC一开关FLT 上就会叠加一串毛刺。使能脚 EN 的处理值得多说几句。我希望系统在MCU还没起来的时候默认导通这样即使固件崩溃电源路径也不会被锁死现场调试时能省很多事。但 EN 如果单纯用电阻上拉到12VMCU的3.3V GPIO 直接去拉这个节点就会比较别扭。我的做法是EN由MCU的GPIO控制一个小NMOS管MCU输出高电平让管子导通把EN拉低请求关断MCU复位或者没上电时GPIO表现为高阻管子关断EN被10kΩ电阻上拉到12V芯片默认导通。这个电路简单可靠也符合工业设备失效安全的思路。2.5 状态采样通道和电流遥测除了数字状态的FLT和PG我还用PIC18F97J94的12位ADC采集两路模拟量一路是输入电压通过33kΩ和10kΩ分压把12V映射到2.79V在ADC量程内留了余量另一路是总线电流用10mΩ采样电阻加一颗INA系列电流放大器4A时输出约2V。12位ADC在3.3V满量程下每个LSB约0.8mV折算到电流上大概能分辨2mA左右对监控来说足够用了。有了这路电流遥测MCU可以实时判断负载是否接近限流点提前报警而不是等FLT拉低了才知道出问题。3. PIC18F97J94 上的非阻塞监控固件3.1 用1ms时基驱动所有任务工业固件里最忌讳的就是在监控逻辑里写 delay 阻塞等待。你一边等着恢复延时一边去扫按键按键手感会卡顿你因为防抖等待停住了主循环其他实时任务全部受影响。我这次在PIC18F97J94上做了一个最简单的1ms时基调度定时器中断里只置一个标志位主循环检测到标志后顺序执行各项非阻塞任务。按键扫描、故障监控、LCD刷新各自维护自己的时间戳谁都不阻塞谁。很多做嵌入式按键非阻塞扫描的人其实已经在用这个套路了去抖不靠delay靠记录按下时刻超过20ms才算有效。我把同一套思路原封不动搬到了故障检测上。FLT拉低不能立即认定是故障需要持续20ms都保持低电平才算数这样电机启动瞬间的毛刺、EFT干扰造成的短脉冲都被过滤掉了。3.2 电源监控状态机设计整个监控逻辑是一个典型的状态机总共五个状态上电前处于OFFMCU判断输入正常后把EN释放让eFuse开始开通进入RAMP等待输出爬升PG拉高后进入NORMAL正常运行发现有效FLT故障跳入FAULT记录日志若策略允许自动恢复进入RECOVERY把EN拉低一段时间再释放重试成功就回到RAMP失败则闭锁在FAULT。状态机的核心价值在于把瞬时干扰恢复和持续短路区分开。我允许最多重试三次每次间隔500ms超过三次就彻底闭锁必须断电或者人工干预才能解除。这样设计的好处是如果是线缆碰了一下导致瞬时短路系统能自愈减少现场停机时间如果是真正的持续短路不会反复大电流通断避免在故障点反复打火扩大损坏。恢复延时设置成500ms还有一个理由就是给输入侧的开关电源留出重新建立电压的时间。3.3 固件代码骨架MCU侧的代码结构并不复杂核心就是一个由1ms时基驱动的状态机。以下是去掉应用细节后的骨架编译环境是MPLAB X XC8。#include xc.h #define FLT_IS_LOW() (PORTAbits.RA0 0) #define EN_LOW() LATBbits.LATB1 1 #define EN_HIGH() LATBbits.LATB1 0 #define PG_IS_HIGH() (PORTCbits.RC0 1) typedef enum { ST_OFF 0, ST_RAMP, ST_NORMAL, ST_FAULT, ST_RECOVERY } PSU_STATE; volatile uint16_t m_tick; volatile uint8_t m_flag_1ms; static PSU_STATE psu_state ST_OFF; static uint16_t flt_debounce; static uint8_t retry_count; static uint16_t recover_timer; void psu_init(void) { EN_LOW(); /* 默认输出关断等MCU确认输入正常 */ psu_state ST_OFF; } void psu_task(void) { switch (psu_state) { case ST_OFF: /* 采样输入电压正常后放开EN进入RAMP */ if (vin_voltage_mv() 11000) { EN_HIGH(); recover_timer 0; psu_state ST_RAMP; } break; case ST_RAMP: if (PG_IS_HIGH()) { retry_count 0; psu_state ST_NORMAL; } else if (recover_timer 200) { /* 200ms超时 */ log_fault(FAULT_RAMP_TIMEOUT); psu_state ST_FAULT; } break; case ST_NORMAL: if (FLT_IS_LOW()) { if (flt_debounce 20) { /* 20ms去抖 */ log_fault(read_flt_cause()); psu_state ST_FAULT; } } else { flt_debounce 0; } break; case ST_FAULT: if (retry_count 3) { retry_count; recover_timer 0; EN_LOW(); /* 拉低一段时间再恢复 */ psu_state ST_RECOVERY; } /* 超过次数则保持闭锁等待人工处理 */ break; case ST_RECOVERY: if (recover_timer 500) { EN_HIGH(); recover_timer 0; psu_state ST_RAMP; } break; } }3.4 故障记录与界面显示故障日志我写到片内EEPROM里每次记录事件类型、发生时的输入电压和电流一共保存最近五条。这样现场人员断电重启后还能查看到底发生了什么不用每次都现场复现。同时段码LCD上用两位数字显示当前状态码和重试计数故障时交替显示故障码和输入电压值。这个功能看着简单实际现场排障时节省了大量时间。4. 联调时踩过的三个坑浪涌、误报与恢复失败4.1 热插拔时母线电压被拉垮第一版样机做出来满怀信心拿去测试热插拔结果示波器一抓就傻了眼插上瞬间12V母线被拉到10.2V左右隔壁板子直接复位。查下来发现两个低级错误一是 dVdT 电容在BOM里漏贴了芯片输出爬升速度处于默认的最快档位470µF充电电流瞬间冲上去把上游电源打穿二是 ILIM 电阻值指错了实际限流点不是设计的4A而是接近10A根本没有起到约束作用。把这两处修正后重新抓波形母线跌落被限制在0.3V以内插拔过程不再有火花。这个坑的教训是eFuse的每个保护参数都要当成安全功能来验证BOM里缺料、贴错料这类问题在安全电路上的影响会被放大很多倍。4.2 电机一启动 FLT 就误报第二个坑更有意思。空载和纯阻性负载下一切正常一启动面板后面的小电机FLT立刻拉低MCU记录故障并开始重试。刚开始怀疑是限流点太低电机启动电流超过了4A于是我把示波器探头夹到FLT引脚上看细节结果发现FLT上根本不是持续的低电平而是一串以微秒为单位的高频毛刺是被电机启动时的感性尖峰耦合过来的。再往后查发现真正的触发源是OVP引脚电机反电动势把输入母线顶高了一瞬OVP分压点瞬时越过1.2V阈值芯片自己触发了过压关断。解决办法分了三层。硬件上在OVP分压电阻下端并联1nF电容把高频尖峰滤掉FLT引脚加RC滤波不干净的信号不进MCU固件上增加20ms去抖进一步免疫毛刺。三层叠加之后电机反复启停几百次都没有再出现过误报。这个案例说明工业环境里的故障往往是假故障排查方向一定要先分清楚是电路真保护了还是在误保护。4.3 短路排除之后系统无法自动恢复第三个坑出现在恢复逻辑上。最初代码里恢复动作是EN拉低100ms再拉高但在实际短路测试中拔掉短路点之后系统经常恢复不了MCU反复重试三次后直接闭锁。用示波器同时抓EN和输出波形才发现100ms太短了芯片内部的故障锁存状态还没有完全复位EN拉高的动作被芯片忽略了输出根本没起来。我把EN拉低时间从100ms改成500ms并且恢复前先读取FLT状态确认故障源已经消失再执行恢复成功率立刻变成100%。这里还有一个小细节恢复之后不要立刻判定成功要等到PG拉高才算数RAMP超时也要有记录否则恢复失败时你连原因都查不到。4.4 这次联调留下的三条经验第一条任何保护器件的参数都要拿到实物上验证不能只信计算值。第二条干扰导致的误动作要先从根源过滤不要全部甩给固件去兜底。第三条自动恢复策略要把瞬时故障和持续故障分开对待闭锁不可怕可怕的是在故障点反复通断。5. 验证与测试拿数据说话才算真保护5.1 测试项目与通过标准保护电路好不好用不能靠感觉没问题要把每个保护功能都变成可重复的测试项。我整理了一张测试矩阵联调阶段的每一轮改动都要跑一遍。测试项方法通过标准热插拔冲击带电反复插拔连接器100次母线电压跌落小于0.5V无火花烧蚀启动浪涌示波器抓VBUS爬升波形爬升时间4~6ms电流峰值低于限流点输出短路电子负载直接短路输出故障快速切断FLT有效无持续打火过压保护输入从12V缓升到17V超过16V左右可靠关断阈值偏差±5%欠压保护输入从12V缓降到9V低于10.8V左右可靠关断恢复时正常重启干扰误报电机反复启停500次无FLT误报无OVP误触发自动恢复短路线拔除后等待1秒系统自动重启成功日志记录正确5.2 关键波形怎么读示波器上我最常看的三个位置是输入电压、总线电压、故障标志。热插拔测试时输入电压波形上能直接看到eFuse把冲击吃掉了多少总线电压的斜率就是dVdT电容的效果斜率异常平缓说明参数选得太慢会让后级DC-DC上电时间过长斜率太陡则浪涌变大短路测试时把电流探头夹在输入端能看到电流在几个微秒内被拉到限流值然后切断的完整过程。这一组波形放在一起基本就能判断整个保护链路是否健康。5.3 热和寿命要单独验证eFuse是功率器件持续工作的发热不能忽略。我在2A连续负载、环境温度60℃的条件下用热像仪观察芯片表面温升大约30℃在数据手册允许的范围内。热插拔和短路各做了几百次循环后重新测限流点和阈值没有发现明显漂移。有一点必须提醒短路测试时芯片内部功耗很大虽然器件能自己关断但频繁连续短路会积累结温测试时要注意恢复间隔别把保护器件本身测坏了。5.4 现场的实际效果这套方案最终装到了现场控制器上。从运行反馈看热插拔导致的连接器烧蚀基本绝迹隔壁板子复位的投诉降为零MCU日志里也能清晰地看到几次瞬时短路事件和自动恢复的过程。有一个之前没想到的额外好处因为FLT和电流遥测都接到了MCU远程维护时能直接看到设备的供电健康状况很多现场故障在电话里就能判断出方向不用反复派人跑现场。6. 心得与扩展思路做完这个项目我自己最大的体会是设计电源保护之前先问清楚你希望系统在故障时表现出什么行为再选器件和配参数。要的是故障后自愈还是宁肯停机也要保护设备这个答案直接决定限流点、重试次数和闭锁策略。TPS259483AYWPR 这类集成eFuse把模拟保护做得很完备但它不替你决定下一步怎么办这个决策必须由 MCU 层的策略逻辑去完成。这套架构的扩展空间也比想象中大。第二块板子上我把同样思路用到了三条供电路径上PIC18F97J94 同时管理三个 eFuse 的使能脚按照上下电时序要求依次开通相当于顺手解决了多电源时序控制的问题。另外电流遥测数据通过RS485定期上报给上位机可以画出一条设备健康趋势曲线要比单纯报故障实用得多。最后分享一个小技巧验证UVLO和OVP边界时别只做匀速调压用可编程电源做快速跌落和快速爬升模拟现场电源接触不良时那种抖抖索索的输入这类测试往往能最快暴露分压网络滤波不足和阈值抖动的问题。我在第一次测试时就被这种工况秀了一脸发现OVP毛刺后才去补的滤波电容。
返回列表