☰
PCA9422+STM32F746ZG电源管理实战:从硬件连接到动态调压
2026/10/10 4:55:28 网站建设 项目流程

手头这几块板子前前后后加起来,真正不好处理的其实不是算力、不是外设,反而是"电"。以前做一台便携式的带屏终端,用的是单独一颗 LDO 把 3.7V 锂电池拉成 3.3V,整板共享一路,结果 LCD 背光一开,ADC 采样值就开始乱跳,偶尔系统还会莫名其妙复位。后来把整个供电链路换成一组分离的 DC-DC,又碰到上电顺序没做好、核心电压和外设电压竞争的问题,折腾了很久才明白一个道理:电源这层东西,分开看每个器件都能工作,合在一起没做好规划,就是系统的头号不稳定源。

后来我把方案整体调整成 PCA9422 + STM32F746ZG 的组合,PCA9422 作为 PMIC 把多路输出、上电排序、保护和 I2C 配置集中处理,STM32F746ZG 负责应用逻辑和电源策略控制,才真正把电源管理这件事从"能开机"做到了"可控、可测、可省电"。这篇文章就围绕这个组合,把硬件连接、电源映射、时序配置、固件配合、实测踩坑从头梳理一遍。适合正在用 F7 系列或类似大功耗 MCU 做便携设备、带屏工控机的开发者,也适合第一次认真做电源树、不想只在数据手册里打转的硬件工程师。

1. 为什么我要把电源管理单独拎出来做

1.1 一套真正完整的电源管理,到底要管哪些事

很多人觉得"电源管理"就是把 5V 降到 3.3V,其实那是电源转换,不是电源管理。完整的电源管理至少包含四层:电压转换、上电时序、状态监控、动态调节。电压转换只是最底层的地基,后面三层才是决定系统稳不稳定、功耗高不高的关键。

以 STM32F746ZG 这类 Cortex-M7 高主频芯片为例,它的内部结构很典型:IO 和模拟域需要 3.3V,内核电源经过内部 LDO 后大约是 1.2V 级别的核心电压,如果只用一颗 LDO 给全板供电,转换效率低,热量全部耗在芯片上,电池供电场景基本撑不住;如果换成分离的 DC-DC,又得自己设计多路输出、排序、保护电路,PCB 面积和调试成本都上去了。

PCA9422 这类 PMIC 的价值在于,它把多个高效降压转换器、多路 LDO、可编程上电顺序、过压/过温保护和 I2C 配置全部塞进一颗很小的封装里。系统真正需要的各路电压不再由你手工搭出来的十几颗芯片负责,而是通过配置寄存器去控制一路 PMIC。这在便携设备上尤其实用,省面积、省物料、省调试时间。

1.2 为什么这套组合值得拿出来单独说

STM32F746ZG 有 1MB Flash、320KB SRAM,还自带 LCD 控制器、以太网和丰富的模拟外设,算力和外设能力都不弱。但它对电源的要求也比一般 MCU 挑剔:正常工作电流可以达到几百毫安,待机时又要能压到微安级;模拟外设对电源纹波敏感,数字核心又需要快速响应负载瞬态。这种"又要高电流效率、又要低纹波、又要低待机功耗"的需求,正好是 PMIC 最擅长的局面。

PCA9422 的输出能力适合单片机系统,而不是手机那种动辄十几路电源的大平台。它内部有两路高效降压转换器加上一组 LDO,电压范围基本覆盖 1.2V 内核、1.8V DDR/存储、2.8V 传感器、3.3V IO 这些常用电压。加上 I2C 接口之后,MCU 可以在运行过程中动态改变输出电压,这正好对上了 STM32F746ZG 的 Dynamic Voltage Scaling 需求——跑高主频时内核电压给足,降频后把电压压低,省下的功耗非常可观。

这套组合说到底解决的是一个很实际的问题:如何用一个芯片完成整个系统的电源策略,并且让 MCU 反过来可以"感知"和"控制"电源状态,而不是让电源永远是一块砖头一样死板地压在那里。

