ARTICLE DETAIL

资讯详情

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

eFuse与MCU协作的电源路径保护方案设计与实践

eFuse与MCU协作的电源路径保护方案设计与实践 从标题就能看出来这不是一个“单片机上电就亮灯”的小玩具项目而是一个典型的嵌入式系统里的底层基建活电源路径保护。做嵌入式和工业设备的人都知道系统死机、Flash损坏、传感器读数漂移十有七八不是逻辑代码的锅而是电源出了问题。电源路径上的一次浪涌、一个短路、一次过压能把后端整个系统直接带走。这篇我结合TPS259483AYWPR这颗eFuse芯片和PIC18F4610这颗老牌8位机把电源路径保护的方案设计、硬件计算、固件逻辑和调试踩坑完整拆开讲一遍想抄作业的直接按章节抄就行。1. 为什么是“eFuseMCU”而不是一颗普通保险丝1.1 传统保险丝方案在工业场景里的三个痛点很多工程师的第一反应是电源路径保护串一个自恢复保险丝不就行了如果你只做消费级的小功率产品确实够用。但进到工业场景比如24V/48V供电的传感器采集器、PLC模块、电机驱动器控制板传统保险丝的毛病就很突出。首先是响应速度。普通玻璃管保险丝和部分自恢复保险丝对过流事件的响应时间在毫秒到秒级而工业现场很多故障是微秒级的短路冲击。等保险丝反应过来后端器件可能已经击穿了。其次是状态不可见。保险丝断了就是断了系统没有电MCU连个告警都发不出来维护人员只能到现场用万用表测。第三是不带自恢复策略。自恢复保险丝自己恢复但恢复时机不受控可能在系统还在跑业务的时候突然恢复供电造成二次冲击比不恢复还可怕。所以现代工业电源路径保护基本都转向电子熔断器加MCU管理的方案。eFuse负责硬保护MCU负责软管理两者一配合保护动作的时机、方式、恢复策略全部可控。1.2 这套方案真正值得用的场景如果你只是做一个5V供电的传感器小板输出电流不超过1A用一颗负载开关加自恢复保险丝确实够了。但下面这几类场景eFuseMCU组合的优势就很明显多路供电的嵌入式主板核心板、外设接口、通信模块分别供电任何一路短路都不能拖垮整板电源。工业接口卡RS485、CAN、IO输入输出端口从外部取电插拔和线缆磨损很容易造成短路需要端口级的限流保护。电池供电设备需要精确的过流/过压阈值控制还需要把故障状态上报给主控做低功耗管理。汽车电子相关测试设备供电电压波动大需要宽压输入配合过压钳位和浪涌抑制。在这些场景里eFuse的精确限流、快速关断和MCU的故障记录、恢复策略配合起来能把一个“断电故障”变成一条“可诊断可恢复的事件日志”这对工业设备的可维护性提升非常明显。1.3 整体架构先有个概念先不急着画电路。你只需要理解这棵树功率从输入电源进来先经过TPS259483AYWPR这颗eFuse由它做第一道闸门——控制电流、检测过压/欠压/过温输出故障标志。然后电压送到后端负载。PIC18F4610在这棵树里做的是“管家”角色。它通过ADC实时采集输入输出电压和电流通过GPIO接收eFuse的故障信号再通过GPIO控制eFuse的使能和限流配置。管家管家就是不碰功率主路只管发号施令和记录状态。这套架构里哪怕MCU死机了eFuse依然能独立完成基本的硬件保护这是安全设计上很重要的一点保护功能不应该依赖一个可能会跑飞的处理器。2. 把两颗器件吃透再动手画电路2.1 TPS259483AYWPR这颗eFuse到底在干什么TPS259483AYWPR属于TI的电子熔断器eFuse产品线这个系列的核心能力是把一个功率MOSFET、电流采样电阻、比较器、驱动电路和一堆保护逻辑封装在一颗芯片里。从功能上你可以把它理解成一个“带大脑的智能开关”既能正常导通也能在故障时快速断开。几个关键功能你得吃透可编程限流。通过外部引脚接一颗电阻可以设定限流阈值。当负载电流超过阈值eFuse不会立刻全关而是先进入恒流限流状态防止电路直接开路导致感性负载产生高压反冲。这是eFuse比保险丝高级的核心原因——它用可控的“堵”代替了粗暴的“断”。过压保护OVP和欠压保护UVP。通过外部电阻分压设置窗口输入电压超出窗口就关断输出。我在工业现场见过太多因为错接电源线导致后级全烧的事故有这一级过压保护至少能把损失控制在电源入口。软启动。通过调整外部电容控制输出电压上升斜率避免上电瞬间给后端大电容充电产生巨大的电流浪涌。这一点在带很多陶瓷电容的嵌入式主板上特别重要没有软启动上电就过流保护是家常便饭。故障上报。芯片会输出故障标志信号在过流、过压、过温、短路时拉低。这个信号直接接到MCU的中断引脚MCU通过它第一时间感知电源异常。2.2 PIC18F4610在这里不是主控是“电源管家”PIC18F4610是Microchip的8位增强型MCU内核主频不算高Flash也不算大但做电源管理监控正好够用。选它不选32位MCU最大的理由就是成本、可靠性和启动速度。8位机在工业环境下的稳定性和供货周期表现很好而且它的外设足够丰富多通道10位ADC、多个定时器、USART/SPI/I2C通信接口管一个电源路径绰绰有余。有人可能会问用一颗STM32不行吗行倒是行但你得为用不到的计算能力、更复杂的时钟树和调试环境付出额外的成本和开发时间。电源管理这种低速、强逻辑、重状态机的任务PIC18F4610这种老同志反而干得更稳。而且PIC的生态非常成熟数据手册写得很实诚寄存器配置没那么多绕弯的地方很适合做可靠性要求高的产品。2.3 分工别搞混一句话记住各自职责层次器件职责功率保护层TPS259483AYWPR硬保护限流、过压/欠压关断、软启动、短路保护监控管理层PIC18F4610软管理采集电压电流、记录故障日志、控制恢复策略、对外通信被保护对象后端负载正常稳定工作不背电源锅记住这个分工后面画原理图和写代码时逻辑就顺了。凡是涉及“快速关断、物理限制”的事交给eFuse凡是涉及“什么时候恢复、要不要恢复、记录什么状态”的事交给MCU。两者千万别搞混搞混了会出现在代码里做软件限流的傻事——那反应速度根本不够用。3. 硬件电路设计与参数计算3.1 最小系统连接关系先理清顺着电流方向连接关系是这样输入端电源接TPS259483的VIN经过芯片内部功率开关后从VOUT输出到负载。EN/UVLO引脚通过分压电阻接到输入电源用来设置芯片开始工作的启动电压OVLO引脚同样用分压电阻设置过压关断点ILIM引脚接一个到地的电阻设置限流电流dV/dT引脚接一个到地的电容设置软启动时间FLT和PG引脚接MCU的GPIO分别承担故障输出和电源正常指示。MCU这边PIC18F4610的ADC通道分别采样VIN、VOUT和负载电流通过检流放大器或采样电阻I/O口负责接收FLT和PGI/O口输出控制EN。如果系统需要对外告警可以用PIC18F4610的一个USART口或者I2C口把故障事件上报给上位机或者主控板。3.2 限流电阻的计算先定保护目标限流值的设定必须看后端负载的特性和你希望保护的最小短路电流。比如后端是一个带DC-DC的嵌入式主板正常工作电流1.2A峰值电流可能到2A那我建议限流点设在2.5A左右。设高了起不到保护作用设低了正常峰值电流就会误触发。TPS25948x系列的限流电阻公式一般遵循定系数除限流值的形式以典型K系数举例如果datasheet给出K20kΩ·A则R_ILIM 20000 / I_LIM 20000 / 2.5 8000Ω取标准系列值8.2kΩ对应的实际限流点约2.44A略低于目标值但留有裕量。这里要注意ILIM引脚的电阻精度直接影响限流精度所以我建议使用1%精度的电阻不要用5%的碳膜电阻。实际调试时我还会在板上预留一个并联焊盘如果实测误触发频繁可以并一颗大电阻把限流点稍微调低方便现场改参数。3.3 过压保护分压电阻怎么算过压保护点根据输入电源标称值来定。以常见的24V工业电源为例允许波动上限是20%也就是28.8V取保护点在29V左右比较合理留一点余量避免正常波动误触发。很多eFuse的OVLO引脚内部基准是1.2V当该引脚电压超过1.2V时判定为过压。分压公式V_OVLO V_IN × R2 / (R1 R2)反推一下给定29V触发基准1.2V则分压比为R2 / (R1 R2) 1.2 / 29 ≈ 0.04138如果我取R210kΩ则R1计算如下10k / (R1 10k) 0.04138 R1 ≈ 231.7kΩ取标准值232kΩ再验算V_OVLO 29 × 10 / (232 10) ≈ 1.198V基本贴合。注意电阻必须用1%精度而且分压电阻上流过的是微安级别电流功耗可以忽略但噪声敏感性会高一些建议在OVLO引脚对地加一个100pF的滤波电容。3.4 软启动电容与PCB布局的关键细节软启动电容的大小决定了输出电压上升时间。上升太慢后端DC-DC可能因为输入电压不足而反复启动上升太快浪涌电流抑制就没意义。我一般取1ms到5ms的上升时间。具体电容值与芯片内部充电电流有关如果用典型内部拉流10µA来估算C_dVdt I_chg × t / V_target比如输出5V、上升时间2ms代入C 10µA × 2ms / 5V 4nF取标称值3.9nF或4.7nF都可。这只是估算方式实际要以具体型号的datasheet曲线为准调试时用示波器看VOUT上升沿再微调电容大小。PCB布局上我吃了不少亏重点提醒几个输入电容尽可能靠近VIN引脚输出电容靠近VOUT引脚走线要短粗这是保证eFuse稳定工作的重要条件。FLT故障信号走线要远离电感、开关节点这类强干扰源MCU端加一个RC滤波器或者施密特触发器整形。功率路径的铺铜宽度按电流密度计算2.5A的电流在1oz铜箔上至少需要约2mm宽别为了省地方画细线否则eFuse保护住了负载PCB走线自己先烧了。底部的散热焊盘要开好过孔阵列eFuse在限流状态下功耗很大散热不好会提前进入过温保护导致系统无故断电。4. 固件逻辑状态机与保护策略4.1 电源管理系统的状态机设计硬件保护只是底线真正拉开方案差距的是MCU里的管理逻辑。我习惯把整个电源管理代码设计成状态机清晰且不容易出逻辑漏洞。正常态EN输出高电平eFuse导通PG为高监控ADC采样值和FLT信号。事件判断态收到FLT下降沿中断进入判断流程读取ADC和故障状态判断是过流、过压还是过温。锁定保护态EN拉低断开输出记录故障类型和时间戳向外部发出告警。自动恢复态根据预设策略延时后重新拉高EN若短时间内重复故障超过次数上限则进入深度锁定等待人工复位。软停机态在正常下电指令到来时不是直接拉断EN而是先通知后端负载做数据落盘再关断电源。这个状态机看着简单但它能解决实际问题你不再是一断电就抓瞎而是可以追溯“昨天下午3点系统为什么掉电”故障前因后果都在日志里。4.2 ADC采集与去抖动处理MCU采集电压电流最烦的是噪声导致误判。我的做法是ADC连续采16次去掉最大最小值取平均值这个平均值再和一个滑动窗口的中值做比较既滤掉尖峰又不会因为滤波太狠导致响应迟钝。ADC通道分配上VIN和VOUT直接通过电阻分压接到ADC引脚注意分压后的最大电压不要超过ADC参考电压。电流信号可以用低边采样电阻配合运放放大也可以用高边电流检测放大器。低边采样简单但会引入地弹高边采样准确但成本和电路复杂度高一点。做电源保护我更推荐高边检测因为地回路里串入采样电阻在短路时容易造成的地电位偏移会让MCU误判。4.3 故障恢复策略自动恢复还是手动恢复自动恢复不能简单做成“等1秒重试一次”。如果负载存在硬短路这种周期性的重试等于在反复冲击电源和后端器件。建议做成退避式重试第一次故障后等待1秒重试第二次等待5秒第三次等待30秒超过5次直接锁死只能人工断电排除故障。恢复前还要检查输入电压是否已经回到正常窗口。工业现场经常出现供电电压跌落导致欠压保护但输入还没稳住MCU就把EN拉高了结果eFuse再次欠压关断。所以恢复条件至少要校验VIN在正常窗口内、上次故障不是过温、故障间隔时间满足要求。4.4 固件骨架参考PIC18F4610的代码结构其实不复杂关键是状态机别写得稀烂。贴一个骨架逻辑供参考细节按你的芯片头文件和电路调整#define FLT_PIN PORTAbits.RA0 #define EN_PIN LATAbits.LA1 #define PG_PIN PORTAbits.RA2 typedef enum { PWR_NORMAL, PWR_EVENT_CHECK, PWR_LATCH_OFF, PWR_RETRY_WAIT, PWR_LOCKED } pwr_state_t; void POWER_Init(void) { TRISAbits.RA0 1; // FLT 输入 TRISAbits.RA1 0; // EN 输出 TRISAbits.RA2 1; // PG 输入 EN_PIN 1; // 上电默认使能 // ADC初始化开启VIN/VOUT/电流通道 } void POWER_StateMachine(void) { switch(pwr_state) { case PWR_NORMAL: if (FLT_PIN 0) { // 上报事件读取故障类型 pwr_state PWR_EVENT_CHECK; } break; case PWR_EVENT_CHECK: fault_code POWER_ReadFaultCode(); retry_count; if (retry_count MAX_RETRY) { EN_PIN 0; pwr_state PWR_LOCKED; } else { EN_PIN 0; wait_ms(get_backoff_time(retry_count)); EN_PIN 1; pwr_state PWR_RETRY_WAIT; } break; case PWR_RETRY_WAIT: if (FLT_PIN 1 PG_PIN 1) { retry_count 0; pwr_state PWR_NORMAL; } break; case PWR_LOCKED: // 等待人工复位指令 break; } }这种结构的好处是每个状态都能单独测试、单独加日志。在调试时我用一个上位机串口把状态机的跳转全部打印出来能很直观地看到系统是怎么一步步从正常走到锁定的。5. 调试现场实录常见问题与排查5.1 上电就误报过流先别急着换芯片我第一次调这套方案时用了一个2.5A的限流点结果每次上电板子都直接保护。查了半天才发现问题不在芯片而在后端的DC-DC输入端有几十微法的陶瓷电容。上电瞬间软启动还没起作用这些电容的充电电流就超过了限流点。这个问题的解决思路分两步第一步把软启动电容加大延长输出电压爬升时间第二步在eFuse输出端不要放太大的电容把大部分电容挪到DC-DC的输出端。实测下来输出电容从47µF减到10µF配合加大软启动电容上电误触发就消失了。5.2 陶瓷电容的DC偏压陷阱会让你的计算全错这是新手最容易忽略的。你板上用的X7R陶瓷电容标称47µF但在16V电压下实际容值可能只剩下十几µF。做电源监控时如果按照标称值计算纹波、环路稳定性或者浪涌电流预估结果会和实测差很远。所以在做硬件设计时一定要查所用电容型号的DC偏压特性曲线。我一般要求采购指定容值充足的特殊系列电容并且在设计文档里标注“必须用X7R、25V耐压”避免产线换料后性能悄悄变差。5.3 FLT信号抖动导致MCU中断风暴FLT引脚直接接MCU外部中断调试时发现中断触发非常频繁但看ADC数据又没到保护阈值。用示波器抓FLT引脚的波形发现上面叠加了很多毛刺。原因是FLT走线离功率路径太近MOS管开关瞬间的dv/dt通过寄生电容耦合到了FLT上。排查确认后我在FLT到地之间加了一个10nF的电容缓冲掉高频毛刺同时MCU侧开启去抖定时器确认信号稳定后再进入故障处理流程。这个问题的本质是“信号质量”问题不是逻辑问题所以从源头压噪声比改代码更有效。5.4 eFuse过温后反复重启像个打嗝机有一轮环境测试设备在60℃环境箱里跑系统出现了周期性掉电重启。查日志发现不是过压也不是过流而是过温保护触发。原因是eFuse在限流状态下功耗很大散热焊盘下面过孔太少热量没能高效传导到背面铜箔。改进方案是重新设计焊盘散热结构增加过孔阵列同时在MCU逻辑里增加一个过温锁定策略一旦检测到过温故障至少要等温度降下来通过读取芯片温度标志或者让系统冷却1分钟才能重新使能。这个逻辑很好地防止了“温度降不下来反复重启”的尴尬情况。5.5 多个eFuse的配合问题时序也要管有些板卡上有两路或三路eFuse分别给不同模块供电上电顺序是有讲究的。比如模拟前端和数字处理器的供电如果时序不对可能造成端口闩锁或ADC采样异常。解决办法是调整eFuse的软启动电容让各路输出电压按设定的斜率依次爬起来另外MCU的EN控制逻辑里做软件时序先使能第一路检测PG信号确认电压稳定后再使能第二路。这个“硬件斜率软件握手”的双保险实测下来非常稳。在实际调试中我还遇到过限流电阻受温度影响导致阈值漂移的问题以及MCU上电复位瞬间GPIO默认电平拉低EN导致系统启动失败的问题。后者有一个笨但有效的解决办法在EN引脚上加一个上拉电阻并确保MCU在初始化完成后立刻把EN引脚设为高电平输出这样复位窗口期不会误关断电源。这个方案做到后期我最大的体会是电源保护设计不是堆芯片而是做“决策分工”。把快速响应的脏活累活交给eFuse硬件把需要思考、记录、恢复策略的活交给MCU两者之间的通信和状态握手做好系统的抗电源故障能力才能上一个台阶。如果你手头也有一个被电源问题折腾得够呛的嵌入式项目可以从这套架构开始试先别追求各种高级功能把限流点算准、状态机写稳、恢复策略定清楚你已经比大多数只靠保险丝硬扛的板子强很多了。
返回列表