ARTICLE DETAIL

资讯详情

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

嵌入式电源保护设计:eFuse与MCU协同实现工业级可靠性

嵌入式电源保护设计:eFuse与MCU协同实现工业级可靠性 做嵌入式这几年我最怕的不是代码写崩而是现场设备“没电”或者“电源路径烧了”。电源是整块板子的命脉可偏偏很多人把精力全放在MCU、外设、通信协议上电源入口就扔一个保险丝、一个TVS完事。等到设备在客户现场反复复位、烧毁、甚至冒烟再回头查电源往往已经晚了。最近我做的一块工业控制板就专门把电源路径保护当成一个子系统来设计。核心器件选了两颗TI的料TPS259483AYWPR和TM4C129XNCZAD。前者是一颗带完整保护功能的电子保险丝eFuse后者是Cortex-M4F内核的微控制器。两颗芯片配合起来解决的实际问题很清晰热插拔浪涌电流、输出短路、过压欠压、反向电流倒灌以及负载异常导致的持续性过流。文章适合正在做工业控制器、电机驱动器、PLC、楼宇自控、边缘网关这类设备的嵌入式工程师参考尤其是想把“电源保护”从一次性保险丝升级成“可监控、可恢复、可记录”方案的团队。1. 电源路径保护这块eFuse到底在挡什么1.1 现场最常见的五种故障先说结论工业现场的电源故障基本绕不开下面五类。第一类是热插拔浪涌。设备在机架上带电插拔连接器接触瞬间输入端寄生电感和后端大容性负载会形成很高的dV/dt和di/dt。不要小看这个过程一个12V输入的板子输入线缆寄生电感按50nH算电流在10微秒内从0上升到3A感应电压就是L×di/dt也就是50nH×300A/ms算下来能到15V的尖峰叠加在12V上轻松超过器件的绝对最大额定值。更麻烦的是后端如果挂了几百微法的电解电容上电瞬间的充电电流能达到几十安足以把连接器打火、把前级电源拉垮。第二类是输出短路。线束磨损、螺丝掉落、继电器触点粘连都会导致12V输出端对地短路。没有保护的话功率路径上的MOS管、PCB铜皮、接插件都可能烧毁严重时整块板子的铜箔直接起泡。第三类是输入过压和欠压。工业现场电源波动是常态24V电源错接成48V、电焊机干扰串进来、大电机启动把母线电压拉低这些都常见。过压会击穿后端DCDC和LDO欠压则导致系统反复复位Flash里的参数可能被写坏。第四类是负载异常过流。电机堵转、加热丝老化、通信模块发射瞬间拉大电流这类过流不是短路那种瞬态而是持续的、缓慢的电流爬升。第五类是反向电流倒灌。多路电源并联、输出端被外部电源反灌或者负载本身是电机、电池这类能发电的元件电流会从VOUT倒灌回VIN烧掉前级。1.2 为什么不能只用保险丝、二极管和PMOS很多工程师的第一反应是用传统保险丝。保险丝的优点是便宜、简单但缺点非常明显动作慢熔断靠焦耳热几十毫秒到几百毫秒才能断开一次性烧了就得换没法远程恢复精度差标称3A的保险丝可能在3.5A才动作也可能在2.8A就误断更关键的是它没法区分“瞬时浪涌”和“持续过流”热插拔场景下很容易误断。串联二极管能防反接但压降太浪费一个肖特基二极管0.4V压降在3A负载下就是1.2W功耗整个板子热得像个小火炉。PMOS做电子开关也能防反接但PMOS本身没有任何保护功能。它无法限制浪涌电流、无法检测过流、无法在过压时主动断开。你得用一堆分立元件搭比较器、限流电路、软启动电路到头来BOM成本高、调试复杂、可靠性还不如一颗eFuse。这就是TPS259483AYWPR这类电子保险丝存在的意义。它把功率管、电流检测、限流环、过压欠压比较器、软启动、过热关断、故障报告全部集成在一个封装里。硬件环路响应是微秒级的比MCU参与控制快几个数量级。MCU要做的是更高层的决策记录故障、判断是否允许自动重试、通知上层系统。硬件负责“快”软件负责“准”分工明确。2. 关键器件选型为什么是TPS259483AYWPR和TM4C129XNCZAD2.1 TPS25948x系列的功能拆解TPS259483AYWPR属于TI的TPS25948x系列这个系列做的是低导通电阻、带双向阻断能力的eFuse。我用的这颗输入电压范围覆盖2.7V到23V正好满足12V或者24V系统的需求。导通FET的导通电阻只有几十毫欧级别满载3A的情况下压降和损耗都控制得很好不需要额外加散热片。它最实用的几个功能我挨个说。电流限制是可调的通过外部电阻设置限流阈值我这次按3A负载设计限流点设在4.5A左右留了50%的裕量避免正常瞬态误触发又能在故障时快速切断。过压和欠压保护都有而且阈值可以通过外部电阻分压设置。工业现场的输入波动很大我设置了10.5V的欠压阈值和15V的过压阈值超出范围直接关断输出。软启动回路是内置的通过调整dV/dt引脚的外部电容可以控制上电时的输出电压爬升斜率。这个功能在热插拔场景下太重要了它把浪涌电流从硬切变成缓坡。故障报告引脚FAULT和电源正常引脚PG也都有。FAULT是开漏输出故障时拉低PG则用来指示输出电压是否达到标称值。这两个信号直接接给MCU后面固件就围绕它们做状态机。反向电流阻断也是这个系列的特性之一VOUT电压高于VIN时功率管快速关断能防倒灌。2.2 TM4C129XNCZAD为什么够用TM4C129XNCZAD是TI的Cortex-M4F微控制器主频120MHz带浮点单元。我看中它的原因不是算力而是外设组合非常适合“电源监控工业通信”这个定位。它有两路独立ADC我可以用一路ADC专门采集电源路径上的模拟量输入电压、输出电流另一路留给其它传感器。ADC是12位的在3.3V参考下分辨率约0.8mV对监控12V电源来说绰绰有余。GPIO外部中断也够灵敏FAULT信号是下降沿触发MCU能在微秒级响应虽然不参与硬件的快速关断但记录时间戳、置故障标志、通知上位机这个响应速度足够了。TM4C129X还有一个优点自带以太网MAC和PHY。我这块板子需要把故障日志上报到上位机直接跑TCP/IP协议栈就行不用外挂以太网芯片。对工业应用来说这也是一个非常实际的成本节省。另外这颗MCU的封装是BGA体积小适合我这边PCB空间受限的情况。工业级温度范围也覆盖了-40到85摄氏度环境适应性没问题。2.3 为什么不直接用MCU控制MOS管可能有人会问既然MCU有ADC又有GPIO直接省掉eFuse用MCU控制一个功率MOS管不就行了理论上去掉eFuse那一层把VIN直接接到MOS管的D极MCU用PWM控制G极ADC采样输出电压和电流软件写PID限流。但这个方案有个根本问题保护速度跟不上。电源故障是微秒到毫秒级的物理过程MCU即便在120MHz主频下执行一次ADC采样加比较也要若干微秒加上软件开销、中断延迟从故障发生到MOS管完全关断几十微秒过去了。在短路场景下这几十微秒足以让功率路径上的电流冲到几十安培把MOS管打死。eFuse的好处是保护逻辑全部由硬件环路完成限流比较器、过压比较器的工作是纳秒级的关断动作在几个微秒内完成。MCU只做“事后诸葛亮”——记录、判断、上报。这就像汽车的安全气囊和行车电脑的关系气囊自己弹出电脑只是记录碰撞数据。把安全功能和决策功能分开出问题的概率小得多。3. 硬件电路落地从12V端口到MCU核心的完整设计3.1 电源树的整体规划我设计的电源树是三级结构。设备输入是12V直流经过TPS259483AYWPR保护之后分成两路一路直接供给大功率外设比如继电器阵列、加热器、电机驱动器的母线另一路经过后级DCDC降压到5V再经过LDO降到3.3V给TM4C129XNCZAD供电。这样设计的好处是外设的短路和故障被eFuse挡在前面不会直接冲击后级的DCDC和MCU而MCU的电源又是独立的一路即使外设侧eFuse频繁动作MCU也能保持运行持续监视和记录故障状态。电源树的简化表述如下表所示层级电源主要负载保护责任输入12V直流前级接插TPS259483AYWPR的UVLO/OVLO第一级保护后12V_PROT外设功率负载TPS259483AYWPR的限流/短路保护第二级5V传感器、隔离侧DCDC降压器自身保护第三级3.3VTM4C129XNCZAD核心LDO的限流/热关断3.2 eFuse外围电路的计算TPS259483AYWPR的外围电路不算复杂但几个关键电阻电容的取值直接影响保护行为。电流限制电阻我按“负载正常工作电流的1.5倍”来取。数据手册里有一个限流设定公式基本思路是通过一个外部电阻把限流阈值映射到目标电流。我的负载最大电流3A所以目标限流点设在4.5A。这个裕量需要根据负载的瞬态特性调整——如果负载经常有短暂的电流尖峰比如电机启动建议按2倍取留更宽的空间避免误触发如果负载是纯阻性且很稳定1.3到1.5倍就够。过压和欠压的阈值通过分压电阻设置电阻分压网络接在OVLO和UVLO引脚上。我这边输入标称12V欠压阈值设在10.5V过压阈值设在15V。计算分压电阻时要注意两个坑一是电阻精度至少1%温漂要小因为阈值精度直接取决于分压精度二是分压电阻的阻值不能太大否则引脚输入漏电流会在分压点上产生不可忽略的误差。我一般把分压网络的电流控制在0.2mA以上也就是总阻值在60kΩ到100kΩ级别这样漏电流的影响可以忽略。软启动电容决定输出爬坡时间。dV/dt引脚外接电容越大输出电压爬升越慢。我常用的是3.1V/毫秒左右的斜率对应电容值参考数据手册的公式。爬坡太快浪涌保护形同虚设爬坡太慢则设备上电时间过长用户可能会误以为故障。工业场景一般取5到10毫秒完成爬升表现比较均衡。PG引脚是开漏输出需要外接上拉电阻到MCU的GPIO电平。这里有个细节上拉电源的选择。我建议上拉到MCU的3.3V而不是12V这样PG的电压域和MCU一致外部不需要再做过压限幅。但要确认eFuse的PG引脚能承受3.3V的灌电流如果手册里PG的最大上拉电压有限制就要串个电阻或者用三极管做电平转换。FAULT引脚同理接MCU的中断输入。如果MCU的GPIO耐压足够直接上拉到3.3V接过去即可。输入输出电容的处理也有讲究。输入端必须放陶瓷电容放在VIN引脚旁边用于吸收热插拔时的瞬态能量。输出端同样要有一个容量稍大的电容一方面给后端负载提供瞬时能量另一方面配合软启动电路稳定输出电压上升斜率。我实测的经验是输入端至少47μF陶瓷电容输出端根据负载大小选择100到220μF。陶瓷电容的直流偏压特性要注意不同容值在12V电压下实测容量可能缩水到标称值的70%左右所以设计时要留够余量。3.3 MCU采集与监控接口设计TM4C129XNCZAD这边我用了三个监控通道。第一个是输入电压监控。VIN经过电阻分压后送ADC采样分压电阻按10:1的比例设计这样12V对应1.2V在ADC的参考范围内。采样电阻后面加一个100Ω电阻和一个1nF电容构成RC低通滤波把高频噪声滤掉。分压电阻必须用高精度低温漂的类型否则长期监测电压的绝对误差会对不上。第二个是输出电流监控。TPS259483AYWPR的IMON引脚会输出一个与负载电流成比例的电流或电压取决于具体型号配置通过一个采样电阻把电流信号转成电压再送ADC。IMON信号的带宽不低不能直接在ADC引脚上并大电容会影响响应速度。我在IMON采样电阻后只加了一个103电容10nF作轻微滤波再进ADC居高频噪声的同时保住瞬态响应。第三个是数字信号通道FAULT接GPIO的下降沿中断PG接普通GPIO输入DCDC的电源正常信号也接一个GPIO。这样MCU可以按“模拟量趋势数字量跳变”双维度来判断故障比只看模拟量可靠得多。ADC参考电压我用的内部3.3V参考不用外部基准因为这儿做的是工程监控而不是精密测量内部参考的精度足够省掉一个基准芯片还能减少成本和PCB面积。如果要追求更高精度可以外接一个2.5V的基准源同时把所有分压网络的缩放比例重新计算。4. 固件做决策MCU侧的保护状态机与故障响应4.1 故障处理的层次划分固件设计的第一步是明确MCU在保护系统中的角色。硬件eFuse已经做了最紧急的动作限流、关断、防倒灌。MCU不做这些它做的是三件事监视趋势、确认状态、执行恢复策略。具体来说I_mon的ADC采样值会周期性读取MCU判断的是电流有没有异常爬升、限流点之前有没有反复逼近的过程。比如某个外设的老化导致电流缓慢增长这种渐变式故障不会触发eFuse的硬保护但MCU可以通过长时间观测提前预警。FAULT和PG的中断则用于确认“硬件已经跳了”MCU立刻记录当前时间、当前电源状态然后决定是否允许自动恢复。4.2 状态机的定义与转换我把固件里的电源保护逻辑做成了一个简单状态机一共五个状态。RUNNING是正常运行态MCU周期性采样电流电压未检测到异常。SUSPECT是怀疑态电流连续N次采样超过正常阈值的80%但没到限流点。MCU在这个状态不会切断电源但会把次数和时间戳记下来。FAULT_LATCH是故障锁定态收到FAULT中断或ADC采样到电压异常持续超过设定时间MCU进入这个状态并关断外设使能信号。RECOVERY是恢复等待态MCU等待一段时间比如500ms然后重新使能eFuse观察是否能正常上电。如果恢复失败三次就停留在FAULT_LATCH不再自动重试只等待人工干预。还有一个人工确认态收到上位机命令或者按键输入后从FAULT_LATCH清到RUNNING。状态机的核心思想是硬件保护可以自动恢复有限的次数但最终决定权在人。无限自动重启在少数场景是灵活的但在工业现场一个反复短路的重启设备不仅危险还可能因为频繁启动导致次级损伤。4.3 关键代码实现下面这段是核心监控循环的代码片段。我用的TI的TivaWare驱动库逻辑部分完全基于标准C。ADC采样用了序列采样模式一个触发源连续采三路通道。// 电源监控任务每5ms执行一次 #define ADC_CH_VIN 0 #define ADC_CH_IMON 1 #define ADC_CH_PG 2 #define NORMAL_MAX_A 3.0f // 正常最大负载电流 #define SUSPECT_A 3.5f // 怀疑阈值 #define FAULT_MAX_A 4.5f // 硬故障阈值 #define SUSPECT_COUNT 5 // 连续超阈值次数 typedef enum { PWR_RUNNING 0, PWR_SUSPECT, PWR_FAULT_LATCH, PWR_RECOVERY, PWR_MANUAL_RESET } pwr_state_t; static pwr_state_t pwr_state PWR_RUNNING; static uint32_t suspect_count 0; static uint32_t fault_count 0; void PowerMonitorTask(void) { uint32_t adc_raw[3]; float v_in, i_out; // 读取三路ADC ADCSequenceDataGet(ADC0_BASE, 3, adc_raw); v_in adc_raw[ADC_CH_VIN] * (3.3f / 4096.0f) * 10.0f; // 输入分压10:1 i_out adc_raw[ADC_CH_IMON] * (3.3f / 4096.0f) * IMON_SCALE; switch (pwr_state) { case PWR_RUNNING: if (i_out SUSPECT_A) { suspect_count; if (suspect_count SUSPECT_COUNT) { pwr_state PWR_SUSPECT; // 记录轻微异常的时间戳 LogFaultEvent(FAULT_SUSPECT, v_in, i_out); } } else { suspect_count 0; } break; case PWR_SUSPECT: // 在怀疑态继续观察超过硬阈值则切换 if (i_out FAULT_MAX_A) { pwr_state PWR_FAULT_LATCH; SetPeripheralPower(0); // 关断外设 LogFaultEvent(FAULT_OVERCURRENT, v_in, i_out); } else if (i_out (SUSPECT_A * 0.8f)) { // 电流回落到正常阈值以下才允许清除怀疑态 suspect_count 0; pwr_state PWR_RUNNING; } break; case PWR_FAULT_LATCH: // 硬件故障锁定等待上位机/按键清除 break; default: break; } }FAULT引脚的中断处理函数要简洁只做两件事清中断标志设置一个全局标志位真正的故障处理放到主循环里做。不要在中断里做耗时操作比如Flash写入、串口打印都要避免。中断里只记录tick值主循环再结合时间戳做日志。这是嵌入式开发的通用规矩电源监控系统尤其要守住这条线。volatile uint32_t g_fault_flag 0; void GPIOPortF_IRQHandler(void) { uint32_t status GPIOPinIntStatus(GPIO_PORTF_BASE, true); if (status FAULT_PIN) { g_fault_flag 1; GPIOPinIntClear(GPIO_PORTF_BASE, FAULT_PIN); } }4.4 固件侧的EMC和软件陷阱电源监控最怕误判比漏判更麻烦。漏判最多是保护晚一点误判则会导致设备频繁掉电客户体验非常差。我踩过两个典型坑写代码时特别加了预防。第一个是ADC采样毛刺。开关电源的开关噪声、继电器动作的瞬态干扰都会耦合到ADC引脚上。我用了双重手段硬件上ADC输入加RC滤波软件上对IMON做滑动平均滤波连续取8次采样去掉最大最小值再求平均。另外每次采样后加上一个短线延时等ADC内部采样保持电容稳定后再读结果。第二个是启动瞬间的电流误判。设备刚上电时后级电容充电、继电器吸合、通信模块初始化电流会在几百毫秒内有明显尖峰。如果不做处理MCU会把这个尖峰当成过流故障。我的做法是设备启动后的前500ms内把监控阈值临时放宽到硬故障阈值的1.5倍等启动过程结束后再切换回正常阈值。这个“启动盲区”窗口要做成可配置参数不同负载的启动特性不一样硬编码会被骂。5. 测试与验证短路、浪涌、热插拔的量化评估5.1 测试平台搭建硬件和固件都写完不等于能交差。电源保护系统必须经过实打实的故障注入测试我搭了一套比较完整的测试环境。设备清单一台可编程直流电源用来模拟输入电压变化包括OVLO/UVLO扫描一台电子负载用来模拟过流一对香蕉插座加短路线用来做输出短路测试一台四通道示波器测量VIN、VOUT、电流信号、FAULT波形一台热像仪测量功率路径的温升。示波器探头用差分探头测浮地信号普通探头测VIN和VOUT之间会有共模干扰波形不准。5.2 各项故障测试的执行方法我按优先级排列测试项目第一项就是输出短路。短路测试我会在输出端用一个大电流继电器或者MOS管做电子开关初始导通测试时突然关闭开关把输出端对地短路。这里不能用人工直接拿导线碰人手的接触电阻和弹跳会让波形变得一团糟没法定量分析。示波器用单次触发模式触发源设在VOUT上下降沿触发。短路瞬间观察这几个指标VOUT跌落到0的时间、峰值短路电流、eFuse关断的响应时间、FAULT信号拉低的延迟。TPS25948x这类eFuse的短路响应是微秒量级的但我实测下来由于PCB布局寄生参数的影响从短路发生到VOUT降到0的整个过程大约在20到50微秒之间。如果PCB走线细、电容分布远这个时间会被拉大所以布局非常重要。第二项是热插拔浪涌测试。用一个机械开关模拟带电插拔输入电源稳定在12V测试开关接通瞬间的浪涌电流。正常应该看到电流按软启动斜率爬升峰值不超过1.5倍设定电流。如果看到电流尖峰突破限流值说明dV/dt电容偏小需要加大。第三项是过压和欠压扫描。可编程电源从12V缓慢上升到15.5V再从12V下降到10V观察eFuse在设定的OVLO和UVLO点是否精确关断以及恢复点是否带有迟滞。工业应用里必须保留迟滞否则输入电压在阈值附近抖动时输出会反复通断。第四项是持续过流测试。电子负载慢速增大电流从3A缓慢增加到5A。理想的eFuse行为是电流到达限流点后进入限流模式输出电压被拉低如果后级承受不了低压则快速关断或者维持限流一段时间后触发过热关断。无论哪种行为MCU日志里都要能记录到。5.3 波形的判读标准波形判读有几点实用经验。限流波形应该是平坦的电流被控制在设定值的一条水平线上。如果看到的电流纹波很大超过10%优先怀疑电流采样路径的噪声PCB布线时IMON信号的走线可能贴着功率路径走感应到开关噪声。VOUT在短路恢复后应该缓慢爬升回到标称值的时间与软启动电容设定的斜率一致。如果VOUT直接弹跳回12V说明软启动没起作用eFuse进入了异常模式。热像仪观察重点在eFuse本体和输入输出电容。满载3A运行30分钟后eFuse表面温度如果在环境25度下不超过60度散热设计基本合格。如果超过80度就要检查限流值是否设置过低、铜皮散热面积是否不足、过孔阵列是否足够。我把某次测试的数据整理了一张表供参考测试项目实测结果判读结论输出短路响应时间约30μseFuse硬件环路正常短路峰值电流6.2A略高于限流点可接受FAULT延迟35μs比VOUT跌落后约5μs先有故障后有信号软启动峰值电流1.2×限流值爬坡正常15.2V输入过压关断能够关断并锁存OVLO阈值准确9.8V输入欠压关断能够关断回差2VUVLO迟滞正常工作持续4.5A过流限流后5秒触发过热关断热保护路径正常6. 量产和后续维护的几个现实问题6.1 器件供应与替代注意事项TPS25948系列目前还是比较新的产品线。量产阶段第一条要确认的就是供应链建议提前备足至少三个月用量的现货或者要求代理商签定交期保证。电子元器件在工业项目里断货是常态不要等贴片厂打电话来说缺料才着急。替代器件方面Nexperia、onsemi、ADI都有类似的eFuse产品但替换不是简单改封装。不同品牌的限流精度、过压阈值精度、软启动曲线差异很大替换后必须重新跑一遍短路和浪涌测试绝不能只做功能验证就放行。每次更换器件版本我会把所有故障注入测试全部回归一遍。6.2 故障日志的现场可追溯性我的板子上MCU把故障记录写到片内Flash的一个专属扇区里。每次故障记录包括故障类型、VIN电压、IMON电流、持续时间和时间戳。这个设计在现场排查中非常管用。客户报修说“设备偶尔重启”你把日志通过串口或者以太网读出来发现是“IMON电流4.2A持续80ms”再对照现场负载的特性基本能定位是哪个外设引起。没有日志就只能靠猜猜在工业现场是最贵的成本。写Flash要注意磨损均衡和写保护。故障记录频繁擦写会迅速消耗Flash寿命。我用的策略是环形缓冲覆盖最老的记录同时在写Flash前先关闭全局中断防止写Flash期间被FAULT中断打断导致系统卡死。6.3 现场应急修复的小技巧最后分享一个排场技巧。如果现场设备频繁触发FAULT但MCU日志显示没有超过硬故障阈值这时候优先怀疑的是输入电压瞬间抖动触发了UVLO而不是输出过流。用示波器挂在UVLO引脚的测试点上观察阈值附近有没有毛刺。很多时候是输入线束太长、接触不良导致的电压跌落结果被UVLO误判成故障。这种情况下调整UVLO分压电阻的阈值或者增加迟滞就能解决。这类问题在实验室根本复现不了只能在现场积累经验。电源保护设计的难处不在某一点而在整体节奏硬件要在微秒级作反应固件要在毫秒级做判断整机要在秒级给用户反馈。TPS259483AYWPR和TM4C129XNCZAD这个组合恰好覆盖了这三个时间尺度。如果你也在做类似的产品建议先照着这个思路把硬件保护层做扎实固件和日志后面慢慢完善电源路径稳了系统其他部分出问题也容易排查。
返回列表