2. 先把每一路供电需求约定明白

2.1 STM32F746ZG 不是只吃 3.3V 的芯片

设计电源树之前,第一步不是急着选 PMIC,而是先数清楚 MCU 身上到底有几种电源引脚。

STM32F746ZG 的电源域大致可以分成四块:

  • VDD/VDDA 主电源域:典型值 3.3V,负责 IO、内部 LDO 输入和大部分数字逻辑,VDDA 还需要尽可能干净,因为它直接提供给 ADC 等模拟模块。
  • 内核电源域(VCAP):内部 LDO 从 VDD 降压后产生 1.2V 左右的核心电压,通过 VCAP 引脚外接电容。这是最容易被忽略、却对稳定性和功耗影响最大的一路。
  • VBAT 备份域:给 RTC 和备份寄存器供电,通常接一个纽扣电池或直接从主电源经二极管隔离供电。
  • 外部参考电压 VREF+/VREF-:不是所有封装都有,有的话会直接影响 ADC 精度,需要单独滤波。

很多人画原理图时想当然地认为"统一 3.3V 就完事了",结果核心电压实际是由内部 LDO 从 3.3V 降下来的。这个方案可以工作,但有两个问题:一是转换效率低,锂电池供电时白白浪费热量;二是低功耗模式下,内核电压要被内部 LDO 维持,功耗很难压到理想值。

正确思路是:让 PMIC 直接给内核域供电,绕过内部 LDO。使用 STM32F7 的旁路/外部供电模式,把核心电压直接做到 1.2V,由高效率的 Buck 提供。这样不但省掉了内部 LDO 的热损耗,也让动态调压变得可行。

2.2 PCA9422 能给出的电压和电流区间

PCA9422 是一款面向 MCU 的单芯片电源管理方案,输入范围覆盖常见锂电池 2.7V 到 5.5V 场景,也可以用在 USB 5V 输入的系统上。它的输出主要由高频率同步降压转换器和多路 LDO 构成,降压转换器负责大电流、高效率的电压轨,LDO 则负责给模拟部分提供低噪声电压。

需要提前说明的是,PCA9422 不同出厂版本可能有不同的默认输出配置,有些电压可以由寄存器动态调节,有些则可能出厂时已经固定。硬件设计阶段应该先和供应商确认你拿到的是哪一版,避免把本该可调的一路当成固定电压来用,或者反过来把固定版本当成可调版本来规划 DVS。

从应用场景看,这套 PMIC 真正擅长的分配方式是"大电流走 Buck,小电流但敏感走 LDO"。Buck 效率高,适合 CPU 核心、IO 主电源;LDO 纹波低,适合 ADC 参考、传感器供电这些对噪声有要求的地方。两路 Buck 配合若干 LDO,已经足够覆盖 F746ZG 加常见外设的整套供电树。

2.3 我的系统电源映射表

我当时那台设备的外设大概是:LCD 显示屏、几路传感器、SD 卡、以太网 PHY、ADC 前端参考。最终映射关系如下:

电源轨目标电压来源主要负载说明
Buck1 输出3.3VPCA9422MCU VDD/VDDA、外部 Flash、PHY大电流主轨,效率优先
Buck2 输出1.2VPCA9422MCU 内核(VCAP 旁路)核心动态电压调节,配合 DVS
LDO1 输出1.8VPCA9422SD 卡、某些低速外设纹波低,卡类外设友好
LDO2 输出2.8VPCA9422模拟传感器前端独立小电流低噪轨
模拟参考3.0V/3.3V从 Buck1 再经过一级 LC/π型滤波ADC 基准不和数字电源直连

这个映射表不是拍脑袋定的,有两条原则:

第一,凡是瞬间电流变化大的负载,比如背光、射频模组、SD 卡写卡瞬间,尽量放 Buck 上。Buck 的负载瞬态响应比 LDO 好,不会因为大电流突然拉走导致电压跌落。

第二,凡是和 ADC 精度直接相关的模拟电源,用 LDO 或者再做一次滤波。Buck 虽然效率高,但输出总有一点开关纹波,模拟部分一旦耦合到这些纹波,采样结果就有周期性的抖动。

