ARTICLE DETAIL

资讯详情

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

电子保险丝与单片机协同:电源路径保护设计方案

电子保险丝与单片机协同:电源路径保护设计方案 1. 为什么用 TPS259483AYWPR PIC18F87J50 做电源路径保护1.1 工业电源路径上最常见的几类故障做嵌入式开发这些年我越来越觉得电源路径保护不是“锦上添花”而是“保命设计”。工业现场不像实验室桌面那么干净24V电源线上的感性负载切换、电机启停、线缆插拔都能在电源轨上制造出非常难看的瞬态。最典型的几类故障我列一下一是负载短路输出端一根螺丝刀搭上去电流瞬间冲到几十安培二是输入过压比如工人接错电源档位把48V怼到24V系统上三是启动浪涌大电容上电瞬间的充电电流比正常工作电流大一个数量级四是电压跌落电源切换或电池供电时输入电压突然掉到欠压点以下。普通保险丝不是不能处理这些问题但它只能“炸一次”熔断之后必须人工更换。对无人值守的工业设备来说这意味着一次现场维护和停机成本。更麻烦的是普通保险丝的动作速度未必跟得上短路电流的上升速率能量还没熔断后级的MOS管和电源芯片已经击穿了。所以我在设计工业控制板、嵌入式网关、车载电子这类产品时更倾向于用电子保险丝加单片机监控的组合把保护从“一次性熔断”升级成“可配置、可恢复、可上报”的系统级功能。1.2 电子保险丝加MCU的组合到底解决了什么问题标题里这对组合TPS259483AYWPR是TI的电子保险丝PIC18F87J50是Microchip的8位单片机。前者负责“硬保护”后者负责“软管理”。两者协作后能实现普通保险丝做不到的三件事。第一件事是毫秒级切断。电子保险丝内部集成了功率FET和控制逻辑短路电流超过设定阈值时切断速度远快于普通保险丝而且切断后不会像熔丝那样需要更换只要把EN引脚重新拉高就能恢复供电。第二件事是限流而不是只断电。很多负载在启动时需要一大一小两个电流阶段电子保险丝可以先把电流限制在一个安全值让输出电容缓慢充电避免瞬间浪涌把前端电源拉垮。第三件事是状态可见。MCU可以通过FLT故障引脚和ADC采样实时感知输入电压、负载电流、故障状态然后通过UART、USB或以太网把状态上报给上位机。这一点对远程运维非常重要现场设备故障后维护人员还没到现场就能从日志里知道是过压还是短路。这套组合适合谁来用如果你在做工业控制器、嵌入式终端、车载电子、物联网关或者任何对供电可靠性有要求的嵌入式项目都可以参考。哪怕你只是想把实验室里的电源保护做规范一点这篇文章里的参数计算思路和排查经验也能直接用。2. TPS259483AYWPR 关键特性与参数设定方法2.1 电子保险丝和普通方案相比好在哪里在电子保险丝出现之前工程师想实现过流保护通常用“采样电阻 比较器 P沟道MOS管”这一堆分立器件搭。这套方案本身没问题但分立器件的一致性差温度漂移大而且保护阈值由电阻精度决定量产调试时每个板子可能都不一样。更麻烦的是一旦要增加过压保护、欠压锁定、软启动这些功能电路复杂度会迅速膨胀PCB面积和物料清单都很难控制。TPS259483AYWPR这类电子保险丝把功率开关、电流采样、限流比较器、过热保护、欠压过压检测都集成在一颗芯片里。外置元件只剩限流设定电阻、分压电阻、输入输出电容这对我这种要频繁改板子的开发者来说非常友好。从保护动作上看电子保险丝还有一个关键优势它可以做到“限流”而不是“断开”。普通保险丝和很多分立保护电路的动作方式是切断回路而电子保险丝在过流时先把电流钳制在设定值同时输出电压慢慢下降。对于容性负载这相当于给了电源一个“软着陆”不会产生大的电压尖峰。2.2 限流点、过压欠压、浪涌控制的计算思路先说限流电阻。TPS25948系列通常用一颗外部电阻把限流点设定在某个固定值具体公式见数据手册不同封装、不同版本之间系数会有差异。我在项目里一般按这样的流程计算先确认负载正常工作电流再确认启动瞬间的最大电流然后取两者之间的安全值作为限流点。比如一个嵌入式控制器正常工作电流1.2A启动时摄像头模组和无线模块同时工作峰值可能到1.8A那我就把限流点设计在2A附近留出20%左右的余量。计算示例先说明以下是方法参考实际数值要以你手上这颗芯片的数据手册公式为准。假设手册给出的限流公式是 ILIM K / RILIMK是固定系数目标限流点是2A那 RILIM K / 2A。算出来如果是标准系列里的某个值比如1.13kΩ就取最接近的标准电阻。注意电阻的精度最好选1%而且要关注功率虽然限流电阻上流过的电流很小但电压冲击瞬间还是要有足够的耐压。然后是过压和欠压设置。它通常通过分压电阻把输入电压降到芯片内部的参考阈值再用两个引脚分别配置过压和欠压点。我的习惯是先用Excel把目标电压点反推分压比再代入标准电阻值校验。例如输入标称24V希望电压升到30V时关闭输出那就让分压节点电压等于芯片内部比较器参考电压时输入恰好是30V。欠压保护一般设一个较低的阈值比如18V以下就认为输入不正常关闭输出避免后级电源进入不稳定状态。浪涌控制的重点是输出电容。电子保险丝内部有软启动电路通过一个外部电容可以调整输出电压爬升斜率。电容越大爬升越慢浪涌电流越小。但这个值并不是越大越好因为如果系统需要快速上电启动爬升太慢会导致后级电源芯片的欠压复位窗口被拉长。我一般先用示波器抓一下没有软启动电容时的上电电流波形再根据浪涌尖峰的幅值反推合适电容而不是一上来就按手册最大值去接。2.3 选型时容易忽略的几个细节采购物料时我吃过大亏。TPS259483AYWPR这种完整型号里的后缀字符A代表版本YWPR代表封装形式和卷带包装不能只写一个TPS259483就让采购去下单。同样的基本型号后缀不同封装可能完全不一样买回来焊不上板子就耽误整个项目排期。所以原理图里一定要写完整型号BOM表里也保持一致。散热也是一个容易被忽略的点。电子保险丝集成功率FET正常导通时有一定压差电流大了之后功耗不可忽略。比如3A电流导通压降30mV功耗也就0.1W左右但瞬时过流时压差会变大功耗会明显上升。PCB上要给芯片底部的散热焊盘留出足够的过孔和铜皮否则热保护会提前触发表现就是满载运行一段时间后输出莫名其妙断开。还要注意输入端的极性保护。电子保险丝有正向导通方向输入输出接反会带来问题。虽然很多型号内部有反向保护但我在实际项目里仍然会在输入端加一个防反接的二极管或PMOS尤其是面对现场工人可能接错线的场景多一道保护总没错。3. PIC18F87J50 在系统中的职责与配合方式3.1 为什么用单片机做保护系统的“大脑”电子保险丝自己就能完成切断动作那为什么还需要PIC18F87J50因为保护策略不能只靠芯片内部的硬逻辑。举个例子设备上电瞬间如果直接启用大电流负载无论怎么设限流点冲击电流都可能超过阈值。这时如果有一颗单片机在背后控制使能时序先让MCU启动完成内部初始化再延时300ms等待电源轨稳定最后才拉高EN打开输出就能避免很多误触发。PIC18F87J50这款8位MCU片上自带多路ADC、UART、SPI/I2C和USB模块这正好覆盖了电源路径保护系统需要的能力测量电压电流、输出状态日志、跟主控通信。选它而不是更便宜的裸逻辑芯片是因为我需要灵活的故障恢复策略。比如短路故障后是立即重试、延时重试还是锁定直到人工复位这个决策逻辑写在固件里现场要调整策略直接改参数就行不用改硬件。顺便说一句这个芯片的GPIO有好几组用其中两个脚控制EN和读取FLT剩下的还能接LED、按键、外置存储。我在实际项目中甚至用它的PWM输出控制散热风扇把电源保护和热管理做成一个板级控制单元整个系统的“人设”就从容多了。3.2 硬件信号链设计EN、FLT、ADC电压采样硬件上它与TPS259483的连接并不复杂。首先EN引脚由PIC的GPIO控制建议用一个IO口直连但如果MCU供电电压和芯片逻辑电平不匹配要加电平转换或分压。其次FLT故障输出通常是开漏结构需要外接上拉电阻到MCU的电源域然后接MCU的输入引脚并配置成中断输入或定时轮询。一旦发生限流、过压、欠压、热保护这个引脚就会拉低。我还会用MCU的ADC直接采集输入电压和输出电压。做法是用电阻分压把电源电压降到ADC可测的范围比如24V输入分压到3V左右再经过一个小电容做RC滤波。采集到的数值虽然不能和万用表比精度但用来判断“电压是否在正常窗口内”以及“故障发生时电压掉了多少”完全够用。需要注意的是ADC的参考电压最好用芯片内部的稳定基准或外部基准不要直接拿VDD当参考因为VDD本身就会随着电源波动测出来的数据会失真。电流采样也是关键。如果TPS259483有电流监测输出引脚可以直接接到ADC如果没有我通常会在输出回路里串联一颗毫欧采样电阻再用运放放大后送ADC。不过加了采样电阻会增加压降在高电流场景下要评估功耗。在很多应用里直接用FLT引脚判断过流就够了ADC电流采样可以等需要精确监测时再加。3.3 软件上的状态机设计与故障处理策略我习惯把电源路径保护的软件部分设计成一个简单的状态机而不是一堆if-else堆叠。状态至少包括初始化、电压检查、使能输出、正常运行、故障锁定、延时重试这几个阶段。初始化状态下MCU先配置GPIO和ADC确保EN处于关闭状态电压检查状态要等待输入电压稳定并确认在正常窗口内确认后进入使能输出状态拉高EN然后转入运行状态周期性采样电压电流和FLT。故障处理是整个状态机的核心。我的推荐策略是分级处理对于瞬时故障比如负载启动时短暂限流可以在FLT拉低后延时50ms再读取一次如果恢复就继续运行不产生告警对于持续故障记录具体故障类型和时间戳尝试重试两到三次每次间隔递增比如第一次100ms第二次500ms第三次2秒如果还是失败就进入故障锁定状态必须由上位机命令或人工断电才能恢复。这种策略在无人值守设备上特别重要我见过很多设备因为无限次自动重试在故障现场反复启停把接插件都烧糊了。状态机的另外一个好处是方便扩展。如果你想加入多路电源保护比如同时监控5V、12V、24V三路输出每一路都可以共用同一个状态机只要把每路的EN、FLT和ADC通道抽象成结构体就行。这也是为什么嵌入式项目里大家喜欢用状态机的原因它天然适合并行管理和扩展。4. 从原理图到代码一套可参考的实现4.1 原理图关键连接方式我以实际项目里的一个12V输入、5V输出的工业通信模块为例画出关键连接思路。电源输入经过防反接电路后进入TPS259483的VIN输出VOUT直接连到后级DC-DC转换器。EN引脚通过10kΩ下拉电阻接MCU的GPIO防止MCU上电期间引脚悬空导致误开启。FLT引脚用10kΩ上拉到3.3V然后接MCU的另一个GPIO。在VIN和VOUT到地之间各放一颗10μF陶瓷电容和一颗0.1μF高频去耦电容。输出电容的大小直接影响软启动时间所以我不建议盲目加大输出电容图中先用10μF实际调试时再用示波器验证。分压采样网络从VIN和VOUT分别引出两根细线到MCU的ADC引脚采样点尽量靠近芯片引脚避免走线过长引入噪声。原理图里还有一个容易被忽略的点FLT的上拉电阻电源域要和MCU一致不能直接拉到被保护的输出上。如果MCU的3.3V由5V输出再降压得到故障时输出被切断MCU仍然由前级或备用电源供电这样才能在故障发生后记录日志。如果MCU也靠被保护输出供电那故障切断后MCU瞬间掉电日志没记下来LED也没来得及闪调试时特别痛苦。4.2 参数计算实例这个模块正常工作电流约1.1A启动瞬间摄像头模组需要短时大电流峰值约1.6A。所以限流点我定在2A留30%余量。按数据手册公式回推限流电阻这里以标准示例数值演示手册中K系数假设为2280那么 RILIM 2280 / 2A 1140Ω取标准电阻1.13kΩ。具体系数一定要以你拿到的芯片手册为准不同批次要复核。过压保护点设为16V欠压锁定设为9V。分压电阻网络采用上臂82kΩ、下臂10kΩ组合当输入为16V时采样节点电压为 16 × 10 / (82 10) ≈ 1.74V对应芯片内部参考阈值。欠压点通过另一个分压网络设置计算方法相同。这些电阻选1%精度温度系数选25ppm以内保证在工业温度范围内保护点漂移不会太大。软启动电容我初始选了4.7nF对应输出电压爬升时间大约几个毫秒级别。实测发现启动浪涌尖峰还是偏高后来改成10nF爬升时间变长了一点但前端电源的跌落明显减小。这个参数就是拿来调教的建议留出测试点方便临时换电容。4.3 单片机驱动代码框架代码以Microchip XC8编译器为例寄存器名称如果需要适配具体头文件微调一下就行。核心代码分成初始化、状态机任务、故障处理三部分。#include xc.h #define EN_PIN LATCbits.LATC0 #define EN_TRIS TRISCbits.TRISC0 #define FLT_PIN PORTCbits.RC1 #define FLT_TRIS TRISCbits.TRISC1 #define ADC_VIN_CH 0 #define ADC_VOUT_CH 1 typedef enum { PP_STATE_INIT, PP_STATE_CHECK_VIN, PP_STATE_ENABLE, PP_STATE_RUN, PP_STATE_FAULT, PP_STATE_RETRY } PP_STATE; static PP_STATE pp_state PP_STATE_INIT; static uint8_t retry_count 0; void pp_init(void) { EN_TRIS 0; EN_PIN 0; // 默认关闭输出 FLT_TRIS 1; // FLT作为输入 ADC_Init(); } uint16_t adc_read(uint8_t channel) { ADCON0bits.CHS channel; ADCON0bits.GO 1; while (ADCON0bits.GO); return ((uint16_t)(ADRESH 8) | ADRESL); } void pp_enable_output(void) { EN_PIN 1; } void pp_disable_output(void) { EN_PIN 0; } void pp_fault_handler(void) { // 关闭输出记录故障码按策略决定是否重试 } void pp_task(void) { uint16_t vin adc_read(ADC_VIN_CH); uint16_t vout adc_read(ADC_VOUT_CH); switch (pp_state) { case PP_STATE_INIT: if (vin VIN_GOOD_THRESHOLD) { pp_state PP_STATE_CHECK_VIN; } break; case PP_STATE_CHECK_VIN: if (vin VIN_GOOD_THRESHOLD) { pp_state PP_STATE_FAULT; } else { pp_state PP_STATE_ENABLE; } break; case PP_STATE_ENABLE: pp_enable_output(); pp_state PP_STATE_RUN; break; case PP_STATE_RUN: if (!FLT_PIN) { // 故障触发进入故障处理 pp_state PP_STATE_FAULT; } if (vout VOUT_GOOD_THRESHOLD) { pp_state PP_STATE_FAULT; } break; case PP_STATE_FAULT: pp_disable_output(); pp_fault_handler(); break; default: break; } }这段代码的思路是在主循环里周期性调用 pp_task每个状态只做自己该做的事。故障处理函数里根据故障次数决定是延时重试还是锁定具体延时用定时器实现避免在主循环里阻塞等待。如果想做得更完善可以把ADC采样、FLT检测、重试延时都放到定时器中断里主循环只做状态流转。我实际项目里喜欢用一个10ms的定时器Tick驱动状态机这样时序控制更精确也不会因为其他任务卡住而错过故障响应窗口。5. 现场问题与排查经验实录5.1 上电瞬间限流误触发怎么调都不对这是我最常遇到的问题之一。现象是每次上电电子保险丝都会动作一次FLT闪一下输出起来后又断开。排查时先用示波器双通道同时抓VIN和VOUT看到VOUT上升时VIN瞬间被下拉一大截基本就可以断定是输出电容充电电流超过了限流点。解决方向有三个调大限流点、加大软启动电容、减小输出电容。优先调软启动电容因为它不影响正常工作时的保护阈值。另外一个容易被忽略的坑是后级负载本身也有输入电容。5V输出模块后面如果再接了多个传感器板每块板子都有100μF甚至更大的输入电容合在一起就是几千μF这个充电电流非常可观。所以计算浪涌电流时一定要把后端所有板卡的输入电容加起来而不是只看自己板卡上的电容。5.2 FLT信号抖动导致误报警故障引脚偶尔闪一下低电平持续几十微秒但MCU以为发生了严重故障直接关断输出。这种问题我在项目里遇到过两次。第一次是PCB布局问题FLT上拉电阻离芯片太远走线穿过电感下方被开关电源的磁场耦合出了噪声。移动元件位置后问题消失。第二次是电气噪声直接从VIN传导进来在FLT引脚上感应出毛刺。稳妥的处理方案是硬件加一个小电容到FLT引脚比如1nF和上拉电阻一起形成低通滤波。软件上再配合去抖检测到FLT拉低后延时10ms再确认一次。两者配合使用之后虚报警基本绝迹。注意去抖时间不能太长否则真正的短路故障发生时MCU还没来得及响应输出已经切断了那就失去了监控的意义。5.3 单片机ADC读数不准误差超过5%ADC读数不准通常有三个原因。第一是参考电压噪声大直接用了VDD当基准。VDD上有纹波时ADC量化结果自然不准换成内部电压参考或者外部基准IC后改善明显。第二是采样时间不够ADC内部的采样保持电容还没完全充到输入电压就开始了转换把ADC采样时间寄存器调大一些就解决了。第三是分压电阻阻值太大比如上臂用了1MΩ级别的电阻源阻抗过高采样瞬间电压被拉低。我后来把分压电阻控制在几十kΩ量级并在ADC引脚对地并联一颗0.1μF电容读数就稳定了。在电源监控场景里ADC更关注的是相对变化而不是绝对精度。比如要判断输入电压是否从24V跌落到20V这个差值在ADC上很容易分辨不需要追求万用表级别的精度。我在代码里还会做一次移动平均滤波连续采样8次取平均可以有效消除电源纹波对读数的影响。5.4 MCU上电时序把输出提前打开了这个问题很隐蔽而且只在冷启动时偶现。现象是MCU还没开始跑固件电源输出就自己通了负载提前上电。原因是MCU的GPIO在复位期间是高阻或不确定状态外部EN引脚虽然没有被拉低但芯片内部的默认状态可能已经允许输出了。解决方法是两个方向同时做。硬件上在EN引脚加一个10kΩ下拉电阻让MCU复位期间EN保持低电平软件上MCU启动后第一时间把EN配置为输出并输出低电平再完成其他初始化。这两个措施加一起才能保证上电瞬间输出是关闭的。类似的思路也适用于其他使能信号不止是电子保险丝DC-DC的EN、LDO的EN都建议这么处理。6. 一点个人经验总结设计这类电源路径保护系统我最大的体会是“先想清楚故障策略再写代码”。很多初学者一上来就想着怎么把ADC采准、怎么把波形调平却忽略了最关键的问题故障发生后系统到底希望怎么响应是立刻切断、限流持续、延时重试还是锁定直到人来复位这个决策需要结合产品的应用场景比如电池供电设备可能希望故障后自动重试而医疗设备可能要求故障后必须锁定避免自动恢复造成危险。还有一个实用技巧调试阶段我把FLT引脚同时接到示波器的另一通道和VIN、VOUT一起抓。这样故障发生时能清楚看到电压跌落、FLT拉低、输出切断的先后顺序判断保护到底是输入侧问题还是输出侧问题。三个波形同屏显示比单看任何一路都有说服力得多。最后想说电子保险丝加MCU这个组合看似只是两个芯片的简单配合但牵扯到的知识面其实很广功率器件选型、模拟信号采集、嵌入式状态机、现场故障策略。把这块做好对嵌入式开发者的综合能力提升很大。如果你正在做类似项目希望这篇文章里的参数计算思路和排查方法能帮你少走几步冤枉路。
返回列表