ARTICLE DETAIL

资讯详情

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

TPS259483电子保险丝与PIC18F46K42的工业电源入口保护方案

TPS259483电子保险丝与PIC18F46K42的工业电源入口保护方案 最近在做一块工业控制板的电源入口我把 TPS259483AYWPR 电子保险丝和 PIC18F46K42 单片机放在一起用专门处理 12V/24V 总线进入嵌入式系统时的过流、短路和浪涌问题。以前用普通玻璃保险丝的时候现场烧了就换、换了又烧根本分不清是过流、短路还是某一路负载引起的连锁故障换成这个组合之后限流点可以调、启动斜坡可以控、故障状态还能记录和上报排查问题从“猜”变成了“看数据”。这个方案适合给嵌入式控制器、传感器节点、电机驱动器这类设备叠加电源入口保护也适合你在做新产品时直接把保护逻辑设计进去。下面我按照方案拆分、参数计算、硬件与固件实现、调试与问题排查四个部分完整讲一遍我自己的设计过程。1. 方案定位TPS259483AYWPR 负责执行PIC18F46K42 负责决策1.1 为什么普通保险丝在工业场景里越来越不够用很多人对电源保护的印象还停留在保险丝上电流一大内部的金属丝熔断电路断开完事。但在工业设备上这种方案有几个让人头疼的地方。第一熔断是一次性的现场要带备件换保险丝之前还得先排查故障原因生产时间耽误不起第二保险丝的熔断特性受环境温度影响很大同一个额定电流的保险丝在高温机柜里和低温户外动作点差得很多保护效果不可控第三它完全没有诊断能力烧没烧、为什么烧、是过流还是短路只能靠万用表去量故障定位效率很低。自恢复保险丝虽然能解决“一次性”的问题但它的内阻会随动作次数和温度漂移精度差而且在短路瞬间的限流能力不够干脆对半导体负载不够友好。于是这类使用场景逐渐转向电子保险丝也就是 eFuse用一颗集成 MOSFET 和采样电路实现可控通断限流值可编程启动压摆率可调还能输出故障信号。我这次选的 TPS259483AYWPR 就属于这一类它在 24V 入口场景下只需要很少的外围元件就能把电源路径变成一个可管理的通道。1.2 TPS259483AYWPR 的内部逻辑它到底在保护什么从功能上看eFuse 的“保险丝”部分由一颗功率 MOSFET 承担但它不是简单地把开关串联在电源线上。内部有电流采样管、比较器、驱动电路和一系列保护电路所以它能做的事情比机械保险丝多得多。它能限制最大输出电流超了就把电流钳住而不是直接断开它能控制输出电压爬升的快慢限制启动瞬间对电容充电造成的浪涌它还能监测输入电压欠压时不会误开通过压时也可以做相应动作。再说得直白一点普通的保险丝是一道“墙”电流超过阈值就断eFuse 更像一道“闸门”既能限量放行也能在异常时快速关闭。它在故障期间不是瞬间烧断而是通过限流把电流控制在设定值附近给后级系统一个反应时间。这个过程中能量会转化成热量所以 eFuse 本身还带热保护温度过高时会自行关断。TLLT 这类故障指示引脚可以告诉外部控制单元“我现在处于异常状态”这正是和 MCU 协同工作的接口基础。1.3 PIC18F46K42 在这里不是打杂的它负责保护策略如果只靠 eFuse 本身它只能按固定的限流阈值工作无法根据现场情况动态调整也无法判断“这次过流要不要立即恢复”。这时候就需要一个 MCU 来负责策略。我用的是 Microchip 的 PIC18F46K42这颗 8 位芯片在这个场景里非常合适。它有带计算功能的 12 位 ADCADCC可以对 IMON 信号进行采样并且硬件自动做平均和阈值比较不用 CPU 频繁介入它有 CLC 可配置逻辑单元可以把 FLT 信号和使能信号做成硬件组合逻辑实现微秒级的快速互锁它工作电压范围宽能直接和 5V 逻辑接口工业级温度范围也容易满足。选择这颗 MCU 而不是上 32 位一个重要原因是性价比和保护任务的实时性。这个场景不需要跑复杂算法需要的是一颗可靠、低功耗、外设匹配的单片机。PIC18F46K42 的 ADCC 和 CLC 几乎是为这类“监测判断输出控制”的闭环场景准备的固件逻辑可以写得非常短。另一个原因是调试工具链成熟MPLAB X IDE 加上 XC8 编译器入门快适合大多数做嵌入式硬件开发的工程师直接上手。1.4 信号链路和供电关系决定了方案能不能真正落地我在设计时先把信号链路理清楚。IMON 引脚输出与负载电流成比例的监测信号进入 PIC18F46K42 的 ADC 通道FLT 引脚是开漏输出接上拉后同时进入 CLC 和普通 GPIO既能触发硬件逻辑也能让固件读取状态EN 引脚由 MCU 的 GPIO 和 CLC 输出共同控制正常时由 MCU 置高故障时硬件逻辑可以直接拉低。这里有一个很多新手容易忽略的问题MCU 自己从哪里取电。我建议 PIC 从保护前端取电也就是经过一个 LDO 从 VIN 供电而不是从 eFuse 的输出端取电。原因很简单如果 MCU 从 VOUT 取电那么 eFuse 因过流关断之后MCU 自己也会掉电状态记录、故障日志、恢复策略全都来不及执行。从保护前端取电之后即使输出端被短路MCU 依然活着可以记录现场数据、执行恢复流程、通过通信接口上报。这个小细节在实际工业现场的价值非常大。2. 关键参数计算限流点、启动斜坡和 IMON 采样电阻怎么定2.1 限流点不是按负载额定电流拍脑袋定的我设计时拿一个 24V 入口、额定输出 1.8A 的负载做例子。限流点不能等于额定电流需要留出余量但也不能盲目放大。余量太小负载正常波动或电机启动峰值就会触发热保护余量太大等于没有保护线缆和连接器可能先烧掉。一般我会留 1.2 到 1.5 倍同时考虑一下后端最大峰值电流能持续多久。如果负载的短时峰值为 2.2A持续 200ms那么把限流点定在 2.5A 左右比较合适正常稳态 1.8A 不会误触发短时 2.2A 也高于工作点但故障电流一旦超过 2.5A 就会被钳住。限流电阻的选择方法是查对应器件的应用手册数据手册里一般会有限流电阻和限流值的映射曲线。我的实操流程是反推先确定目标限流值再在曲线上找到对应阻值选最接近的 E96 系列电阻最后留一个焊盘位置方便调试时更换。还有一点值得注意这个电阻的阻值精度直接影响限流精度所以调试阶段可以用 1% 电阻正式量产我建议换成 0.1% 低温漂的规格尤其是机柜内温升明显的场景。2.2 启动浪涌和 dV/dT输出电容决定了你的上电斜坡要多长很多人只关注限流点忽略了上电瞬间的问题。空载启动时输出端如果有较大容性负载比如 470µF 甚至 1000µFVOUT 从 0V 爬升到 24V 的过程会对电容充电充电电流可能远高于设定限流值导致 eFuse 启动即保护系统根本起不来。这类问题的物理基础是 I C × dV/dt充电电流等于输出电容乘上电压变化率。因此要让启动电流不超过限流点就必须把 dV/dt 控制在一个合理的数值上。举个例子如果输出电容是 1000µF我希望启动充电电流不超过 2A那么 dV/dt 就应该控制在 2V/ms 左右。24V 的输出爬升时间大约是 12ms这个时间对于大多数嵌入式控制器来说完全可以接受。如果负载是一块带大电容的 FPGA 核心板或者电机驱动器的母线电容这个时间还要根据具体情况加长。我在原理图阶段会把 dV/dT 设置电容的焊盘留成多种容值可选调试时根据实测启动波形再定这样可以避免反复改板。2.3 IMON 采样电阻和 ADC 量程的匹配方法PIC18F46K42 的 ADCC 是 12 位参考电压可以用内部 FVR也可以用外部基准。IMON 引脚的输出信号和负载电流成比例具体比例系数 K 在数据手册中有曲线或表格。我的设计原则是让最大需要监测的电流对应的电压落在 ADC 量程的 70%~80% 左右留出余量给瞬时峰值和噪声。比如我设定最大监测电流是 3A希望它对应 2.5V 的 ADC 输入电压那就根据 K 值反推采样电阻。如果按照手册算出来的电阻不是标准阻值就取相近的 E96 电阻然后再用万用表实测校准。还有一个容易踩的坑是 IMON 引脚本身的输出能力有限采样电阻不要选得太小否则会把引脚拉低也不要选得太大否则 ADC 输入端可能有明显压降。具体上下限以手册推荐值为准。采样电阻确定之后最好在 ADC 引脚对地加一个 RC 滤波时间常数我一般取 10µs 左右既能滤掉开关电源的高频噪声又不会把真正的过流信号淹没。2.4 动态限流电机启动时能不能临时放宽限制固定限流点最大的问题是无法兼顾“正常运行要灵敏”和“负载启动要宽容”这对矛盾。电机、继电器线圈、加热器等负载在启动瞬间会产生数倍于稳态的电流如果限流点固定得很紧正常启动都会被打断。我的做法是让 MCU 通过 GPIO 控制一个小 MOSFET把另一颗电阻并联到限流设置电阻上等效改变限流点。正常工作时限流 2.5A电机启动前 MCU 把这个 GPIO 拉高限流点临时放宽到 3.5A启动完成后恢复。这个功能做起来并不复杂但要注意几点。第一切换动作必须和系统状态同步不能在负载已经处于过流状态时再去放宽限制否则保护形同虚设第二并联电阻的通断会产生一个短暂的阻值跳变需要确认 eFuse 的限流响应不会因这个跳变而误动作第三放宽限流的时间要有上限MCU 里要做一个看门狗式的定时器时间到就强行恢复原来的限流点防止程序跑飞后一直维持高限流状态。2.5 热设计限流不等于无限承受如果输出端直接短路输入 24V限流 2.5A那么 eFuse 内部的 MOSFET 上会产生约 60W 的瞬时功耗。虽然热保护会很快动作但在这段时间内热量会传导到封装和 PCB 上。PCB 的铜箔面积直接决定了芯片能把热量散多远所以功率路径下的散热铜皮一定要做大过孔也要加足帮助热量向背面和四周传导。我见过有人把限流点设得很高、板子又很小结果短路测试时芯片表面温度在几秒内就超过 120℃长期反复短路测试后封装都有变色痕迹。热设计和限流策略是配合的。如果应用场景允许我会把限流点尽量降低让热保护动作速度更快同时在固件里做故障计数短时间内反复触发就进入锁存状态不再自动尝试避免芯片在冷热循环中反复承受压力。这个逻辑对器件寿命影响很大后面在状态机部分会细说。3. 从原理图到固件保护逻辑的具体落地过程3.1 原理图上的连接关系和组织方式原理图部分先把最基本的引脚关系列清楚。输入侧VIN 引脚到电源入口先放一个 TVS 管和防反接二极管保护器件本身不被浪涌和反压损坏VIN 对地放输入电容一般用一个大容量的电解电容并联一个小容量的陶瓷电容电解电容负责稳住低频陶瓷电容负责高频去耦。输出侧VOUT 对地放输出电容容值根据负载特性和启动斜坡综合决定。控制引脚方面限流设置电阻从设置引脚接地dV/dT 设置电容也接到对应引脚和地之间。IMON 引脚接采样电阻到地同时从采样电阻中点引出信号到 PIC18F46K42 的 ADC 通道。FLT 是一个开漏引脚必须接上拉电阻到 MCU 的供电电压然后分两路一路直接进 PIC 的 GPIO另一路进 CLC 的输入。EN 引脚由 MCU GPIO 和 CLC 的输出共同驱动中间看一下电平极性必要时用三极管或小型 MOSFET 做逻辑转换。3.2 PCB 布局功率路径和信号路径要分开走这块板的 PCB 布局我吃过亏。第一次打样时我把功率路径和信号路径靠得太近IMON 线上耦合了大量开关噪声ADC 读数在轻载时跳动很大。后来重新改了布局把规则总结成三条。第一从 VIN 到 eFuse 到 VOUT 的功率路径尽量短、尽量宽输入电容的位置要紧紧贴着芯片的 VIN 和 GND 引脚否则回路电感会在短路瞬间产生电压尖峰第二IMON 采样电阻到 MCU 的 ADC 引脚这段线要短采样电阻用开尔文接法直接从电阻两端引线到芯片不要让功率电流流过采样电阻的地端第三信号地和功率地在 PCB 上单点汇合避免大电流在地平面上形成大的地电位差把干扰带进 MCU 的参考地。整块板子的布局顺序我会这样安排电源入口在最左边eFuse 放在输入电容和输出电容之间PIC18F46K42 放在远离功率路径的一侧MCU 供电的 LDO 从保护前端或辅助电源取电。UART 和状态指示 LED 放在板边方便调试时观察。FLT 信号线不要和开关节点平行走线如果实在避不开就在中间加一个地线隔离。3.3 PIC18F46K42 的固件初始化ADC、GPIO 和基础时钟固件我用 MPLAB X IDE 加 XC8 编译器代码结构分成初始化、采样、状态机、通信四块。PIC18F46K42 的外设配置可以用 MCC 图形化工具生成但我会手动过一遍关键寄存器避免生成代码里有些默认配置不符合现场要求。ADC 部分选择 IMON 通道参考电压用内部 FVR 并配置为合适电压档采样结果右对齐存储。为了使读数平稳我用 ADCC 的多次采样累加功能每次唤醒后读平均值而不是拿单次转换结果直接判断。GPIO 这部分重点是把 FLT 引脚配置成输入并带中断EN 引脚配置成普通输出CLC 输出的那个控制引脚也配置好方向。主循环采用简单的状态机结构每隔 1ms 检查一次是否要更新 ADC 采样每隔 10ms 检查一次 FLT 引脚状态和软件状态机。因为 ADCC 自带比较器功能可以把“超过过流阈值”这个判断直接下沉到硬件里CPU 不用时刻运行比较逻辑。void ADCC_Init(void) { // 选择 IMON 输入通道例如 AN0 ADPCH 0x00; // 正参考选择内部 FVR负参考 VSS12 位右对齐 ADCON0 0x00; ADCON1 0x00; // 开启 ADCC 功能 ADCON0bits.ADON 1; } uint16_t ADCC_ReadAverage(uint8_t channel) { uint32_t sum 0; for (uint8_t i 0; i 8; i) { ADPCH channel; ADCON0bits.GO 1; while (ADCON0bits.GO); sum ADCC_GetConversionResult(); } return (uint16_t)(sum 3); }3.4 保护状态机锁存、恢复和自动重试策略固件状态机是整个保护逻辑的核心。我把它分成几个状态待机、正常运行、故障锁存、延时恢复。待机状态下输出使能是关闭的只有接收到启动指令后才会把 EN 拉高进入正常运行。正常运行中如果检测到 FLT 引脚变低或者 ADC 读数超过软件设定的过流阈值就立即把 EN 拉低并记录当前的电流采样值、时间戳和故障类型然后进入故障锁存状态。进入故障锁存后不会自动重新上电。这是我有意设计的很多工业现场不允许设备自行恢复因为故障原因没消除就反复重启可能会让负载二次损坏。恢复方式由应用场景决定可以是等待上位机通过通信接口发送恢复命令也可以是在本地按一个复位按钮还可以是 30 秒后自动尝试一次。放在电机控制器里我一般会设成“自动重试两次再失败就锁死”的方案既能处理瞬时干扰又不会让故障无限重试。typedef enum { ST_IDLE, ST_RUN, ST_FAULT_LATCH, ST_RECOVERY_DELAY } PS_State; PS_State current_state ST_IDLE; void PS_Task(void) { switch (current_state) { case ST_RUN: if (FLT_PIN 0 || adc_imom OVERCURRENT_THRESHOLD) { EN_PIN 0; log_fault(current_adc_value); current_state ST_FAULT_LATCH; } break; case ST_FAULT_LATCH: if (recovery_commanded 1) { EN_PIN 1; current_state ST_RUN; recovery_commanded 0; } break; default: break; } }3.5 CLC 硬件快路径比固件更快的故障互锁PIC18F46K42 的 CLC 模块在这里的价值是提供一条不经过 CPU 的硬件响应路径。我把 FLT 信号引入 CLC 的一个输入把 MCU 的软件使能信号引入另一个输入配置成组合逻辑输出到 EN 控制端。逻辑上可以达到这样的效果只要 FLT 认为存在故障不管软件现在处于什么状态EN 都会被强制拉到关闭位置。这就避免了 MCU 正在处理其他中断、还没来得及执行 EN 拉低代码的窗口期。用 CLC 做保护还有一个额外好处它能锁存故障状态。配置成置位/复位类型后FLT 的下降沿可以把输出锁为关闭状态直到 MCU 主动给出解锁信号才能重新使能。这等于给软件状态机加了一道硬件保险即使程序跑飞或者死机硬件锁存依然有效。使用前需要确认 EN 引脚和 FLT 引脚的电平极性如果 eFuse 是低有效使能就要在 CLC 输出端增加一级逻辑转换。我在实际项目中用两个 CLC 单元组合一个做组合逻辑一个做锁存效果非常可靠。3.6 通过 UART 上报故障信息便于现场诊断保护和监测做完了数据要能出来才有现场价值。我通过 UART 输出简单的文本帧内容包括故障类型、当前 IMON 值、输入电压状态和故障发生后的计数。工业设备很多时候装在机柜里工程师不可能拿示波器到处量有了一串串可读的日志至少能判断是负载过载还是电源路径本身出了问题。通信格式我设计得尽量简单比如FLT,OPC,ADC2048,CNT3这样的字段解析容易上位机或调试助手都能读。UART 波特率取 115200 就够用不需要跑很高。考虑到现场可能有强干扰帧尾加一个 CRC 或者异或校验避免误触发上位机的故障显示。4. 实测调试和常见问题排查4.1 上电测试顺序先环回再短路先看波形再下结论拿到样板以后我通常不会直接把整套系统接上去测试而是先做分层验证。第一步只给 eFuse 部分供电确认输入电容正常充电用示波器看 VOUT 的爬升波形确认 dV/dt 设置符合预期FLT 引脚在上电瞬间没有误动作。第二步接入 MCU只跑 ADC 采样程序确认 IMON 读数在空载时接近 0带上负载后数值线性变化这个线性度直接反映采样电阻是否匹配。第三步用电子负载逐步加电流验证限流点是否和设计值一致。到了短路测试这一步要用功率 MOSFET 或者继电器做一个可控的短路开关不要拿夹子直接搭否则瞬间电弧很吓人示波器探头也可能损坏。测试时同时抓取 VIN、VOUT、FLT 三个信号观察短路瞬间 eFuse 的响应时间和关断行为。限流精度则用电子负载恒流模式和电流钳对比边调边记。4.2 实测遇到的问题启动误触发和 IMON 噪声我在这块板上遇到的最典型的两个问题值得单独拿出来说。第一个问题是空载启动时 FLT 误动作。输出电容只有 470µF按理论计算启动浪涌并不大但实测时 VOUT 爬升过程中出现电流尖峰超过限流点触发保护。排查后发现是 dV/dT 电容容值偏小实际斜坡时间比设定值短同时输入电源本身在启动时有一个短暂的过冲。解决方案是把斜坡时间从原来的 5ms 加长到 15ms再在输入侧增加一级 LC 滤波之后启动波形明显缓和。第二个问题是 IMON 读数在轻载时波动很大导致 MCU 偶尔误判过流。靠示波器测量发现 IMON 引脚上叠加了约 200mV 的高频噪声来源是旁边开关电源的耦合。解决方案一是在 IMON 到 ADC 之间加了一级 RC 低通滤波时间常数取 10µs 左右二是把 ADC 采样由单次改成 8 次平均三是调整了 PCB 布局把 IMON 采样电阻的信号地单独引到 MCU 的地参考点。这三步做完读数稳定了许多。4.3 常见问题速查表现象最可能原因处理办法空载上电就触发 FLT启动浪涌超限流点增大 dV/dT 时间降低输出电容限流点和设计值偏差大限流电阻精度或焊接问题检查阻值换 0.1% 电阻IMON 读数跳动采样噪声或地环路加 RC 滤波做多次平均单点接地短路后反复自动重启打嗝模式 软件没锁存用 CLC 或软件锁存明确恢复条件长时间过流后芯片过热热散不出去或限流点偏高增大铜皮加散热过孔降低限流点带电机或继电器启动失败启动电流超过限流值启动时动态放宽限流点或者加长斜坡故障日志无法恢复MCU 供电接在 VOUT 后面改为从保护前端取电4.4 几个调试经验能帮你少走弯路我每次调试这类板子都会在 PCB 上保留几个测试点VIN、VOUT、IMON、FLT、EN。这样无论处理哪个问题示波器探头都能直接落上去不用焊线去碰芯片引脚。示波器触发模式我习惯设成 FLT 下降沿触发配合较长的采集时间能把故障发生前后的电压和电流变化完整记录下来。另一个很实用的做法是先把限流电阻焊成可更换的插座形式或者预留并联电阻位方便调试时快速尝试不同限流点。等到参数完全确定再焊最终阻值。限流电阻和 IMON 采样电阻一定要用精度高一点的型号我在调试中发现普通 5% 电阻遇到焊接温度变化后阻值漂移明显前后两版数据对不上换 0.1% 电阻后所有测试数据都能自洽。如果只让我留一条经验给刚开始做电源路径保护的工程师我会说不要急着相信第一次上电的波形。我前面提到的那次空载启动误触发最开始怎么想都觉得不应该因为理论计算完全正常后来发现是输入侧电源在启动瞬间有过冲、dv/dt 电容容值也偏小两个因素叠加才导致问题。保护类设计的核心不是把方案搭出来而是把每一种异常行为都逼出来、记录下来再逐一确认它在系统里有没有对应的解释。这套“电子保险丝 8 位 MCU”组合做完之后后续我准备把限流点切换改成数字电位器让 MCU 在不停电的情况下直接调整限流值调试起来会更方便。
返回列表