电源树设计完成后,我建议把这张映射表格贴在实验室墙上,后面做功耗测量、排查干扰时能省掉大量时间。

3. 硬件连接:原理图阶段容易弄错的五个地方

3.1 PCA9422 的输入路径和负载瞬态

PCA9422 的输入侧看起来很简单,就是接电池或者 USB 5V,但实际设计里最容易被忽略的是输入电容和路径阻抗。PMIC 的 Buck 是开关电路,输入电流不是平滑的,而是脉冲式的,如果输入电容不够,电池到 PMIC 之间走得又细又长,负载一变就会在输入线上出现明显压降,可能触发欠压保护或者导致输出电压跌落。

我建议在 PMIC 输入端放一颗 10uF 左右的陶瓷电容,再并联一颗较小的 100nF 高频电容,并且尽可能靠近 VIN 引脚。如果输入来自 USB,还要考虑热插拔时 USB 线的寄生电感,在线缆插入瞬间会产生电压过冲,输入侧应该再预留一个 TVS 或压敏电阻。

输出侧的电容则要根据负载瞬态需求来定。PCA9422 数据手册一般会给最小输出电容值,但请不要"刚刚好",我会按手册参考值上浮 30% 到 50%,在高频大电流跳变的负载下留足余量。

3.2 I2C 控制线和中断线不要接反

PCA9422 控制接口是 I2C,MCU 通过这条总线完成寄存器读写、电压调节、状态查询。接线本身不复杂:SCL、SDA、中断输出中断引脚(如果使用)加上地线和电源线。

最容易出问题的是上拉电阻。I2C 是开漏结构,必须外加上拉,但上拉电阻接的电压域要和 MCU 的 IO 电压域一致。如果 MCU 的 I2C 引脚是 3.3V 电平,而 PCA9422 的 SDA/SCL 逻辑电平参考的是 PMIC 内部某个 1.8V 域,那这两者直接对接就有隐患。我建议仔细看 PMIC 数据手册里 I2C 引脚的 VIH/VIL 定义,再决定上拉电阻接 3.3V 还是接 PMIC 的 VDDIO。

另外,中断线最好接到 STM32F746ZG 的一个 EXTI 引脚,并且设置为下降沿触发。PMIC 一旦检测到过压、过温、输出电压异常,会把中断引脚拉低,MCU 通过 EXTI 及时进中断去做保护处理。不要用轮询方式读取状态寄存器,那样延迟太大,某些异常场景里差距就是毫秒级,足以烧毁负载。

3.3 内核 1.2V 直接旁路的接法

这是低功耗设计的一个关键点。STM32F746ZG 的正常供电方式是 VDD 接 3.3V,内部 LDO 产生 1.2V 核心电压,并在 VCAP 引脚上外接电容。但如果你希望省掉内部 LDO 的损耗、希望核心电压可以被外部调节,就需要启用旁路/外部供电模式。

启用前务必先把数据手册里 VCAP 引脚的电压容限查清楚,比如要求 1.2V 且偏差不超过 ±8%,然后才可以把 PCA9422 的 Buck2 输出直接接到 VCAP 网络。启用方式是先配置 MCU 的电源控制寄存器,再重新上电,而不是带电直接往 VCAP 上灌 1.2V。很多朋友第一次做这个操作时没有先切模式,结果芯片反复复位,实际上是内部的 LDO 和外部电源在抢核心电压网络,两个源同时驱动 1.2V 域,不打架才怪。

我在实测中习惯先让系统跑 3.3V + 内部 LDO 的基础版本,确认整板基本功能正常后,再切换到外部 1.2V 旁路。这样一旦出了问题,至少能区分是电源策略引入的问题,还是系统本身的问题。

3.4 去耦电容不是堆越多越好

在绝大多数 MCU 系统里,每个电源引脚放一个 100nF 是标配,关键电源域再加一颗 4.7uF 到 10uF 做储能。但很多人在 VDD、VCAP、PMIC 输出上不加选择地塞一大排电容,效果不但不好,反而可能更差。

