ARTICLE DETAIL

资讯详情

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

eFuse与8位MCU协同:工业电源路径保护与PMBus监控实现

eFuse与8位MCU协同:工业电源路径保护与PMBus监控实现 嵌入式系统里做电源的人大多都经历过这种场景整机联调到一半现场传来消息说某一路供电打挂了要么保险丝烧断要么DC-DC芯片直接冒烟。排查到最后往往就是插拔瞬间的浪涌、负载侧的意外短路或者维护时反接了一根线。问题本身不难理解难的是在设计阶段就把保护做进去并且让系统出了故障之后还能把状态告诉上位机。我在做工业控制节点这类项目时最常用的组合就是把 TI 的 eFuse 芯片和 Microchip 的 8 位 MCU 放在一块以 TPS259483AYWPR 做电源路径保护配上 PIC18F85K22 做监控和通信把整条电源链路从“裸奔”变成“可管理”。这篇文章就把这套方案的选型思路、参数计算、固件实现和实测中的坑从头到尾讲一遍给打算在嵌入式或工业设备里加电源保护的朋友做个直接能落地的参考。1. 系统设计与方案拆解1.1 为什么电源路径需要专门的保护器件工业环境里的电源轨远不像实验室里那么干净。24V 或 12V 的供电线上可能同时挂着接触器线圈、继电器、电机驱动器、变频器这些感性负载在开关瞬间会产生几十伏甚至上百伏的尖峰维护人员带电插拔连接器时端口会打火还会出现瞬间的电压跌落线缆在振动中磨损后会发生短路。任何一个意外如果只靠后级电源芯片自身扛大概率直接报废。传统做法有三种一次性玻璃保险丝、自恢复保险丝、分立 MOS 管加采样电阻加比较器。玻璃保险丝简单可靠但烧断就必须人工更换在无人值守的工业设备里等于报废一路输出自恢复保险丝动作曲线很慢动作电流精度也差对敏感负载保护不够及时分立方案能实现限流但外围电阻电容一大堆占板面积大而且没有状态输出故障后只能靠万用表量。这三者在“能保护”和“能诊断”之间都有断档。eFuse 的思路是把这个保护功能集成到一颗芯片里。内部有功率 FET、电流采样、比较器、限流环路、过压欠压检测、温度检测只要在外围配几颗电阻电容把阈值设定好它就能独立完成过流保护、短路保护、浪涌电流抑制、过压钳位和过温关断。另外它还通过数字接口把自己的输出电压、电流、温度和工作状态实时吐出来这一条才是工业设备真正需要的功能允许出故障但必须能知道是哪一路、什么时候、什么原因出的故障。1.2 TPS259483AYWPR 相比常规方案的差异点TPS25948 系列是 TI 推出的带数字遥测接口的 eFuse 产品线TPS259483AYWPR 是该系列里按电流档位划分的一个具体型号。它内置了功率开关不需要额外配 MOSFET片上集成了精确的电流采样省掉了采样电阻和仪表放大器压摆率控制引脚可以直接设定输出电压上升时间用来限制启动时对输出电容的充电电流。它支持宽范围输入电压对于 24V 工业轨来说余量充足实际上在汽车和通信设备常用的 12V、48V 系统中也能覆盖。最值得关注的是它的 PMBus 接口。PMBus 是建立在 I2C 物理层上的电源管理协议芯片内部有 ADC把输出电压、输出电流、芯片结温这些模拟量数字化并通过寄存器地址暴露给外部控制器。MCU 可以周期性地读这些数据做趋势判断和告警处理。这个能力把“电源保护”从单点保护提升到了系统电源管理的高度设备联网后远程就能看到每路电源的健康状况。另外一个务实点是封装和散热。这种大电流 eFuse 的热性能直接关系到实际能跑多少安培TPS2594 系列使用带散热焊盘的贴片封装配合 PCB 上的散热铜皮和过孔能在不外加风扇的情况下扛住较大功耗。在一个密闭的工业壳子里没有风扇是常态选择可散热封装的保护器件比用 DIP 封装的保险方案靠谱得多。1.3 为什么选 PIC18F85K22 而不是其他 MCU很多人一看到 PMBus 就想当然地认为必须配一个 32 位 MCU其实对电源监控这种任务来说8 位机完全够用关键是外设要齐、稳定性要高。PIC18F85K22 属于 Microchip 的中高端 8 位产品带硬件 I2C/SPI 模块MSSP支持主模式通信配上软件协议栈就能当作 PMBus 主机用带一个 12 位 ADC可以额外采样电压电流等模拟量还有一个 CAN 2.0B 模块这在工业节点和车载设备里非常实用可以把电源状态打包成 CAN 帧发到总线上。选择它还有一个实际原因宽工作电压范围能做到 2.0V 到 5.5V可以直接由系统的 3.3V 或 5V 辅助电源供电适配 eFuse 的 VBIAS 电压域。工业级温度范围版本供货稳定这类器件生命周期长不会像消费级芯片那样两年就停产。另外PIC18 的 C 编译器生态成熟中断优先级、外设库、Bootloader 方案都有现成的项目最怕的是换了 MCU 后又踩一遍新工具链的坑用熟悉的平台省下的时间能用在调电源逻辑上。需要承认 8 位机在存储资源上的限制。K22 的 Flash 和 RAM 相比 STM32 这类 32 位 MCU 少很多但对于电源监控这种状态机型任务保存配置参数、维护几个环形缓冲区、处理告警事件完全够用。如果你同时还要跑复杂的网络协议栈或者图形界面那当然应该选更高配的平台但作为“电源管理协处理器”它就是最合适的角色。2. 核心参数与硬件配置细节2.1 选型前需要先确认的五个关键参数在画原理图之前先把这些参数按顺序定下来否则后面返工成本极高。第一是输入电压范围。要看的是系统里电源轨可能出现的最高瞬态电压而不只是额定电压。24V 工业轨在甩负载瞬间能冲到 36V 甚至更高所以要确认 eFuse 的绝对最大输入电压高于这个值同时保证工作范围内的过压保护点可调能够在芯片损坏前先把负载断开。第二是连续工作电流。这个值决定了芯片内部的导通电阻功耗。以 2A 负载为例如果导通电阻 30mΩ那么芯片自身功耗为 4A² × 0.03 0.48W实际上功耗是 I²R电流越大功耗增长越快。所以要重点看具体型号的电流档位并留出 20% 到 30% 的工程余量再把环境温度纳入降额曲线考虑。壳内 70℃ 环境温度下不要按 25℃ 时的数据来选。第三是启动浪涌电流。输出侧如果有大容量电解电容上电瞬间相当于短路如果不做压摆率控制eFuse 会以限流阈值输出最大电流给电容充电前端电源会被瞬时拉垮。通过 datasheet 里给出的压摆率电容公式把充电时间拉长到几十到几百毫秒可以显著缓解这个问题。第四是故障后的恢复方式。TPS2594 这类器件支持自动重试和锁存两种模式。自动重试适合偶发干扰导致的过流锁存模式适合需要人工介入的硬故障。这个模式可以通过引脚或寄存器配置最好在设计 MCU 逻辑时就规划好哪一种配合使用。第五是通信接口的具体形式。TPS2594 系列带有 PMBus要确认芯片的地址设置方式通常通过 ADDR 引脚的分压电阻来决定 7 位地址以及是标准 I2C 速率还是需要支持 SMBus 的时序要求。多路 eFuse 挂同一条总线时每一路的地址必须不同。2.2 电流限制与启动压摆率的计算过程下面给一个典型的配置过程以 24V 输入、负载最大 3A、输出侧电容 220µF 的传感器网关节点为例。具体的公式数值以你手上 TI 数据手册为准但计算思路是通用的。电流限制电阻TI 这类 eFuse 的 ILIM 引脚通常用电阻接地来设定限制电流数据手册会给出一个换算关系。按这个关系式先算出理论阻值再按限制电流设为实际最大负载电流的 1.2 到 1.5 倍来选择。这里用 1.2 倍即 3.6A计算出的标称阻值可以用 1% 精度电阻。不要直接按 3A 设定因为负载瞬态变化时峰值电流超过静态电流是正常现象太紧的阈值会误触发。压摆率电容启动压摆率决定了输出电压从 0 上升到目标值的时间。计算目标是让启动电流不超过设定的电流限制值。公式方向如下设内部充电电流源为 ISS电磁常见值约 2µA以手册为准输出电压上升时间 t V_OUT × C_SR / ISS启动平均充电电流 I C_OUT × V_OUT / t。要让这个 I 小于限流阈值。此时把 C_OUT 220µF、V_OUT 24V、希望启动时间 t 40ms 代入I 220µF × 24V / 40ms 0.132A远小于 3.6A 限流值这个压摆率显然是能通过的。但如果输出电容很大比如 2200µF同样的 40ms 充电电流就是 1.32A离限流就比较近了需要把 t 拉长或接受这个输入冲击。反过来算出 C_SR ISS × t / V_OUT按手册系数选标准电容值实测后微调。当指示 C_SR 与启动时间的关系也可以用占空比但工程上简单点就是先算后调。过压欠压分压电阻UV/OV 引脚通常通过两个分压电阻连接到输入电源上内部有一个基准电压作为阈值。例如内部基准 V_REF 1V设欠压点 0V、过压点 28V可以把上电阻 200kΩ、下电阻 10kΩ 得到分压比让输入在 24V 时 UV 引脚电压落在窗口中间。具体按手册公式并注意用 1% 电阻并核算低温漂否则低温下保护点会漂。这些参数的设定目标不是让保护动作更敏感而是让保护动作既及时又不误动。有人把限流设得太紧结果正常负载变化都会触发保护现场偿经验是限流阈值 1.2 倍起步压摆率电容宁可偏大不要偏小启动慢一点总比启动时崩掉要好。2.3 系统监控策略与 PMBus 数据读取设计PMBus 能读的数据主要有输入电压、输出电压、输出电流、温度和状态字。对应的寄存器在 datasheet 里有明确地址例如电压电流类寄存器通常带有扩展数据格式需要根据命令补全和小数点位置换算回实际值换算系数每个寄存器不一样建议在固件里建立一个查询表。我的监控策略是这样的主循环每 100ms 读一轮输出电压、输出电流和温度做滑动平均滤波消除开关噪声带来的毛刺。为什么用 100ms 而不是越快越好因为 PMBus 设备内部 ADC 的更新速率一般在 kHz 以下的量级读太快拿到的都是原来值徒增总线负载。真要不间断地看波形应该用 IMON 引脚接示波器或加一个高速 ADC数字遥测适合看趋势、报警和记录不适合看瞬态细节。告警阈值在固件里设置而不是只靠硬件引脚。先读回 STATUS_WORD 判断有无过流、过压、欠压、过温告警如果有再读详细状态寄存器确认具体原因。这里要注意PMBus 规范要求收到 CLEAR_FAULTS 命令后告警状态才会清除如果固件不做这一步可能第一次故障后状态位一直保持后面就无法判断新故障了。我工程里一般把“读状态→处理告警→上报→CLEAR_FAULTS”作为一轮完整流程保证下一轮轮询时状态是新的。PMBus 地址分配多路 eFuse 挂在同一条 I2C 总线上每颗的 ADDR 引脚用不同阻值电阻接地得到不同 7 位地址。用两到三路时这个方式很简单路数多了要注意电阻精度对地址分档的影响使用 1% 电阻并测量 ADDR 引脚电压确认地址。3. 硬件电路与固件实现3.1 硬件电路搭建要点原理图设计顺序从输入到输出依次展开。输入连接器之后先放一个 TVS 管钳位掉感性负载开关引起的瞬态尖峰避免尖峰能量直接灌进 eFuse。TVS 的地要直接接到输入大电流地走线要短粗。然后是输入电容一般放三到四个不同类型的电容并联大电解负责储能陶瓷电容负责高频去耦。eFuse 的输入引脚附近这些电容必须有否则芯片内部的快速限流环路会产生高频电流纹波供电线路上如果没有低阻抗电容电压会出现跌落和反弹。接下来是 eFuse 外围。ILIM 和压摆率电容按前面算好的值放置尽量靠近对应引脚。UV/OV 分压电阻从输入电压取样靠近芯片引脚放置以避免远端引线引入干扰。VBIAS 供电要单独加 0.1µF 和 1µF 去耦电容这个引脚如果供电纹波大会影响内部基准精度和遥测准确度。FLT 和 PG 引脚是开漏输出需要加上拉电阻到 MCU 的 3.3V 电源电阻选 10kΩ 比较适中太小影响功耗太大在上升沿时可能偏慢。如果要 5V 电平注意 MCU 引脚是否 5V 容忍PIC18F85K22 的大部分 I/O 都支持开漏上拉到 5V但 SCL/SDA 这类引脚的电气特性要对照 datasheet 的绝对最大额定值确认。IMON 输出接到 PIC 的 ADC。IMON 输出范围通常在一伏以下到两伏之间如果 PIC 的 ADC 参考电压配置为 3.3V那直接连接即可如果参考电压更低需要外加运放或电阻衰减。IMON 输出阻抗可能不低要在 MCU ADC 引脚侧放一个小电容滤波但不能太大否则采样值会滞后。最后是地处理。功率地 PGND 与信号地 SGND 在布局上要概念分离。eFuse 的大电流路径属于功率地MCU 和 I2C 上拉电路属于信号地两者通过 0Ω 电阻或磁珠在单点汇合。这样做的目的是防止几十安培的瞬态电流在地平面上产生压降进而干扰 MCU 的数字信号。3.2 PIC18F85K22 的固件流程与代码思路固件架构按状态机来做主要分四个部分初始化、PMBus 周期轮询、故障处理和 CAN 上报。初始化部分先把 MSSP 模块配置为 I2C 主模式速率设为 100kHz。PMBus 对时序的基本要求与 I2C 一致但要注意一点PMBus 规范里要求从设备在接收到某些命令后需要额外时间准备数据所以主机在读数据循环里要在发送寄存器地址后加适当延时不要立刻发读命令否则可能读到的是陈旧数据。PIC18 的 MSSP 在硬件上已经做了应答处理但软件层还是需要遵循“写地址、写寄存器、重启动、读数据、发 NACK具体取决于你使用的库”这个流程。给一个读电流寄存器的代码片段思路uint16_t pmbus_read_reg(uint8_t dev_addr, uint8_t reg_addr) { uint8_t raw[2]; uint8_t i2c_status; uint16_t result; i2c_start(); i2c_status i2c_write(dev_addr 1); // 写地址最后一位为0表示写 if (i2c_status) { i2c_stop(); return 0xFFFF; } i2c_write(reg_addr); // 写入寄存器地址 i2c_restart(); i2c_write((dev_addr 1) | 0x01); // 切换为读模式 raw[0] i2c_read(ACK); // 读高字节 raw[1] i2c_read(NACK); // 读低字节最后一个字节发NACK i2c_stop(); result (uint16_t)((raw[0] 8) | raw[1]); return result; }实际项目中还要做寄存器值到真实物理量的换算PMBus 的电流寄存器通常以 USE 单位带小数点。比如数据手册说明某寄存器一个 LSB 等于 0.1A那么读回 30 就代表 3.0A。这个换算系数最好放在配置表里方便针对不同型号调整。故障处理部分用 FLT 引脚连接到 PIC 的一个外部中断输入下降沿触发。收到中断后在中断服务程序里只置一个标志位主循环检测到标志后通过 PMBus 读取详细状态寄存器记录故障发生的时间戳和类型。自动恢复策略是如果是过流或过压这类瞬时告警先读状态、上报、执行 CLEAR_FAULTS再把 eFuse 的 EN 引脚重新拉低再拉高一次做一次软启动如果连续三次上电启动均失败则认为负载侧存在硬短路转入锁存状态不再自动重试等上位机命令或人工复位。这个三次规则能避免短路点发热扩大也方便现场定位。CAN 上报部分把电压、电流、温度、故障状态拼装成固定的 CAN 报文格式周期发送。在工业现场总线里电源监控数据常由 CANopen 的 SDO/PDO 对象承载K22 内置的 CAN 模块把控制器部分的硬件缓冲做好软件上只需把对象字典里的数值刷入发送邮箱。Bootloader 方面如果项目发布在即要预留在线升级空间。PIC18 有自举编程能力可以在上电判断一个 GPIO 状态进入 bootloader 模式接收固件然后跳转。电源监控功能本身逻辑稳定后续升级主要是校准系数和报警阈值把阈值放在 Flash 的数据区升级程序时保留这部分数据免得每次升级都要重新校准。3.3 PCB 布局与散热经验布局的优先级是功率路径最短、控制回路不受干扰、散热铜皮尽量大。输入连接器进来之后依次放 TVS、输入电容、eFuse、输出电容、输出连接器尽量一字排开避免功率电流绕着板子走一圈。功率走线宽度按 1A 对应 1mm 宽、1oz 铜箔来估算3A 就需要 3mm 左右空间不够时可以在两层上都铺铜并打过孔并联。很多人忽略的是输出和输入电容的地回流输入地电流与输出地电流流过的路径不能重叠不然会因为在共同地阻抗上的压降导致控制电路误判。eFuse 的热量主要通过引脚和散热焊盘传到 PCB。芯片底部的散热焊盘必须可靠连接到内层地平面用阵列过孔散热过孔数量多一些。工作电流大的情况下冷热端铜箔面积不对称也会造成局部热应力PCB 设计时可以两侧都留足够铜皮来均热。实测经验3A 电流在 25℃ 环境、肩部铜皮不太足的板子上芯片表面温度能到 70℃ 左右长时间跑需要在意。用热成像仪拍一圈板子找出热点后顺手加几个过孔效果立竿见影。信号走线与功率走线之间的距离拉开至少 5mm。PMBus 的 SDA/SCL 如果和功率走线平行走长距离容易耦合开关噪声。我见过一块板子上I2C 上拉电阻又好又短却因为 SCL 线贴着输入电容的走线走了 3cm导致通信偶发错误。后来把 SCL 移到板子另一面问题就消失了。4. 实测问题与经验教训4.1 启动浪涌误限流的经典场景有一次测试一块带大电解电容输出的板子上电瞬间 FLT 信号直接拉低限流保护动作了。一开始怀疑是负载短路查了一圈发现负载空载问题出在启动策略上。当时把压摆率电容按手册公式正好算到“刚好”的时间结果输出电容充电时内部限流环路和压摆率环路同时起作用出现短暂过流状态。实际调整时启动时间最后的做法是取计算值的 1.5 到 2 倍让启动过程更“钝”。对于有预充电要求的负载比如电机控制器花几百毫秒慢慢充起来远比瞬间冲击好。另外如果系统里有多个大电容供电轨可以考虑给 eFuse 的启动引脚加一个外部 RC 延时让它比 MCU 的供电轨晚启动。这样 MCU 先工作起来把配置写到位eFuse 再进入工作状态避免芯片上电瞬间所有外设同时充电。4.2 地弹导致的 PMBus 误码现象在一次实测中负载电流在 2A 和 4A 之间快速切换PMBus 偶发读取到全 F 的数据。排查方向一度指向软件时序后来用示波器夹 SCL 波形发现功率切换的瞬间 SCL 线上出现了明显的毛刺幅度超过了逻辑阈值。原因就是功率地与信号地没有完全隔离功率回流在地平面上引起瞬态压降传导到了 I2C 总线。解决方法是两层地分割加上电平缓冲器。地分割是让功率地电流不要流经 MCU 下方缓冲器则是把 MCU 的 I2C 引脚经一个具有施密特触发的电平转换芯片再接 eFuse能有效过滤毛刺。更简单的一条路是把 I2C 速率从 100kHz 降到 50kHz虽然治标不治本但在硬件改版前应急完全有效。如果项目对成本敏感推荐优先使用具有施密特触发输入的器件成本很低但效果明显。4.3 热插拔场景下的失效工业设备经常要带电插拔通信和供电连接器。实测中发现输入端热插拔瞬间如果输出侧电容已经充到了 24V插入瞬间输入电压快速跌落再回升eFuse 输出端的电容会通过内部寄生体二极管往输入端漏电产生一个反向电流路径轻则引起保护误动作重则损坏前端供电回路。许多 eFuse 声称有反向保护但实际保护能力不等于绝对安全外部器件不能省。解决思路是如果产品确实有热插拔需求在输入端靠近 eFuse 位置再放一个肖特基二极管方向为从输出侧向输入侧钳位防止输出电容倒灌。同时在输出端加一个放电电阻这样在连接器断开后输出电容能快速放掉残余电压下一次插入时不会带着高压去对接。4.4 常见问题排查速查表现象可能的根本原因排查与解决手段上电瞬间 FLT 立即拉低限流阀值设置太低或压摆率电容太小用示波器查启动电流波形把 L_ILIM 阈值调到正常峰值的 1.2 倍以上C_SR 增大 1.5 到 2 倍PMBus 读数据偶尔全 FF总线毛刺、地址电阻偏差、时序不满足 SMBus降速到 50kHz加施密特缓冲检查 ADDR 引脚电压确保上拉电阻值合理芯片温度异常高正常电流也烫手散热焊盘虚焊、铜皮面积太小、电流长期满载热成像确认发热点补散热过孔增大铜皮必要时降电流使用自动重试反复失败负载并没有短路输出电容在故障清除后未放电重新启动再次过流查看输出端死电容的放电时间软启动前强制对输出电容放电设置合理的重试间隔I2C 地址冲突导致通信错乱多路 eFuse 地址电阻使用了同一比例逐路测量 ADDR 引脚电压按手册分档表重新分配电阻值保留足够电压区间间隔还有一个容易被忽略的点调试时使用开发板供电而不是真实电源轨测试保护功能结论会失真。开发板的电源通常带载能力弱eFuse 还没到限流点前端电压就塌了误判成欠压保护。所以在实验室做保护测试时建议使用带输出电容足够大的可编程电子负载和恒压源一次到位模拟真实供电环境。在实际测试顺序上我习惯这样来先空载上电确认输出电压上升波形正常压摆率符合预期再逐步加大电子负载电流观察 IMON 输出或 PMBus 电流读数与设定值是否一致最后做短路测试直接短接输出端确认限流保护在微秒级响应且 MCU 能接收到故障中断。短路测试时探头要用差分探头或隔离探头避免示波器参考地弹跳损坏设备。5. 一些最后想说的做这套系统前前后后调了几块板子我的感受是TPS259483AYWPR 和 PIC18F85K22 这个组合最核心的价值不在于“保护本身”而在于它把电源从被动部件变成了主动管理系统。以前设备坏了只能到现场换保险现在通过 PMBus 遥测和 CAN 上报设备自身就能告诉维护人员哪一路电源在什么时间出现了什么类型的异常。这套能力对工业设备的价值远超过省下的几个保险丝。如果你接下来要做类似的项目我建议从一块最小系统板开始一路 24V 输入转 3.3V 给 MCU 供电eFuse 串在主供电轨上MCU 用 PMBus 读遥测数据用 CAN 打印到终端。先把这条链路调通再扩展成多路 eFuse 电源管理甚至配合上位机做远程电源开关控制。多路 eFuse 挂在同一条总线上时只需为每一路分配不同地址固件里的轮询逻辑改成遍历数组即可扩展性很好。最后再分享一个操作上容易忽略的细节在焊接 TPS259483AYWPR 这类带底部散热焊盘的封装时一定要控制好焊膏用量散热焊盘如果虚焊芯片的电流能力至少打对折且用示波器测正常工作时很难察觉只在温度上反映出来。我在打样阶段吃过这个亏有条件的话每片焊完用 X-Ray 检查没条件就在满电流负载下用热成像确认芯片中心温度是否与手册估算一致。
返回列表