尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

基于eFuse和MCU的电源路径保护方案:TPS259483+PIC18F57Q43实战

基于eFuse和MCU的电源路径保护方案:TPS259483+PIC18F57Q43实战 做工业电子这几年我越来越觉得电源路径保护这件事不是“加个保险丝就行”那么简单。机房里的组网设备、产线上的传感器节点、AGV上的控制板任何一块嵌入式板卡在接入供电网络的那一刻都要面对热插拔浪涌、线缆电感、感性负载关断、意外短路这一堆问题。传统保险丝反应慢自恢复保险丝精度差分立MOSFET保护电路又太占地方。所以从去年开始我新做的板子上电源入口基本都换成了 eFuse电子熔断器配合单片机做系统级管理。这篇就聊聊我近期用得比较顺手的组合TPS259483AYWPR 负责功率路径的硬件保护PIC18F57Q43 负责时序控制和故障状态监控两者配合把嵌入式和工业应用中的电源路径保护做到位。1. 先想清楚电源路径保护到底在防什么1.1 工业场景里那些看不见的故障我在实验室调试时经常开玩笑说电源轨在万用表里看着是干净的 12V一旦上了真实工况什么妖魔鬼怪都有。长线缆带来的分布电感和分布电容会让开关瞬间出现振铃电机、继电器、电磁阀这些感性负载关断瞬间会产生很高的反向电动势板卡热插拔的时候后级电路里的电容从零开始充电瞬时电流轻松超过稳态电流的十倍。这些问题如果不放在电源路径上解决最后全都要由下游的 DC-DC 或负载硬扛。DC-DC 有自己的限流和过压保护但它的保护阈值通常是按自身安全工作区设计的扛不住上游的瞬时冲击而且很多 DC-DC 过流保护之后要等好久才能恢复甚至直接锁死。所以我的习惯始终是在电源入口处单独设立一道“闸”先把浪涌和短路挡住再谈后级电路的稳定运行。1.2 为什么传统方案越来越撑不住我在早期项目里用过很长时间的玻璃管保险丝和自恢复保险丝也搭过分立 MOSFET 加采样电阻的保护电路。这三种方案各有各的尴尬玻璃管保险丝价格确实便宜但熔断时间受电流倍数影响很大做过流保护时动作点分散而且熔断后必须人工更换用在无人值守的嵌入式设备里就是个运维灾难。自恢复保险丝PPTC优点是能自动复位但阻抗随温度漂移严重大电流路径上的压降和发热都很明显精度只能算“大概齐”。分立 MOSFET 方案最灵活用采样电阻加比较器就能搭出限流但设计得好不好全看硬件工程师功力。要在高边做浮驱、要把保护阈值做温漂补偿、要处理比较器振荡板子面积和器件成本都不低。eFuse 把限流、过压、欠压、过温、反向阻断、软启动集成到一个芯片里硬件层面直接响应故障不需要软件参与就能完成 microsecond 级别的保护动作。这个特性对工业控制场景非常关键。方案响应速度精度可恢复性设计复杂度适合场景传统玻璃管保险丝慢差不可恢复低一次性保护运维成本高PPTC 自恢复保险丝中等差可恢复但迟滞低消费类小电流分立 MOSFET 保护快取决于设计可恢复高定制化需求多eFuse微秒级好可恢复或锁存低嵌入式、工业、车载2. 核心器件各自负责什么2.1 TPS259483功率路径上的硬件闸门TPS259483 是 TI 的电子熔断器输入电压范围 2.7V 到 18V正好覆盖板级 12V、5V 电源轨。需要注意的是如果你做的是 24V 工业母线必须先在前面加一级宽压 DC-DC 降到 12V再进这个芯片。它的硬件保护功能很完整可调限流、可调输出压摆率dV/dt来抑制浪涌、可编程过压/欠压阈值、反向电流阻断、热关断还有一对非常有用的模拟监控输出——IMON 和 VMON。前者输出与负载电流成比例的电流/电压信号后者反映输入或输出电压状况可以直接接到 MCU 的 ADC 通道用于实时监测功率路径的健康度。芯片的典型引脚功能大致如下不同型号封装略有差异最终以数据手册为准引脚功能系统侧作用IN / OUT功率输入 / 输出主功率路径EN/UVLO使能 / 欠压锁定连接 MCU GPIO实现软开关与输入欠压检测ILIM限流配置外接电阻设定过流阈值dVdt输出压摆率配置外接电容设定软启动时间PG/FLT电源正常 / 故障指示连接 MCU 中断引脚快速感知故障IMON / VMON电流 / 电压监视连接 MCU ADC实时采样GND地参考地后缀 AYWPR 里A 通常对应版本规格Y 代表卷带包装WPR 是封装标识设计时真正要关注的是 TPS259483 主型号的数据手册。我自己的习惯是拿到样片后先把限流电阻、dVdt 电容两个配置引脚留成 0402 封装的可调焊盘方便调试时替换调整。2.2 PIC18F57Q43系统级管家和故障记录员PIC18F57Q43 是 Microchip 的 8 位 MCU主频最高 64MHz工业级温度范围。很多人会有疑问都 2025 年了为什么不用 32 位处理器来处理这种任务我的回答是电源路径保护本身就是个“慢管理与快保护”相结合的活。硬件层面的快速保护交给 eFuseMCU 只需要做毫秒级的状态采样、时序管理和故障策略用一颗 8 位 MCU 性价比最高也足够稳定。这颗芯片真正吸引我的地方是它的 ADCC带计算功能的 ADC和 CLC可配置逻辑单元。ADCC 可以自动做多次采样平均不需要 CPU 逐次处理CLC 能把外部故障信号和内部逻辑组合成一条硬件直通链路实现极低延迟的联动关断。再加上它自带 CRC 校验和窗口看门狗非常适合工业设备做故障日志记录和现场恢复。选它还有一个工程上的现实原因Microchip 的 MPLAB X IDE 和 XC8 编译器非常成熟用顺手之后开发效率很高。对于这类控制逻辑不复杂的项目8 位 MCU 的固件维护成本远低于 Linux 类方案出厂后几乎不用管。3. 硬件电路设计与参数计算3.1 整体电路框架我以一个典型的工业网关板为例外部输入 12V板内先用 TPS259483 做入口保护输出给板级的 5V DC-DC 和 3.3V 电源树。EN 引脚接 PIC18F57Q43 的一个 GPIO用来做上电时序FLT 接到 MCU 的外部中断引脚IMON 和 VMON 分别接到 MCU 的两个 ADC 通道。用文字描述一下这部分连接关系12V 输入经过输入电容和 TVS 后进 TPS259483 的 IN 引脚输出 OUT 接后级负载电容和 DC-DC 输入端。EN/UVLO 由 MCU GPIO 控制同时用电阻分压设置输入欠压锁定点低于阈值时芯片不启动。dVdt 引脚对地接电容电容越大输出上升越慢浪涌电流越小。ILIM 引脚对地接电阻决定过流保护阈值。PG/FLT 输出接 MCU 中断MCU 收到低电平就进入故障处理状态。IMON 和 VMON 输出经过简单的 RC 滤波后进 MCU 的 ADC。整个系统没有复杂的模拟电路PCB 上看着很干净但每一根线都是功能担当。3.2 关键参数怎么定限流、软启动、过压欠压参数设计的核心是回答三个问题最大允许电流多少输出电容多大输入电压允许范围多少限流阈值。假设板级 DC-DC 最大输入电流是 1.5A那么 TPS259483 的限流建议设置在 2A 到 2.5A 之间留出 30% 以上余量避免正常的瞬态负载导致误保护。具体限流电阻值一般通过数据手册里的 ILIM 设置曲线选取计算公式通常是反比关系不同器件常数不同先按典型值选再用电子负载实测校准。这里有个关键细节限流电阻精度建议选 1% 的温飘很低的薄膜电阻否则批量生产时保护阈值会明显漂移。软启动压摆率。后级负载电容越大上电瞬间的浪涌电流越大。设输出电容总量是 C_L目标限制浪涌电流 I_INRUSH那么压摆率 S I_INRUSH / C_L。例如输出电容 200µF想让浪涌电流控制在 1A那压摆率就是 1A / 200µF 5V/ms。再根据 TPS259483 手册中 dVdt 引脚电容与压摆率的对应关系选取电容值。我实际设计时一般把压摆率调到 2V/ms 到 6V/ms 之间太慢会让 DC-DC 启动时间过长太快又起不到浪涌抑制效果。过压与欠压阈值。OVP 用分压电阻设置典型参考阈值在 1.2V 左右要保护 12V 电源轨不超过 13.5V就直接按分压比算R_upper / R_lower (13.5 - 1.2) / 1.2。UVLO 通常是 EN 引脚内部有阈值同样用分压电阻。计算时还要考虑输入电压纹波阈值不要卡得太严至少留 10% 的窗口否则电源线上一点噪声都会触发保护。3.3 布局与 PCB 设计注意点硬件保护电路的成败布局占一半。功率通路的走线尽量短而粗输入电容和输出电容都要紧贴芯片引脚放置如果输入线缆比较长建议在输入端再放一个 100µF 左右的电解电容和一个 TVS 二极管用来吸收线缆电感带来的尖峰。IMON、VMON 和 FLT 这些信号线属于模拟与逻辑混合信号要远离开关节点和电感。我踩过一次坑IMON 走线贴着 DC-DC 的电感下方过采样数据在负载切换时跳得厉害后来把走线挪到地平面另一面加宽了间距问题才消失。ADC 采样引脚附近加一个 10nF 到 100nF 的滤波电容能滤掉不少高频干扰。还要强调一点eFuse 的保护是物理级的它的参考地必须和系统地干净连接不要在功率地和控制地之间制造电位差。否则电流采样信号会失真限流阈值也会受影响。4. 固件怎么配合状态机与采样实现4.1 初始化先让 MCU 认识功率路径固件部分我用的是 MPLAB X IDE 和 XC8 编译器。初始化阶段主要配置时钟、GPIO、ADCC 和外部中断。下面的代码是简化示意寄存器名称针对 PIC18F57Q43具体以官方头文件为准void System_Initialize(void) { // 内部振荡器配置为 64MHz OSCCON1 0x60; OSCCON2 0x00; OSCCON3 0x00; OSCFRQ 0x08; // 64MHz // GPIO: EN 输出, FLT 输入中断 TRISAbits.TRISA0 0; // RA0 - EN TRISAbits.TRISA1 1; // RA1 - FLT ANSELAbits.ANSELA1 0; // RA1 数字输入 // 外部中断 INT 配置 INTEDG 0; // 下降沿触发 INT0IE 1; // 使能 INT }ADC 配置是重点。ADCC 设置为 12 位精度内部参考电压选 2.048V轮流采集 IMON 和 VMON 对应的通道。开启 ADCC 的自动平均功能每次读取结果自带 16 次平均能有效过滤电源噪声void ADCC_Initialize(void) { ADCON0 0x80; // 开启 ADC ADREF 0x00; // VDD 作为参考按需要改成 FVR ADCON1 0x60; // 12 位时钟分频配置 ADCLK 0x10; // ADC 时钟设置 } uint16_t ADC_Read(uint8_t channel) { ADPCH channel; // 选择通道 ADCON0bits.GO 1; // 启动转换 while (ADCON0bits.GO); // 等待完成 return ADRES; }实际项目中我没用轮询等待而是开了 ADCC 自动转换加 DMA让采样结果持续更新MCU 主循环只读取最新值。这样能避免采样过程阻塞主逻辑。4.2 状态机上电、运行、故障三种状态就够了电源保护管理的固件逻辑我一般写成简单的状态机避免散乱的条件判断。状态无非四种PWR_OFF关闭、PRE_CHECK预检、STARTING软启动中、RUNNING正常运行外加一个 FAULT_LOCK故障锁定。当前状态转移条件目标状态PWR_OFFVMON 电压高于欠压阈值且 EN 已拉高PRE_CHECKPRE_CHECKFLT 为低PWR_OFF禁止启动PRE_CHECK条件正常STARTINGSTARTING输出电压已建立且无故障RUNNINGSTARTING超时仍未建立FAULT_LOCKRUNNINGIMON 持续过流超过设定去抖时间FAULT_LOCKFAULT_LOCK收到外部复位命令或手动恢复PWR_OFF关键逻辑在 RUNNING 状态。我的做法是周期性读取 IMON 对应的 ADC 值换算成电流值后与 OCP 阈值比较设置一个去抖计数器连续超过阈值一段时间才判定为过流。为什么要去抖因为负载切换的瞬间电流尖峰很常见立刻关断会让系统变得过于敏感。硬件 eFuse 本身已经在微秒级保护了MCU 的判断反而要谨慎一点承担“策略制定者”而不是“扳机触发器”的角色。typedef enum { PWR_OFF, PRE_CHECK, STARTING, RUNNING, FAULT_LOCK } pwr_state_t; pwr_state_t state PWR_OFF; void PowerStateMachine(void) { switch (state) { case PWR_OFF: EN_PIN 0; if (Read_VMON() UV_THRESHOLD) state PRE_CHECK; break; case PRE_CHECK: if (FLT_PIN 0) state PWR_OFF; else { EN_PIN 1; state STARTING; } break; case STARTING: if (Read_VMON() OUTPUT_OK) state RUNNING; else if (startup_timeout) state FAULT_LOCK; break; case RUNNING: if (Read_IMON() OCP_THRESHOLD) { ocp_counter; if (ocp_counter OCP_DEBOUNCE) { EN_PIN 0; fault_code FAULT_OCP; state FAULT_LOCK; } } else { ocp_counter 0; } break; case FAULT_LOCK: // 将 fault_code 存入非易失区等待恢复命令 break; } }FAULT_LOCK 状态下我会把故障码写入数据 EEPROM 或 Flash上位机通过 UART 或 I2C 可以读出。这样设备在客户现场偶发保护之后售后人员能第一时间知道是过流还是过压引起的不用拆机排查。5. 调试中踩过的坑5.1 上电一瞬间就保护其实是输入电压被拉垮有次调试一块 12V 供电的板卡一上电 TPS259483 立刻关断PG 信号闪了一下就没了。我一开始以为是限流阈值设太低把电阻调大反而更严重。后来用示波器看 IN 引脚发现上电瞬间输入电压从 12V 跌到了 7V 左右触发了欠压锁定。原因很简单电源适配器到板卡的连接线太长线阻加线缆电感在浪涌电流冲击下产生了巨大的压降。解决方法是输入端并联 220µF 电解电容提高输入侧的瞬态维持能力同时把 dVdt 电容适当加大降低启动冲击。从此以后我在设计说明里都会写一条凡是用长线缆供电的板卡输入端必须留电解电容位置不能省。5.2 IMON 读数乱跳先别怀疑芯片IMON 信号是芯片内部电流镜的输出天生对噪声敏感。第一次接上 ADC 时我发现空载读数居然在满量程的 15% 上下跳动吓得我以为芯片坏了。排查了一圈最后发现是采样回路和功率回路共用了地线DC-DC 的高频开关电流在地平面上制造了不小的噪声。解决方案不复杂IMON 输出串联 1kΩ 电阻再对地并 100nF 电容形成低通滤波ADC 采样在软件里开 16 次平均。这样处理之后读数稳定多了。利用 ADCC 自带平均功能完全不用挤占 CPU 时间。5.3 热插拔板卡把旁边的邻居也带崩了这是最典型的工业场景问题。一块板卡插进背板时后级电容充电会从背板电源轨上拉出很大瞬时电流。即使 eFuse 做了软启动如果压摆率设得太快相邻板卡的电源会瞬间欠压导致正在运行的设备复位。我的处理思路是分级上电说直白点就是“先慢后快”。第一步把 dVdt 电容选大一些让输出电压在 5ms 到 10ms 内缓缓爬升第二步是让 MCU 在输出稳定后再使能后续的大负载比如无线模块、电机驱动。也就说不能只依赖 eFuse 硬扛系统级的上电时序同样重要。5.4 故障排查速查表现象可能原因处理办法上电即保护PG 闪烁输入电压跌落、UVLO 触发加大输入电容检查供电线径满载正常纹波变大后误保护输出纹波叠加到 OVP 检测端检查输出电容OVP 分压电阻并滤波电容IMON 读数乱跳采样走线受开关噪声干扰增加 RC 滤波软件平均调整走线短路恢复后不再启动eFuse 进入锁存保护拉低 EN 重启或按设计执行恢复流程带感性负载关断时损坏反向电动势冲击确认反向阻断功能配置负载端加续流二极管6. 测试与量产时要注意的事6.1 保护性能怎么验证才算数我给这套电源保护电路做测试时基本分四步。第一步是静态测试用电子负载逐步拉载确认限流点与设计值的误差。第二步是短路测试在输出端直接接一根短路线或电子负载的短路模式观察输入电压、输出电压和故障输出的波形确认保护动作时间和恢复策略符合预期。注意短路测试持续时间要短因为 eFuse 在恒流限流状态下功耗很大长时间短路会高温需要等芯片冷却再继续下一轮。第三步是热插拔测试用连接器反复插拔板卡同时记录输出建立波形和输入电流冲击波形确认软启动有效、不会给上游造成欠压。第四步是浪涌抗扰测试模拟现场感性负载开关产生的冲击观察保护电路是否误动作。四步都过了才敢把板子发到现场试用。6.2 量产一致性和可维护性量产阶段最怕器件参数分散导致保护点飘移。限流电阻和分压电阻必须用 1% 精度的薄膜电阻如果有条件上生产测试治具时把每块板的限流点实测一遍允许有 10% 以内的窗口。设计时留好余量比如目标限流 2A实际器件可能在 1.8A 到 2.2A 之间只要系统在 3A 内都安全就没问题。固件层面我给每块板子分配了唯一的地址故障码通过串口上报。现场出现保护后维护人员不用拆机先读故障码就能判断是过流、过压还是温度保护。这个习惯帮我在售后上省了非常多时间。量产还有一个常被忽略的细节eFuse 的 dVdt 引脚电容和 ILIM 电阻要选温漂小的型号。工业现场环境温度高如果这两个元件温度系数大保护阈值会跟着温度漂移夏天没问题冬天就误动作。我的选型原则是C0G 电容、金属膜电阻贵不了几毛钱后期省心一大截。收个尾说点我的体会实际上每次做电源路径保护项目我最大的感触是好的保护设计不是让某一层去解决所有问题而是各司其职、层次分明。TPS259483AYWPR 负责微秒级的电流、电压、温度硬保护PIC18F57Q43 负责毫秒级的系统管理、故障记录和上电时序硬件保护即使在没有软件的情况下也能兜住短路软件则负责把保护策略做得更智能、更可维护。如果你也为板卡热插拔、电源浪涌、批量售后故障复现这些问题头疼过不妨先拿这套组合打一版板子短路探头怼上去、示波器抓一下动作波形你会回来感谢当年认真算 dVdt 电容的自己。
返回列表