原因有两点:第一,过大的电容会让电源控制环路的相位裕量变差,PMIC 的动态响应反而变慢,负载突然拉流时电压跌落更严重;第二,MLCC 陶瓷电容存在直流偏压特性,标称 10uF 的电容在 3.3V 偏压下实际容量可能只剩一半不到,你以为有大电容兜底,实际上没有。

正确做法是看数据手册推荐值起步,再结合自己系统的负载瞬态去微调。通常 PMIC 输出侧放一颗较大储能电容加一颗小容值高频电容就够,MCU 每个电源引脚附近的 100nF 紧随其后。堆料堆不出稳定,匹配才是王道。

3.5 别忽略上电默认状态

PCA9422 在固件还没来得及初始化之前,就已经在上电了。这意味着 PMIC 的默认电压、默认排序、默认使能状态,直接决定了 MCU 能否顺利启动。

有些 PMIC 版本支持引脚配置默认输出,比如通过外部引脚选择启动时的输出电压组合。如果这个默认状态和你的实际供电需求不一致,可能会出现这种情况:MCU 想要 1.2V 核心,结果 PMIC 默认输出 1.0V,CPU 无法完成复位,看起来就像"芯片坏的"。

解决方法是,硬件设计阶段就规划好启动配置文件,并且把启动后第一件事设置为读取 PMIC 状态、按需求重新写入关键寄存器。不要指望用户每次上电都先手动灌一份配置,必须保证默认值就是能稳定的组合,I2C 配置只是"锦上添花的微调"。

4. 上电时序:为什么三路电源不能一把梭

4.1 如果所有电压同时上来,会发生什么

新手经常会问:电源轨全部同时上电不是更快吗,为什么还要排序?

问题的根源在于上电过程中的电压竞争。如果 3.3V 和 1.8V 同时上升,在上升中间段可能有一个交叉区间:某个 IO 已经升到 1.5V,而另一个芯片的电源域只有 0.8V,此时引脚上的电平关系和稳态时完全不同,可能出现闩锁、双向电流、甚至芯片内部 ESD 结构失效。

另一个典型问题出现在 MCU 内部复位释放。如果核心电压还没稳定,但外部复位引脚已经被拉高,MCU 会尝试在核心电压处于"灰色区间"时开始初始化,轻则启动失败,重则 Flash 读取异常。所以很多 PMIC 会有专门的复位输出/Power Good 信号,用于告诉 MCU"所有电源轨已经稳定,可以释放复位"。

用 PCA9422 做排序的真正目的是让每一路电源都等到前面的条件成立后再启动,并提供一个干净的复位释放信号。这比用分立器件搭 RC 延时可靠得多,也不怕电容漏电导致延时不准确。

4.2 PCA9422 的排序是怎么实现的

PCA9422 的排序不是靠外部 RC 实现的,而是把需要控制的几个电源域按阶段组织起来,由 PMIC 内部逻辑依次使能,每个阶段之间的延时可以由寄存器/出厂配置决定。内部逻辑会同时监控某些阈值/电源正常信号,当前一级电压建立到差不多完成后,再开启下一级。

这种"按阶段使能"的方案在调试上非常方便,你可以用示波器检查每一路电压的建立时间,如果发现某一路启动得太快或者太慢,不需要改原理图,直接调整阶段延时或使能关系即可。所有参数都收拢到 PMIC 内部,而不是散落在几个电阻电容上。

有一点要注意:排序阶段并不代表"电压同时上升的速率"由 PMIC 控制,PMIC 能控制的只是启动顺序和延时,每一路自身的上升斜率主要取决于输出电容和负载。想要控制上电斜率,需要额外关注输出电容大小和软启动参数。

4.3 一个典型的上电时间轴配置例子

