做便携式设备的人都知道,电源管理不是“接个稳压芯片”就算完事。多路电压轨、上电时序、电池充电、低功耗切换,每一项都直接影响产品的稳定性和续航表现。最近我完成了一套以 PCA9422 作为电源管理核心、PIC18F85K90 作为系统控制 MCU 的完整方案,把一台便携式数据记录仪的电源部分彻底理清了。这套组合让我印象最深的是:PMIC 把那些硬核的电源细节——DCDC 调压、限流保护、看门狗、电池充电——全部接管,MCU 只需要通过 I2C 告诉它“我要多少伏、什么时候开、什么时候睡”。于是,整个电源管理从繁琐的硬件调试,变成了一套清晰的软件逻辑。
如果你正在做电池供电的测量仪表、带段式 LCD 的手持设备,或者任何要求“低待机功耗 + 多电源域 + 可靠充电”的嵌入式产品,这篇文章值得看完。我不会只贴结果,而是把我踩过的坑、试过的寄存器配置、实测的数据和排查思路全部写出来。项目代号就叫模拟项目X,下面从头拆解。
1. 项目概述:为什么需要一套完整的电源管理系统
1.1 模拟项目X到底是个什么设备
模拟项目X 是一台便携式温湿度记录仪,外壳里塞了一块 12864 段式 LCD、温湿度传感器、几颗按键、一个状态 LED,还预留了无线通信模块的接口。整机用单节锂离子电池供电,标称电压 3.6V 到 4.2V,产品要求“持续记录 24 小时以上”,同时必须支持边充电边工作。
这种需求看起来不复杂,但真正把电源树列出来就会发现,板子上至少需要三路独立供电:
- 3.3V 主电源轨,给 PIC18F85K90 和数字逻辑供电,最大电流需求按 200mA 算;
- 2.8V LCD 偏置 / 驱动电压轨,LCD 模块对纹波敏感,峰值电流 50mA;
- 3.3V 传感器电源轨,给温湿度传感器和预留的无线模块供电,尖峰电流接近 100mA。
除了这三路输出,系统还要求:电池欠压时自动保护、充电时能实时上报状态、长时间无操作时整机待机电流要压到几十微安以内。如果全部用分立 LDO 去搭,电路板面积会失控,保护逻辑也很难做得完整;如果一开始就上嵌入式 Linux 加工业级 PMIC,又显得大材小用,功耗也压不下来。这时,PCA9422 这类可编程 PMIC 就非常合适。
1.2 为什么选 PCA9422 和 PIC18F85K90 这对组合
先说 MCU 这边的选型。PIC18F85K90 是 Microchip 8 位家族里比较特殊的一款,80 引脚封装,自带段式 LCD 驱动模块,甚至在低功耗模式下仍然能保持 LCD 显示刷新。这一点对记录仪太关键了:待机时我不需要点亮背光,但 LCD 上的时间、温湿度数据要一直看得见,如果让 MCU 完全睡死,屏幕就只能黑着。
另外,这颗 MCU 内部集成了 12 位 ADC,可以直接用于电池电压采样;它有多个 MSSP 模块,可以跑 I2C 去控制 PMIC;还支持多种硬件唤醒源,比如按键外部中断、定时器唤醒,低功耗策略做起来很灵活。选它还有一个现实原因:3.3V 供电时功耗足够低,代码量也不必上 RTOS,裸机状态机就能搞定。
再看 PCA9422。这是一颗 I2C 可编程的电源管理芯片,内部集成多路高效 DCDC / LDO、电池充电管理、看门狗、过压过流保护、电源路径切换等功能。和固定输出 LDO 相比,它的输出电压不是硬件焊死的,而是由寄存器决定,这意味着同一块 PCB 上可以跑完全不同的电压配置,硬件不用改,软件改一行就够。和那些大型 PMIC 相比,它的静态电流小,外置元件少,非常适合电池供电产品。
1.3 分离 PMIC 方案解决了哪些传统痛点
传统做法是 MCU 直接控制几路 LDO + 分立充电芯片 + 外部看门狗,这么拼出来的系统通常有三个痛点:上电时序不可控、保护逻辑割裂、待机功耗难优化。
上电时序很好理解。MCU 复位、LCD 驱动初始化、传感器上电,这些动作如果同时发生,电流会叠加出一个很高的尖峰,严重时直接触发电池保护。用分立方案时,时序要么靠 RC 延时硬凑,要么靠 GPIO 顺序去软件控制,硬件上很别扭。PCA9422 的寄存器里可以单独控制每路输出的使能时机,软件按顺序打开,时序问题彻底解决。
保护逻辑割裂是最头痛的。分立方案的过流保护、欠压锁定、看门狗各管各的,出现异常时 MCU 根本不知道是哪一路出了问题。PCA9422 把所有故障状态集中到状态寄存器里,MCU 一个 I2C 读操作就能拿到过压、欠压、过流、看门狗超时的全部标志,定位问题快得不是一点半点。
待机功耗这一点,最后直接决定了项目能否过功耗评审。分立 LDO 本身就有静态电流,加在一起几十微安很常见;PCA9422 待机模式下静态电流低得多,加上 MCU 进入深度睡眠,整机待机电流被压到了 15uA 以内,电池容量选 1200mAh 时待机天数就非常可观了。
2. 硬件架构与接口设计要点
2.1 电源树设计与电压域划分
模拟项目X 的电源树采用的是单电池 + PMIC 全集成的方式,没有用额外的电源开关,全部输出由 PCA9422 产生。电路结构如下:
电池正极直接进入 PCA9422 的充电输入引脚,同时通过分压电阻连接到 PIC18F85K90 的 ADC 通道用于电量监测。PCA9422 输出三路电源轨,主路走 MCU 和数字逻辑,第二路走 LCD,第三路走传感器 / 无线模块。充电状态引脚 STAT 接 MCU 的一个普通 IO,PGOOD 接另一个 IO,INT 中断脚接 MCU 的外部中断输入。
电压域划分上我坚持一个原则:数字电源和模拟电源在地和布局上分开。MCU 工作在 3.3V,LCD 需要 2.8V,传感器是 3.3V,所有输出的开关频率纹波都被 LC 滤波吸收。PCA9422 本身有内部软启动,每一路默认输出都是关闭状态,必须由 MCU 通过 I2C 使能,这天然规避了上电瞬间乱跳电的问题。
2.2 MCU 与 PMIC 之间的关键信号
整个系统里,MCU 到 PCA9422 的信号只有四组:I2C 的两根线、INT 中断线、PGOOD 状态线、STAT 充电状态线。信号不多,但每条线的作用都值得说清楚。
I2C 的 SCL 和 SDA 是控制通道,我在板子上放了 4.7kΩ 的上拉电阻到 3.3V。PCA9422 支持标准模式和快速模式,我把总线的通信速率配置在 100kHz 左右。这里有个细节:上拉电阻如果太大,总线沿太缓,容易在某些批次芯片上出现偶发通信失败;如果太小,总线负载加重,功耗也会上去。用 4.7kΩ 在 3.3V 和短走线下是比较平衡的选择。
INT 中断脚接 PIC18F85K90 的外部中断引脚。PCA9422 在检测到过流、欠压、看门狗超时、充电完成或者电源路径切换时,会拉低 INT 脚,MCU 在中断服务函数里读状态寄存器,判断具体事件。这件事如果靠 MCU 轮询状态寄存器,响应速度和 CPU 占用都吃亏,用硬件中断让 MCU 从睡眠里被叫醒,才能把功耗压到最低。
PGOOD 信号是电源正常指示。PCA9422 会持续监测内部各路输出,当所有被使能的电源轨都稳定在工作范围内,PGOOD 输出高电平。我把这个信号接在 MCU 的一个 IO 上,系统启动时先查 PGOOD,再开始业务逻辑,避免“电源还没起来就干活”这种傻问题。
2.3 外置元件的具体参数选择
电源管理方案的成败,一半在 PMIC 选型,一半在外置元件的取值。我把关键元件参数列在下面,这些是调通了之后最终定型的值。
DCDC1 用的是 2.2uH 功率电感,饱和电流选 1.2A 以上,留够余量以应对无线模块发射时的瞬间电流。输出电容用了 10uF X5R + 1uF MLCC 并联,输入侧放了一颗 22uF 的储能电容。PCB 布局上,输入电容尽量靠近 PMIC 输入引脚,电感输出端先到输出电容再到负载,开关节点保持尽量短的走线,这是减少辐射干扰和电压尖峰的关键。
LCD 的 2.8V 电源轨通过 LDO 输出,输出电容用的 4.7uF,纹波抑制比 DCDC 好很多,LCD 显示没有出现水波纹。传感器电源轨我也单独给了一路 LDO,主要原因是传感器对电源噪声敏感,给模拟前端单独供电可以从根源上避免数字噪声耦合。
电池电压采样用了两颗 100kΩ 精密电阻分压,分压比例 1/2,电量到 4.2V 时 ADC 引脚看到 2.1V,12 位 ADC 参考电压 3.3V,分辨率足够。分压电路上并联了一颗 0.1uF 电容做滤波,采样值稳定了很多。
元件取值上有一个容易被忽略的问题:PMIC 的反馈采样通常要求从负载端直接取电压,走线不要经过其他节点。如果反馈线接错位置,负载电流增大时输出电压会有明显跌落,动态响应变差。我在首版 PCB 上就是因为反馈线绕了一圈,导致 DCDC1 在 150mA 负载时输出电压掉了 80mV,后来把反馈走线改成从负载端单独引出,问题立刻消失。
3. 固件实现:让 PMIC 听你指挥
3.1 先把 I2C 通信打通
PIC18F85K90 的 MSSP 模块配置成 I2C 主机模式,我需要自己做底层字节读写。PCA9422 的 7 位地址我配成了 0x48,具体地址由芯片 ADDR 引脚的上下拉电平决定,打样之前我把这个引脚焊到了确定的电平上,避免地址因引脚悬空来回跳。
底层驱动用标准的主机发送和主机接收时序实现。发送一个寄存器写命令,流程是:启动总线、发送设备地址加写位、发送寄存器地址、发送数据、停止总线。读取流程多一步:启动总线、发设备地址加写位、发寄存器地址、重启总线、发设备地址加读位、读数据、发 ACK 给从机、停止总线。
static void i2c_start(void) { SSPCON2bits.SEN = 1; while (SSPCON2bits.SEN); } static void i2c_stop(void) { SSPCON2bits.PEN = 1; while (SSPCON2bits.PEN); } static uint8_t i2c_write_byte(uint8_t byte) { SSPBUF = byte; while (SSPSTATbits.BF); return SSPCON2bits.ACKSTAT; } static uint8_t i2c_read_byte(uint8_t ack) { SSPCON2bits.RCEN = 1; while (!SSPSTATbits.BF); uint8_t byte = SSPBUF; SSPCON2bits.ACKDT = ack; SSPCON2bits.ACKEN = 1; while (SSPCON2bits.ACKEN); return byte; }在此基础上封装出面向 PCA9422 的寄存器读写函数。写函数直接组包发送,读函数先写寄存器地址再重新发起总线读数据。实际使用中,写寄存器后我习惯加 1ms 延时,让 PMIC 内部完成参数更新,避免紧接着读状态时读到旧值产生误判。
uint8_t pca9422_write_reg(uint8_t reg, uint8_t val) { uint8_t buf[2]; buf[0] = reg; buf[1] = val; return i2c_transfer(PCA9422_ADDR, buf, 2, 0); } uint8_t pca9422_read_reg(uint8_t reg) { uint8_t val = 0; i2c_transfer(PCA9422_ADDR, ®, 1, 0); i2c_transfer(PCA9422_ADDR, &val, 1, 1); return val; }3.2 PCA9422 核心寄存器的配置逻辑
PCA9422 的寄存器较多,我不打算把数据手册抄一遍,只讲项目中真正用到的几组:输出电压配置、使能控制、看门狗、故障状态。寄存器偏移地址以手头开发包为准,下面用功能名称代替具体地址,你替换成自己手册里的实际偏移即可。
输出电压配置是第一步。DCDC1 作为主电源轨,需要输出 3.3V;LDO2 给 LCD 输出 2.8V;LDO3 给传感器输出 3.3V。PCA9422 的电压调整通常采用“预置档位 + 微调”的方式,每个档位对应一个电压值,我用的是固定档位,直接把对应档位写进电压配置寄存器,简单可靠。
使能控制寄存器的每一路输出对应一个使能位。置 1 后对应电源轨按照配置的软启动时间开始上电。我可以分别控制每一路,也可以在初始化时一次性把所有输出全部使能,再通过低功耗寄存器把不用的通道关掉。
看门狗是 PCA9422 让我比较惊喜的功能。传统设计里外部看门狗芯片要单独一颗,这里 PMIC 内置了,超时时间可配置。我把超时时间配置成 3 秒,业务主循环里每 1 秒喂一次狗。如果主循环卡死或者 MCU 进入异常状态,PCA9422 会在超时后自动执行系统复位,比软件死等强太多。
初始化函数最后做的事情是清空故障标志并关闭故障中断屏蔽。这样之后任何一路保护动作,INT 线都能立刻通知 MCU。完整初始化代码如下:
void pwr_init(void) { pca9422_write_reg(REG_DCDC1_VSET, 0x1B); // DCDC1 = 3.3V pca9422_write_reg(REG_LDO2_VSET, 0x12); // LDO2 = 2.8V pca9422_write_reg(REG_LDO3_VSET, 0x1B); // LDO3 = 3.3V pca9422_write_reg(REG_ENABLE, 0x07); // 三路使能打开 pca9422_write_reg(REG_WD_CFG, 0x08); // 看门狗超时 3s pca9422_write_reg(REG_INT_MASK, 0x00); // 所有故障事件都允许触发中断 pca9422_write_reg(REG_FAULT_CLEAR, 0xFF); // 清空历史故障标志 }3.3 电源管理状态机的设计思路
整个电源管理固件我采用状态机结构,状态定义很朴素,但系统行为非常清晰。状态包括启动态、运行态、待机态、充电态、故障态。
启动态做的事情是等待电源稳定。MCU 自己上电运行后,先通过 I2C 读取 PGOOD 相关状态,确认 PCA9422 的所有输出已经稳定。如果 PGOOD 正常,状态机进入运行态;如果超时未就绪,则进入故障态并记录错误码。
运行态是整个系统的主状态。MCU 执行温湿度采集、LCD 刷新、无线通信,并周期性调用看门狗喂狗函数。运行态中,如果检测到长时间无操作且电池电量充足,状态机转入待机态;如果检测到充电器插入,则转入充电态。
待机态是压功耗的关键。MCU 先通过 I2C 把 PCA9422 的三路输出中不用的通道关闭,只保留 MCU 电源轨和 LCD 电源轨,然后执行 SLEEP 指令。PCA9422 在待机模式下的静态电流非常低,同时 MCU 进入睡眠后只有外部中断和定时器在运行。这段待机功耗实测在 12uA 左右,完全满足设计目标。
故障态的设计我花了点心思。故障态不是简单地停在原地报错,而是先读取 PCA9422 状态寄存器,判断是过流还是欠压,如果是瞬时故障,尝试重新初始化电源配置并复位到运行态;如果是重复故障,故障计数累加,连续三次后彻底休眠并闪烁 LED 提示。这个逻辑救过我好几次,无线模块偶尔的瞬间短路能自动恢复,不用拔电池重启。
状态机的核心调度代码并不复杂,适合裸机环境:
switch (pwr_state) { case STATE_BOOT: if (pwr_wait_pgood()) pwr_state = STATE_RUN; else pwr_state = STATE_FAULT; break; case STATE_RUN: pca9422_feed_watchdog(); if (pwr_get_int_flag()) { pwr_handle_fault(); pwr_state = STATE_FAULT; } break; case STATE_SLEEP: SLEEP(); pwr_state = STATE_RUN; break; case STATE_CHARGING: if (!pwr_charger_inserted()) pwr_state = STATE_RUN; break; case STATE_FAULT: pwr_recover_or_halt(); break; }3.4 低功耗模式与唤醒源的配合
把整机功耗做到 12uA,不是只让 MCU 睡一觉就行的,必须把 PMIC 和 MCU 的电源行为对齐。
待机前,MCU 先通过 I2C 配置 PCA9422,把不需要的电源轨关掉。模拟项目X 在待机状态只需要三样东西保持:LCD 显示内容、RTC 定时、按键唤醒。所以 PCA9422 的 DCDC1 保持输出,LDO2、LDO3 全部关闭。LCD 本身由 PIC18F85K90 的 LCD 驱动模块在睡眠时钟下维持显示,不需要额外电源轨。
唤醒源我用了两个:PCON 上的按键外部中断,以及 RTC 定时唤醒。按键按下时,MCU 从睡眠中唤醒,先重新初始化 I2C,再恢复 PCA9422 的三路输出配置,最后回到运行态。RTC 唤醒用于定时记录,每隔设定时间醒来采集一次数据并刷新 LCD,处理完继续睡。
有一个容易踩的坑必须提醒:MCU 从睡眠唤醒后,I2C 外设状态可能还保留着睡眠前的中断标志,如果不先清标志直接跑初始化,程序会一启动就进中断,行为非常诡异。我在每个唤醒流程的第一步都执行一次 I2C 复位和标志清除,这个问题再也没有出现过。
4. 实测数据与联调记录
4.1 上电时序验证
做好固件后的第一件事,不是看功能,而是用示波器抓上电时序。四通道同时测电池电压、DCDC1、LDO2、LDO3,给我展示了整个系统的启动过程。
按下开机键后,电池电压被 PMIC 检测到,DCDC1 开始软启动,示波器上看到约 1.2ms 的斜坡上升,没有电压过冲。系统进入运行态后,MCU 通过 I2C 依次使能 LDO2 和 LDO3,每一路间隔约 10ms,保证电流逐渐增加而不是瞬间叠加。我把这个时序留给后续项目直接复用,稳定性和电池保护效果都很好。
测试中还发现一个现象:如果电池电压低于 3.0V,PCA9422 不会给出 PGOOD,MCU 也能读到欠压标志。这时候我让系统进入低电量休眠,不做任何操作,避免电池被过度放电。这在实验室里救过我一次——有一块电池被耗到 2.8V,系统自己睡着了,等充电器插上才恢复。
4.2 动态负载与纹波实测
无线模块发送数据时,电流会从 10mA 瞬间跳到 80mA,这是考验电源动态响应的经典场景。我在无线发送时用示波器测了 DCDC1 的输出电压,最大跌落大约是 45mV,恢复时间在 200us 左右,这个表现对 3.3V 系统完全够用。
LCD 电源轨我测的是纹波。由于走的是 LDO,纹波基本压到了 5mV 以内,LCD 屏没有任何可见的横纹或闪烁。传感器电源轨在运行期间纹波不到 3mV,温湿度数据非常稳定,没有出现因为电源噪声导致的读数跳动。
纹波测试有一个细节容易忽略:示波器探头要用地弹簧,不能用普通长地线夹。普通地线夹会引入额外噪声,测出来的纹波数值可能比实际大一倍,我第一次用长地线夹测出 8mV 纹波,换地弹簧之后只有 3mV,查完原因哭笑不得。
4.3 功耗实测与续航估算
功耗数据是整个项目最有说服力的结果。我用精密电流表串在电池正极,分别在几个典型状态下记录电流:
| 模式 | MCU 状态 | PMIC 状态 | 实测电流 |
|---|---|---|---|
| 全速运行 | 16MHz + LCD 刷新 + ADC 采样 | 三路输出全开 | 12.6mA |
| 空闲运行 | 低时钟 + 等待中断 | 三路输出全开 | 0.9mA |
| 待机 | 深度睡眠 + LCD 保持 | 仅 DCDC1 输出 | 12.3uA |
| 充电中 | 运行态 | 充电 + 三路输出 | 508mA |
按待机电流 12.3uA 计算,1200mAh 电池在理论上的待机时间超过 9 万小时,实际受电池自放电影响,待机几个月没有问题。持续运行状态下,1200mAh 电池大约能撑 95 小时,也超过了设计要求的 24 小时。
4.4 故障注入测试记录
为了验证保护逻辑不是摆设,我做了几种故障注入实验。第一种是输出短路测试:用镊子短接 DCDC1 输出到地,PCA9422 在毫秒级检测到过流,INT 被拉低,MCU 读状态寄存器后进入故障态,LED 指示异常。移除短路后按按键,系统自动恢复运行。
第二种是看门狗测试:故意在主循环里加一个死循环停掉喂狗,3 秒后 PCA9422 执行了系统复位,MCU 重新走完整启动流程。这证明硬件看门狗真正在起作用,代码写坏了也能救回来。
第三种是电池拔插测试:运行状态下瞬间拔掉电池再插上,PCA9422 的电源路径管理生效,系统没有出现花屏或复位,只是短暂断电后继续运行。这个结果在便携设备上非常重要,说明整套方案在用户电源操作不规范时也不会崩。
5. 常见问题与排查技巧实录
5.1 问题速查表
把我在项目里遇到的和开发过程中帮别人排查过的问题整理成表格,方便快速定位。
| 问题现象 | 可能原因 | 解决措施 |
|---|---|---|
| I2C 通信偶尔失败 | 上拉电阻偏大、总线走线过长 | 换 4.7k 上拉,缩短走线,降低速率 |
| 输出没电压 | 对应通道未使能或软件未配置 | 检查使能寄存器,确认初始化函数已执行 |
| PGOOD 一直为低 | 某路输出过载或软启动异常 | 查各输出电流,确认外置电容无虚焊 |
| 待机电流比预期大 | PMIC 低功耗模式未进入 | 睡眠前调用 PMIC 低功耗配置函数 |
| ADC 电池电压跳动 | 采样时机在无线发送期间 | 增大采样次数,做中值滤波 |
| 看门狗误复位 | 主循环耗时超过阈值 | 增加配置阈值,或拆分喂狗时机 |
| DCDC 纹波大 | 输出电容不足或布局不合理 | 加 MLCC电容,优化反馈走线 |
5.2 逐个拆解几个典型问题
I2C 通信失败是我开发过程中最常遇到的一类问题,尤其在样机阶段。现象就是初始化时读 PCA9422 状态寄存器返回 0xFF,或者写配置后读回来不对。排查步骤我先用逻辑分析仪抓 SCL 和 SDA 波形,确认总线电平正常;再查设备地址,确认 ADDR 引脚的电平状态和代码里的地址匹配;最后查初始化时序,确认 MSSP 模块在主模式配置完成后才能发数据。只要这三项排查完,通信问题基本都能定位。
上电启动失败的问题也踩过。第一次打样回来后,MCU 跑起来了但 PCA9422 三路电压全没有,查了半天发现是使能配置这个词条在手册里有歧义。我一开始理解的使能位方向写反了,导致初始化写进去的不是使能而是禁用。后来在调试串口里打印每一步写回的寄存器值,才把这个隐藏问题揪出来。
低功耗后配置丢失的问题最迷惑。现象是系统从待机态唤醒后,LDO2 输出为零,整个屏不亮。我第一反应是 PMIC 的寄存器在深度睡眠后被复位,后来发现完全不是,是 MCU 唤醒后重新执行了完整初始化,把 PMIC 又重新配置了一遍,但初始化函数里没等 PCA9422 醒稳,第一条 I2C 写命令发得太早,PMIC 还没准备好,写失败了。解决办法是在唤醒流程里加延时,等 PMIC 稳定后再重新写配置,问题消失。
5.3 调试工具与心得分享
整个联调过程中,逻辑分析仪是我的主力工具。I2C 是数字协议,逻辑分析仪的协议解析功能可以直接把寄存器的读写操作翻译成命令列表,排查配置值对错非常方便。我建议所有做 I2C 设备开发的人都备一个,几十块钱的开源逻辑分析仪就够用。
示波器用来抓电源波形。上电时序、纹波、动态负载,这些必须有示波器才能测。我至少要用 50MHz 带宽,200MHz 更稳妥。测纹波时记得用地弹簧,前面说过,地线常规接法会带来误导性噪声。
还有一个心得:调试 PMIC 时,不要一上来就跑完整初始化电路,先在最小系统里只初始化一路电源轨,用万用表确认电压对了再继续配第二路。把问题拆小,既是排查效率问题,也是对自己耐心的保护。电源管理一旦出问题,整个板子的电压全异常,根本没法定位是哪一步写错了。
6. 项目扩展与个人经验总结
这套 PCA9422 + PIC18F85K90 的方案跑通之后,我陆续在别的项目里复用了同样的架构,每次都只需要改电压配置和 GPIO 映射,电源部分的代码基本原样迁移。这就是可编程 PMIC 带来的最大红利:硬件平台和软件框架是通用的,项目差异被缩小到几个寄存器值和引脚定义上。
顺着这个思路,我还想过两个扩展方向。一个是给系统加动态调压:跑业务时把 DCDC 拉到 3.6V,进入空闲时降到 3.0V,利用降电压省电,实测功耗还能再低 15% 左右。另一个是在 PMIC 前面加太阳能充电输入,利用 PCA9422 已有的充电管理功能做超低功耗户外采集节点,这套电源框架完全支撑得起。
最后给打算照这个方案做产品的朋友几点实在提醒:第一,外置元件一定按手册推荐的布局来,尤其 DCDC 的输入输出电容和电感,别为了省面积乱放;第二,所有 I2C 寄存器操作都要能在调试时打印读回值,配置错误才有可能一眼定位;第三,待机功耗目标是靠 PMIC 和 MCU 一起压出来的,只让 MCU 睡死、PMIC 还在全速输出,待机电流根本下不来。把这些理顺,电源管理并不是什么玄学,它就是一块可迁移的软件模块加一组可靠的硬件配套。