从做低功耗便携设备开始,我就一直觉得"电源管理"这件事被很多人低估了。很多人以为接个LDO、放个锂电池就完事了,等到样机做出来,充电电流不对、休眠功耗下不去、多路电源轨顺序乱套,才知道这套系统远比想象中复杂。后来在一个模拟项目X(某便携式低功耗数据采集设备)里,我改用 PCA9422 搭配 PIC18LF46K22 来做整套电源管理,这套组合把充电、多路输出、系统调度和低功耗状态切换全部理清了。这篇文章就把这次项目的完整思路、硬件设计、固件状态机、实测数据和调试过程中的真实踩坑经验都写出来,给正在选型 PMIC 或者想用 MCU 管控电源轨的朋友做个参考。
先说清楚这两颗芯片的分工:PCA9422 是电源管理侧的核心,负责电池充电管理、多路输出电压生成以及一些负载开关控制;PIC18LF46K22 是系统侧的 8 位 MCU,负责整机运行逻辑、低功耗调度、ADC 采集电池信息,以及通过 I2C 总线实时配置 PCA9422 的工作状态。简单说,PMIC 管功率管转化,MCU 管策略管调度,两者配合才能把电池供电系统的功耗压到理想的水平。
1. 为什么把电源管理交给专用芯片,而不是自己搭分立方案
1.1 分立方案的三个潜在麻烦
很多工程师第一反应是自己用 DC-DC + 充电芯片 + LDO 搭一套电源。这个思路不是不行,小批量验证阶段完全够用,但真要做完整电源管理,你会发现三个绕不开的问题。
第一是锂电池充电管理复杂度。一个合格的充电路径不只是"给电芯灌电流"那么简单,它需要恒流(CC)、恒压(CV)、涓流预充、截止电流判断、充电超时保护,还要处理电池温度检测。这些逻辑如果用分立器件搭,要么买一堆比较器、基准源、MOS 开关自己搭控制环,要么用很机械的模拟电路去逼近,调试周期非常长,而且温度和电池个体差异会把参数漂得很难看。
第二是多路电源轨的组合和时序控制。便携设备往往同时需要 3.3V 给 MCU、1.8V 给传感器、5V 给外部外设,加上电池直接供电的模拟部分。多个 DC-DC 放在一起,开关频率干扰、负载动态响应、上下电时序、输出短路保护,每个点都能让你加两周班。
第三是休眠功耗。MCU 进入低功耗状态后,如果 LDO 还在空载运行、DC-DC 还在维持开关动作,静态电流就会一点一点把电池吃掉。专用 PMIC 通常为低静态电流场景做了优化,还有负载开关可以彻底切断不需要的电源轨,这才有可能把整机休眠功耗压到几十微安以下。
1.2 两颗芯片的职责切分:功率部分归 PCA9422,策略部分归 PIC18LF46K22
这个项目里,我一开始就把"功率"和"策略"分开考虑。
PCA9422 负责的是功率域:它把电池输入转成多路可配置输出,同时承担电池充电管理的任务。它内部有充电控制逻辑、输出转换器和控制寄存器,通过 I2C 接口就能切换输出模式、调整充电参数。它相当于一个"功率管家"——你不需要关心内部怎么实现恒流恒压,只需要按数据手册配置好参数,剩下的反馈环路、保护逻辑它会自己跑。
PIC18LF46K22 负责策略域:它要知道设备当前处于什么状态——运行、空闲、休眠,还是关机充电;它再根据状态决定 PCA9422 应该让哪几路输出保持、哪几路关断,以及当前的充电电流限制是多少。这其实是整套系统里最有价值的地方:电源管理不再是简单的"上电就工作",而是变成了一种可以根据场景动态调节的资源调度。
用一颗带超低功耗特性的 MCU 来做策略控制还有一个好处:PIC18LF46K22 这类 MCU 本身就为低功耗场景设计,休眠电流极低,醒来时间快,非常适合常驻待机、定期唤醒采集的场景。
1.3 模拟项目X的供电架构设计实例
我在模拟项目X里的目标很简单:一节锂电池供电,需要 3.3V 给主控和逻辑电路,1.8V 给高精度传感器,还有一路可关断的 3.3V 给无线模块;整机平均功耗要控制在很低水平,休眠时整机电流要贴近微安级。
我当时的电源轨划分是这样的:
| 电源轨 | 电压 | 主要负载 | 控制方式 |
|---|---|---|---|
| 主轨 | 3.3V | MCU、逻辑电路 | 常开 |
| 传感器轨 | 1.8V | 高精度传感器 | 根据工作模式开关 |
| 外设轨 | 3.3V | 无线模块 | 由 MCU IO 控制负载开关 |
| 电池采样 | 电池电压 | ADC 分压 | 仅在采样时启用分压通路 |
PCA9422 负责生成前两轨,后一轨我用它的负载开关通道或外置 MOSFET 开关控制。MCU 通过 I2C 读写 PCA9422 的寄存器,把系统状态和 PMIC 状态对齐。这样整个系统的电源流和信号流是分开的:功率路径清晰,控制路径简单。
2. PCA9422 硬件设计:充电参数、输出配置与布板要点
2.1 充电参数设计:CC-CV 曲线与截止电流的设定方法
PCA9422 的充电逻辑和主流锂电池充电芯片一致,走的是先涓流预充、再恒流快充、最后恒压饱充的流程。我在这块踩过的最大教训是:不要把恒压阶段的截止电流设得太小。
锂电池在恒压阶段后期,电流会非常缓慢地下降。如果你把截止电流设到 50mA 甚至更低,充电时间会被无限拉长,而且电池老化后可能永远充不满。一般建议把截止电流设为恒流充电电流的 5% 到 10%。比如我用 0.5C 充电(1000mAh 电池用 500mA),截止电流设在 50mA 附近,既不会过充,充电时间也合理。
具体配置时,PCA9422 的充电电流等级、截止电流、浮充电压都可以通过寄存器设定。我的做法是先用数据手册推荐的默认参数做第一版,再根据电池规格书校准浮充电压。这里有个很重要的点:不同的电池供应商,浮充电压可能一样,但充电倍率和充满截止电流的要求不一样,一定要以电池规格书为准,不要直接照搬公共库里的例程。
另外还要处理充电温度检测。PCA9422 支持用 NTC 做电池温度监测,我建议无论如何都要接上。锂电池低温 0 度以下和高温 50 度以上充电都有风险,单纯靠过压过流保护是不够的。我在模拟项目X里用了 10k NTC 搭配分压电路,把温度区间映射成 ADC 值,由 MCU 在充电过程里持续监控,一旦超出安全范围就通过 I2C 暂停充电。
2.2 输出电感电容选型:波纹与瞬态响应的平衡
PCA9422 的降压输出需要外部电感和电容配合。电感值的选择直接影响纹波电流和瞬态响应,不能随手拿个 2.2uH 就焊上去。
对于降压转换器,电感量的估算可以用这个通用公式:
L = ((Vin - Vout) × Vout) / (fs × Vin × ΔIL)
其中 fs 是开关频率,ΔIL 是允许的纹波电流峰峰值。通常取负载最大电流的 20% 到 30%。举个例子:电池输入 Vin 变化范围 3.0V 到 4.2V,输出 3.3V,最大负载 300mA,fs 1.5MHz,允许纹波电流 60mA,那么在 Vin=4.2V 时电感量约为:
L = ((4.2 - 3.3) × 3.3) / (1.5MHz × 4.2 × 0.06)
= 2.97 / 378000 ≈ 7.9uH
算出来后我并没有直接用最接近的 8.2uH,而是选了 6.8uH,因为项目里负载大部分时间远小于满值,稍微减小电感能改善轻载效率。选电容时则要关注 DC 偏压特性,小封装的陶瓷电容在额定电压附近实际容量可能只剩标称值的一半。3.3V 输出我用了两颗 10uF/6.3V 并联,实测纹波可以压在 30mV 以内。
这里顺便说一句:输出电容主要决定输出电压纹波和环路稳定性,不是越大越好。电容太大,瞬态响应会变迟钝,上电时也可能触发浪涌保护。合理做法是参考数据手册推荐的输入输出电容范围,再通过实际测试微调。
2.3 I2C 控制通路布局:上拉电阻、电平匹配与地平面
PCA9422 的配置都是通过 I2C 完成的,所以 I2C 通路的可靠性直接影响电源管理是否可控。我在这一块遇到过多次写寄存器失败的坑,后来总结下来有三个要素。
第一个是上拉电阻。I2C 总线的上拉电阻不能随便放。PCA9422 工作在 3.3V 电平域,PIC18LF46K22 也工作在 3.3V,所以标准模式下用 4.7k 上拉基本没问题。但如果有其他器件挂在总线上,要根据总电容重新算。简单经验:总线电容每 100pF,上拉电阻建议不超过 5.6k,用 2.2k 到 4.7k 之间都可以。
第二个是电平匹配。如果你的 MCU 是 1.8V 而 PMIC 是 3.3V,那必须做电平转换,不能直接怼上去。模拟项目X里 MCU 和 PMIC 都是 3.3V,少了这层麻烦,但我在其他项目里吃过亏——有些 PMIC 的 SDA/SCL 引脚内部有保护二极管,上拉 3.3V 时会把 1.8V 的 MCU 输出拉出漏电,整个总线直接进死锁,只能断电复位。
第三个是地平面处理。I2C 是低频信号,本不需要特别强的阻抗控制,但如果 PMIC 的开关节点和电感就在 I2C 引脚旁边,高频噪声会耦合到 SDA/SCL 上,导致通信出错。布局时要尽量让 I2C 走线远离电感和开关节点,中间用地线隔离。我在模拟项目X里把 I2C 走线放在了 PCB 内层,两侧包地,之后再没出现过无故通信失败。
2.4 PCB 布局的实测复盘:开关节点、开尔文采样与铜箔散热
第一版 PCB 我犯了一个典型错误:开关节点铜箔走得太窄太长,导致输出纹波偏大,硬件伙伴拿着示波器测了好久纹波都压不下来。开关节点是高 dv/dt 的点,窄长走线会引入寄生电感,产生振铃,振铃会通过反馈网络耦合到输出端。改板时我把开关节点走线缩短到 PCB 背面直连电感的完整铜皮区域,振铃明显变小。
电池电流采样是我特别想强调的。如果 PCA9422 的充电电流或电池电流需要进行高精度采样,一定要用开尔文接法:采样电阻的检测走线直接从电阻两端引出,并行走线到芯片的采样引脚。不要干那种"从铺铜中间打孔拉线"的事,铜箔上的压降会直接毁掉你的电流精度。我在一次实验中看到采样值和实际差了 18%,原因就是采样走线走了一整段共享铜皮。
铜箔散热同样影响大。PCA9422 充电时功率管有压降,持续大电流充电会让芯片结温升高。如果你希望长时间 1A 充电,就别把芯片放在 PCB 角落孤岛上。我建议芯片底部焊盘大面积接地并打过孔,充电路径上的铜箔加宽,必要时在这块区域多放散热孔。
3. PIC18LF46K22 侧的系统初始化与电源控制固件
3.1 引脚规划:控制信号默认电平比什么都重要
硬件接好后,固件第一件事是规划引脚方向,而且要注意默认电平。MCU 上电瞬间、进入休眠之前、从休眠醒来之后,所有 IO 的状态必须可预期。最怕的是某个控制负载开关的引脚在 MCU 复位时是高电平,导致无线模块先于主控上电,电流瞬间拉高,还可能让模块进入未知状态。
我在模拟项目X里的处理方式是:所有控制 PMIC 或负载开关的引脚,在上电默认态都设为输入态,然后用外部下拉电阻固定为低电平;MCU 完成初始化后,再把它切换为输出并设置目标电平。这样即使固件跑飞重启,外部设备也不会被误上电。这颗 MCU 的端口在复位时默认是高阻输入,配合外部 100k 下拉,实测很稳。
ADC 采样通道也要注意,采样电池电压的分压网络如果一直挂着,本身就构成放电回路。我在分压电路上串联了一个 NMOS 开关,平时关闭,只有需要采样时才打开。这个开关用 MCU 一个 GPIO 控制,采样完立刻关掉,把漏电流路径切断。通过这种方式,电池电压分压网络的电流从持续的微安级降到了采样瞬间的瞬时电流。
3.2 I2C 主机初始化与寄存器读写代码示例
PIC18LF46K22 内部集成了 MSSP 模块,可以作为 I2C 主机正常通信。我用的初始化比较简单,把 SCL 和 SDA 引脚配置为开漏输出,设置波特率寄存器后使能主机模式。下面是我在模拟项目X中实际用过的初始化片段,大家可以参考调整:
void i2c_master_init(void) { TRISCbits.TRISC3 = 1; // SCL TRISCbits.TRISC4 = 1; // SDA SSP1ADD = 0x31; // 假设 Fosc=16MHz,目标 100kHz 总线速率 SSP1CON1 = 0x28; // 使能 MSSP 模块,选择 I2C 主机模式 SSP1CON2 = 0x00; }写入 PCA9422 寄存器时,我的做法是先发设备地址,再写寄存器地址,然后写数据。完整函数大概是这样的:
uint8_t pmic_write_reg(uint8_t reg_addr, uint8_t data) { idata = data; i2c_start(); if (i2c_write(PCA9422_ADDR_W) != 0) return 1; // 从机无应答 if (i2c_write(reg_addr) != 0) return 1; if (i2c_write(data) != 0) return 1; i2c_stop(); return 0; }强烈建议所有 I2C 写操作都检查从机应答。有一次我把设备地址写错,从机完全没有应答,但我当时懒得查,直接用延时代替,结果后续所有配置都写进空气里,系统表现诡异。从那以后,每次写 PMIC 寄存器我都会默认带应答检查,这在多人协作项目里尤其重要,别人调用你的函数时不会因为底层问题跳脚。
3.3 电池电压采集与滤波:平均值和跳变剔除
电池电压采集这事看起来简单,但要采得准有几个细节。第一是 ADC 参考电压,我推荐用内部固定参考而不是 VDD,因为 VDD 本身是 PMIC 输出,会有纹波和微小波动,直接拿它做参考会把噪声引进来。第二是采样结果要滤波,不要拿单次采样值去做状态判断,那样很容易因为一个毛刺导致误判低电而关机。
我用的滤波方式很朴素:连续采 8 次,去掉最大值和最小值,剩下 6 个取平均。同时做一个简单的跳变保护:如果当前平均值和前一次平均值差距超过 100mV,先不更新,连续两次超过才更新。这能防止瞬态负载导致电压瞬间跌落时,系统误以为电池没电。
考虑到电池电压在不同负载下有内阻压降,模拟项目X里我引入了动态判断:在高负载状态采集到的电压会偏低,等负载切到轻载时再采一次做校准。软件里维护一个"空载电压"和"负载电压"两个值,低电报警用空载电压判断,关机保护用负载电压判断,避免在信号发射瞬间因为电压跌到阈值就立刻关机。
3.4 动态电源轨切换:根据不同工作模式调整 PMIC 输出
整套系统最有实用价值的就是根据工作模式动态调整电源轨。模拟项目X里有几个模式:运行模式、快速采集模式、空闲模式、深度休眠模式。不同模式下,负载差异很大,对电源轨的要求也不同。
通过 I2C 修改 PCA9422 的输出模式,可以让 1.8V 传感器轨在空闲模式下直接关断,也可以让主轨在运行模式时提高限流值,在休眠模式下调到低功耗待机模式。动态切换时最需要注意的是时序:每次修改寄存器后,要等待 PMIC 内部转换稳定,再让 MCU 执行下一个动作。
我给出一个简单的状态切换逻辑:
void system_set_mode(uint8_t mode) { switch (mode) { case MODE_RUN: pmic_write_reg(REG_SENSOR_PWR, SENSOR_ENABLE); pmic_write_reg(REG_CHARGE_CURRENT, CHARGE_500MA); break; case MODE_SLEEP: pmic_write_reg(REG_SENSOR_PWR, SENSOR_DISABLE); pmic_write_reg(REG_CHARGE_CURRENT, CHARGE_100MA); break; } }这里的要点是:不要让电源切换和业务逻辑混在一个庞杂的主循环里,把电源切换收敛成几个明确的模式入口和出口函数。之前我把电源切换散在业务流程各处,后来排查一个偶发死机问题时差点把自己绕进去,重构后就清爽多了。
4. 电源状态机设计:带上实测电流数据
4.1 状态定义与切换条件:每个状态都要问"谁在耗电"
我设计的电源状态机有五个状态:启动状态、运行状态、空闲状态、深度休眠状态、充电关机状态。每个状态我都强迫自己回答一个问题:这个状态里还有谁在耗电?把每毫安的流向都弄清楚,状态机才能设计对。
启动状态发生在系统上电或休眠唤醒后,MCU 先初始化时钟和 IO,然后配置 PMIC。运行状态是设备正常采集工作,所有电源轨全部打开。空闲状态只保留 MCU 和传感器待机所需最小电源,关掉无线模块。深度休眠状态则基本关闭所有非必要电源,MCU 自己进入极低功耗模式,只留 RTC 唤醒和外部按键唤醒。充电关机状态比较特殊,系统接上充电器不开机时仍然需要保持充电通路有效。
状态切换条件需要做去抖处理,尤其是按键触发和充电插入检测。我之前直接在中断里切换状态,结果人在给设备快速插拔充电器时,状态机在几个状态之间疯狂横跳,最后直接卡死。后来所有切换条件都加了两级软件滤波,状态切换才稳定下来。
4.2 唤醒源选择与中断路径设计
深度休眠状态下,PIC18LF46K22 依靠外部中断和定时器唤醒。这里要注意优先级:如果用户按下按键,应该加一个 20ms 到 30ms 的防抖窗口,防止抖动引起误唤醒;如果是 RTC 定时唤醒做周期采样,唤醒后应该快速进入运行状态完成采集再回到休眠,不要在唤醒路径里做太多无关初始化。
PCA9422 的中断输出也是一个关键唤醒源。当充电完成、电池温度异常、或者输入电源拔出时,PMIC 会拉中断脚。我把中断脚接入 MCU 的外部中断输入,同时保持休眠状态下也能唤醒 MCU。但这里有个坑:PMIC 的中断标志位如果不及时读出并清掉,中断脚会持续拉低,MCU 醒来后立刻又进中断,根本进不了正常流程。必须在唤醒后的第一时间把 PMIC 中断状态寄存器读一遍,确认事件并清标志。
4.3 实测功耗数据:用数据说话
模拟项目X调完之后的功耗表现如下(整机从电池端测量,电池电压 3.7V 到 3.8V 区间):
| 系统状态 | 实测整机电流 | 说明 |
|---|---|---|
| 运行状态 | 28mA 到 42mA | 无线模块发射时偏高 |
| 快速采集模式 | 55mA | 传感器和 MCU 全速运行 |
| 空闲状态 | 3.8mA | 仅 MCU 最小系统 |
| 深度休眠 | 11uA 到 15uA | PMIC 待机 + MCU 休眠 |
| 充电关机 | 8mA | 电池充电电流另算 |
深度休眠能压到十几微安,功劳不在 MCU 一颗芯片,而在整个休眠路径的设计:分压网络断开、传感器轨关断、无线模块负载开关关断、PMIC 切到低功耗模式、I2C 上拉电阻在总线空闲时不再产生额外电流。任何一个环节漏掉,休眠电流都压不到这个量级。
4.4 低功耗的几个隐藏坑
第一个隐藏坑是 IO 浮空输入。MCU 进入休眠前,内部上拉或下拉没有打开、外部又没有明确电平的引脚,会随着漏电随机漂移,每次漂移到某个阈值就会产生额外的半导通电流。所以休眠前必须把所有不用的 IO 配成确定状态:要么输出低,要么外部电阻拉死。
第二个隐藏坑是温度检测 NTC 电阻。NTC 本身在 25 度下是 10k,如果直接跨接在电池正极和地之间,平时就有微安级电流持续漏掉。解决办法是用 MOS 管控制 NTC 分压通路的电源,只在充电时打开。
第三个隐藏坑是 PMIC 的裸奔静态电流。我不知道这颗芯片在出厂默认配置下待机电流是多少,但如果你配置了不合理的输出模式,微安可能变毫安。建议拿到芯片后第一件事就是逐个测不同寄存器配置下的静态电流,不要相信"默认配置就是最优配置"这句话。
5. 调试中遇到的四个真实问题与完整排查过程
5.1 问题一:I2C 写不进 PMIC 寄存器,从机偶尔无应答
现象是系统上电后 PMIC 配置经常失败,有时反复复位才能成功。一开始以为是上电时序问题,后来发现概率性出现从机无应答,且大多发生在上电后 50ms 内。
排查思路:先用示波器看 SCL/SDA 波形,发现从机无应答时 SDA 电平明显不足,高电平只有 2.2V 左右。问题出在 MCU 引脚配置上——我把 SCL/SDA 配成了普通推挽输出,而不是开漏输出。改成开漏输出后,高电平彻底由外部上拉电阻决定,稳定在 3.3V。这类问题隐蔽性很强,因为通信大多数时候能成功,只有少数时序紧张的场景暴露。
后续我把 PMIC 的 I2C 初始化放在主电源稳定且延时 10ms 之后,两次写操作之间加了 1ms 间隔。真正原因是输出电容充电需要时间,若在上电瞬间电源还在爬坡时就通信,PMIC 内部可能没有完全准备好。
5.2 问题二:深度休眠电流从预期的 10uA 飙到 60uA
第二版样机休眠电流始终下不来。我从电池端串电流表逐一排查,先把所有负载开关关断,再检查 MCU 休眠,最后查到一颗看似无害的 LED 驱动芯片,它在 MCU 休眠时仍在等待 I2C 命令,等待状态电流消耗了 30uA。这颗芯片我当时认为是"断电后无电流"的,但它内部存在从 VDD 到地的分压检测回路。
教训是:任何一颗芯片的低功耗特性要以实测为准。器件选型时除了看手册给出的静态电流,还要关注"芯片未被使能但电源仍然连接"时的状态电流。最终的解决办法是在这颗芯片的电源输入路径上加了一个负载开关,由 MCU 在休眠前切断。
5.3 问题三:电池电压 ADC 采样偏差达到 0.2V
偏压非常大,完全不能用。最开始怀疑分压电阻精度不够,换成 0.1% 精度的电阻后依然偏。后来发现是 ADC 参考电压用的是 VDD,而 VDD 在无线模块发射时会有周期性跌落,参考电压跟着抖,采样自然偏。
改成内部固定参考电压后,偏差明显缩小。接着又发现采样引脚在 PCB 上和电池充电电流路径相邻,充电时的地弹噪声耦合进来,ADC 结果出现随机跳变。把采样走线移到远离功率地的地方,并用地平面保护后,偏差压到了 0.02V 以内。
5.4 问题四:充电时芯片明显发烫,效率低到难以接受
用热成像看过,发热集中在 PCA9422 所在区域。怀疑充电电流设置和实际不符,后来查了寄存器读取结果,发现数值停留在默认档位,MCU 写的充电电流配置在一段时间后被充电状态寄存器覆盖。
原因是我在充电过程中频繁修改寄存器,而 PCA9422 在某些状态下不接受部分充电参数的在线修改,必须先暂停充电再写参数,最后重新启动充电。理清这个流程后,我把充电参数设置全部收敛到充电启动前一次完成,芯片温度立刻降下来。这才意识到"某些 PMIC 参数不支持热更新"这句话不能当作耳边风。
6. 量产与长期可靠性:几个不能省的动作
6.1 出厂校准与老化测试
模拟项目X因为要量产,我补了三个环节。
第一个是充电电流校准。虽然 PMIC 寄存器设置了目标电流,但实际电流还会受电池内阻、接触电阻影响,量产时统一在 0.5A 充电档做一次电流验证。第二个是电池电压 ADC 校准:每块板子的分压电阻虽然精度很高,但仍有批次偏差,在产线用高精度电源标定两个点,把 ADC 增益误差和偏移误差写进 MCU 的 Flash 校准区。第三个是老化测试,我抽了多块板子做 72 小时充放电循环,重点关注电池在充满后充电截止是否正常,以及长期带载下 PMIC 温度是否超过规格。
6.2 软件保护和看门狗联动
电源管理代码写进整个项目后,我一开始怕的是 MCU 死机导致电源拒不关断或拒不开启。后来加了看门狗,但发现单纯喂狗不够,还要在死机恢复路径里明确要不要让 PMIC 回到默认配置。我的做法是:上电后 PMIC 使用出厂默认配置作为安全态,MCU 在完成自检前不做任何修改;一旦看门狗复位,MCU 快速读取 PMIC 状态并重新应用上次保存的工作参数。关键的是把"恢复策略"写成可配置的,某些模式下被复位后不立即恢复高功耗运行,先落到低功耗空闲态,等人来确认。
6.3 器件替换时的验证清单
最后提醒一点:PMIC 和 MCU 这类器件,即使型号完全一样,不同批次或封装版本之间,寄存器默认值、电气特性也可能有差异。如果要更换批次,建议至少验证三点:寄存器可读写的默认值是否和现有固件预期一致;充电截止电流和输出纹波实测值是否一致;休眠模式下芯片自身静态电流是否一致。任何一点有偏差都要重新评估固件参数,不要盲目沿用上一版的配置表。
我在实际调试这套电源管理方案的过程中,最大的体会就是"电源管理不是硬件单方面的事"。PCA9422 提供了强大的功率调度能力,PIC18LF46K22 提供了灵活的低功耗控制能力,但真正让系统跑得稳的,是硬件布局、固件状态机、功耗测量和排查经验之间反复磨合的过程。尤其是把实测电流数据拉出来逐项分析之后,你对整个设备的理解会比只看原理图时深入好几个层次。如果你也在做类似的电池供电设备,希望这篇文章能帮你少走几步弯路。