我当时的便携终端项目采用三段式上电:

  • 阶段 0:VIN 接入,等待输入电压超过欠压阈值。
  • 阶段 1:使能 Buck1,输出 3.3V 主电源,先给 MCU 的 IO 域、外部 Flash、PHY 上电,这个阶段延时约 1ms。
  • 阶段 2:使能 LDO1,输出 1.8V 给 SD 卡和低速外设,等待 2ms,让 3.3V 域稳定后再启动。
  • 阶段 3:使能 Buck2,输出 1.2V 给 MCU 内核域,再等待 2ms,让核心电压完全建立。
  • 最后,PCA9422 的电源正常/复位信号释放,STMCU 退出复位,开始执行固件。

这个顺序的核心逻辑是:先让 IO 和外围供电,再给核心供电,最后释放复位。原因很简单,STM32F746ZG 在复位期间要保持 IO 状态安全,如果 IO 先供电,核心后供电,整个启动过程中 IO 一直处于可预测状态,不会向外设输出冲突电平。

调试时我在每一路输出上都加了测试点和标记,方便用探头同时观察三到四路波形的建立顺序和斜率。第一次上电最好不要直奔功能测试,先做"电源时序验收",这是嵌入式项目的习惯动作。

5. 固件配合:初始化、动态调压和低功耗切换

5.1 电源管理的初始化流程

固件侧第一步是初始化 I2C,把 PCA9422 从启动默认状态切换到我们的目标配置。完整流程我一般这样写:

#define PCA9422_I2C_ADDR 0x48 static void pca9422_write_reg(uint8_t reg, uint8_t val) { uint8_t buf[2] = {reg, val}; /* 使用阻塞方式发送,初始化阶段不追求速度 */ HAL_I2C_Master_Transmit(&hi2c1, PCA9422_I2C_ADDR, buf, 2, 10); } static void pca9422_init(void) { /* * 初始化步骤: * 1. 先读取芯片ID/版本,确认I2C链路正常 * 2. 配置Buck1/Buck2输出电压 * 3. 配置LDO输出电压 * 4. 配置上电阶段延时、中断屏蔽位 * 5. 最后使能输出,进入运行状态 */ uint8_t chip_id = 0; HAL_I2C_Mem_Read(&hi2c1, PCA9422_I2C_ADDR, 0x00, 1, &chip_id, 1, 10); if (chip_id == 0x00) { /* 这里简单判断ID异常,实际项目应按数据手册的ID值判断 */ Error_Handler(); } /* 下面的寄存器地址请以数据手册为准,不能照抄 */ pca9422_write_reg(0x01, 0x03); /* 设置 Buck1 为 3.3V */ pca9422_write_reg(0x02, 0x02); /* 设置 Buck2 为 1.2V */ pca9422_write_reg(0x03, 0x01); /* 设置 LDO1 为 1.8V */ }

上面的寄存器地址只是为了说明代码结构,实际值必须对照 PCA9422 数据手册确认。我见过很多朋友复用网上代码,地址对不上,结果寄存器写进去了,电压完全不是预期值,然后花大量时间排查硬件,其实根因在软件。

初始化完成后,建议主动读取一遍电源状态寄存器,把各路的电压配置、错误标志都打印到调试串口,形成"上电自检记录"。这一点在量产阶段尤其有用,可以快速判断某块板子是电源配置异常还是硬件虚焊。

5.2 用 DVS 在负载变化时偷回电流

PCA9422 支持动态调压,意味着 MCU 可以在运行过程中改变某一路 Buck 的输出电压。对 STM32F746ZG 来说,内核电压和主频之间存在一个对应关系:主频越高,所需核心电压越高;主频降低后,内核电压可以适度下调,减少功耗。

DVS 的操作思路是:

  1. MCU 准备降频前,先把核心频率降下来。
  2. 降频后,通过 I2C 把 Buck2 输出从 1.2V 调到比如 1.1V。
  3. MCU 准备升频前,先把电压调回 1.2V,再提高主频。

顺序不能反。如果先降电压再降频率,核心可能在低频高电压下工作,显然浪费;如果先升频率再升电压,核心可能在电压不够的情况下尝试高频运行,轻则运行不稳定,重则复位。

实际项目中我把频率和电压组合做成了几个固定的工作点:

