ARTICLE DETAIL

资讯详情

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

eFuse与MCU协同:嵌入式系统电源保护与热插拔设计实践

eFuse与MCU协同:嵌入式系统电源保护与热插拔设计实践 嵌入式产品做到一定阶段电源问题就成了最不好查的那类bug。你可以把逻辑调通、把通信搞定但现场一台设备插上电源或者热插拔一块板卡系统瞬间复位或者负载短路烧了一片这时候你回过头去看原理图才发现电源路径上只有一个保险丝加一个大电容根本扛不住这些瞬时事件。我最近在做的项目里正好把TI的TPS259483AYWPR这颗eFuse和STM32F107VC搭配使用一个管功率路径的执行一个管监控和恢复决策。这篇文章就把这套方案的来龙去脉、参数设定、软件状态机和调试中踩过的坑完整写出来给同样在做嵌入式或工业电源保护的朋友做个参考。适用于谁主要是两类人一类在做嵌入式系统硬件设计需要给板卡加电源保护但不想堆一堆分立器件另一类是软件出身、想搞清楚MCU如何参与电源路径的智能管理。我会尽量把芯片层面的行为和MCU侧的配合拆开讲这样不管你是偏硬件还是偏软件都能在里面找到自己能复用的部分。1. 看似稳定的供电其实到处是暗雷1.1 嵌入式和工业环境里那些“不正常”的用电瞬间很多做嵌入式开发的朋友最早接触的供电就是USB取电或者一个5V适配器。在实验室桌面上电源路径上发生的事非常简单上电稳定跑代码。但一旦把设备放到工业现场或者做成可插拔模块事情就完全不一样了。热插拔是最典型的一个场景。一个背板系统里你插入一块子卡子卡上的输入电容瞬间被充电充电电流在极短时间内可能冲到几十安培。这时候背板上的电源电压会被拉垮其他正在工作的板卡跟着复位严重的还会把连接器打火花。这就是输入浪涌电流问题。然后是负载侧的故障。继电器、电机、螺线管这些感性负载在开关瞬间会产生反电动势而如果后级电路发生短路或者某个芯片焊反了、击穿了整个电源路径上的电流会瞬间飙升。熔断器可以挡一次但熔断器动作速度慢、动作之后不可恢复而且电流阈值和动作时间的关系是非常粗糙的。你用保险丝保护一根线没问题但你想保护一块集成电路的供电输入保险丝根本做不到那么精细。还有一个容易忽略的问题是电压瞬态。工业现场中24V或12V电源线上经常出现很高的尖峰电源模块在负载突变时也会产生电压过冲。如果后级负载对电压敏感比如给传感器芯片、通信芯片供电一次过压可能就把芯片打坏了。这种损坏很多时候不是即时的而是累积的。你可能只看到设备偶尔异常但实际上是芯片内部已经被过压应力损伤了。1.2 保险丝和分立MOS管方案为什么不够传统的电源保护方案主要是保险丝加防反二极管讲究一点的在前面加一个PMOS做防反接或者电子开关。拆开看你会发现问题不少。保险丝的响应是热量累积型的时间常数很大。一个额定3A的保险丝在4A过流时可能需要几十秒甚至更久才熔断。这段时间足够让后级的MOS管、DC-DC或者负载芯片烧掉。而且保险丝一旦熔断需要人工更换这在无人值守的工业设备里是灾难。当然你可以用自恢复保险丝但PPTC的阻抗一致性差而且反复动作后内部材料会老化可靠性并不高。分立MOSFET方案的问题则在于保护逻辑太复杂。你想实现过流保护就得加采样电阻、比较器、基准源、锁存电路想做软启动又得加RC延缓和运放控制栅极电压想做过压保护还要再加一个比较器去关断栅极。这几套电路叠加起来占用的PCB面积、BOM物料的种类和数量、调试时需要考虑的变量都会膨胀。我见过一些工程师直接用一个大电流PMOS加一个采样电阻组成限流电路结果因为环路补偿没做好负载一加重就振荡比不加保护还糟糕。所以现在工业领域越来越倾向于用eFuse这类的集成电源保护器件。eFuse把导通MOS、电流检测、限流放大、电压监测、热保护、逻辑控制都做到了一个芯片里外部只需要几颗电阻电容来设定参数。它既能在微秒级别响应短路又能通过调节启动斜率控制浪涌还能在故障消除后自动恢复或者保持关断这就给MCU介入了很大空间。1.3 我对这套组合的定位eFuse做执行MCU做决策在项目里我把这两颗芯片的分工想得很清楚TPS259483AYWPR是执行层它看住电流、电压和温度一旦超过阈值就切断或限制功率路径STM32F107VC是决策层它负责监控eFuse输出给它的状态信号记录故障类型决定是从故障中恢复还是保持闭锁甚至通过CAN或以太网上报给上位机。也许有人会问既然eFuse已经能自动保护了为什么还需要加一颗MCU答案是自动保护和智能管理是两回事。eFuse的自动保护是开环的它不管后面负载处于什么阶段、系统是否允许断电。比如一个正在写Flash或执行关键操作的系统你直接给它断电可能导致数据损坏或系统状态不一致。这时候MCU的作用就体现出来了它可以读取FLT故障标志判断故障等级如果是瞬时过流且当前处于关键操作可以延迟重启如果是持续短路则锁定故障状态并上报等待人工处理。这种策略单纯靠一颗eFuse是做不到的。另外STM32F107这颗MCU选它还有一个原因它自带CAN、以太网MAC、USB和多个UART非常适合作为工业设备的系统监控核心。电源路径的监控只是它工作的一部分同样的MCU还可以继续跑通信协议、健康管理、诊断等功能不需要为了电源监控单独再加一颗小MCU。从系统成本角度看这也是划算的。2. TPS259483AYWPR是如何把一条电源路径管住的2.1 先读懂它的引脚和内部分工拿到TPS259483AYWPR先看它的封装YWPR这套丝印对应的是QFN封装的版本具体引脚顺序我建议以TI官方数据手册为准。我用这颗料的时候第一件事是把手册里的引脚功能表逐行过一遍重点看这几个IN、OUT、EN/UVLO、ILIM、dV/dT、FLT、PG和GND。IN和OUT是功率路径上的输入端和输出端。内部MOS导通之后IN到OUT之间就是一个很低的电阻正常工作时电压损耗很小。EN/UVLO是使能和欠压锁定的复合引脚通过外部电阻分压设定一个开启电压阈值输入电压低于这个值芯片就完全不工作。ILIM引脚通过一颗外部电阻设定限流阈值这是整个芯片最关键的一颗电阻直接决定保护动作的灵敏度。dV/dT引脚接电容用来设定启动时输出电压上升的速度也就是我们常说的软启动时间。FLT是故障标志输出开漏结构正常时为高阻需要外部上拉一旦发生故障FLT被拉低。PG是电源正常指示同样开漏输出当输出电压到达设定阈值之后才会拉低或释放。我在项目中把FLT和PG都接到了STM32F107的GPIO上用外部中断处理边沿。内部结构上可以把它理解成一个大功率MOS、一个电流采样放大器、一个比较器组和一个逻辑控制单元的组合。电流采样电阻是集成在内部的所以外部不需要再串毫欧电阻避免了额外压降和采样精度问题。芯片内部的逻辑单元会根据采样结果控制MOS的栅极把电流限制在设定值内而不是简单地一过流就断开。2.2 限流、软启动、OVP/UVLO三个核心参数的设定逻辑限流阈值的设定逻辑值得仔细说。外部电阻RILIM的取值和限流电流ILIM之间是反比关系具体公式每个系列略有差异但基本形式是RILIM K / ILIM。K是芯片内部定义好的一个常数单位是欧姆·安培。我用的这颗料按3A负载设计限流阈值取4.5A左右留出1.5倍余量既保证正常工作时不会误触发又能有效限制短路电流。为什么余量要专门提出来因为负载在正常工作时也有电流波动。如果你的限流值只比额定电流高一点点电机启动、电容充电、通信瞬间发射等都会造成误保护。反过来余量太大又起不到保护作用。我的经验是热插拔或大容性负载场景下限流设置要配合dV/dT软启动参数一起看不要单独决定。dV/dT引脚接的电容决定启动斜率。电容越大输出电压上升越慢浪涌电流越小。这里有个工程直觉如果你发现上电瞬间输入电压大幅跌落多半是启动斜率太陡。把这个电容从1nF加到10nF启动时间可能从几百微秒变成几毫秒浪涌问题通常会明显缓解。OVP和UVLO的设计上TPS25948x系列允许通过外部电阻分压来设置过压和欠压的触发点。UVLO这个阈值需要和输入电源的特性匹配。12V电源的话UVLO设在8V左右比较合理低于这个值说明电源已经不正常直接关断路经避免后级在欠压状态下工作。过压保护则要看负载能承受多高的电压如果是3.3V或者5V的敏感负载我会把OVP设得紧一些然后配合后面再加一级DC-DC或者LDO做二次稳压。顺带一提EN/UVLO引脚分压设计时注意滞回否则输入电压在阈值附近波动时芯片会反复开关这是很容易踩的坑。2.3 故障输出之后发生了什么当内部电流采样超过限流阈值时芯片进入限流状态。如果持续时间较短比如电机启动那几百毫秒限流电路会钳住电流输出电压会略降但FLT不一定会触发。这里要区分两个概念限流和故障。限流是一种线性调节行为故障则意味着异常已经持续到需要通知外部系统的程度。具体的延时时间和阈值由芯片内部设定或由外部电路参数决定。一旦FLT被拉低MCU这边要做的事就来了。如果接下来负载返回正常eFuse可能会在延时后自动恢复也可能需要EN引脚重新拉低再拉高才能复位这取决于你实现的是自动重试模式还是锁存模式。我建议在项目初期就把这两种模式都测一遍然后根据应用场景选择。锁存模式的好处是故障状态可追溯不会自动重启导致MCU反复复位。自动重试模式的好处是在瞬态干扰下系统能自行恢复。我需要通过STM32对EN的控制来灵活实现两种行为的组合。2.4 它管得住什么管不住什么TPS259483能管住的输入端的过流、短路、过压、欠压、启动浪涌、反接配合外部二极管或内部特性、过温。这些是电源路径上最常见的破坏因素它都覆盖了。管不住或者说需要外部配合的输出端的纯感性负载关断时的负压尖峰这需要靠续流二极管或TVS来处理输入端的强雷击浪涌eFuse的响应速度再快也扛不住几千伏的浪涌必须在前面加TVS和防浪涌电阻还有后级负载自身的故障比如某颗芯片的引脚接触不良导致的间歇性短路这种只能靠多次限流和故障记录来辅助排查eFuse本身不能消除根因。我在做设计时始终把eFuse当成系统电源保护的最后一道闸门而不是唯一的防线。前面该加TVS的加TVS该加防反的加防反后级该加缓启动的加缓启动。保护方案从来不是靠一颗芯片包打天下而是层次化的配合。3. STM32F107VC在里面的角色监控、控制、恢复决策3.1 硬件信号链EN、FLT、PG、IMON如何连到F107硬件设计上我把eFuse的四个信号引到STM32F107VC上EN、FLT、PG以及一个模拟量IMON电流监测输出部分型号支持。EN接的是普通GPIO输出推挽模式用来控制eFuse的开关。注意eFuse的EN引脚电平要求如果它的逻辑高电平接近输入电源电压而STM32F107是3.3V供电很可能需要确认EN阈值兼容。TPS25948x系列一般是兼容低压逻辑控制的但如果你用其他型号eFuse这一点必须查手册确认不能想当然。FLT和PG是开漏输出所以各接一颗上拉电阻到MCU的3.3V电源。STM32的GPIO配置为上拉输入同时开启外部中断。这里有一个细节上拉电阻的取值要在1k到10k之间。太大会导致信号边沿变慢太小会在故障时增加功耗。我一般取4.7k实测边沿完全足够。IMON信号如果可用我建议接到F107的ADC引脚上。通过IMON的电压MCU可以实时估算负载电流这比单纯靠FLT判断故障有更丰富的信息。你可以画一条负载电流曲线判断系统是否在正常运行或者趋势是否异常。比如某个外设的老化率升高电流缓慢上升这种软故障FLT不会触发但MCU可以通过ADC采样发现。STM32F107VC的ADC是12位的采样速度足够监视电源电流变化。3.2 软件状态机从正常供电到故障恢复的完整流程电源路径管理的核心代码是一个状态机我把它分成五个状态IDLE、PRE_CHARGE、RUN、FAULT_WAIT、LOCKOUT。IDLE表示未使能状态此时EN保持低电平FLT和PG未激活。系统上电后进入IDLE等待开机命令。收到命令后进入PRE_CHARGE在这个状态将EN拉高同时开启一个软启动定时器时间要大于eFuse输出从0上升到目标电压所需的时间。定时器到期后检查PG信号如果PG有效说明输出已经建立切换到RUN状态。RUN状态中MCU实时监控FLT边沿和ADC采样的电流值。如果FLT触发立即记录当前时间戳和电流值进入FAULT_WAIT状态。在FAULT_WAIT中我先等一个固定时间比如500ms然后尝试将EN拉低再拉高如果FLT能够解除并且PG有效说明是瞬时故障返回RUN。如果第二次仍失败则进入LOCKOUT状态此时只有收到上位机的清除命令或者手动复位才能重新启动。这里要强调一点状态切换不能靠在主循环里轮询否则弱实时性会让你丢失故障信号。FLT要接外部中断PG也最好接中断。中断服务程序里不要做复杂操作只置状态标志并记录时间具体逻辑放到主循环的状态机里处理。这是嵌入式软件的基本素养但正因为基础反而容易被忽略。3.3 用中断加定时器不丢任何一个故障边沿具体实现时我用了F107的EXTI外部中断来检测FLT和PG的下降沿再用一个TIM定时器产生时间基准。EXTI的配置在STM32标准外设库中很直接无非是GPIO初始化为输入、配置EXTI线、绑定中断服务函数。但在写中断服务函数时有一个地方要小心对FLT信号的处理要对齐电平。因为FLT开漏输出在故障解除后会释放被上拉电阻拉高。如果你的中断配置的是下降沿触发那当FLT从低到高时不会触发中断。这带来一个问题如果故障发生后又自动恢复你在下降沿进了中断但恢复的过程你看不到。为了判断eFuse当前状态我每次在中断里除了置标志还会把FLT的电平读一遍。这样即便错过了某个边沿虽然理论上不会状态机上也能根据当前电平做一个同步。定时器方面我用TIM3配置成1ms中断一次维护一个系统tick计数器。所有延时和超时判断都基于这个tick避免使用阻塞式delay导致状态机卡死。另外IMON的ADC采样我放在主循环中跑每20ms取一次平均。进RUN状态后才开始采样其他状态则不采样减少不必要的处理。对应负载电流超过正常范围但没有触发FLT的情况可以在软件里做一个二级阈值告警只记录不动作给上层诊断提供参考。3.4 额外价值F107自带CAN/以太网/USB故障数据不愁没处上报STM32F107VC这颗芯片之所以适合做这类系统除了它有足够的GPIO和ADC更关键的是它有CAN控制器、以太网MAC和USB Device。在工业设备里电源故障是故障树里的一类重要事件。我用F107的CAN接口把电源保护事件打包成诊断报文比如故障类型、电流值、发生时间戳、恢复结果周期发送给上位机或者网关。同时F107的以太网能力也不是摆设。如果是更高端的带网口设备把同样的诊断信息通过固件升级、MQTT或者简单TCP上报实现远程运维这套方案的价值就不止于“防止烧板子”了而是直接变成产品可维护性的一部分。这样eFuse加上MCU的组合就不只是一个硬件保护电路而是整个设备健康管理框架中的一个数据源。4. 从选值到布板可以直接抄的电源路径设计步骤4.1 限流电阻和dV/dT电容的选值计算具体的计算公式我会以TI数据手册为准但思路是这样的假设目标负载额定电流为2A电源路径最大允许电流为3A。限流值ILIM设为3A或稍微偏高一点根据手册里ILIM引脚的电压基准比如VILIM和内部比例系数K算出RILIM。如果常见K值是55000这是TPS25948x系列中我比较熟悉的一个参考值不一定适配这颗料那么RILIM 55000 / 3 ≈ 18.3kΩ取标准值18kΩ。此时限流点约3.06A。如果想要更高的限流精度ILIM电阻要用1%精度的电阻温度系数也要考虑在工业温度范围内的漂移。dV/dT电容的计算同样依赖手册的内部电流源参数。假设内部电流源为1.2μA参考值目标启动时间为2ms输出电压为5V则dV/dT电容C I * t / V 1.2μA * 2ms / 5V 480pF取标准值470pF。如果输出电压为12V目标启动时间为1ms算下来大约是100pF。不同输出电压和启动时间组合对应的电容差别很大所以一定要先明确你的负载对电压上升时间有没有要求。启动时间也不能随意调长。过长会导致输出端电容在启动期间充不满电后级DC-DC可能因为没有达到输入电压下限而反复重启。我通常的做法是先用示波器看输入电流波形如果启动电流峰值接近限流值就把dV/dT电容翻倍再看波形的峰值和上升时间基本一轮就能找到合适的值。4.2 输入输出电容怎么配输入电容的主要作用有两个吸收电源线上的高频噪声以及为浪涌电流提供瞬时能量。热插拔场景下输入电容越大源端电压跌落越小但充电浪涌也越大。这看起来是矛盾的所以需要和dV/dT启动斜率一起权衡。我在这套方案中输入侧用了两颗电容并联一颗1μF的陶瓷电容放高频旁路放在eFuse的IN引脚旁边另一颗22μF的电解或钽电容放在稍远的位置用于储能。输出侧电容选10μF陶瓷电容放在OUT引脚附近保证负载瞬态响应时输出不至于跌落太多。具体容值我建议参考负载的瞬态电流需求和环路稳定性来做仿真至少要把ESR和ESL的影响考虑进去大电流负载的场景下布局比容值更重要。4.3 PCB布局中的功率路径与信号路径PCB布局往往是新手最容易忽视的部分。功率路径上IN到OUT之间的电流路径要短、要宽走线宽度至少按1A/1mm来估算2~3A的电流就用到3mm以上。如果走线太细压降和温升都会超标eFuse的限流值也会有偏差。信号路径上ILIM电阻和dV/dT电容的位置要靠近对应引脚走线远离功率路径的开关节点避免被电感耦合噪声干扰。ILIM引脚的走线尽量短因为它是高阻抗节点噪声会让限流阈值抖动。dV/dT电容的参考地直接回到eFuse的GND引脚不要和功率地形成环路。散热方面TPS25948x这类芯片的功率损耗主要就是导通损耗和限流时的压降损耗QFN封装的底部有外露散热焊盘必须通过过孔阵列连接到PCB底层的地平面。我在VIN和VOUT引脚周围打过孔阵列既能帮助散热也能降低寄生电感。实测在3A持续电流下芯片温升大约在30到40摄氏度合理范围内。4.4 针对12V/3A负载的一套配置示例为了让上面的理论更具体我给出一个我实际用过的配置示例。输入为12V电源负载为一个嵌入式主板峰值电流2.8A额定电流2A主板内部有大电容热插拔时浪涌很大。RILIM根据限流4A设计选用20kΩ 1%电阻实际限流点约3.8AdV/dT电容470pF启动时间约1~2ms实际波形显示浪涌电流峰值控制在2A以内UVLO分压设定为7V开启6V关闭用两个电阻分压同时留出滞回OVP阈值设定在15V超过直接关断输入电容1μF陶瓷 22μF电解输出电容10μF陶瓷 47μF电解兼顾高频和储能STM32F107VC侧EN接PA8FLT接PA9外部中断PG接PA10外部中断IMON接ADC1通道这套配置在长时间运行中表现稳定没有出现误保护。唯一需要再调的是当系统从休眠唤醒时负载瞬间电流变化较大会偶发FLT动作通过适当降低限流阈值和增加dV/dT电容最终把唤醒场景的浪涌压下去了。5. 实测中踩过的坑和最终拿到的波形5.1 上电瞬间误触发过流保护第一次上电测试时的现象很典型eFuse一使能PF标志直接拉低输出根本没有起来。用示波器抓IN和OUT波形发现IN端的电压在使能瞬间掉了1V多而OUT端电压只爬升到一半就停住了。原因有两方面一是dV/dT电容太小启动斜率太陡输出端的大电容充电电流瞬间超过了限流点二是输入电容储能不足源端电压被拉低UVLO随之误动作。解决办法是把dV/dT电容从100pF改到470pF然后把输入侧电容增加到22μF再次上电启动波形变得圆滑峰值电流从6A降到2A以内。这个现象说明启动参数绝不是按公式算完就固定不变的必须结合实际的输入阻抗和负载特性调。5.2 FLT上拉与MCU电平的匹配问题第二次实验遇到的是信号电平问题。当时我用FLT直接连到STM32F107的GPIO以为开漏加外部上拉到3.3V就万事大吉。但实际运行时发现在eFuse上电瞬间FLT信号出现一个很窄的毛刺导致MCU误进中断。原因是FLT引脚的上拉电阻接到了MCU的3.3V而eFuse的IN引脚还是0V此时FLT的钳位二极管或内部电路导致了一个短暂的低电平脉冲。排查之后我做了两点改动一是把FLT和PG的上拉电阻接到IN端的电源再通过分压电阻降到MCU电平范围二是MCU侧的中断配置改为下降沿触发加软件消抖。软件消抖的做法是在中断服务程序里读取FLT的电平连续读到两次低电平才确认有效有效避免了几十微秒级的噪声干扰。5.3 源端电压跌落触发UVLO在现场条件下还出现过另一个问题当负载侧发生瞬时短路时eFuse限流动作后输入侧的电压被拉低到了UVLO以下导致eFuse彻底关断。虽然这是保护机制正常工作的表现但对于系统来说一次分离的短路事件会导致设备完全重启影响用户体验。我的处理策略是在硬件上增加输入端的储能电容同时在软件上做了一个“快速恢复”逻辑检测到FLT触发和PG关闭后不立即让MCU复位而是先等输入电压稳定再过100ms重新使能eFuse。这样对于持续时间很短的负载瞬时短路系统在几百毫秒内就能自动恢复不需要人工干预。5.4 整机测试后的一些体会整套方案在实验板上运行了两个月经历了热插拔、负载短路、电压跌落等各种测试最终数据已经稳定。回过头来看TPS259483AYWPR和STM32F107VC这套组合的收益主要有三点第一把电源“保护”从一次性动作变成了可观测、可控制、可恢复的完整闭环第二eFuse的存在让PCB设计大幅简化不用再堆比较器和分立MOS第三MCU侧因为选了F107后续接入工业通信网络非常方便故障信息一并能给到上位机。如果以后再做一个类似的系统我可能会考虑往两个方向扩展一是给IMON加上更细致的电流监测做负载特性学习和趋势预测二是把故障恢复策略做成可配置的由上位机通过CAN下发不同的恢复参数这样不同的应用场景可以灵活选择是快速恢复还是保守闭锁。电源路径保护这个方向看起来基础但真正做到好用还是有不少细节值得打磨。
返回列表