ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

eFuse+MCU:工业电源路径保护的设计与实现

eFuse+MCU:工业电源路径保护的设计与实现 1. 为什么我说“电源路径保护”比电源本身更容易被忽略1.1 嵌入式系统里最常见的死法做嵌入式硬件的朋友应该都有过这种经历一台设备在实验室里跑得好好的一到现场就“神秘死亡”。查来查去不是程序跑飞也不是传感器坏了而是电源路径上出了问题。比如24V供电的工业控制板外接电磁阀动作瞬间会把母线电压拉低另一块板卡热插拔时产生浪涌或者某一路负载老化后开始漏电。这些问题有个共同点它们在电源进入系统之后、到达核心负载之前缺少一道真正可控的“闸门”。普通保险丝只能烧断一次TVS器件只能把瞬态能量泄放掉自恢复保险丝响应又太慢。对于24V、12V这类工业现场常见的电源总线理想方案是有一颗能反复开关、能限制电流、能看到故障状态并且能被MCU主动控制的保护器件。我这次项目里的主角之一TPS259483AYWPR就是干这个的。1.2 为什么MCU也要挤进来“管闲事”单单一个eFuse本质上还是一个硬件保护器件。它能做的动作是有限的过流就断、过压就断、欠压也断。但实际应用中我们需要的不只是“断”还要知道断了之后发生了什么要不要恢复恢复之后是否再犯以及把这些信息记录到日志里。举个最简单的例子一台设备在凌晨三点出现了一次瞬时过流硬件保险丝直接断开现场人员第二天到岗才发现设备停机了。如果有一颗PIC18F96J65这样的MCU在背后盯着情况就完全不同——它可以在过流瞬间读取电压电流状态给上位机发一条报警消息然后根据策略自动尝试恢复供电。这就是“保护”和“管理”的区别。硬件负责快速反应MCU负责思考和决策。两者配合才构成完整的电源路径保护系统。1.3 我选的这条路线eFuse加MCU的组合方案技术路线其实有好几条用分立MOSFET加采样电阻搭保护电路用智能高边开关或者直接用带保护的电源模块。我一开始也画过分立方案但算了一笔账就放弃了采样电阻要选精密低温漂的保护逻辑要搭比较器过流切断速度要靠RC时间常数调一套下来至少七八颗料PCB面积大调试起来还互相影响。TPS259483AYWPR这类eFuse把功率MOSFET、电流采样放大器、比较器、基准源、驱动电路全部封装在一颗芯片里。配合PIC18F96J65这颗8位MCU做控制策略整个方案从原理图到固件都非常清晰。这个组合适合中小批量、非消费类的嵌入式和工业设备尤其是电源输入范围在几伏到几十伏的板卡。2. TPS259483AYWPR与PIC18F96J65两颗芯片各干各的活2.1 TPS259483AYWPR把“熔断器”做成一颗可以反复用的芯片先聊TPS259483AYWPR。如果只看名字你会以为它是一个普通稳压器实际上它是一颗电子保险丝属于负载开关里带保护功能的那类器件。它的核心作用是在电源路径上做一个可通断、可限流、可监控的开关。这颗芯片内部集成了功率MOSFET、电流检测电路、比较器、参考电压源和逻辑控制电路。从输入端到输出端它串联在电源路径上正常工作时候导通电阻很低几乎不影响系统供电一旦检测到输出电流超过设定阈值它会像保险丝一样快速把通道关闭区别在于它可以被重新开启。在项目里我用它保护24V电源输入路径。芯片的输入电压范围大致覆盖从几伏到几十伏对12V、24V这类工业电轨很合适。限流值可以用一颗外部电阻配置过压和欠压阈值也能通过电阻分压设定。最方便的是它有一个故障输出引脚触发保护时会拉低MCU可以直接接中断端口不用轮询。还有一个容易被忽略的功能是输出斜率控制。上电的时候如果直接让24V瞬间灌入后端电容冲击电流会非常大。TPS259483AYWPR支持在外部接电容设置启动斜率让输出电压缓慢爬升这样浪涌电流就被压下来了。这一功能在热插拔板卡、电容负载比较大的场景下特别重要。2.2 PIC18F96J65这颗8位MCU适合当保护系统的“值班员”PIC18F96J65是Microchip的8位MCU。很多人听到8位会觉得落伍但实际上在工业控制领域8位MCU依然是安全性和性价比都非常成熟的选择。它不需要跑Linux不需要高主频它的工作就是低速采样、状态判断、通信上报这些任务8位MCU完全胜任而且功耗低、启动快、代码逻辑清晰。我选择PIC18F96J65主要看重几点。第一它有足够多的GPIO和中断输入FLT故障信号可以直接接到RB端口的外部中断上。第二它集成了多通道10位ADC采样输入电压、输出电压、电流反馈信号完全够用。第三它带UART和I2C/SPI接口既能通过串口输出调试信息也能和上位机或者显示面板通信。另外这颗器件抗干扰能力不错程序存储器也够大可以存下较完整的故障记录。这颗MCU在整个系统里的角色可以理解成一个值班员它时刻盯着电源状态正常时偶尔读取一次数据发现异常就立刻操作eFuse的使能引脚同时记录状态、上报信息。2.3 两者是怎么分工协作的打个比方TPS259483AYWPR像是门禁系统的电锁动作快、力气大、能直接切断通道PIC18F96J65像保安室的监控台负责判断情况、决定什么时候锁门、什么时候开门、什么时候报警。在正常状态下PIC18F96J65把TPS259483AYWPR的使能脚拉高让电源路径处于导通状态。此时MCU定时通过ADC采样输入电压和输出电流反馈评估系统是否健康。一旦TPS259483AYWPR检测到过流或过压并动作FLT引脚立刻拉低MCU被中断唤醒进入故障处理流程关闭或保持使能状态、尝试恢复、记录故障码、通过串口上报。如果故障反复出现MCU可以加大恢复间隔甚至锁定在安全态等待人工干预。这样一来保护动作由eFuse硬件快速完成策略判断由MCU完成分工明确。3. 硬件电路设计实录原理图怎么画才能稳3.1 系统电源架构与设计目标先说我这次实际搭建的系统。输入电源是一路工业标准的24V直流母线允许范围按18V到30V考虑。后端负载包括MCU本身、小功率传感器供电、一路继电器线圈驱动还有一路给外部模块的5V输出总电流不超过1.5A。设计目标是过流阈值设定在2A左右输入低于16V或高于32V时自动切断切断后MCU可以手动恢复上电时输出电压爬升时间控制在5ms到10ms避免浪涌电流伤害输入连接器和前级电源模块。基于这个目标我需要给TPS259483AYWPR配置外部限流电阻、过压欠压分压电阻、斜率控制电容同时把它的使能和FLT引脚连接到PIC18F96J65的GPIO上。3.2 eFuse外围电路与关键参数计算限流电阻的取值是第一步。TPS259483系列计算限流值的公式可以在数据手册里找到大致形式是Ilim和外部电阻成反比不同的档位对应不同的增益系数。我在限制2A时选择了一颗标称值对应的精密电阻这里务必注意电阻精度建议用1%或0.5%的贴片电阻。电阻选大了会提前触发误保护选小了又会放行过大的电流实际配置时不要只看标称值还得考虑温度漂移。过压和欠压阈值用两个电阻分压网络连到芯片的检测引脚。计算方法是反推分压比芯片内部有一个基准电压例如约1.2V那么对于欠压阈值16V分压比就是1.2/16对于过压阈值32V分压比就是1.2/32。我要确保正常电压下检测引脚电压在合理区间内同时留出一定迟滞避免电源在临界值附近抖动时反复跳断。这里的数据手册里通常会给出迟滞电流或者内部迟滞量必须仔细看。实际调试时我遇到过因为分压电阻用5%精度导致欠压点偏差近1V的情况后来统一换成1%电阻才解决。斜率控制电容则比较简单芯片手册会给一个参考电流和目标爬升时间之间的换算关系。比如参考电流是几微安需要10ms爬到24V那么电容值约等于参考电流乘以时间再除以电压。我最后使用的容值在纳法级别直接用小体积C0G电容即可。3.3 MCU接口信号怎么连、引脚怎么选MCU和TPS259483AYWPR的接口并不复杂。使能引脚接在PIC18F96J65的一个普通GPIO上我特意选了PIC18F96J65中上电默认状态为输入的引脚并且在外围加了一个下拉电阻。这样MCU还没跑起来时使能脚处于低电平eFuse默认关闭避免上电瞬间负载不受控导通。FLT故障引脚接的是带外部中断的RB端口。FLT信号在芯片内部是开漏结构所以要加一颗上拉电阻到MCU的电源。平时FLT是高电平故障时被拉低MCU的RB端口检测到下降沿就进入中断服务函数。此处要注意电平匹配如果MCU是3.3V供电而eFuse输入侧是24V某些引脚可能直接输出到MCU必须确认eFuse的FLT引脚参考电压是内部电源还是VS引脚。我的做法是加了一颗串联电阻和钳位二极管双重防护确保万无一失。ADC采样的节点分别是输入电压采样、输出电压采样和电流反馈采样。输入和输出电压先经过电阻分压降到MCU ADC量程之内分压电阻选高阻值以降低对系统的负载效应。电流反馈从eFuse的电流监测引脚取出这个引脚输出的电压和负载电流成正比MCU读取后乘以系数就能得到实时电流值。3.4 PCB布局上几件值得抠的事硬件设计里最容易被“能跑就行”带过去的就是PCB布局。电源路径保护板卡虽然功能简单但布局上有一个核心原则大电流路径要短、粗、直接。我从输入端到eFuse再到输出端走线宽度按3A载流来估算铺铜后打开规则检查确认没有瓶颈段。输入和输出端各留了测试点方便示波器探头夹取。FLT和使能这类信号线尽量和功率走线分开。特别是FLT信号反应很快如果走线贴着24V电轨并行了很长一段距离耦合噪声可能让MCU收到假的故障中断。我处理的方法是把信号线用地包起来降低耦合面积。地平面也是重点。eFuse下面的散热焊盘一定要接到足够大的铜皮区域否则满负载时芯片温升速度会让你怀疑人生。我在TI推荐的热阻模型基础上把散热焊盘的过孔数量做足了这些过孔直接连到内层的GND铜皮帮助热量尽快扩散。测试下来同样1.5A负载电流情况下散热处理前后的温差能有七八度这个数据很直观。4. 固件实现保护状态机与故障恢复策略4.1 初始化流程先让硬件处于安全态固件写起来首先就要考虑“上电的瞬间MCU自己还没初始化完成此时eFuse应该是什么状态”。我的设计里MCU上电后第一件事就是配置IO状态先把连接使能脚的GPIO配置为输出并拉低确保eFuse处于关断状态。然后配置FLT外部中断配置ADC时钟和通道完成UART初始化。所有初始化完成之后才延时几十毫秒等待电源稳定再把使能引脚拉高。这段延时很有讲究。如果初始化一完成就立刻使能而此时输入电源可能还在爬升过程中eFuse会检测到欠压并进入保护状态。虽然这不一定是大问题但在工业现场会多出一个无意义的故障记录。所以我在代码里加了一个500ms的等待窗口期间只读不动作确保输入轨稳定后再接管电源。4.2 保护状态机的核心设计整个固件的灵魂是状态机。我不是简单地在主循环里轮询而是把系统划分成几个明确的状态空闲态、软启动态、运行态、故障保持态、恢复重试态。空闲态是系统刚上电、等待使能的状态软启动态是使能拉高后、等待输出电压爬升完成的状态运行态是正常工作的状态MCU周期采样电压电流同时响应FLT中断。如果FLT引脚触发了系统进入故障保持态把当前故障的码值和时间记录下来再根据故障类型决定是否自动恢复。恢复策略上我采用了一种“递进退避”的方式。第一次过流故障后等待3秒再尝试恢复如果再次触发等待时间加倍到6秒连续五次失败后直接锁定在故障态等待人工复位。这个策略的优点是既能让瞬时过载这类临时故障自动恢复又能防止持续短路导致设备反复重启受损。4.3 ADC采样与软件滤波电流采样是ADC读取的关键。因为eFuse内部存在纹波直接读取单次采样值一定会有抖动。我写了一个简单的软件滤波连续采集16次去掉最大值和最小值对剩余14个值求平均。这个滤波器在10位ADC分辨率下已经足够也不会占用太多CPU时间。采样周期控制在10ms一次即每100ms得到一组有效数据。输入电压采样也要做滤波但它更关注的是“缓慢漂移”而非瞬时噪声。所以我用的是滑动平均窗口保留最近20个采样值每次更新时剔除最旧的一个。这样既能平滑纹波又不会掩盖真实的电压跌落。在实测中电磁阀启动瞬间母线电压会被拉低到约20V这个跌落过程被清晰记录下来成为判断系统电源余量的重要参考。4.4 故障记录与串口上报PIC18F96J65的UART在这里是很有用的。我把故障事件按统一的格式打印出来例如“FAULT_OC 当前电流值 恢复次数 时间戳”这样调试的时候可以直接从串口日志还原现场。故障记录存储在EEPROM或者MCU内部数据存储区。每次故障发生时除了实时上报还要写入一条记录。我分配了一个环形缓冲区可以保存最近32条故障记录。每次系统启动时MCU会先把这些记录通过UART全部输出一遍。这个功能在生产测试环节非常实用——一台设备如果出厂前已经被触发过多次保护流水线工人一眼就能看到历史记录判断是否需要返修。4.5 看门狗和异常兜底PIC18F96J65自带看门狗定时器我启用并配置了较长的超时时间。看门狗的存在是为了防止MCU程序跑飞后会让使能脚一直保持高电平电源路径处于不受控状态。我在喂狗代码的路径上做了约束只有主循环正常执行完一轮且状态机逻辑没有卡死才允许喂狗。一旦程序异常看门狗强制复位MCU复位后默认的“安全态”就是关闭eFuse输出设备宁可不工作也不能带着故障通电。还有一个细节就是使能脚的冗余控制。我不仅由GPIO控制使能还在硬件上允许通过跳线直接把使能脚接到高电平。这个跳线是给产线测试用的在软件还没有烧录的空板测试阶段测试人员可以通过跳线让电源直通验证硬件电路本身是否正常。这个设计后来救了很多次急在没有固件的情况下也能快速排查硬件问题。5. 调试实录那些一测就翻车的问题5.1 上电瞬间的浪涌误触发第一次打样回来后一上电就发现FLT引脚有短暂的拉低动作但整个系统又能正常工作。用示波器抓才看到在使能拉高的瞬间输出端大电容的充电电流超过了设定阈值eFuse判定为过流并立刻关断关断后负载放电然后又重新启动形成了一个高频的开关振荡。解决方法有两步。第一步增加斜率控制电容容值把输出电压爬升时间从2ms拉长到8ms充电电流峰值随之下降。第二步在固件里做了软启动屏蔽窗口使能拉高后的50ms内不响应FLT下降沿除非FLT持续低电平超过100ms才认定为真故障。这两招结合起来浪涌问题彻底消失。5.2 FLT信号抖动引起的误报另一个问题出现在系统长时间运行后偶尔会收到一条过流故障记录但实际负载根本没那么大。排查后确认是FLT信号受干扰。原因是控制板卡里除了24V电源之外还有继电器线圈继电器吸合瞬间会产生一个几十纳秒的尖峰通过空间耦合到了FLT线上。解决思路不是加滤波电容这么简单因为电容加大会影响故障响应的实时性。我是双管齐下在FLT引脚靠近MCU端并联了一个小电容同时把外部中断配置为仅响应下降沿且开启内部弱上拉。更重要的是代码里增加了中断触发后的50微秒消抖确认也就是进入中断后延时一段时间重新读取引脚电平和状态保持时间。经过这一改继电器动作不再误报真正的短路故障依然能在微秒级被捕获。5.3 芯片温升比预期高满负载烧机测试时TPS259483AYWPR的壳体温度到了85度左右虽然还在结温范围之内但长期运行总觉得不踏实。我拿热成像仪看了一下发现热量主要聚集在芯片的小散热焊盘周围而PCB底层对应位置几乎没有散热铜皮。整改方法是把芯片正下方和背面各贴了一大块GND铜皮再均匀打了16个过孔。这一次改装让同等负载下的温度降到了75度以下。在工业设备机箱里芯片周围还可能有其他发热源所以热设计余量一定要留够。这颗芯片本身导通电阻带来的损耗和负载电流是平方关系如果项目后期要把最大电流翻倍功耗会变成四倍那时候就必须重新评估散热方案了。5.4 限流电阻精度导致的偏差前面提到过限流电阻精度这里讲讲实测偏差给带来的教训。我用的是5%精度的普通电阻按公式计算出2.4A限流但实际测试中1.9A左右就触发了保护。量了一下电阻实际值和标称值差了不少再算一遍发现偏差完全被放大到限流设定上了。后来我把限流电阻换成0.5%精度的薄膜电阻实测触发电流与设定值之间的误差缩小到了5%以内。这种偏差有时候挺隐蔽的因为很多项目只在图纸上验算一遍就投板。我想提醒的是凡是用外部电阻设定阈值的芯片这个电阻的精度直接影响保护点预算上千万不要在这里抠成本。5.5 常用排查步骤清单如果大家以后遇到类似问题我建议按这个顺序排查先用示波器波形看输入和输出端是否有异常跌落或过冲然后看FLT引脚波形确认触发时刻是否和负载变化重合接着检查限流电阻和分压电阻的实际值排除精度问题再检查PCB走线特别是大电流路径和信号线是否过于靠近最后在软件里加打印输出把状态机跳转过程完整记录下来。按照这个顺序大部分问题都能定位到具体环节。6. 量产与现场运行经验6.1 元器件供应链的一致性这个项目如果只停留在实验室阶段那无所谓但如果要走向量产eFuse和MCU的供货渠道、批次一致性都要关注。TPS259483AYWPR这种新型芯片前期打样可以找代理商申请样品量产前一定要锁定稳定渠道并且对比不同批次芯片的保护阈值。我在做小批量验证时发现不同批次芯片的FLT响应时间略有差异虽然都在规格书范围内但在要求精确的应用里最好在来料检验时专门测试这个参数。PIC18F96J65作为成熟产品线供货相对稳定但也要注意芯片的丝印版本和勘误表。MCU的固件在量产前最好做一次“空片写保护”设置防止现场固件被意外改写。6.2 高低温环境下的行为变化工业设备经常要在-20度到70度的环境里工作。eFuse的限流阈值、过压欠压阈值都会随着温度变化而产生一定漂移。我在高低温箱里做了一轮测试高温60度下限流点下降了几个百分点低温-20度时欠压检测点略有偏移。设计时建议把阈值留出足够的温度余量。例如正常24V系统欠压保护点不要设在22V这样太接近的温度敏感区至少留出1.5V的余量。MCU侧的高低温问题更多体现在ADC参考电压上。PIC18F96J65内部参考电压在全温度范围内的精度不是特别高在需要精确测量输入电压的应用里我推荐使用外部基准源或者定期用已知电压做自校准。这一点在工业现场非常关键。6.3 现场故障数据的二次利用装机半年之后我通过UART日志收集到了不少现场数据。最让我意外的是真正触发保护最多的场景不是短路而是电源线上来自其他设备的传导干扰。这些干扰持续时间极短eFuse保护后我们又设置了自动恢复所以现场几乎没有停机但日志里留下大量恢复记录。通过对这些记录做统计我发现了某个时间段故障率特别高进一步排查才发现是同一生产线上另一台设备频繁启停造成的。这让我意识到电源路径保护系统不仅是一个硬件保护装置它还是一个电源质量的监测工具。固件里记录的故障数据如果配合时间戳和电流电压信息完全可以转化成设备的健康度指标反馈给维护团队。7. 一点实操之后的个人体会回头看我这次把TPS259483AYWPR和PIC18F96J65搭在一起的过程最大的感触是硬件保护方案里“快”和“聪明”往往是矛盾的。纯硬件保护电路可以做得很灵敏但它不知道什么是瞬态干扰、什么是真的故障纯软件保护可以做得很灵活但MCU的主频再高也很难在微秒级完成从采样到切断的全链路。把一颗带硬件保护的eFuse交给一颗专门做状态判断的MCU正好把两边最擅长的部分结合起来这比硬堆分立元件和死磕中断优先级都要省心。实话说这套方案并不适合所有产品。如果你做的是消费级小家电成本压力大一个自恢复保险丝加一个电压比较器可能更合适如果你做的是高可靠性航天级设备那需要的是冗余设计而不是单点eFuse。但对大多数工业控制器、嵌入式扩展板、传感器网关来说这个组合的性价比、调试便利性和可维护性都非常理想。最后分享一个小技巧在固件里预留下一个“安全模式”入口比如通过串口指令进入只监测不保护的模式。这个模式平时绝对不建议开但在实验室调试负载特性时非常有用——它能帮你摸清楚真实负载的启动电流曲线和瞬态特征然后再回头设定合适的限流阈值。我靠这个手段解决了好几次“保护阈值定高了担心烧板、定低了频繁跳断”的纠结也建议大家在项目初期就预留这个调试后门。
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进