运行模式主频内核电压典型使用场景
满速运行216MHz1.2V显示刷新、算法计算、以太网传输
中速均衡120MHz1.1V传感器轮询、UI 刷新、常态运行
低速待机24MHz1.0VRTC 唤醒前、无外设活动时

切换工作点时,我用了一个非常简短的函数,先把频率切到目标值,再调电压。每次调电压后等一段时间,确认 PMIC 的状态寄存器显示输出稳定,再继续后续任务。这样虽然损失了几毫秒,但换来的是可靠。

5.3 进入 Stop/Standby 前要做的三件事

进入低功耗模式前,电源管理要处理三件事,少一件都可能在唤醒后出问题。

第一,把外设电源通知给 PMIC。如果有外设由 LDO 供电,而这些外设在睡眠期间不需要工作,就应该先把对应 LDO 关闭或者切换到低功耗模式,减少漏电路径。

第二,把 DVS 电压降到最低工作点。STM32F746ZG 在 Stop 模式下内核不需要满速电压,可以把 Buck2 降到最低支持值,同时确认 MCU 的电源控制寄存器已经完成旁路/低功耗配置。

第三,设置唤醒源并确认中断状态。PCA9422 的中断引脚如果连接到了 EXTI,睡眠前要把 PMIC 的中断状态寄存器读一遍并清掉旧的标志,否则唤醒可能被误中断触发,或者真正的故障中断被历史标志掩盖。

static void enter_lowpower_mode(void) { /* 1. 关闭不需要的外设电源 */ pca9422_write_reg(0x03, 0x00); /* 关闭 LDO1 */ /* 2. DVS 降电压 */ pca9422_write_reg(0x02, 0x01); /* Buck2 输出降到 1.0V */ /* 3. 清除 PMIC 中断标志 */ pca9422_write_reg(0x04, 0xFF); /* 写1清中断标志 */ /* 进入 STM32F746ZG 的 Stop 模式 */ HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_STOPENTRY_WFI); /* 唤醒后恢复电源配置 */ restore_power_profile(); }

唤醒后的恢复动作同样要注意顺序:先升内核电压,再开外设电源,最后把主频切回目标值。这也是一个典型的"先供电、后跑任务"逻辑,和上电时序的本质是一样的。

5.4 异常断电与过流/过温处理

PCA9422 这类 PMIC 通常带有过流、过温、欠压等保护逻辑,MCU 端要做的不是重新发明保护,而是及时响应 PMIC 的状态变化。

我习惯在 EXTI 中断回调里只做两件事:清除中断标志、设置一个电源故障标志位;真正的保护动作放到主循环里处理。中断里不做复杂操作,因为 PMIC 的中断可能代表电源异常,此时再去操作 I2C 容易雪上加霜。

主循环里发现电源故障标志后,按照优先级顺序处理:先把外设全部置于安全状态,再把关键数据写入非易失存储,最后根据故障类型决定是否重启系统。比如过温故障,可能等温度恢复正常后自动恢复;而过流故障,则可能需要切断大负载并进入故障锁存状态,等待人为干预。

不要试图在 PMIC 报警之后继续"坚持运行"。电源已经给出警告信号,继续跑大概率会带来不稳定或硬件损坏,做产品不是打游戏,该停机就停机。

6. 实测、功耗数据和踩坑记录

6.1 上电波形:看见了才能相信

第一次整板通电,我没有直接跑固件,而是用示波器挂了四路探头,测 VIN、3.3V、1.8V、1.2V 的上电顺序。采集到的波形让我发现了两个问题。

第一个问题是 1.2V 内核电源建立比预期慢,原因是 VCAP 引脚上的电容加得比较大,同时负载侧还有其他去耦电容拖慢了上升斜率。1.8V 启动后,1.2V 花了十几毫秒才到稳定值。这对于 MCU 启动倒没有致命影响,但如果你对时序有严格需求,就需要在 PCB 布局时把内核电源域的负载电容估算准确,提前在 PMIC 配置里留出更大的阶段延时。

