ARTICLE DETAIL

资讯详情

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

电子保险丝+MCU:嵌入式电源路径保护设计与实践

电子保险丝+MCU:嵌入式电源路径保护设计与实践 嵌入式产品做久了你会发现真正让设备“死机”的往往不是代码bug而是电源路径上的那一瞬间。浪涌、短路、热插拔、负载突变任何一个环节处理不好轻则复位重启重则烧板子。以前我们常用的方案是自恢复保险丝加PMOS管动作慢、精度差出了故障你还不知道是过流还是过压只能拿万用表一点一点量。这几年集成电子保险丝方案成熟了我手上这颗TPS259483AYWPR就是TI的电子保险丝配套一颗Microchip的PIC18F87J50做状态监控和策略管理算是把“硬件硬保护”和“软件智能管理”结合得比较完整的一套做法。这篇就把我的设计过程、参数计算、固件状态机和踩过的坑一起放出来给正在做嵌入式电源保护或者工业控制器供电设计的工程师一点参考。1. 方案拆解为什么选“电子保险丝 MCU”而不是传统保护电路1.1 自恢复保险丝和DC-DC自带的保护为什么不够用先说自恢复保险丝也就是PPTC。它靠温度升高来增大阻抗从而实现限流优点是便宜、简单但缺点非常明显动作速度慢通常在毫秒甚至百毫秒级别碰到真正的硬短路负载端的电容可能已经把能量灌进去了精度差标称2A的自恢复保险丝触发点在1.5A到2.5A之间晃荡设计余量得留得很宽而且它没有状态输出烧断了你只能靠系统偶然发现的异常来反推根本做不到实时感知。DC-DC芯片自带的过流保护呢它能保护自己这一路但保护的是电感后级的输出输入端的反接、过压、浪涌、以及后级短路瞬间的冲击它往往是管不住的而且很多DC-DC的限流点是固定的、不可调没法针对不同负载精确配置。所以我在做一些工控项目时如果对电源可靠性要求比较高都会在电源入口单独放一级“路径保护器件”而不是把赌注压在保险丝或DC-DC身上。1.2 TPS259483AYWPR这颗电子保险丝能干什么TPS259483AYWPR属于TI的电子保险丝家族本质上是一个把功率通路、采样、控制和保护逻辑集成在一起的芯片。它放在电源输入端和负载之间自己就成了一个“带开关功能的保险丝”支持可编程限流你可以用一颗电阻把最大电流设到负载实际需要的值支持可编程的启动斜率也就是软启动防止上电瞬间给后级电容充电时产生巨大的浪涌电流这一点在做热插拔和电容负载时非常关键内置过压、欠压保护可以用分压电阻设定输入电压的工作窗口还有热关断和短路保护芯片结温超标或输出短路时会自动切断通路。对我来说它最大的价值是速度和确定性短路时响应速度在微秒级比分离件方案快一个数量级而且所有动作都是硅片内部的模拟电路完成的不依赖固件哪怕MCU死机了硬件保护仍然在岗。1.3 那还要PIC18F87J50干什么MCU在这里的角色是“策略层”很多人会问电子保险丝已经把保护都做了加一颗8位MCU是不是多余我的回答是保护动作由eFuse执行但“什么时候允许供电、故障之后怎么处理、这次故障是什么原因、要不要通知上位机”这些策略层面的东西必须有个大脑来管。PIC18F87J50在这里干的活就是上电时控制EN引脚的使能时序让系统按预定的顺序启动持续读取FLT和PG状态引脚监控eFuse是否处于故障态、输出是否正常建立记录发生过多少次过流、短路、过压事件并把事件通过UART或USB上报到上位机故障后决定是立即重启、延时重启还是保持关断等待人工复位。简单说eFuse是肌肉反应的脊椎反射MCU是大脑判断两者配合才能真正把电源路径做成一个“可观测、可管理、可恢复”的子系统。1.4 这套组合适合放在什么场景里想一想你手头哪些项目用得上。工业传感器和PLC控制器现场供电经常被强电干扰输入端过压是家常便饭电池供电的便携仪器负载短路或者电池反接都会造成不可逆损坏带USB口或对外供电的控制器支持热插拔时接口处最容易产生浪涌还有就是多路供电的嵌入式主板需要严格的上电时序不能让某一路启动电流把整机电压拉垮。这些场景下把TPS259483AYWPR放在电源入口把PIC18F87J50作为系统管理控制器基本就是一套通用且可靠的标准答案。我这次做的就是一个12V转5V的工业控制板入口用电子保险丝限定最大电流再用PIC18F87J50管理启停和告警整个系统调试完心里踏实很多。2. 硬件设计拆解TPS259483AYWPR周边参数的确定方法2.1 限流电阻的选型和计算思路电子保险丝的核心参数是限流点它不像普通保险丝那样通过更换保险丝本体来改变电流等级而是通过改变芯片外部的一颗电阻来设定。TPS259483AYWPR的限流引脚通常会有一个内部基准外部电阻的大小和限流值呈反比关系也就是数据手册里给出的类似 ILIM K / RILIM 的公式其中K是芯片内部参数手册会给出对应曲线或表格。实际操作时我的步骤是先看负载的最大稳态电流再加30%到50%的瞬态余量最后四舍五入到芯片推荐表里比较接近的档位。例如我这个项目5V负载最大稳态电流是2A启动时电机瞬间会冲到2.8A那我就不把限流点卡在2.5A上而是设在3A左右避免正常启动时误触发过流保护同时保留足够的短路限制能力。计算完理论阻值后选一颗1%精度的电阻并留出实际走线带来的压降余量。我特别提醒一句限流电阻不要省钱用5%精度的因为限流点直接和这颗电阻的精度挂钩量产时5%偏差会让保护点漂移很大要么该保护时不动作要么正常负载频繁跳保护。2.2 启动浪涌控制dV/dT引脚电容怎么定热插拔场景里最怕的不是稳态电流大而是后级电容充电瞬间形成的冲击电流。假设负载端有470μF电容输入12V如果直接硬上电理论冲击电流可以用 I C × dV/dt 来粗估在极短时间里可能冲到几十安培足以把连接器打火、把电源拉垮。TPS259483AYWPR的软启动脚就是用来干这个的在启动引脚上外接一个电容让输出端电压按一个可控的斜率爬升。我这个项目选的是220nF的启动电容对应的输出电压爬升时间大约在几个毫秒量级这样一来470μF电容的充电电流就能被限制在限流点以内。计算逻辑很简单电容越大启动越慢冲击电流越小但上电时间太长系统可能又等不及电容太小启动接近硬开浪涌保护就失去意义。我通常会从数据手册给出的推荐范围起步再根据示波器实测波形微调目标是让启动电流峰值不超过限流点的八成。顺带说一句如果系统需要快速反复启停启动电容别取得过大否则频繁重启时eFuse内部会有额外的热累积。2.3 输入过压/欠压窗口两个电阻分压的坑OVP和UVLO是电子保险丝很容易被忽略的功能。很多工程师只设了限流就不管输入电压了结果输入电源异常升高时后级DC-DC先烧。TPS259483AYWPR的过压和欠压检测脚通过分压电阻把输入电压映射到内部基准上我的习惯是先把系统允许的工作电压窗口定下来。比如这项目输入是9V到16V低于9V说明电源异常或电池快耗尽高于16V可能是适配器故障或雷击浪涌后的残压这两种情况都应该让eFuse切断输出。分压电阻的计算就是标准的电阻分压公式设上分压电阻R1接输入、下分压电阻R2接地检测脚电压等于 VIN × R2/(R1R2)让这个电压落在内部基准窗口内就行。选电阻时注意两点一是分压电阻会吃掉一点静态电流阻值太大抗干扰差阻值太小静态功耗大我一般用几十kΩ到几百kΩ的级别二是这两颗电阻的精度直接影响保护电压点量产的批量一致性靠它保证同样建议1%。2.4 输入输出电容和PCB布局的细节电子保险丝的数据手册都会给出输入输出电容的推荐值但很多人不理解为啥需要两颗。输入电容的主要作用是稳住芯片输入端的电压应对后级短路瞬间的高频电流抽取还能吸收来自电源线上的瞬态脉冲输出电容则是在负载突增时提供短时电荷支撑减少输出电压跌落。我通常会按照手册推荐值起步并在实际测试时根据纹波和瞬态响应调整。PCB布局这一块我踩过的坑比较深芯片的电流路径必须短而粗功率地从输入到输出的环路面积要尽量小否则寄生电感在短路瞬间会产生很大的尖峰电压轻则让芯片误判重则炸管子。另外限流设定电阻和启动电容要靠近芯片引脚放置中间不要穿其他信号线检测分压电阻的地线要单独走不能和功率地混在一起。很多第一次做eFuse设计的朋友布完板发现限流值不准、启动波形怪异八成就是布局惹的祸。3. PIC18F87J50 侧的固件实现把电源路径变成可管理对象3.1 为什么选PIC18F87J50这颗8位MCUPIC18F87J50是Microchip 8位MCU里外设比较丰富的一颗带USB、多个UART、I2C/SPI、ADC和大量IOFlash空间也有128KB级别跑一个电源管理协议栈绰绰有余。做电源监控这种活它比32位MCU更合适的原因在于实时性并不需要RTOS级别的调度中断响应足够快就行功耗低适合电池供电场景片上外设直接够用不需要外扩芯片。还有一点是它的3.3V工作电压正好和TPS259483AYWPR的逻辑电平兼容不需要额外的电平转换。如果非要说缺点8位MCU的运算能力有限做复杂的数据分析和协议栈就别难为它了老老实实做状态机、事件记录、UART上报这是它的舒适区。我这边用MPLAB X XC8编译驱动的分层思路和32位平台完全一致代码可读性和维护性都OK。3.2 硬件连接和IO规划建议MCU和电子保险丝之间的接口不多但每根线的接法都有讲究。EN使能脚建议用一个IO口加一个下拉电阻来控制保证MCU复位期间eFuse处于关断状态避免系统还没初始化就先把电源打开了。FLT状态脚通常需要外部上拉eFuse内部是开漏输出故障时拉低MCU这边要开中断并做去抖处理。PG输出脚用来判断输出电压是否建立一般接一个IO并且配置为输入配合EN的控制形成闭环我命令你开你开好了告诉我。另外我还会从eFuse的输出端引一路采样到MCU的ADC用来监测实际输出电压这样即使FLT和PG都正常也能发现负载把电压拉低这种“隐性故障”。IO规划上我建议把FLT接到支持电平变化中断的引脚因为在系统休眠时故障可以用中断唤醒MCU而不是靠轮询耗电。3.3 固件状态机设计OFF、START、RUN、FAULT电源管理固件最忌讳的就是把所有逻辑堆在main函数里一个if套一个if最后故障分支根本理不清。我按状态机来组织OFF是初始态EN为低eFuse关断START是启动态MCU拉高EN等待PG变高并且电压采样超过阈值同时启动一个超时计时器RUN是正常运行态MCU周期性采样电压、电流监控FLT状态FAULT是故障态当FLT被拉低或输出异常时进入这时候MCU记录故障标志、保存故障类型然后根据策略决定是立即重启、延时重启还是保持关断。每次状态迁移都记录一条事件日志时间戳用PIC内部的定时器维护。这里有一个很重要的细节不要用MCU去直接控制eFuse的限流点来“软恢复”因为eFuse的限流设定是纯硬件电平频繁切换会让芯片内部基准不稳定我都是让FAULT态下的恢复动作等于一次完整的上电时序也就是EN拉低等待释放再重新走START流程。3.4 关键代码骨架和中断处理示例这里给一个基于MPLAB XC8的可参考骨架代码不是完整工程但结构可以直接套。第一是初始化把EN引脚配置为输出并拉低FLT配置为输入并开电平变化中断PG配置为输入ADC采样输出端电压。第二是启动流程调用power_on()时先置EN然后在一个10ms的定时中断里轮询PG和ADC超时则进入FAULT。第三是FLT中断服务函数不要在中断里做复杂的处理只置一个volatile标志并记录时间戳真正的处理放主循环。#define EN_PIN LATBbits.LATB0 #define FLT_PIN PORTBbits.RB1 #define PG_PIN PORTBbits.RB2 volatile unsigned int fault_time 0; volatile unsigned char fault_flag 0; void power_on(void) { EN_PIN 1; // START state: wait for PG high for (unsigned char i 0; i 100; i) { __delay_ms(10); if (PG_PIN get_vout_adc() 4500) { state RUN; log_event(EVT_START_OK); return; } } state FAULT; log_event(EVT_START_TIMEOUT); } void __interrupt() high_isr(void) { if (INTCONbits.RBIF) { if (!FLT_PIN) { fault_flag 1; fault_time uptime_ms; } INTCONbits.RBIF 0; } } void main(void) { init_mcu(); init_power_pins(); state OFF; while (1) { if (state OFF start_cmd_received()) { power_on(); } if (fault_flag) { // handle fault: record, disable output, apply strategy fault_flag 0; EN_PIN 0; state FAULT; wait_recovery_delay(); if (fault_count MAX_RETRY) { power_on(); } else { log_event(EVT_LATCH_OFF); // stay off until external reset } } update_monitor(); service_watchdog(); } }这段代码里的关键点有三个一是FLT中断只设标志不在中断里做延时和日志避免中断处理过长影响其他实时任务二是启动超时一定要有否则PG永远不拉高时系统会卡在START态三是重启次数要做限制一般3次以内连续失败就锁死防止故障负载导致系统反复上下电。实际调试时我还会在每次状态切换时通过UART打印一行状态码配合串口日志可以看到完整的电源生命周期。4. 实测过程从正常上电到故障注入的完整记录4.1 测试环境和仪器接法调试这套电路我的桌面配置很简单一台可调直流电源模拟输入一台电子负载模拟后级负载示波器用两路同时测输入电压和输出电压再加一个电流探头看输入电流波形。电子负载设置为恒流模式方便模拟不同负载大小。另外给PIC18F87J50接了一条USB转串口线用来打印状态机日志。测试时先不上大负载空载跑一遍上电流程确认PG翻转和MCU状态机迁移正常再逐步加大负载最后做短路和过压注入。做故障注入时一定要控制好测试时间连续短路别超过几秒钟eFuse在限流状态下会消耗大量功率虽然芯片有热关断保护但长时间短路会让芯片表面温度飙得很快。4.2 正常上电波形软启动是否生效空载上电时输入9V直接加到eFuse入口EN拉高后输出端电压开始缓慢爬升。示波器上看到的是输出电压以接近线性的斜率从0V升到5V整个过程大约3ms左右输入电流峰值被压在1A上下。这个波形告诉我软启动设置是合理的如果输出端电压是瞬间跳变到5V说明启动电容失效或者取值太小这时后级电容的充电电流会高得吓人如果爬升时间长达几十毫秒说明启动电容太大系统上电太慢后面的时序控制都得跟着调整。PG信号在输出电压达到阈值后翻转这个翻转沿反馈到MCUMCU从START态切换到RUN态串口打出日志一切正常。4.3 过载和短路故障注入FLT响应有多快做过载测试时我把电子负载从2A慢慢往上加当负载电流超过限流点后输出电压开始被压低芯片进入限流恒流状态此时FLT信号被拉低MCU进入FAULT态并关断EN。从示波器上看正常情况下FLT拉低的时间基本上在微秒到几十微秒的量级比任何软件保护都快。短路线直接短路输出端时现象更明显输入电流瞬间冲到限流点并维持输出端电压跌落芯片热关断后周期性重启MCU在FAULT态里反复尝试恢复。这时候串口日志的价值就体现出来了我可以通过日志看到重启次数、时间戳、每次故障间隔判断是负载真短路还是瞬态过流。如果只是瞬态过流比如电机启动瞬间故障恢复后重启一次就回到RUN态如果是持续短路3次重试后系统会锁死等待人工干预。4.4 启动大电容负载时的假过流问题这个坑非常典型我最初把启动电容和后级大电容的配合没调好带了一个470μF电容负载上电结果eFuse每次都报过流。现象上看输出电压爬升到一半就停下来FLT拉低系统反复重启。分析原因启动斜率太陡充电电流超过了限流点芯片误以为是后端短路触发了保护。解决办法有两个方向一是加大启动电容让充电电流降下来二是把限流点稍微调高一点让启动电流峰值低于限流值。我最终选择了前者因为限流点要照顾短路保护的灵敏度不能为了启动把保护值调得太松。这个案例说明电子保险丝的限流和软启动必须联合调试单独调任何一个参数都容易顾此失彼。5. 常见问题与排查技巧实录5.1 问题速查表从现象到对策调试过程中遇到的问题我整理成一张速查表方便大家直接对照排查。现象可能原因排查手段解决方案上电就触发过流系统无法启动启动电容太小浪涌超过限流点示波器看启动电流峰值加大dV/dT启动电容或微调限流点限流点明显低于设计值限流电阻精度差或布局引入额外电阻用万用表测量限流电阻阻值换1%精度电阻检查PCB走线输出电压建立后PG一直不翻转分压检测阈值设置不合理或输出断线实测输出端电压与PG引脚电平检查输出采样回路和阈值窗口FLT误报负载正常却频繁故障后级负载瞬态过流或启动反复冲击查看串口日志中的故障时间戳调整限流和软启动参数增加重启延时短路保护后芯片发热严重长时间处于限流恒流状态红外测温或热成像缩短短路测试时间优化散热铺铜MCU复位时电源异常跳动EN脚缺少下拉MCU复位期间输出失控示波器抓MCU复位瞬间电源波形EN加10kΩ下拉电阻确保默认关断5.2 几个别人不会写在文档里的排坑技巧第一个技巧FLT引脚最好配置成可唤醒MCU的中断源。很多工程师把FLT接到普通IO上主循环轮询这在系统忙时可能延迟几十毫秒才发现故障对eFuse这种微秒级动作的器件来说软件感知速度完全跟不上硬件动作速度。开中断后故障发生时MCU能立刻被唤醒记录时间戳并执行恢复策略。第二个技巧示波器测量电压时探头地线夹一定要用最短的接地弹簧不要用长的地线鳄鱼夹。电源路径上开关动作时dv/dt很高长地线会拾取大量噪声让波形看起来像震荡实际上电路本身工作得很好。第三个技巧量产前一定要做整机故障注入测试别只在开发板上验证。我曾经见过一个项目开发板上短路保护一切正常装进金属外壳后同样的短路测试却导致输入电源跳闸最后查出来是外壳接地和输入走线的寄生参数改变了故障电流路径。这些问题只有在贴近实际安装状态的条件下才能暴露出来。5.3 关于可靠性的三个容易被忽略的点最后聊几个可靠性细节。限流点和过压窗口的设定电阻选1%精度这一点前面强调过但量产时还要关注电阻的温度系数工业现场环境温度跨度大普通厚膜电阻温度系数会让保护点在高温下漂移建议用温度系数在±100ppm/°C以内的贴片电阻。去耦电容别只放在芯片电源脚旁边eFuse的检测分压脚附近也要加一个小容量的高频去耦电容防止开关噪声耦合进检测回路。PIC18F87J50的固件里看门狗一定要开配合故障锁存逻辑万一固件跑飞导致EN输出异常看门狗能把MCU拉回正轨重新初始化电源控制逻辑。做这套设计我个人最深的体会是好的电源保护设计不是把保护功能堆在某一颗芯片上而是把“硬件响应”和“软件策略”各归其位。TPS259483AYWPR负责那些需要微秒级反应的保护动作PIC18F87J50负责需要判断和记忆的管理工作。调试的时候串口日志和示波器波形缺一不可一个告诉你发生了什么一个告诉你实际波形到底怎样。如果后面要扩展我打算把PIC18F87J50的USB口利用起来做一个上位机配置工具直接在PC上修改限流值和启动斜率参数让这套电源保护方案真正变成可配置的智能子系统。
返回列表