去年做一台工业控制柜的改造时,现场一套24V供电的传感器集线器连续烧了两块主控板。拆开看,罪魁祸首不是传感器短路,而是电源入口没有做完善的保护,短路瞬间保险丝还来不及熔断,板上的DC-DC已经先殉职了。后来我把入口方案改成“TPS259483AYWPR + PIC18F4525”的组合,把电源路径的保护做成了可配置、可监控、可记录的智能单元,才彻底解决了这类问题。这篇文章就把这套方案从头到尾拆开讲,包括器件选型理由、硬件连接、软件逻辑和实际调试踩过的坑,适合正在做嵌入式电源设计或者工业控制板供电入口保护的朋友参考。
工业设备的电源入口从来都不是“插上就能用”这么简单。这篇文章要聊的,就是怎么用一颗电子熔断器TPS259483AYWPR做硬件级的电源路径保护,再用PIC18F4525这颗8位单片机去负责阈值配置、状态监测和故障记录。方案不复杂,但能把工业现场最常见的过压、欠压、过流、短路、浪涌和反极性问题一次性堵住,同时让系统的故障行为变得可控、可观测。
1. 工业电源入口的痛点:为什么普通保险丝撑不住嵌入式系统
1.1 嵌入式系统的电源“意外”远超预期
嵌入式系统的电源入口,尤其是工业应用,面对的从来不是稳定的干净电源。我见过太多项目,板子在家里实验室跑得好好,一到现场就各种偶发复位、损坏、甚至冒烟。原因无非是输入电压的瞬态过压、感性负载切换产生的尖峰、负载侧短路、接错线导致的反接,以及现场大功率设备启停带来的电压跌落。这些“意外”往往只持续几毫秒甚至几百微秒,但足以让后级器件损坏。
传统做法是加保险丝,但保险丝有一个绕不开的问题:它的熔断时间是电流的函数,电流越大断得越快,可如果是过压或者反接,保险丝根本不会断,后级稳压器照样会烧。即使遇到短路,保险丝的I²t特性也可能比DC-DC的损坏阈值慢一个量级。有一次我用玻璃管保险丝做实验,负载短路后保险丝花了将近20毫秒才熔断,而板上的降压芯片在5毫秒时就已经失效了。也就是说,保险丝能保护的是线缆,不一定是板卡。
另一个容易被忽略的情况是欠压。工业现场的24V电源在大型电机启动时,可能瞬间被拉到十几伏。如果后级没有欠压锁定,电源管和MCU会在低压下反复尝试工作,产生一些奇怪的“半运行”状态,最终导致MOS管在线性区过热烧毁。这类故障很难用万用表查,往往要抓波形才能定位。
1.2 保险丝、自恢复保险、PMOS分立方案的共同短板
很多工程师会说,那我用自恢复保险丝(PTC)行不行?PTC的原理是温度升高后阻抗变大,但它有个致命弱点:动作速度太慢,热惯性大。面对短路,PTC完全来不及在微秒级响应。而且PTC的阻抗随温度漂移严重,高温环境下保持电流会大幅下降,导致设备误断电。
还有人用分立元件搭保护,典型的就是“PMOS + 采样电阻 + 比较器 + 锁存电路”。这确实能做电源路径开关,但分立方案的问题在于参数分散性大、响应速度取决于运放带宽、保护阈值容易受温度影响,而且一旦要增加过压、欠压、反向等多个功能,板级面积和调试成本会快速膨胀。我在一个项目中就吃过亏,分立方案里比较器的阈值在高温箱里漂了将近20%,导致过流点忽高忽低,最后只能靠校准电阻一个个调。
有一类方案是用专门的负载开关(Load Switch),但普通负载开关往往没有短路保护,或者保护阈值固定。对于工业应用,我更倾向于用集成式电子熔断器(eFuse),把功率MOSFET、电流采样、比较器、电荷泵和故障逻辑全部封装在一颗芯片里。和分立方案相比,它的参数一致性和温度稳定性好得多,而且响应时间可以做到微秒级别。下面这张表是我常见的几种方案对比:
| 方案 | 过流响应速度 | 过压/欠压保护 | 反接保护 | 可配置性 | 故障状态输出 |
|---|---|---|---|---|---|
| 保险丝 | 慢(毫秒级) | 不支持 | 不支持 | 无 | 无 |
| 自恢复保险丝 | 极慢 | 不支持 | 不支持 | 无 | 无 |
| PMOS+分立电路 | 中(取决于比较器) | 可以但要另外搭 | 需加防反MOS | 需改电阻 | 需额外电路 |
| eFuse(TPS259483) | 快(微秒级) | 支持可调 | 支持(防反接) | 模拟/数字可调 | FAULT/状态寄存器 |
1.3 我们的项目需求:哪些保护功能必须同时有
当时我们改造的是一台自动化产线的控制柜,接口板要同时给PLC、传感器、继电器模块供电。提需求时客户只说了“别老烧板子”,但我们作为设计方,心里得有一份完整的保护需求清单:
- 输入电压范围:标称24V,但允许短时间30V过压,最低9V欠压,低于9V要切断输出。
- 过流保护:额定负载约1.2A,希望过流阈值可设置到大约2A,避免正常启动瞬间误断。
- 短路保护:输出对地短路时,要在微秒级切断,并且限制峰值电流。
- 反向保护:防止24V和0V接反时损坏后级。
- 浪涌电流控制:后级有多个大电容,上电瞬间要能限制冲击电流。
- 状态监测和记录:至少要能知道发生过什么故障、什么时候发生的,现场工程师才能快速排查。
如果全用分立器件,这套需求做下来估计得半张A4纸的电路。但用TPS259483AYWPR这颗eFuse,过压、欠压、过流、短路、浪涌控制、反向保护都能管到,PIC18F4525则负责把保护阈值做成动态可调,并记录故障日志。一句话总结:硬件级保护靠eFuse抢时间,软件级管理靠MCU做策略。后面的章节详细说说这两颗芯片是怎么分工的。
2. TPS259483AYWPR 防护能力拆解:它替我们扛下了哪些事
2.1 这颗eFuse的核心指标和内部架构
TPS259483AYWPR 是 TI TPS25948 系列里的一颗电子熔断器。所谓eFuse,可以想象成一颗“带着微控制器的智能保险丝”:内部集成了导通MOSFET、电流感测放大器、比较器、电荷泵和多种保护逻辑。它的导通电阻很低,所以正常工作时损耗很小。根据系列特性,它可以支持较宽的输入电压范围,典型工业应用在24V系统很匹配,并且能承受一段时间的过压冲击。
我们选的是带后缀AYWPR的封装版本,这类封装通常带裸露散热焊盘,便于把芯片的热量导向PCB铜箔。内部架构上,芯片通过一个精确的电流源流过外置电阻来设置过流阈值,通过电阻分压设置输入过压和欠压阈值。它的电流限制模式可能是恒流限流或断路器模式,具体可以通过外接电容或数字配置决定。我们项目里选用的是“短路时快速断开,过载时先限流后延时断开”的折中策略,既不过于激进,也不会让短暂过载直接切断负载。
这里要提一个容易忽略的点:eFuse的保护动作是“硬件实时”的,它不依赖MCU介入。即使PIC18F4525正在忙着处理别的逻辑或者死机了,TPS259483依然会独立执行过流断开等动作。这种“硬件保护优先”的设计在工业安全场景非常重要。
2.2 输入保护:过压、欠压、反极性怎么工作
输入侧保护,主要依靠UVLO(欠压锁定)和OVP(过压保护)比较器。工程师可以通过外部电阻网络设定两个阈值。当VIN低于UVLO阈值时,内部FET关断,输出会被断开;当VIN高于OVP阈值时,同样关断,防止过高电压传到后级。
实际设计时,阈值不能设得太极限。比如我们标称24V,欠压阈值设到9V,过压阈值设到31V,这主要是为了留出容差空间。如果真的让阈值贴到24V,那现场24V电源的普通纹波都会触发保护,设备就没法正常工作了。反极性保护则利用了集成FET的背靠背结构,或者通过内部比较器检测VIN为负时迅速关断路径。使用eFuse做反接保护比外部加防反MOS简单得多,省掉了一个低导通压降的PMOS和栅极驱动电路。
有一点需要说明:虽然eFuse能扛反接,但不代表它能长期承受大幅负压。按照常见手册要求,反接电压一般不能超过一定幅度,比如-30V以内,而且时间有限。如果你的系统可能接入更恶劣的电源,建议在入口增加TVS二极管或防反二极管进行辅助钳位。至少,把TVS摆上成本不高,但能避免很多极端现场的“惊喜”。
2.3 输出侧:软启动、过流、短路与热关断
输出侧的第一个关键功能是软启动。工业后级往往有几十到几百微法的电容,如果直接硬接通,会产生巨大的浪涌电流。TPS259483的软启动功能会控制输出VOUT以一定斜率缓慢爬升,这个斜率可以通过外接电容来调整。我们在项目里设置软启动时间大约5ms,实测后级的DC-DC输入浪涌电流被限制在了1.5A以内,完全在输入电源的承受范围内。
过流保护是eFuse的核心价值所在。当负载电流超过设定阈值后,内部电流感测电路会先进入限流模式,把电流“钳”在设定值附近,同时开始计时。如果超限持续时间超过设定值,就触发断路器动作,彻底切断输出。这种“先限流再切断”的方式对很多负载很友好,比如电机堵转或继电器吸合的瞬时电流尖峰,只要时间特别短,设备可以正常工作,而不会误保护。
短路保护的响应速度是最值得夸的一点。输出端真正短路时,电流上升斜率极快,芯片会通过快速比较器在微秒级切断FET。我抓过波形,从短路发生到VOUT跌落到零,大约6~8微秒,这个速度是分立方案难以做到的。热关断则是最后的防线,如果芯片自身温度超过约160°C,它会暂时关断,等温度降下来后再恢复或锁存,具体取决于配置。
2.4 故障输出与状态读取机制
几乎所有eFuse都有一个开漏输出的FAULT引脚,正常时是高阻,故障时被拉低。这个引脚可以直接接到MCU的外部中断引脚。PIC18F4525只要检测到下降沿,就能立刻进入中断服务函数,去读取更详细的故障原因。如果芯片支持PMBus或SMBus,还可以通过I2C读取寄存器里的故障码,区分是过压、欠压、过流、短路还是热关断。
在我们方案里,FAULT信号除了接MCU,还会同时接一个LED。这样现场工程师不用连电脑,看到LED闪烁规律就能初步判断故障类型。比如慢闪表示过压,快闪表示过流,常亮表示热关断。这种小的交互设计在现场维护时非常管用,比拿示波器测半天高效得多。
另外,PG(Power Good)状态输出也要利用起来。当VOUT上升到目标值的90%左右时,PG会拉高或拉低(看配置),这个信号可以用于后级DC-DC的Enable使能,实现真正的顺序上电。我的习惯是:用PG信号控制后级负载的启动,而不用MCU的延时,因为纯软件延时无法感知真实的电源爬升状态,容易在后级还没稳定时就提前上电导致冲击。
3. PIC18F4525 的角色:不是抢活干,而是做智能化的“哨兵”
3.1 为什么电控系统里要加一颗MCU
既然TPS259483已经能把所有保护功能都做了,为什么还要加PIC18F4525?因为工业应用要的不只是“断掉”,还有“什么时候断、断多久、断了之后怎么办、为什么断”这些策略问题。
举个例子:我们在产线上需要区分“短暂过载”和“永久故障”。负载启动瞬间电流是1.8A,持续2ms,这是在正常工作范围内的;但如果是负载卡住导致1.8A持续200ms,那就需要切断。eFuse本身可以通过延时参数实现一部分,但延时参数一旦焊成电阻,固定了,现场想改就得换板子。有了PIC18F4525,我可以通过数字接口动态修改阈值和延时,或者根据不同的工况(比如设备待机模式和运行模式)切换两套配置。这就把一颗固定的保护芯片变成了“可编程保护策略单元”。
另外,故障记录也是现场运维的刚需。以前设备坏了,我们只能到场后靠猜测,没有数据。现在PIC18F4525可以在每次FAULT触发中断后,把故障类型和发生时间存到EEPROM。下次维护人员用一根串口线或者简单的数码管菜单,就能把最近几次故障记录翻出来。这在排查“偶发性重启”类问题时,价值是不可替代的。
3.2 PIC18F4525 的外设资源,哪些此刻是必须的
PIC18F4525 是一颗40/44引脚的高性价比8位单片机,带有MSSP模块(可配置为SPI或I2C)、多个定时器、10位ADC、内部EEPROM和看门狗计时器(WDT)。在跟TPS259483配合时,我主要用到以下资源:
- 一个外部中断引脚(比如INT0/INT1)接FAULT,实现下降沿触发。
- 一个GPIO接EN(使能),用来在程序里控制电源通断,也用于故障恢复后的重新上电。
- 如果选的是带PMBus/I2C的eFuse版本,MSSP模块作为I2C主机去读写寄存器,实时读取Vin、Vout、电流和故障码。可以参考I2C总线速率为100kHz,因为工业现场线束较长,慢一点更稳。
- 内置ADC可以用来额外采集输入电压,作为对eFuse内部电压检测的冗余校验。注意PIC18F4525的ADC参考电压要接高精度基准,否则测量意义不大。
- EEPROM用来存故障记录、阈值参数和校准系数。
- WDT独立看门狗,保证即使程序跑飞,MCU还能自动复位,保护策略不会一直失效。
这颗MCU的运算能力不强,但在这个应用里足够。我们不需要做控制算法,只需要做状态机管理。PIC18F4525的优势是稳定、外设齐全、工业级货源充足。如果用ARM Cortex-M当然也可以,但对于这种“守在旁边看门”的角色,8位机反而更简单可靠,一颗MCU烧掉以后更换成本也低。
3.3 设计与分工:硬件保护靠eFuse,软件策略靠MCU
这里我要强调一个设计原则:不要把安全保护的关键路径放到MCU的软件判断里。如果你设计成“MCU检测到过流,然后控制eFuse断开”,那响应时间一定不够。正确分工是:
- 毫秒/微秒级动作:全部由TPS259483硬件完成,包括短路切断、限流、过压欠压关断、热关断。
- 毫秒级以上的策略:由PIC18F4525完成,包括阈值切换、上电时序控制、故障恢复策略、故障记录、人机交互。
举个例子:当设备发生输出短路,TPS259483会在几微秒内切断输出,同时拉低FAULT。PIC18F4525收到中断后,并不会立刻重新打开EN,而是先读取故障寄存器,将信息记录到EEPROM,然后等待1秒,再进行一次软启动尝试。如果故障消失,系统恢复;如果故障再次触发且连续发生5次,MCU就会锁死输出,并在LED上给出“需要人工介入”的指示。这套逻辑如果没有MCU,单靠eFuse的自动重试功能也能做,但灵活性差很多,无法记录尝试次数,也无法区分“暂时抖动”和“永久故障”。
这样分工还有一个好处:即使MCU的固件升级或复位期间,eFuse依然保持原有的硬件保护设置。我曾经在调试固件时,把PIC18F4525程序烧录卡在循环里,但主板依然能正常供电,没有发生任何过流灾难。这个体验让我更加确信:保护和监控要分层,不要混在一起。
4. 硬件设计:从阈值电阻到完整参考电路
4.1 关键引脚连接与电阻计算(含计算实例)
先说TPS259483的典型外部电路。芯片通常有VIN、VOUT、EN、FAULT、PG、ILIM(或ILIM/UVLO/OVP组合引脚)、SS(软启动)、GND。具体引脚命名以数据手册为准,不过思路通用。
我以设定“输入欠压9V、过压31V、过流2A、软启动5ms”为例,说明计算逻辑。芯片内部会有一个Idac电流源从ILIM引脚流出,外接电阻Rilim到GND,然后内部产生参考电压。过流阈值一般与Rilim成反比:公式大致是 I_LIM = K_ILIM / R_ILIM(具体K值查手册)。如果我需要2A,对照手册的阻值表,可能选一个100kΩ左右的电阻。注意,这里不能用普通5%电阻,要用高精度低温漂电阻(最好1%或更低,25ppm/°C以下),否则过流阈值可能偏差超过设计裕量。
欠压和过压阈值通过两个电阻分压到UVLO/OVP引脚。先把引脚参考电压Vref从手册查出(通常1.2V或类似),然后根据分压公式:
- V_UVLO = Vref * (1 + R1/R2_uv),前提是引脚输入是高阻。
- V_OVP = Vref * (1 + R3/R4_ov)。
为了提高精度,分压电阻的阻值不要选太高的兆欧级,会引入噪声和漏电流误差;也不要太低,会增加损耗。我一般分压网络总电阻设计在几kΩ到几十kΩ之间。比如R1用75kΩ,R2用10kΩ,那么V_UVLO = 1.2 * (1 + 7.5) = 10.2V,再根据实际电阻精度微调。但计算完不要直接相信,必须结合实际负载下的电压测试,用电压源扫描输入电压,找出实际保护动作点,再微调电阻。
软启动时间由SS引脚外接电容决定。手册上一般会给出一个充放电电流I_SS,然后 T_SS = C_SS * V_SS / I_SS。我选5ms左右,用常见的10nF电容,上电后VOUT爬坡平稳。如果负载电容特别大,记得加大SS电容,但加得太大也会让系统上电时间过长,不适用于需要快速响应的设备。
4.2 PIC18F4525 与 TPS259483 的接口对接
PIC18F4525工作电压是5V,而TPS259483的通信引脚如果是PMBus/SMBus,可能兼容3.3V或5V逻辑,需要确认。如果逻辑电平范围不匹配,可以在I2C线上加电平转换或直接选用5V兼容型号。我在最初一版设计时没注意这一点,直接把1.8V逻辑的电平转换芯片省了,结果I2C通信时偶尔丢包,后来查了时序才知道是电平不匹配造成的。
具体连接方式:
| PIC18F4525引脚 | 方向 | TPS259483引脚 | 作用 |
|---|---|---|---|
| INT0/RB0 | 输入 | FAULT | 故障中断检测 |
| RA0 | 输出 | EN | 使能/复位电源路径 |
| RA1 | 输入 | PG | 电源正常状态监测 |
| SCL/RC3 | 输出 | SCL | I2C时钟 |
| SDA/RC4 | 双向 | SDA | I2C数据 |
| VSS/GND | - | GND | 共地 |
另外,FAULT是开漏输出,需要外部上拉电阻到MCU的VDD。上拉电阻我一般选4.7kΩ到10kΩ。如果现场干扰强,可以在FAULT线对地并联一个3.3nF电容做RC滤波,但要注意这个电容会引入延迟,如果响应速度要求特别高,就必须要小一点,比如1nF。
EN引脚最好不要直接悬空或直接接VIN,而要让MCU可控。上电初始阶段,MCU还没初始化时,EN应该是默认关断状态。为此,在EN引脚和MCU GPIO之间加一个下拉电阻(比如10kΩ到地),同时MCU上电后先设置为输出低电平,等程序就绪后再拉高使能。这样能避免MCU复位期间系统突然上电,导致后级随机启动。
4.3 电源与PCB布局要点:差一点就重启
eFuse工作在高电流路径上,布局直接影响性能和EMI。第一原则是“输入电容靠近VIN、输出电容靠近VOUT”。输入电缆如果较长,它的寄生电感在负载短路瞬间会产生电压尖峰,严重时可能击穿eFuse的VIN脚。所以输入就要放一组低ESR的陶瓷电容(比如22µF陶瓷)紧贴VIN引脚,并在更靠近引脚处再放100nF的高频去耦,形成低阻抗路径。
第二是电流路径要粗短。走线宽度应按预期电流计算,1.2A额定电流不算大,但短路瞬间的di/dt可能很高,所以主路径用加宽铜箔甚至敷铜处理。我习惯把输入和输出的高电流路径分别铺铜,并且尽量避免在它们之间穿过任何控制信号线,避免磁场串扰。
第三是地平面。PIC18F4525的模拟地和功率地不要混接。虽然这不是高精度测量系统,但eFuse开关过程中会产生地弹噪声。我采用单点接地策略:eFuse及输入输出电容的下方用独立的小地岛,然后通过一个过孔阵列接入主地平面;MCU的地参考点单独引出。这样MCU的地电位不会被负载电流拉偏,I2C和FAULT信号也会更稳定。
最后是散热焊盘。TPS259483AYWPR的大焊盘不要只用一个过孔接底层地,最好用5×5的过孔阵列,每个过孔直径0.3mm,增强热传导。我第一版偷懒只打了4个过孔,结果满载运行半小时后芯片温度比第二版高了将近15°C,这个差距在工业高温环境下可能直接触发热关断。
5. 软件实现:让保护功能可配置、可追溯
5.1 初始化与阈值切换逻辑
固件程序的结构不复杂,但必须清晰。上电后PIC18F4525先完成自身初始化,再把EN拉低,保证eFuse输出关闭。然后通过I2C读取eFuse的ID寄存器,确认通信正常。接着根据当前工作模式写入阈值配置:比如待机模式下过流阈值1.5A,运行模式下过流阈值2.5A。如果芯片不支持数字配置,那就得通过模拟电阻切换实现,比如用MCU的GPIO控制继电器或模拟开关切电阻。数字配置显然更优雅。
初始化完成后,MCU把FAULT中断使能,再将EN拉高,开始监控。
下面是一个简化版的初始化伪代码:
void protect_init(void) { // 配置GPIO TRISBbits.TRISB0 = 1; // FAULT输入 TRISAbits.TRISA0 = 0; // EN输出 TRISAbits.TRISA1 = 1; // PG输入 EN = 0; // 先关断输出 // 配置I2C主机 I2C_Init(100000); // SMBus/PMBus通常100kbps // 读取eFuse ID uint8_t id = TPS_ReadByte(REG_DEVICE_ID); if (id == EXPECTED_ID) { // 设置过流阈值、OVP/UVLO延时等参数 TPS_WriteByte(REG_ILIM, ILIM_CONFIG); TPS_WriteByte(REG_PROTECT, OVP_EN | UVLO_EN | OC_MODE); } // 设置故障中断 INT0_RisingEdge_Disable(); INT0_FallingEdge_Enable(); INTCONbits.PEIE = 1; // 使能外设中断 INTCONbits.GIE = 1; }注意这里不要试图在初始化时把所有寄存器一次写完,最好每写一个寄存器就读回校验,防止I2C时序被干扰。我遇到过因为初始化期间瞬间大电流导致SDA被意外拉低,如果没有校验,后面状态全乱了。
阈值切换不能“一瞬间”发生。如果系统正在带2.3A负载,你突然把过流阈值从3A降到1.8A,即使是一瞬间,也可能会触发误保护。所以切换策略时,要先将eFuse置于“不使能”或“允许短暂过流”状态,再修改阈值,最后恢复。在工业现场,负荷切换最好还是在设备空闲时进行。
5.2 故障中断响应与状态读取
发生故障时,FAULT引脚下降沿触发PIC18F4525外部中断。中断服务函数要做的事越少越好,我的处理方式是:
- 中断里只做一件事:设置一个全局标志位 fault_flag,并记录当前系统时间戳。然后退出中断。
- 主循环检测到fault_flag后,读取故障寄存器,判断故障类型。
- 从EEPROM里读出故障历史记录,将新记录写入下一个存储槽,记录内容包括故障类型、温度、时间戳。
- 根据故障类型决定恢复策略。
为什么不在中断里直接读I2C?因为I2C通信不够快,而且中断里等待应答会影响其他时序。更重要的是,如果故障是过流引起的,在中断里去读寄存器,I2C读写过程可能又产生一些边沿噪声,干扰系统恢复。放到主循环里处理,时间多几百微秒,完全来得及。
读取故障状态时,要注意某些eFuse的寄存器是“自清”的:读之后自动清除故障标志。我犯过一次错误,中断触发后先读了一个寄存器,然后又想去读另一个,结果第二个寄存器里的故障码已经变成了0。正确的做法是先把所有有效寄存器一口气读回来,存到本地变量,再统一解析清标志。
恢复策略举一个实际例子:当故障类型是“过温”,说明环境温度可能过高,此时不能马上自动恢复,应等待足够长的时间再尝试;当故障类型是“欠压”,说明输入电源本身有问题,MCU应该通知上位机,并每隔5秒尝试一次;故障类型是“过流”或“短路”,且连续发生3次,则锁定输出,不再自动恢复,必须人工断电或者通过外部命令解除锁定。这套逻辑可以避免现场设备反复启动、反复损坏。
5.3 简易故障记录功能(EEPROM存储)
PIC18F4525有内置EEPROM,大约1KB,足够记录故障日志。我的存储格式是固定结构体:每条日志占8字节,分别为序号、故障码、小时、分钟、温度值。按最多100条记录设计,正好占用800字节,剩余空间存设备ID和配置校验和。
写入EEPROM前要关闭全局中断,防止写入期间被打断。EEPROM擦写寿命是有限制的,工业设备如果每几小时就触发一次故障,长期频繁写入会把EEPROM写坏。所以我会做“同故障合并”策略:如果距上次故障不超过10分钟且故障码相同,则只更新时间戳,不增加记录条数;超过10分钟才写入新记录。这样既保留了故障频率信息,又延长了EEPROM寿命。
读回日志时,我在串口命令里加了一个简单的协议,比如发送“LOG”,返回所有记录;发送“CLR”,清除记录。现场调试人员不用拆机,拿一条USB转串口线连接调试口就能查看。
这里分享一个细节:故障记录虽然重要,但不要让它成为系统的负担。有一次客户反馈设备“偶发重启”,我们根据日志发现之前发生过短暂的热关断,于是把散热改善之后问题就消失了。如果没有记录,这种偶发问题可能来回排查几周都找不到根因。所以,让智能保护系统自己“说话”是很有价值的。
6. 实测与避坑:启动冲击、误保护、EMI那些坑
6.1 上电瞬间为何会误报过流,怎么解决
第一次联调时,我们信心满满地给板子上电,结果系统一上电就触发了一次过流保护。示波器一看,eFuse的输出VOUT爬坡到一半时被切断。原因很简单:后级DC-DC的输入电容太大,软启动时间设得又太短,即使VOUT爬坡,DC-DC的输入还没稳定,就开始吸取大电流,和eFuse的过流检测叠加起来,触发了保护。
解决方式有好几种。最简单的是把软启动时间延长。我最初设置5ms,改为10ms后,上电冲击电流明显下降。但注意不能无脑延长,工业控制有时要求快速启动,太长会导致时序超时。第二种方式是修改过流阈值在启动期间“临时放宽”:利用MCU在启动阶段(比如100ms)写一个更高的过流阈值,启动结束后再恢复标准阈值。这种方式有效,但一定记得超时后要把阈值恢复,否则等于削弱了保护。第三种方式是先对后级电容预充电:通过一个大电阻或限流路径先给电容充到一定电压,再闭合主通路。这个方案多用了元件,但效果最好。我们权衡后用了方案一+方案二的组合:软启动10ms,启动期间过流阈值从3A坚持500ms,然后切回2A。实测下来不再误报。
6.2 阈值设置与容差分析的实际经验
理想情况下,把过流阈值设置在额定电流的1.5到2倍就够。但现实是,电阻有精度误差,芯片比较器有失调,甚至过流检测电路在不同电流下的精度也不同。我遇到过设计时用1%电阻预期2A阈值,实际过流动作点2.14A,超出预期7%。这还不算温度漂移。
所以我的经验是:不要照着理论极限设计,一定要留足裕量。比如负载最大1.2A,过流阈值不该设在1.3A,建议至少2A。对于需要精确保护的场合,可以用MCU的ADC实时读取负载电流(通过eFuse的电流监视输出或外部采样电阻),并根据实际电流去校准过流阈值寄存器。这样就能把“标称值”变成“实际值”。
另外,欠压阈值要注意整机供电的跌落。如果输入电源本来就有1V的纹波,你把欠压阈值设到22V,正常运行时不时的纹波就能触发保护。我习惯于把UVLO阈值至少低于最低工作电压1V以上。例如标称24V,最低工作电压可能只有20V,那UVLO设到17V左右比较安全。过压阈值则要高于最高瞬态值,但不能超过芯片的最大额定电压。
6.3 工业现场的噪声干扰与滤波设计
工业现场可以说是EMI的试炼场。变频器、开关电源、继电器通断都会在电源线上感应出高频噪声。eFuse的保护比较器带宽很宽,噪声很可能让FAULT产生毛刺,错误地触发中断。
我们曾经遇到一个现象:设备在车间里运行正常,但每当旁边的变频器启动时,系统会偶发性地重启。后来抓FAULT信号,发现上面叠加了一串几伏的负尖峰,超过了MCU引脚的绝对最大额定值,导致MCU复位。解决方法是:在FAULT和MCU之间增加一个RC低通滤波器,同时并联一个小电容到地。此外还要检查柜体的接地,确保电源0V和大地之间的高频阻抗足够低。
如果eFuse支持数字配置,还可以调整故障响应时间,故意屏蔽掉一些非常窄的瞬时干扰。但这里有个平衡:响应慢了,真正短路时可能要多承受一段电流能量;响应快了,又容易误报。对于24V工业系统,我通常把过流检测的消隐时间(filter time)设在20~50µs左右,既能滤掉大部分噪声毛刺,又不至于在短路时反应太慢。
最后再说一个接地细节:很多工业设备把24V电源的0V与保护地PE连接,但MCU的信号地是浮地的。这种情况下,I2C的SDA/SCL线在长距离时会引入地环路噪声。我建议在数字接口线上加小型共模电感,或者将I2C总线速度降到10kbps,能明显改善稳定性。如果产品需要过认证,还应该在电源输入端留出TVS和前级共模扼流圈的位置,即使你暂时不焊,也要预留封装位。
做完整套方案下来,我的最大体会是:电源路径保护不是“加个保险丝”那么简单,而是要在硬件速度、软件策略、EMI防护之间做平衡。TPS259483AYWPR负责把硬件保护的底线守住,PIC18F4525再把它变成一颗“懂事”的电源管家。这套架构看起来不起眼,但在工业设备漫长的生命周期里,能少烧好几块板子,也少让现场的工程师半夜爬起来处理故障。希望上面的电路思路和调试经验能给你的设计省一些弯路。