ARTICLE DETAIL

资讯详情

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

eFuse+MCU智能电源保护方案设计与实现

eFuse+MCU智能电源保护方案设计与实现 做嵌入式系统这几年我越来越觉得“让电源先安全再谈功能”是一条铁律。工业现场供电环境比想象中恶劣得多插拔瞬间的拉弧、断路器分合闸产生的浪涌、感性负载关断时的反冲随便哪一样都能把后级设备打坏。早期我做产品习惯用自恢复保险丝加TVS但恢复时间不稳定故障状态不可见维护起来很痛苦。后来在几个车载和工控项目里换成了“可调限流保护开关eFuse 单片机”的组合重点是用了TPS259483AYWPR这一颗保护芯片配合PIC18F4525做控制核心把电源路径保护从单纯的“硬件熔断”升级成了“可监测、可恢复、可通信”的系统化管理。这篇文章就把这个方案的选型思路、关键参数计算、固件实现和调试中踩过的坑完整写出来供做嵌入式电源设计、工业控制器和车载设备的朋友参考。我对这个方案的评价很直接它不是性能最强的方案但它是性价比和灵活性平衡得最舒服的方案。TPS259483AYWPR 负责硬保护PIC18F4525 负责策略管理两颗芯片都稳定、成熟、资料多非常适合做中低成本的量产产品。1. 方案整体设计与选型思路1.1 为什么放弃纯保险丝方案改用“eFuse MCU”先回到最原始的需求嵌入式设备、工业控制器通常有一个共同的入口就是DC电源口比如24V、12V或者5V。传统做法在入口处串联保险丝加上反接二极管、TVS管。这种做法的缺点很明显保险丝熔断后无法自动恢复现场维护必须开箱换件很多设备安装在机柜或狭小空间里维护成本很高。保险丝的熔断特性受温度影响大标称2A的保险丝在高温下可能更早断开导致设备无故掉电。保险丝只能保护过流和短路对于过压浪涌几乎没有反应需要额外加OVP器件。故障状态不可见设备“死了”之后你只能靠万用表逐级排查效率极低。如果改成“可恢复保险丝”虽然能自动恢复但动作时间慢动作后阻抗漂移多次动作后性能下降用于精密负载并不靠谱。TPS259483AYWPR 这类eFuse芯片相当于把一个功率MOSFET、电流采样放大器、比较逻辑、电荷泵、欠压/过压检测都封装在一颗芯片里。它能在几微秒到几十微秒内切断故障电流而且动作阈值可以通过外部电阻精确设置。更关键的是它有故障输出引脚FLT和使能引脚EN可以直接和单片机连接。这意味着我们可以让单片机知道“电源为什么断了”然后决定“要不要重新打开”。1.2 TPS259483AYWPR 这颗芯片的关键特性我选这一颗而不是更便宜的普通功率开关主要是看中以下几点可调电流限制通过一颗外部电阻设定限流值范围覆盖几百毫安到几安培覆盖大多数嵌入式板卡的需求。我的某个项目需要2.5A另一个项目只需要1.2A换电阻就行PCB不用改动。可调过压保护OVP通过分压电阻设置关断阈值当输入电压高于设定值时内部FET立即关断避免后级电路被高压灌入。内部集成功率FET导通电阻低以实际器件为准一般在几十毫欧级别满载时压降小不至于把大量能量浪费在保护路径上。软启动控制通过外接电容设定输出电压上升斜率可以抑制上电瞬间的浪涌电流避免“带容性负载上电时前面电源被拉垮”。故障输出与使能控制FLT引脚在过流、过压或过热时拉低EN引脚控制开断这两个引脚和MCU配合能够灵活实现“故障锁定”“自动重试”“停机上报”等策略。1.3 PIC18F4525 在这里扮演什么角色有人会问既然eFuse本身有保护功能还要单片机干什么这个问题问得特别好。单片机的价值在于“策略”它可以通过EN引脚主动控制电源通断比如系统休眠时关断、外部指令断电重启。它实时监听FLT引脚记录故障发生次数、原因和时间输出报警或通过UART上报到上位机。它可以结合自己的看门狗和eFuse实现“故障自恢复”第一次故障延时500ms重新上电连续三次故障则停止重试并锁定表示存在严重异常。某些场景需要先上核心电源再上外设电源PIC18F4525的几个GPIO可以分别控制多路eFuse实现时序控制。PIC18F4525本身是Microchip的8位单片机64KB Flash、3.8KB RAM主频40MHz带有多个定时器、UART、SPI、I2C、ADC。它的优势不在性能而在于稳定可靠、开发环境成熟MPLAB X XC8、库存和封装都比较常规在工业控制领域有大量工程师熟悉它的开发方式。用它做电源管理协处理器完全是“杀鸡用牛刀”都算不上的轻度工作量却能把整个电源保护系统盘活。1.4 整体架构图与信号流我习惯把整个电源入口分成三个层级第一级输入TVS 防反接二极管 输入电容处理瞬态尖峰和极性接反。第二级TPS259483AYWPR处理过流、过压、启动浪涌。第三级PIC18F4525控制与监测层处理故障响应策略、状态指示和通信。信号流上eFuse的输出给后级负载供电FLT输出给PIC的外部中断EN由PIC的GPIO控制。同时PIC通过ADC采集输入电压和输出电压用于系统监测。这样做的好处是所有关键电源参数都在单片机掌握中即使故障瞬间来不及上报单片机也能在复位后通过读取eFuse的保护状态判断上一次到底发生过什么。2. 核心电路设计与参数计算2.1 输入保护TVS、防反接、输入电容很多工程师画电路喜欢直接从电源口拉到eFuse其实前面应该加一级粗保护。我的习惯是在输入端增加一个适合系统最高浪涌等级的TVS管并联在VIN和GND之间用来吸收ESD和浪涌能量。一个肖特基二极管做反接保护或者使用P通道MOSFET理想二极管电路。如果输入电压较低且允许小压降肖特基更简单压降零点几伏成本低。一个电解电容加若干个陶瓷电容并联作为输入储能容量至少按照峰值负载电流乘以电压纹波要求估算通常100uF~470uF起步。这个电容同时也为eFuse芯片的快速动作提供本地能量避免短路时前端电源电压瞬间崩塌导致芯片欠压关断。注意TVS的钳位电压必须高于系统最高正常工作电压比如12V系统TVS的Vc钳位电压建议选20V以上否则正常工作时反复吸收尖峰TVS可能会提前失效。2.2 电流限制电阻计算与选型TPS259483AYWPR 通过一个外部电阻设定限流值。不同型号的数据手册公式可能不同但套路都是“限流值正比于参考电流反比于外部电阻大小”。假设数据手册给出的关系是R_ILIM(kΩ) K / I_LIM(A)其中K在手册中给出比如手册里典型值可能是1500那么你想把限流值设在2.5A计算出来R_ILIM 1500 / 2.5 600Ω取标称值620Ω即可。当然这只是示例实际一定要查TI官方数据手册确认公式和精度。选电阻时注意两点必须用1%或更高精度的金属膜电阻因为限流偏差直接受电阻精度影响。工业和汽车级环境温度变化大最好选温漂低于50ppm/℃的型号。限流电阻要放在靠近ILIM引脚的位置走线尽量短避免干扰电压叠加到参考引脚上。我之前见过因为电阻离高频开关节点太近导致限流值误动作的案例后来把电阻挪开就正常了。2.3 过压保护阈值设置过压保护通常是通过OVLOOver Voltage Lockout或OVP引脚上的电阻分压实现的。基本原理是芯片内部有一个精确的基准电压例如1.2V或1.24V当分压点的电压超过基准时内部比较器翻转关闭FET。假设目标过压关断阈值为 U_OV 15V内部基准V_REF 1.2V分压电阻上R_TOP连接到VINR_BOT接地分压公式V_REF U_OV × R_BOT / (R_TOP R_BOT)常见做法是先选R_TOP在几百kΩ量级然后计算R_BOT。比如R_TOP100kΩ则R_BOT (V_REF × R_TOP) / (U_OV - V_REF) (1.2×100) / (15-1.2) ≈ 8.7kΩ取9.1kΩ标准值。之后实际阈值会略有偏差最好从数据手册的精度参数里确认。这里有一个小建议不要把过压阈值设得过于接近额定工作电压否则输入电压稍微波动就会导致系统断电。比如12V系统最好设在16V左右留出20%以上的余量。工业现场常有输入电压瞬态抬升设置太紧会频繁保护反而增加故障恢复的复杂度。2.4 软启动时间设置eFuse内部一般有一个dV/dt引脚外接电容从GND连接到该引脚控制输出电压的上升斜率。软启动时间越长输出电容充电电流越小浪涌越小但启动时间过长可能影响系统时延要求。可以做一个简单计算如果输出端总电容C_out 330μF启动输出电压目标V_out 5V希望启动时间t 5ms那么平均充电电流I C_out × V_out / t 330μ × 5 / 5m 0.33A。这个电流必须低于你设置的限流值同时也要低于前端电源能供应的电流。根据启动时间要求查数据手册中dV/dt电容与启动上升速率的曲线选取合适的电容值。这个曲线通常是“斜率对电容值近似线性”一半用几十nF就能做到几毫秒的斜率实际以手册为准。在启动慢的情况下后级MCU可能还没完成复位eFuse不会立刻带载所以也不必追求极短的启动时间。我一般选2ms-10ms之间既不明显影响整体上电速度又能有效抑制浪涌。2.5 与PIC18F4525的接口电路EN引脚串联1kΩ电阻连接到PIC的GPIO同时EN脚加10kΩ下拉电阻防止PIC未初始化时eFuse意外使能。如果电平不匹配可以用三极管或电平转换但PIC是5V系统TPS259483的EN最高耐压也够通常可以直接连接。FLT引脚这是开漏输出需要上拉到5V或适合芯片的电压串联一个小电阻接到PIC的外部中断引脚。因为FLT会在故障时拉低所以我给PIC设置的是下降沿触发。为了抗干扰在PIC引脚到地并联一个100nF电容滤除毛刺。可选PG引脚Power Good如果想在输出正常后让PIC执行初始化可以接到PIC普通I/O并作为查询标志。如果eFuse没有PG也可以通过电阻分压采样输出电压来判断。ADC采样输入用两个电阻分压把输入电压和输出电压分别接到PIC的两个ANx引脚并用一个100nF电容滤波。注意分压电阻的并联阻抗会影响ADC采样精度建议分压电阻总阻抗在10kΩ左右并启用ADC采样保持时间补偿。具体电路连接方式用一个简表整理功能TPS259483引脚PIC18F4525引脚连接方式使能控制ENRB0GPIO输出串联1kΩ下拉10kΩ故障反馈FLTRB1开漏输出上拉4.7kΩ加100nF滤波下降沿中断输入电压监测输入分压点AN0分压电阻100nF滤波输出电压监测输出分压点AN1分压电阻100nF滤波状态指示—RC0/RD1LED/蜂鸣器驱动3. 固件设计与实现3.1 主流程与初始化PIC18F4525 侧的程序我用 MPLAB X XC8 编写结构非常简单主循环只需要做状态机管理真正的时间敏感工作在中断里完成。初始化阶段应该按以下顺序做配置系统时钟设置需要的振荡器。配置所有GPIO方向EN输出低电平FLT输入并开启外部中断LED、蜂鸣器输出。配置ADC模块选择需要采样的通道设置采样时钟。初始化USART用于输出日志。延时100ms确保eFuse输入电源稳定。将EN置高使能输出。关键是第5步的延时不能省略。如果单片机和eFuse同时上电PIC复位期间GPIO状态可能不确定EN一直被下拉电阻压住等复位完成后延时一段时间再使能这样能避免启动过早导致的异常保护。我见过一个案例单片机复位需要几十毫秒eFuse输出已经建立后级MCU还没复位几个外设竞态导致开机偶发故障。加了延时后问题消失。3.2 外部中断与故障计数FLT引脚接在PIC的外部中断源上比如INT0。每次中断代表一次故障发生。但在中断服务函数里不应立即做复杂处理只做以下事件清除中断标志。将一个全局变量g_fault_flag置1。记录当前故障计数g_fault_count。如果计数达到锁定阈值例如3次置g_locked_flag。主循环检测到g_fault_flag进入故障处理状态。流程如下读取当前输入电压和输出电压ADC值判断是否电源异常。将EN引脚拉低彻底关断输出。延时一个固定恢复间隔比如200ms再重新置EN为高。判断FLT引脚是否在恢复后仍然为低如果仍然为低说明故障持续存在再次进入关断状态继续计数。如果连续恢复3次都失败将g_locked_flag置1系统进入锁定状态不再自动重试同时驱动蜂鸣器长响和LED快闪等待人工断电检修。这个策略在工业设备里很实用。对于瞬时过流或电容充电造成的短时故障自动恢复能避免人工爬杆。对于真正的短路和过压锁定状态能防止反复烧毁器件。3.3 ADC 监控与阈值判断ADC部分我会周期性每100ms采样输入电压和输出电压。采样结果做数字滤波简单做法是连续采8次取平均值或者使用滑动平均。阈值设置基于电阻分压后的电压。比如我要监测输入是否低于9V12V系统允许欠压范围可以设一个软件阈值。如果ADC读到的输入电压低于阈值即使eFuse没有触发过压或过流保护我们也应该主动关断输出避免后级工作在欠压状态导致逻辑混乱。这种软件保护的好处是灵活调节不必重新设计硬件。3.4 UART 输出故障信息调试和生产阶段串口日志很重要。我通过USART发送ASCII字符串格式类似PWR_OK, VIN12.3V, VOUT5.02V FAULT, CNT1, VIN14.8V, VOUT0.1V, RECOK终端能看到每次故障前后的状态上线排查非常方便。如果产品量产后需要隐藏日志可以留一个诊断引脚触发平时不输出。3.5 关键代码片段这里给出一个XC8下的简化代码框架只保留核心结构方便你移植#define EN_PIN LATBbits.LATB0 #define FLT_PIN PORTBbits.RB1 unsigned int g_fault_count 0; unsigned char g_locked_flag 0; unsigned char g_fault_flag 0; void interrupt high_priority isr_high(void) { if (INT0IF INT0IE) { INT0IF 0; // 清标志 g_fault_flag 1; g_fault_count; if (g_fault_count 3) { g_locked_flag 1; } } } void power_on_output(void) { EN_PIN 1; } void power_off_output(void) { EN_PIN 0; } void fault_recovery(void) { power_off_output(); __delay_ms(200); power_on_output(); __delay_ms(100); } unsigned int read_avg_vin(void) { // 采样AN08次平均 // ... }主循环里只需要轮询标志不建议在中断里做太多事情。void main(void) { init_system(); power_off_output(); __delay_ms(100); power_on_output(); while (1) { if (g_locked_flag) { // 锁定状态LED快闪蜂鸣器长鸣 continue; } if (g_fault_flag) { g_fault_flag 0; fault_recovery(); // 恢复后检查FLT引脚 if (!FLT_PIN) { // 仍然故障继续保持关断 power_off_output(); } } // 周期性监控ADC和串口输出 monitor_voltage_and_report(); __delay_ms(100); } }注意这个代码仅仅是演示真正的产品里还要处理看门狗、低功耗、多路eFuse协调等问题。4. 常见问题与排查技巧实录4.1 上电瞬间eFuse 误触发过流保护这是我在最初调试时遇到的第一个问题。板卡上电瞬间输出端有大量电容充电瞬时电流远超正常工作电流。eFuse检测到浪涌直接判定过流关断。后来查手册分析主要有三个解决方向增大软启动电容让输出电压斜率变缓电容充电电流平均化。提高限流设定值让它高于“实际最大负载电流 最大电容充电电流”的峰值。如果后级负载允许先让系统在低负载状态启动再通过单片机切到高负载。实际项目里我三个都用了。提高限流值注意不能无限提高否则短路保护阈值太大起不到保护作用。4.2 限流电阻温度升高保护点漂移在某次老化测试中限流电阻旁边正好有功率MOSFET散发大量热量电阻温升达到50℃。因为电阻自身阻值变化限流点偏移了10%左右导致负载不够大的情况下频繁保护。解决方法是把限流电阻挪到远离热源的位置并更换为低温漂的1%电阻。在PCB布局时这个细节很容易被忽视但影响非常明显。4.3 单片机启动时FLT引脚毛刺误触发PIC18F4525复位期间如果FLT引脚被干扰拉低会导致单片机刚启动就进入故障恢复流程。我在FLT引脚和PIC的INT0之间增加了一个RC低通滤波比如10kΩ串联、1nF并联时间常数10μs左右既不影响故障信号快速响应又能滤掉纳秒级毛刺。另外在初始化阶段先关闭外部中断主函数延时后再开启也能有效避开复位上升期的电噪声。4.4 输入电源短暂跌落eFuse输出也跟随掉电有些24V工业电源在负载突变时会有几十毫秒的跌落如果输入欠压保护点设置得太高eFuse会误判断为过压或欠压并关断。排查时用示波器同时看VIN和VOUT会发现VOUT只是跟随VIN下降并非保护动作。解决办法增大输入大电容比如1000μF电解维持跨过跌落期。降低欠压锁定阈值或使用滞回功能避免临界点抖动。调整系统负载的动态响应尽量减少瞬间大电流变化。这类问题往往不能单纯靠eFuse解决需要从系统电源设计角度统筹。4.5 故障恢复太频繁导致系统反复重启自动恢复功能在工业现场可能是双刃剑。如果故障是持续短路自动恢复会不断尝试每次尝试都会消耗能量也可能损坏eFuse。因此必须有次数限制和锁定机制。我设定最多恢复3次每次间隔递增第一次200ms第二次500ms第三次1s三次后必须人工断电或通过串口命令解锁。实际使用中这个策略在“瞬时短路后故障消失”和“永久故障”两种情况之间取得了平衡。4.6 快速排查速查表故障现象可能原因排查方法上电就保护输出电容过大、软启动电容过小示波器观察VOUT上升波形增大dV/dT电容低负载下误保护限流电阻靠近热源、限流点太低换低温漂电阻重新计算ILIM电阻FLT反复跳变输入电压波动、FLT引脚干扰抓VIN波形加RC滤波调整阈值恢复后仍故障负载短路、过压未解除断开负载测试检查OVLO分压通信丢包或复位电源地弹或输出跌落加输入电容检查GND走线调整启动时序5. 布局与布线经验电源保护电路如果PCB布局不好再好的芯片也白搭。我总结了几条针对这个组合的布局规则输入电容、输出电容必须靠近TPS259483的VIN、VOUT引脚推荐小于5mm的走线距离且走线要宽最好直接铺铜。功率回路VIN→eFuse→负载走线尽量短而宽减少寄生电感。寄生电感会和输出电容形成LC振荡可能导致环路不稳。GND平面要完整。PIC的数字地、模拟地和功率地建议在单点汇合或者用0欧电阻连接防止地弹电压干扰单片机的ADC和中断。FLT、EN等信号线远离开关节点和电感。工业板上常有DC-DC电感这些信号线平行走几厘米就会耦合噪声。热设计方面eFuse内部FET在大电流下发热需要给它足够的铜箔散热必要时打散热孔阵列。结语与一点个人体会把TPS259483AYWPR和PIC18F4525放在一起其实是一个“硬件做粗保护软件做细管理”的典型组合。硬件在微秒级切断危险软件在毫秒级决定恢复策略两者互补后整个电源路径就变成一个可感知、可控制、可维护的系统。现在做工业产品我基本把这套方案作为电源入口的标配模板换电阻就能适配不同功率等级换单片机引脚就能适配不同通信协议。最后分享一个调试时的小技巧在样板阶段可以先不焊eFuse的功率部分用可调电源通过限流模式直接给后级供电先把PIC的程序和故障处理逻辑调通再接入eFuse做真实保护测试。这样能把“软件逻辑问题”和“硬件参数问题”分开定位省去大量来回拆焊的时间。真等到现场出现“设备没输出”的故障单片机串口里那几行日志往往比万用表更有说服力。
返回列表