第二个问题是 3.3V 轨在上电时有轻微的平台,其实是输入电流路径上的线路阻抗和输入电容的充电效应叠加造成的。后来我把输入侧走线加宽,减小了输入电容和负载电容的直接并联关系,波形就平滑了。

看波形时重点看三件事:各路电压的建立顺序、是否出现台阶或跌落、复位释放点是否在所有电源稳定之后。只要这三条满足,上电时序基本就是安全的。

6.2 I2C 通信老失败的根因

调试过程中我遇到一个顽固问题:PCA9422 偶尔读不到芯片 ID,导致初始化流程直接报错。一开始怀疑是虚焊或者 PMIC 损坏,换了板子仍然随机复现。用逻辑分析仪抓 SDA/SCL 才发现,I2C 总线上存在明显的信号长期低电平现象,怀疑是有设备在通信过程中拉死总线。

最后定位到原因是我把 PCA9422 的 SDA/SCL 上拉电阻接在了 3.3V 域,但 STM32F746ZG 对应的 GPIO 配置成了开漏,且没有正确设置外部上拉的供电关系。两个器件对 I2C 逻辑电平的理解不一致,在总线延展较短时可能没问题,一旦走线稍长或者有干扰,就随机失败。

解决方法是把上拉电阻电压域和 MCU 的 I2C 引脚电平完全对齐,同时给总线并联 100pF 左右的电容做滤波。后续再没有出现过随机通信失败的问题。

这个坑提醒我,PMIC 这种挂在 I2C 上的关键器件,通信可靠性必须早早在测试阶段压测,而不是等到整机异常后才开始排查。

6.3 一个简单却有效的功耗测量方法

动态调压和低功耗切换到底省了多少电,需要用数据说话。专业电流分析仪当然好,但很多实验室只有普通万用表,我分享一个凑合却能用的办法。

把 PMIC 的输入电源路径上串一个低阻采样电阻,比如 10mΩ 的高精度电阻,然后用示波器测量电阻两端压降,根据压降除以阻值得到电流。示波器用高分辨率采集,可以看到系统在不同状态下的电流变化曲线。

用这个办法,我测得过一组很直观的数据:满速运行 216MHz、内核 1.2V 时,整板电流约 180mA;切成中速 120MHz、内核 1.1V 后,降到 110mA 左右;进入 Stop 模式且关闭 LDO1 后,整板电流只有 2.1mA。如果没有 DVS,只在软件上降频,大概只能降到约 150mA。可见动态调压省下的电流在中高速区间非常明显。

要注意的是,采样电阻不能太大,否则 PMIC 输入电压会被拉低,影响系统工作;也不建议直接把万用表串进去测动态电流,那段引线电阻会使结果严重失真。

6.4 我最后保留的几个设计参数

经过整轮调试后,我保留的设计参数大致如下:

项目参数
PMIC 输入电压范围3.7V 锂电池供电,最低截至 3.3V 触发欠压
Buck13.3V,输出电容 22uF + 100nF
Buck21.2V/1.1V/1.0V 可调,输出电容 22uF + 100nF
LDO11.8V,输出电容 10uF
上位机通信I2C 400kHz,上拉 2.2kΩ
上电延时阶段间 1ms/2ms/2ms
复位释放所有电源稳定后再释放 50ms

这些参数不是最优解,但它们是经过实测验证的组合,稳定性和功耗表现我都满意。如果你做相近的系统,可以以此为起点,再根据你的外设情况微调。

最后再说一点个人体会:电源管理这件事,最容易出问题的往往不是高端设计,而是基础细节。电压映射有没有写全、上电顺序是否验证过、I2C 电压域是否对齐、去耦电容是否匹配,这些看起来单调的琐碎事情,才是决定整机稳定性的关键。用 PCA9422 做电源管理,好处是把很多控制逻辑集中到固件里,意味着你在实验室里可以一遍遍调参、测波形、量功耗,直到找到最适合这套组合的参数组合。开发结束后,这套调试经验很值得固化下来,下一次换板子换 MCU 时,能少走不少弯路。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询