我最近在给一套便携数据采集设备做整机供电链路,主控选了 PIC18F4525,电源侧则用了 PCA9422 这颗电源管理 IC。一开始群里也有人问:电源管理用一堆 DC-DC 加 LDO 不是也能拼出来,为什么要多加一颗 PMIC,还逼着写驱动?等我真正把 PCA9422 和 PIC18F4525 连起来跑完以后,才意识到“完整电源管理”真不是一个口号。上电时序、多路电压轨、电池充放电、过压欠压保护、故障上报,这些事情靠分离器件硬凑,调试阶段会让你非常痛苦。这篇文章就是我这次实践的完整记录,从选型逻辑讲到硬件连接,再讲到 I2C 配置和电池保护策略,最后把我实际踩过的几个坑原原本本列出来,给正在做类似电源系统的朋友做个参考。
1. 为什么把 PCA9422 和 PIC18F4525 组合在一起:电源方案的选型逻辑
1.1 系统对电源的真实需求是什么
动手画原理图之前,我先把设备的供电需求列了一下。整机内部有几类负载:MCU 和外围数字电路需要稳定的 3.3V;一片传感器模拟前端需要干净的 2.5V,纹波必须控制在 30mV 以内;还有一片存储和接口逻辑需要 1.8V。整机用锂电池供电,同时支持 USB 或者适配器输入,也就是说既要做好电池充电管理,又要保证无论插不插外电,系统都能平滑切换。
这个需求看起来不复杂,但有几个点会直接影响方案选型:一是电压轨数量多,至少三路主电源加一路充电通路;二是上电顺序有硬约束,数字核心电源不能先于 IO 电源起来,否则 MCU 的钳位二极管会出现异常灌电;三是整机有低功耗场景,待机时希望大部分电源轨能关断,只留 MCU 和事件检测电路;四是安全保障,过压、欠压、过温都要能在固件层感知,并自动做出反应。
这些需求叠加在一起,分离方案不是不能做,但工程量会暴增。每一路 DC-DC 都需要独立反馈电阻、使能控制、缓启动、时序控制电路,四路就是四套外围。而且故障检测基本要靠 MCU 自己上 GPIO 配合 ADC 去猜,实时性和可靠性都不理想。所以我把目光转向了“PMIC 做电源执行、MCU 做管理决策”的架构。
1.2 PCA9422 与 PIC18F4525 的角色分工
PCA9422 在这套系统里扮演的是“多路电源输出中枢”。我手里这颗样片内置多路降压转换器,输出电压可以通过寄存器编程,各路有独立的使能、软启动、限流和电源良好指示;它还支持可编程的上电时序,能把不同电压轨的启动顺序固化在配置表里。前面说的 3.3V、2.5V、1.8V 可以直接从它这里拉出来。对 PMIC 来说,这种多路输出还只是基本功,它更核心的价值在于集成了保护功能和低功耗模式,故障时能主动拉起中断通知主控。
PIC18F4525 的角色则是“电源管理大脑”。它通过 I2C 总线去配置 PCA9422 的输出电压、时序和保护阈值,再通过中断引脚接收 PCA9422 上报的故障信号,然后根据设备的运行状态做出响应。电池的充电策略、温度监测、低电量关机这类逻辑也需要 MCU 来做。简单说,PCA9422 是配电房里的那些开关和保护装置,PIC18F4525 就是那个拿着对讲机的物业管理员,谁跳闸了它要知道原因,还要决定要不要把某一路重新合闸。
1.3 为什么不直接堆分离 DC-DC 方案
很多工程师朋友一听到 PMIC 就觉得成本高、灵活性差,这个判断在某些场合成立,但要看具体项目。我做了一张对比表,把分离方案和 PMIC 加 MCU 方案放在一起看:
| 维度 | 全分离 DC-DC + LDO 方案 | PCA9422 + PIC18F4525 方案 |
|---|---|---|
| 功率器件数量 | 每路至少 3~5 颗外围 | 单颗 PMIC 集成多路 |
| 上电时序实现 | 依靠 RC 延时和使能链 | 寄存器配置,顺序可改 |
| 动态调压(DVS) | 需要改反馈电阻或加 DAC | 软件直接改写输出电压寄存器 |
| 故障检测 | 需要独立比较器电路 | 内置保护,INT 引脚通知 MCU |
| 待机功耗控制 | 需要多个 GPIO 分别关断 | 统一通过 I2C 控制电源模式 |
| 物料和备料复杂度 | 高 | 低 |
| PCB 面积 | 大 | 小 |
这么一对比就很清楚了。对于电压轨少、时序要求松、又不太在乎板子面积的定向板子,分离方案完全够用,成本可能还低一些。但像这次这种多路电源轨、有电池、有低功耗需求、还要可远程查故障状态的设计,PCA9422 这种可配置 PMIC 带来的收益远大于多出来的一点点成本。
2. 硬件连接与电源架构:从前端输入到多路输出的实际走法
2.1 电源树规划
硬件设计的第一步是把电源树画清楚。我这里输入用的是 5V 适配器和锂电池两个来源,适配器通过理想二极管逻辑优先供电,锂电池作为备用。5V 进入 PCA9422 后,由内部降压转换器生成 3.3V、2.5V 和 1.8V 三路输出。PIC18F4525 本身的 VDD 直接接在 3.3V 上,ADC 参考电压也用 3.3V,不需要额外供参考源。
电源树规划的原则我是按“数字电源优先、模拟电源其次”的顺序做的:3.3V 供 MCU 和数字逻辑,2.5V 供模拟前端,1.8V 供存储接口。为什么要这个顺序?因为模拟前端在开始工作前,需要 MCU 先把 I2C 和配置引脚拉正确;而 MCU 本身又依赖 IO 电源先行建立。如果 1.8V 先上、3.3V 后上,MCU 的 IO 引脚就可能通过寄生二极管往电压低的轨灌电,轻则复位异常,重则损伤引脚。
具体负载电流估算如下表,这个表是用来核对每路输出限流设置和电容选型的,不能拍脑袋随便填:
| 电源轨 | 主要负载 | 估算最大电流 | 纹波要求 |
|---|---|---|---|
| 3.3V | PIC18F4525、存储器、电平转换器 | 500mA | < 50mV |
| 2.5V | 模拟前端、基准源 | 150mA | < 30mV |
| 1.8V | 高速接口、EEPROM | 100mA | < 50mV |
2.2 关键引脚连接与注意事项
PCB 原理图上,PCA9422 和 PIC18F4525 之间我主要接了四类信号:电源、I2C、中断、使能控制。
电源连接不算复杂,关键是每路输出的滤波电容位置。PCA9422 的输出引脚应该先经过小容量的陶瓷电容到 GND,再进入负载区域。输入端的 5V 又有大电解电容并联陶瓷电容,电解电容负责扛住输入瞬态,陶瓷电容负责滤高频。位置关系上,陶瓷电容一定要尽量贴近电源芯片输入引脚,这个细节很多人忽视,后面调试纹波超标的坑跟这个直接相关。
I2C 由 PIC18F4525 的 MSSP 模块引出,硬件上占用 RC3 作为 SCL、RC4 作为 SDA。这两个引脚是开漏结构,所以必须接上拉电阻。板子上我预置了 4.7k 贴片电阻位,以便后面调试时更换。需要注意的是,PCA9422 侧可能也有自己的上拉,连接时要把总线上的并联等效上拉估算一下,太快或太慢都会导致通信异常。命令通信频率先按 100kHz 跑,稳定性比速度重要。
状态和中断信号方面,PCA9422 的电源良好输出 PGOOD 接到了 PIC 的一个普通 GPIO 上,用于轮询供电是否正常;它的中断输出 INT 接到了 PIC18F4525 的 INT0 引脚,也就是 RB0。INT 是低电平有效,故障时被拉低,PIC 通过 RB0 的外部中断进入服务程序。这里有个细节,INT0 配置成下降沿触发还是低电平触发要想清楚,PCA9422 的 INT 是持续拉低还是脉冲短拉低,不同芯片实现不一样,我实际调试时发现如果配置错误会漏掉中断,后来改成低电平模式配合定时查询才稳妥。
2.3 上电时序怎么理清
PCA9422 支持可编程的上电时序,这是它比分离方案省事很多的地方。时序设计的核心逻辑是:必须保证每一路输出在下一路启动时已经稳定,并且不能出现后级反过来向前级供电。
我的配置顺序是 5V 输入建立后,先启动 3.3V,等 3.3V 稳定后延时 1ms 再启动 2.5V,最后启动 1.8V。为什么中间加 1ms 延时?因为 DC-DC 的软启动需要时间,输出电压上升斜率不是瞬间阶跃,如果后一路在前一路还没稳定时就开,可能出现瞬态过冲。PIC18F4525 的 MCLR 复位电路也做了 RC 延时,确保在 3.3V 完全稳定之后 MCU 才从复位状态释放,开始执行固件。
在 PCA9422 上配置时序有两种途径:一种是通过寄存器写入上电序列表,让 PMIC 硬件自动完成;另一种是只用各路使能引脚,由 MCU 的 GPIO 按软件顺序打开。我最终选了寄存器配置的方式,因为这样即使 MCU 死机,PMIC 也能按独立时序输出,整机的上电安全性不依赖固件是否正常运行。这一点在设备固件升级失败时尤其重要——至少电源系统不会跟着一起锁死。
3. PIC18F4525 驱动 PCA9422 的关键寄存器操作与 I2C 时序
3.1 MSSP 模块初始化
PCA9422 的控制接口支持 I2C 通信。PIC18F4525 内部有 MSSP 模块,可以把引脚配置成 I2C 主机模式,不需要外加协议转换芯片。我用的开发环境是 XC8 编译器,I2C 初始化代码大致如下:
#define _XTAL_FREQ 4000000 void I2C_Init(unsigned long bitrate) { TRISCbits.TRISC3 = 1; // SCL 输入 TRISCbits.TRISC4 = 1; // SDA 输入 SSPSTATbits.SMP = 1; // 标准速度模式 SSPCON1 = 0x28; // 使能 MSSP, I2C 主机模式 SSPADD = ((_XTAL_FREQ / 4) / bitrate) - 1; // 位速率 }初始化里最容易错的地方是 TRISC 的设置。MSSP 模块虽然负责收发,但引脚方向寄存器必须配置成输入,I2C 的拉低是靠开漏输出实现的,你不能主动把引脚置成强输出高电平,否则会和外部上拉打架。另外 SSPADD 的计算公式依赖系统时钟频率,如果你用的是 4MHz 内部振荡器,那算出来和 8MHz 外接晶振是完全不同的,务必按实际时钟源填写。
配套的基础读写函数我也一并写出来,这几个函数在后续所有配置里都会反复用到:
void I2C_Start(void) { SSPCON2bits.SEN = 1; while(SSPCON2bits.SEN); } void I2C_Stop(void) { SSPCON2bits.PEN = 1; while(SSPCON2bits.PEN); } void I2C_WriteByte(uint8_t dat) { SSPBUF = dat; while(SSPCON2bits.WCOL); // 等待写完成 } uint8_t I2C_ReadByte(void) { SSPCON2bits.RCEN = 1; while(!SSPCON2bits.RBF); return SSPBUF; }3.2 PCA9422 寄存器配置流程
PCA9422 内部寄存器负责输出电压档位、限流、时序、保护阈值、中断使能等配置。下面这段代码展示的是我项目中的配置流程,地址和具体值以手头型号对应版本的数据手册为准,这里重点是逻辑顺序:
uint8_t PMA_WriteReg(uint8_t regAddr, uint8_t val) { I2C_Start(); if (!I2C_WriteByte(PCA9422_SLAVE_ADDR << 1)) return 1; I2C_WriteByte(regAddr); I2C_WriteByte(val); I2C_Stop(); return 0; } void PMA_Init(void) { // 1. 软件复位,让 PMIC 回到默认状态 PMA_WriteReg(0x00, 0x80); __delay_ms(10); // 2. 配置 3.3V 输出:电压档位、软启动时间、限流值 PMA_WriteReg(0x03, 0x32); // 3. 配置 2.5V 输出 PMA_WriteReg(0x05, 0x30); // 4. 配置 1.8V 输出 PMA_WriteReg(0x08, 0x28); // 5. 写上电时序寄存器 PMA_WriteReg(0x10, 0xE4); // 6. 全局使能输出 PMA_WriteReg(0x01, 0x07); }配置流程里有几个值得注意的点。软件复位之后必须留出足够的等待时间,我实测给 10ms 比较稳妥,有的 PMIC 复位后内部模拟模块重新校准,这个时间短了后续写寄存器会丢。配置输出电压时,低位通常还包含 DVS 使能或模式选择,最好在写电压档位之后再把电压值和期望值回读一遍,防止 I2C 通信偶发丢字节导致整板电源异常。我在校验环节有吃过教训,后面调试篇会细说。
3.3 中断处理与状态监控
PCA9422 在发生过压、欠压、过温、限流等事件时,会把 INT 引脚拉低,并锁定对应的中断状态位。PIC18F4525 这边需要做两件事:响应外部中断、读取并解析故障寄存器。
中断服务程序可以参考这个框架:
volatile uint8_t pma_fault_flags; void __interrupt() high_isr(void) { if (INT0IF) { INT0IF = 0; // 清除标志 pma_fault_flags = PMA_ReadReg(PCA9422_STATUS_REG); // 根据 pma_fault_flags 的位判断是哪类故障 } }这里不能只读一次状态就完事。PCA9422 的许多故障位是锁存型的,中断服务程序里要做两件事:一是把故障信息记录到全局变量,供主循环处理和上报;二是写清除命令把对应中断标志位清掉,否则 INT 引脚会一直被拉低,后续新故障根本无法触发新的中断。我习惯在故障处理完成后,再主动读一次状态寄存器,确认故障源确实已经清除。
主循环里,我会每 200ms 主动查询一次 PGOOD 输入和 PCA9422 的关键状态寄存器,而不只是依赖中断。这样即使某些故障因为时序问题没有成功触发中断,轮询也能兜底发现。中断负责快速响应,轮询负责可靠收敛,两条腿走路。
4. 电池管理、中断保护与欠压关断的设计细节
4.1 充电状态机实现
这套设备用的是单节锂电池,标称 3.7V,充电目标电压 4.2V。PCA9422 本身没有内置充电控制器,所以充电策略我放在了 PIC18F4525 侧,通过一路 PWM 控制高边 PMOS 开关,配合电流采样电阻做恒流恒压控制。PCA9422 在这里的职责是把 5V 输入稳定成适合充电的中间母线电压,降低充电回路自身的功耗。
充电过程分四个阶段:预充、恒流充电、恒压充电、终止。预充阶段用于电压已经掉到 3.0V 以下的深度放电电池,必须用很小的电流先把电池恢复到安全电压区间,否则大电流充电存在风险。状态机切换条件用 ADC 实时采样的电池电压和充电电流判断,代码逻辑如下:
typedef enum { CHG_PRECHARGE, CHG_CC, CHG_CV, CHG_DONE } chg_state_t; chg_state_t battery_charge_step(chg_state_t cur) { float vbat = read_battery_voltage(); float ichg = read_charge_current(); switch (cur) { case CHG_PRECHARGE: set_charge_current(50); if (vbat > 3.0f) return CHG_CC; break; case CHG_CC: set_charge_current(1000); if (vbat >= 4.15f) return CHG_CV; break; case CHG_CV: set_charge_current(0); // 转为电压环控制 if (ichg < 100) return CHG_DONE; break; case CHG_DONE: if (vbat < 3.9f) return CHG_CC; // 重新补电 break; } return cur; }状态机看起来简单,真正麻烦的地方在于反馈环路的稳定性。恒流阶段靠调节 PWM 占空比控制充电电流,恒压阶段转成调节输出电压限制,两个模式切换时如果 PI 参数切换不顺滑,电池电压会出现来回振荡。我当时用了一组离散 PID,切换瞬间把积分器清零,再重新累积,这样过渡平稳很多。
4.2 电压电流温度采样与滤波
PIC18F4525 自带 10 位 ADC,采样电池电压、充电电流、NTC 温度三个信号绰绰有余。电池电压采样通过电阻分压,我选 100k 和 100k 两个高阻电阻,把最高 4.5V 的电池电压衰减到 2.25V,留出一定裕量。换算公式是 Vbat = raw × 3.3 / 1024 × 2。电荷电流用低边采样电阻加运放放大,采样电阻 10mΩ,满量程 2A 时压降只有 20mV,必须放大后再进 ADC。
ADC 这里最需要注意的是采样窗口和滤波。直接读原始值做控制,均衡负载一拉,电压瞬间跌落会被当成电池老化,电量显示忽高忽低。我在工程里写了滑动均值滤波,窗口取 16 个采样点:
uint16_t adc_smooth(uint8_t channel) { static uint16_t buf[4][16]; static uint8_t idx[4]; uint32_t sum = 0; buf[channel][idx[channel]] = read_adc_raw(channel); idx[channel] = (idx[channel] + 1) & 0x0F; for (uint8_t i = 0; i < 16; i++) sum += buf[channel][i]; return (uint16_t)(sum / 16); }滤波窗口太大反应慢,窗口太小滤不掉干扰。16 个点是平衡后的结果。对温度采样我还会额外做一次异常值剔除,如果某次采样结果与前次差太多,直接丢弃,防止电机或继电器动作时的电磁干扰把 NTC 读数打成离谱值。
4.3 欠压保护与异常恢复
电池欠压保护是电源管理里最容易出问题的部分。阈值设太高,电池还有电就被强制关机,用户体验差;阈值设太低,电池过放,寿命快速衰减。我这边定的是:3.2V 进入欠压警告,只提示不动作;3.0V 进入欠压关断,关闭除 MCU 外的所有电源轨,整机进入低功耗待机;2.9V 强制系统关机,PMIC 也进入待机模式。
欠压保护必须处理一个问题,就是“打嗝”现象。当电池电压刚好在阈值附近波动时,系统可能反复进入、退出关断状态,继电器和电源轨来回切换会加速器件损耗。我的做法是加迟滞区间:进入欠压关断需要电压低于 3.0V,而恢复供电需要电压回升到 3.4V 以上。这个 400mV 的迟滞区间很大,目的就是保证不会来回跳。
恢复逻辑方面,系统进入关断后会锁存状态,一直等到检测到外部 5V 输入接入,或者用户按下实体按键触发唤醒,才重新允许 PMIC 上电。这样做还有一个考虑:如果电池已经深度放电到 2.9V,恢复瞬间各电源轨同时启动,启动浪涌电流可能把电池电压再拉低一截,进入“永远起不来”的死循环。所以在重新上电前,我会先让系统保持 CPU 休眠 500ms,让电池极化效应稍微缓解,再打开电源轨,成功率明显提升。
5. 实测调试中的波形问题与踩坑记录
5.1 坑一:I2C 偶发无响应,最终指向上升沿过缓
第一版板子调出来以后,I2C 通信时不时就丢一个字节,具体表象是写寄存器后回读校验失败。我先怀疑是时序问题,于是把 I2C 速率从 400kHz 降到 100kHz,现象缓解但没根治;又怀疑是接触问题和虚焊,拿了放大镜逐个点检查也没发现异常。
最后上示波器量 SCL 和 SDA 波形才发现,两根线的上升沿非常缓慢,从低到高拉长到了微秒级。原因是上拉电阻 4.7k 对总线电容来说偏大,下降沿是芯片主动拉低没问题,上升沿就全靠上拉电阻慢慢充电,等效于把时序周期吃掉了一大截。低速时还能蒙混过关,400kHz 时直接超时。解决方式是换上 1k 上拉,重新量波形,上升沿恢复正常,问题消失。
这个坑的教训是:I2C 总线稳定性大于速度,设计阶段就把上拉阻值按实际总线电容算好,别在焊接后再猜。总线上挂的设备多、走线长,就选更小阻值,功耗和速度的取舍要提前评估。
5.2 坑二:PIC 反复复位,原因是上电时序
第二版抓上电瞬间波形的时候,发现一个特别诡异的现象:插上电源的瞬间,PIC18F4525 的复位引脚有一颗毛刺,MCU 起来一秒后又复位,反复几次才正常,严重时直接锁死在复位状态。
排查链路:先用示波器同时抓 3.3V 和 MCLR 引脚,发现 MCLR 上的毛刺跟 3.3V 建立过程不是同步的。再抓 PCA9422 的输出,发现 1.8V 先于 3.3V 建立。问题找到根源了:PCA9422 的上电时序配置没有成功写入,PMIC 按默认时序先启动了低电压轨,1.8V 先上电后,通过 PIC 的钳位二极管给还没建立的 3.3V 轨道灌电,造成电源域混乱,MCLR 被拉出毛刺。
解决方式分两步:第一,重新核对寄存器配置,确认上电时序数值没有被别的初始化代码覆盖;第二,在 MCLR 引脚加一个 10k 上拉加 100nF 电容到地的 RC 延时,保证 3.3V 稳定后 MCU 才离开复位状态。实测改完以后,反复复位的问题再没出现。
5.3 坑三:输出电压纹波超标是布局问题
模拟前端接上以后,ADC 输出数据噪声明显偏大,频谱上能看到明显的电源纹波耦合。用示波器量 PCA9422 的 3.3V 输出,纹波有 100mV 峰值,远高于我的 50mV 目标。我一开始走入了“输出电容不够就加电容”的思路,结果并了两个大容量电解电容也不见好,说明问题不在电容容值。
后来把布局图重新翻出来才意识到,输入电容离电源芯片引脚太远,功率回路的环路面积巨大,开关电流在地平面上激起的地弹噪声全串到了输出。处理方法是把输入端的 10uF 陶瓷电容移到紧贴电源芯片引脚的位置,输出电容也尽量靠近负载端,再用铜皮把功率地回路缩短。重新打样后纹波降到 18mV 左右,效果立竿见影。
这个坑确实值得单独记录。电源芯片的布局,先解决环路面积,再调电容参数,顺序反了你可能白干好几版。
5.4 坑四:电池电量跳变,问题在采样策略
系统在带负载运行的时候,电量百分比会突然从 70% 跳到 50%,过一会儿又跳回 65%。一开始我怀疑是电量计算算法问题,还专门换了不同的开路电压标定表,都不理想。
后来意识到,负载突变时电池内部有内阻压降,ADC 采到的电压瞬间跌落,而我的电量映射函数是单调的,就把瞬时低压直接映射成了低电量。解决方式就是前面提到的滑动平均滤波加一个全局性的“电压回稳窗口”:当检测到负载电流突变时,电量计算模块暂停更新 500ms,等电压稳定再按采样值计算。这相当于给人眼的视觉残留原理,用软件去抵抗物理层面的瞬态响应。
改完之后电量显示稳定很多,而且没有再误报低电量。经验是:ADC 采样是物理量的映射,但控制策略一定要理解物理量背后的工况,不能拿静态标定去套动态场景。
6. 经验总结:PCB 布局、参数整定与后续扩展
6.1 PCB 布局三条硬经验
整板做下来,我对 PMIC 和 MCU 协同设计的硬件布局有了更清晰的认知。三条硬经验,供参考:
第一,功率回路尽量小。PCA9422 的输入电容要紧贴电源芯片的 VIN 和 GND 引脚,应该在地层上直接打孔连接,不要走长线引到公共地。开关节点铜皮不要铺得过大,SW 节点本身是高频开关点,铺铜面积大只会增大辐射和寄生耦合。
第二,模拟地和功率地分区。模拟前端的地、MCU 数字地、PCA9422 功率地要划分清楚,再用单点连接的方式汇合到电池负极主地。我在首版就是没有注意这个,导致 ADC 采样结果被开关噪声污染,后来用 0Ω 电阻做了单点连接才解决。
第三,采样电阻要用开尔文接法。电池电流采样的低边采样电阻,采样线必须直接从电阻两端引到运放,不要把他们和电源走线放在同一路径上。否则采样线上叠加主电流路径的压降,电流读数会有系统性偏差,而且这个偏差很难在软件里完全校准掉。
6.2 还可以继续扩展的方向
这个电源系统跑通之后,我后续至少看到三个可以顺手推进的方向。
方向一是动态电压调节(DVS)。设备负载较轻的时候,可以把主处理器电压从满负荷所需的数值往下调,降低整机功耗。PCA9422 本来就支持通过 I2C 改写输出电压寄存器,PIC18F4525 只需要根据当前任务负载决定是否调压,代码层面就是两条写寄存器语句,但系统功耗优化收益很明显。
方向二是远程监控。把 PCA9422 的中断状态、电池电压、充电电流这些信息通过串口或者无线模块定时上报,运维侧就能提前发现问题。这个我做了一半已经能跑通,关键是上报的数据要做归一化处理,直接裸传寄存器原始值的话,后端解析成本太高。
方向三是待机模式的细化。目前整机低功耗待机已经能做到微安级别,但还能继续压榨。比如把 PCA9422 的电源模式寄存器按不同待机深度分档,让未使用的 Buck 转换器进入真正的关断状态,只保留 RTC 和唤醒逻辑用的微功耗 LDO 那一路。这个需要仔细读数据手册里的模式切换参数,不能跳大步,否则唤醒会有风险。
6.3 整个过程我最大的体会
整个项目做完,我最大的体会是:电源管理不是“接上就能用”的模块,而是一个需要用固件和硬件配合出来的系统工程。PCA9422 给了你极其丰富的可配置能力,PIC18F4525 给了你灵活的控制逻辑,但真正决定系统成败的,是你对时序的理解、对噪声路径的判断、对电池特性的尊重。
如果让我重新做一次,我会在画板子之前先把 PCA9422 的寄存器表完整读一遍,把每个默认值都标出来,再开始设计电源树。我也会在第一次上电之前就把示波器探头挂好,记录各电压轨的建立顺序,而不是等烧了器件之后才回头查。先规划、再配置、最后看波形,这套流程比什么都好使。