news 2026/10/21 21:32:17

PMIC+MCU协同:便携设备电源管理与低功耗设计实战

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
PMIC+MCU协同:便携设备电源管理与低功耗设计实战

最近在折腾一台便携式数据采集器,主控选了 STM32F423RH,因为它有浮点单元、USB,外设也够用,想着后面升级固件、接个调试口都方便。板子上电后第一版电源方案却把我折腾得不轻——直接用几路 LDO 给整板供电,电池电压稍微下降一点就掉电复位,显示模块初始化经常被打断,待机电流更是高得没法看。后来把供电部分改成由低功耗 PMIC PCA9422 统一管理,再通过 STM32F423RH 的 I2C 接口去调度各路电压,问题才算真正解决。

这篇文章就是把这个项目的电源管理部分复盘一下,讲讲为什么选择 PMIC 替代分立电源方案,硬件上哪些细节容易踩坑,上电时序怎么和 MCU 配合,以及 I2C 寄存器配置、低功耗协同、调试排障的完整思路。适合正在做便携设备、电池供电产品、低功耗传感器节点,或者想搞懂 PMIC 如何与 MCU 协同工作的朋友参考。

1. 为什么把电源管理交给一颗 PMIC,而不是自己搭建 LDO/DCDC 链路

1.1 传统分立方案的问题出在哪

早年做小系统电源,最省事的办法就是从电池正极拉出几路 LDO,按各模块需要的电压选型号。PCBA 尺寸不大,成本也低,可真正用起来问题一堆。

第一是效率问题。一节锂电池的电压范围大致在 3.0V 到 4.2V 之间,如果系统中有一个 1.8V 的轨,用 LDO 从 3.7V 直接降到 1.8V,压差接近 2V。假设这一路电流 200mA,LDO 上功耗就是 0.4W 左右,而且这些功率全变成热量散掉。对于便携设备来说,这既影响续航,也考验外壳散热。

第二是上电顺序。多路 LDO 输出哪个先起来,哪个后起来,在早期设计中完全靠电容充电时间和复位芯片的阈值去凑。系统规模一大,各路电压之间的相对时序就变得很微妙。我遇到过一种情况:屏幕模块先上电,而主控还没完成复位,导致 GPIO 输出高阻态期间总线电平不确定,初始化的时候就出乱七八糟的故障。

第三是动态调压极为困难。分立电源一段时间后想降低某一路供电电压来省电,只能去换反馈电阻,或者重新选型 LDO。硬件改版周期长,完全不支持软件动态调节。

所以我后来基本不再用“手拉线”的方式构建整板电源,而是转用集成的 PMIC。

1.2 PCA9422 加 STM32F423RH 的组合补了什么

PCA9422 这颗 PMIC 的特点,是它把所有电源管理的关键模块都集成到了一起:高效率的 DCDC 降压转换器、LDO、电源开关、状态输出,以及一个标准的 I2C 配置接口。简单说,它不像传统稳压器那样只能用电阻设定一个固定输出,而是可以让 MCU 在运行过程中随时读取电源状态、切换工作模式、调整输出电压。

STM32F423RH 在这一组合里负责的是“电源大脑”的工作。它通过 I2C 与描绘 PCA9422 通信,系统冷启动后接管电压配置,运行中根据任务负载动态调压,进入睡眠前主动关掉不需要的电压轨,醒来后再恢复输出。这套流程做下来,电源管理就不只是硬件的问题,而是软件和硬件协同的系统工程。

两种方案的对比在选型时很有参考意义:

对比项分立 LDO/DCDC 方案PCA9422 + MCU 方案
多路输出效率低压差场景尚可,大压差场景发热明显DCDC 为主,效率高;LDO 只负责小电流/噪声敏感电路
电压调整方式改反馈电阻或换型号I2C 软件配置,可动态调压
上电顺序用 RC、复位 IC 硬凑,难以精确控制默认输出 + 硬件 strap 保证,MCU 可通过 I2C 优化
待机功耗控制每路 LDO 静态电流叠加,难以整体切断可通过寄存器关闭输出轨,静态电流更低
电源状态监控需要额外 ADC 电路PMIC 自带状态位,MCU 可直接读取
调试复杂度多个器件、多个故障点单个器件,故障点集中,I2C 可回读

当然,PMIC 方案的成本也比单个 LDO 高一点,如果产品只需要一路 3.3V 供电,那完全没必要上 PMIC。但需要多路电压轨、低功耗动态管理、支持待机长期挂机。这类场景用 PCA9422 加 MCU 的组合更合适。

2. 原理图与 PCB 设计:外围参数、电平连接和漏掉就返工的细节

2.1 电感、输入输出电容到底怎么选

DCDC 降压转换器的外围器件选型,直接决定了输出纹波和瞬态响应。我这里以 PCA9422 内部的 DCDC 通道为例,说一下通用的选择思路。

电感感值要根据开关频率、输入输出电压和期望的纹波电流来计算。工程上常用的近似公式是:

L = (Vin - Vout) × Vout / (Vin × fsw × ΔI)

其中 Vin 是输入电压,Vout 是输出电压,fsw 是开关频率,ΔI 是电感纹波电流。实际选取时,通常把纹波电流控制在最大输出电流的 20% 到 40% 之间。如果输出电流是 500mA,纹波系数取 0.3,那么 ΔI 就是 150mA 左右。算出感值后再向上取标准感量,一般 2.2uH 到 4.7uH 之间比较常见。

需要注意的不只是感值,还有电感饱和电流。电感在峰值电流接近饱和点时,感量会迅速下跌,表现为输出电压纹波突然变大,甚至出现尖峰噪声。选型时,饱和电流至少留出 1.5 倍到 2 倍的最大输出电流余量,这样即使在瞬态大电流下,电感也不会进入深度饱和状态。

输入输出电容看似不起眼,实际上很关键。输入侧电容负责抵消电池线缆带来的纹波,一般需要 4.7uF 以上的低 ESR 陶瓷电容。输出侧电容影响纹波电压和负载瞬态响应,建议 10uF 到 22uF。这里我建议用 X5R 或 X7R 材质,避免用高容量但温度特性偏软的 Y5V。在布局上,输入电容尽量靠近 VBAT 引脚,输出电容靠近 DCDC 输出引脚,回流路径越短越好。如果空间允许,用两个小容值电容并联,ESR 表现往往比单个大电容更好。

2.2 I2C、使能和 GPIO 的连接细节

硬件上最容易翻车的,是电平域和信号时序。PCA9422 的 I2C 接口工作电压要跟它的 IO 电源域一致。如果这个电源域是 3.3V,那么 STM32F423RH 的 I2C 引脚也工作在 3.3V,才能保证逻辑电平匹配。STM32 的某些引脚是 5V 容忍的,但最好还是确认清楚,不要默认都兼容。

I2C 的 SCL、SDA 必须接上拉电阻,典型 4.7kΩ 到 10kΩ 都可以。上拉电阻所接的电压域要和 PMIC 的 IO 电源域一致,一句话:PMIC 和 MCU 两边都在同一个逻辑电平下通信,电路才稳定。如果你系统里 MCU 的 IO 域是 1.8V,PMIC 的 IO 域是 3.3V,那中间还要加电平转换或者选支持电压域配置的版本。

使能引脚 EN 的处理方式很关键。如果你希望电池一接入,PMIC 就自动启动,那 EN 应该直接接到输入电源正极。通过 MCU 的 GPIO 去控制 EN,虽然看起来灵活,但冷启动的时候有一个鸡生蛋的问题:MCU 还没上电,手伸不到 EN 引脚,系统就一直停在关机状态。所以一般推荐 EN 接 VBAT,或者用一个简单的 RC 延迟网络控制启动时间,让 PMIC 的输出先稳定,MCU 再跟着上电。

PCA9422 的 GPIO 或者状态输出引脚值得好好利用。比如把低电量告警输出接到 STM32F423RH 的 PA0 这类支持外部中断的引脚上,系统就能立即感知电源状态变化。类似的引脚还可以配置成“电源就绪”信号,在 PMIC 输出稳定后产生一个上升沿,作为 MCU 复位释放的条件之一。

2.3 一个参考连接的实例

下面是我一个项目里整理出的连接清单,可以作为原理图设计的起点:

PCA9422 引脚连接到 STM32F423RH/板级说明
VBAT电池正极,并联 100nF 高频去耦电池电压范围内的主输入
DCDC 输出STM32 的 VDD、VDDA 等主要电源轨根据负载电流调整输出配置
LDO 输出模拟电路、SD 卡等噪声敏感模块注意轻载时的稳定性
SCLSTM32 I2C1_SCL,经上拉电阻到 3.3V通信时钟
SDASTM32 I2C1_SDA,经上拉电阻到 3.3V通信数据
GPIO/状态输出STM32 PA0 外部中断输入低电量或其他状态告警
EN电池正极 或 延迟网络保证 PMIC 先启动

首次做样机的时候,我建议把 PMIC 的 strap 引脚或者默认配置引脚都引出到测试点,至少预留 0Ω 电阻的位置。这样调试阶段想改默认电压、改变上电顺序,不用重新打板,直接换电阻方向就能试。

3. 上电瞬间的分工:默认电压、硬件使能和 MCU 接管时序

3.1 上电顺序要反过来设计

很多人在设计电源时习惯先想“我 MCU 跑起来,然后再控制电源”,这个顺序在冷启动场景下其实是反的。正确的逻辑是:电源必须先生成,MCU 才能运行;MCU 运行后,再去优化和调度电源。所以 PCA9422 必须有一个不依赖 MCU 的默认输出状态。

这类 PMIC 通常通过硬件 strap 引脚来设定上电默认输出电压,或者内部寄存器本身就有出厂默认值。这相当于一个“安全兜底”:哪怕 MCU 固件没烧录、I2C 完全没初始化,系统只要接入电池,核心电压轨依然能建立起来,MCU 也能正常上电复位。

这个兜底设计非常有用。调试的第一版样机往往 MCU 里面是空的,如果你把系统设计成必须等 MCU 初始化 I2C 才会输出电源,那结果就是整板永远起不来,而且你还很难排查,因为电源根本不工作。

3.2 完整时序是什么样

以电池供电场景为例,冷启动时序大致可以拆成下面几个阶段:

第一个阶段是电池接入。电池正极经过输入电容连接到 PCA9422 的 VBAT 和 EN 引脚,此时 PMIC 开始工作,内部参考电压建立。

第二个阶段是 PMIC 输出建立。PCA9422 按照 strapping 决定的默认电压开启 DCDC 和 LDO 输出。通常这个过程在几百微秒到几毫秒内完成,具体取决于输出电容的大小和软启动时间。此时 STM32F423RH 的 VDD 开始上升。

第三个阶段是 MCU 复位释放。VDD 上升至 STM32F423RH 的 POR 阈值后,内部复位信号释放,MCU 从 Flash 取指运行启动代码。此时 PCA9422 已经稳定输出,MCU 不需要为电源操心。

第四个阶段是 MCU 接管。启动代码初始化时钟和 I2C 外设,通过 I2C 向 PCA9422 写入寄存器,把各路输出电压从默认值切换到系统设计的目标值。这个阶段开始,电源才进入“半软件控制”的状态。

3.3 默认电压不匹配的坑

我在这上面吃过大亏。有一版样机为了省功耗,把 PMIC 的 LDO 默认输出电压设得很低,而 STM32F423RH 的 IO 域需要 3.3V 才能保证外部器件工作。结果是 STM32 自己上电倒是正常,但外设一访问就出错,因为 LDO 输出根本没到目标电平。

排查到最后才发现是 strap 电阻的问题。原来 PCA9422 的上电默认电压由 strap 引脚的电平决定,原理图上漏画了其中一个设置电阻,芯片使用内部默认值而非我需要的电压,所以才出现这种“MCU 醒了但外设没醒”的局面。

调试这个问题的技巧是:不要把 strap 配置一次性焊死。最开始打样时,所有 strap 电阻位都预留 0Ω 和 NC 的选项。上电后用万用表量一下每路输出是否和你预期一致,确认无误再固化设计。等固化之后,再通过软件 I2C 将它调整到精确电压。

如果你希望系统做到“真正全关断”,即整机休眠时连 MCU 的供电也切断,那就要额外考虑一个唤醒回路。可以把外部按键的边沿信号引到 PCA9422 的使能或唤醒端,但要注意 PMIC 自身的工作电流会变成系统底电流,要仔细核对芯片手册里的静态电流指标。如果 PMIC 静态电流已经足够低,这种方案在可穿戴设备里是完全可行的。

4. I2C 寄存器配置实战:初始化、调压与回读校验

4.1 先搞定 STM32F423RH 的 I2C 底层

用 STM32 的标准外设库或者 HAL 库都能操作 I2C。我这里用 HAL 库做示例,因为这个平台下 HAL 的代码通用性最好,也方便做超时和错误处理。

I2C 时钟的配置,我建议先把频率设置在 100kHz 标准模式,确认整个链路通信稳定以后再升到 400kHz 快速模式。PCA9422 支持快速模式,但系统里如果挂了其他低速 I2C 器件,总线速度会被拖慢,一上来就用 400kHz 容易给自己找排查麻烦。

初始化代码大致是:

#include "i2c.h" #define PMIC_I2C_ADDR (0x4E << 1) // 根据实际器件地址调整 #define PMIC_REG_CTRL 0x01 #define PMIC_REG_DCDC 0x02 #define PMIC_REG_LDO 0x03 #define PMIC_REG_EN 0x04 #define PMIC_REG_STATUS 0x05 I2C_HandleTypeDef hi2c1; void MX_I2C1_Init(void) { hi2c1.Instance = I2C1; hi2c1.Init.ClockSpeed = 100000; hi2c1.Init.OwnAddress1 = 0; hi2c1.Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT; hi2c1.Init.DualAddressMode = I2C_DUALADDRESS_DISABLE; hi2c1.Init.GeneralCallMode = I2C_GENERALCALL_DISABLE; hi2c1.Init.NoStretchMode = I2C_NOSTRETCH_DISABLE; if (HAL_I2C_Init(&hi2c1) != HAL_OK) { // 打印错误信息或进入错误处理 } }

接着封装两个寄存器读写函数,后面所有配置都基于这两个函数:

HAL_StatusTypeDef PMIC_WriteReg(uint8_t reg, uint8_t value) { return HAL_I2C_Mem_Write(&hi2c1, PMIC_I2C_ADDR, reg, I2C_MEMADD_SIZE_8BIT, &value, 1, 100); } HAL_StatusTypeDef PMIC_ReadReg(uint8_t reg, uint8_t *value) { return HAL_I2C_Mem_Read(&hi2c1, PMIC_I2C_ADDR, reg, I2C_MEMADD_SIZE_8BIT, value, 1, 100); }

写寄存器时务必注意一点:I2C 传输前要确保总线空闲,尤其是从低功耗模式唤醒后,I2C 的引脚状态可能还没恢复完,立刻发数据容易触发总线错误。比较好的做法是在 I2C 初始化之后加一个小的延迟,等内部状态机稳定。

4.2 配置流程和关键位段

PCA9422 的寄存器布局在量产批次中可能会因为型号配置不同而略有差异,但寄存器配置的逻辑是通用的。我在项目里整理的配置流程是五步:

第一步,软件复位。往控制寄存器写入软件复位命令,让 PMIC 回到一个确定的初始状态。然后延时 2ms 左右,等待内部状态机恢复。

第二步,配置 DCDC 输出电压。设置 DCDC 的输出档位,我一般根据系统主电压来定,比如 3.3V 给 MCU 和外设接口。如果后续需要动态调压,这一步相当于设定默认值。

第三步,配置 LDO 输出电压。LDO 输出给模拟电路、SD 卡这类对纹波比较敏感的模块时,电压按模块要求设定。记得 LDO 一般有最小负载电流的要求,如果后续没有外接负载,可以考虑关闭 LDO 或者加一个合适阻值的假负载。

第四步,使能输出通道。使能寄存器里通常有 DCDC 使能位、LDO 使能位、负载开关使能位。按需打开,不需要的通道保持关闭。

第五步,回读校验。读出刚才写入的寄存器值,和期望值比对,同时检查保留位有没有被意外改动。

一个初始化函数可以这样写:

void SystemPower_Init(void) { uint8_t value = 0; // 1. 软件复位 PMIC_WriteReg(PMIC_REG_CTRL, 0x01); HAL_Delay(2); // 2. 设置 DCDC 输出 3.3V PMIC_WriteReg(PMIC_REG_DCDC, 0x1A); // 值需按手册档位表修正 // 3. 设置 LDO 输出 1.8V PMIC_WriteReg(PMIC_REG_LDO, 0x0C); // 值需按手册档位表修正 // 4. 使能 DCDC + LDO + 负载开关 PMIC_WriteReg(PMIC_REG_EN, 0x07); // 5. 回读校验 PMIC_ReadReg(PMIC_REG_EN, &value); if ((value & 0x07) != 0x07) { // 回读失败,重新初始化或记录错误 } }

代码里的寄存器地址和取值是示意,实际做项目时必须以你所拿到的 PCA9422 版本的数据手册为准,对照寄存器位段表填写。有些型号的 DCDC 输出电压步进是 25mV,有些是 50mV,不能凭经验硬套。

4.3 动态调压的时机和边界

PCA9422 配合 I2C 的一大价值是动态电压调节。系统任务重的时候,可以把 DCDC 输出调到稍高的电压保证性能。任务轻的时候,把电压调低一节,降低功耗。

这里有个经验:电压切换要尽量避免在负载大电流期间发生。如果模块正在满负荷运行,突然降低核心电压,瞬态响应跟不上,系统就可能掉电复位。比较稳妥的做法是先降负载,再降电压;升电压的时候则可以快速完成。这有点像开车进弯道前先减速,等出了弯道再加油,而不是弯道中间猛地踩油门。

如果你在系统中把 PMIC 的电压轨同时供给 MCU 和外部传感器,动态调压之前一定要确认所有连接到该轨的器件都支持目标电压范围。我曾经只调整了 DCDC 电压没注意某个传感器的最低工作电压,结果系统看起来一切正常,传感器数据却开始在低电压区间出现间歇性异常,排查了很久才发现是电压越界。

5. 低功耗场景下 PMIC 与 MCU 的协同:睡眠、唤醒与电压切换

5.1 低功耗不等于 MCU 睡眠

不少人在做低功耗产品时,第一反应是研究 MCU 的 Stop、Standby 模式怎么配。这个思路没错,但如果只让 MCU 睡眠、电源板上的各路电源却全部保持输出,待机电流根本降不下来。外设的静态电流板子上的 sensor 和接口芯片的漏电流都还挂在电源轨上,哪怕每个只有几十微安,挂上三五个模块,待机电流照样跑到上百微安。

正确做法是把低功耗设计拆成三层:第一层,MCU 进入低功耗模式;第二层,MCU 在进入睡眠前通过 I2C 关闭 PMIC 上不用的供电通道;第三层,把仍然需要供电的模块电压调低到维持运行的最低值。三层叠起来,待机电流才能做到体系级别的下降。

STM32F423RH 支持的 Stop、Standby 模式各有各的用处。Stop 模式下,MCU 的大部分时钟停止,SRAM 内容保持,可以由外部中断唤醒。Standby 模式功耗更低,但相当于复位唤醒,重新运行启动代码。我一般把 Stop 模式用在中低频任务场景,把 Standby 用在长时间挂机场景。

5.2 低功耗切换的流程怎么写

下面是一段进入低功耗状态的简化流程:

void Enter_Sleep_Sequence(void) { // 1. 关闭外部大电流外设,比如 LCD、射频模块 ExternalDevice_PowerDown(); // 2. 通过 PMIC 关闭不用的电源轨 PMIC_WriteReg(PMIC_REG_LDO, 0x00); // 关闭 LDO PMIC_WriteReg(PMIC_REG_EN, 0x01); // 只保留 DCDC 输出 // 3. 切换 PMIC 到低功耗模式 PMIC_WriteReg(PMIC_REG_CTRL, 0x02); // 假设 bit1 为节能模式使能 // 4. MCU 进入 Stop 模式 HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_STOPENTRY_WFI); }

唤醒后不要直接干重活,先做两件事:一是通过 I2C 把 PMIC 的电源轨恢复到正常运行状态,包括重新使能 LDO、退出节能模式;二是等电源输出电压稳定一小段时间,再让外设上电开始通讯。

这里有一个容易被忽略的细节:MCU 唤醒后 I2C 外设需要重新初始化,因为很多芯片在 Stop 模式下外设时钟都被关闭了。你可能会遇到从头开始调用 MX_I2C1_Init 却仍然通信失败的情况,原因通常是总线状态还没被释放。这种时候除了初始化,再对 SCL 线做几次时钟翻转,把总线恢复到空闲状态,然后重新发起通信,基本就能解决。

5.3 实测电流的参考数量级

我用这类 PMIC 加 MCU 的方案做过一轮连续待机测试,下面是一个参考数量级,具体和你的外设配置、电源轨数量相关,不具有普适性,但可以用来做方向性判断:

系统状态实测整机电流主要功耗来源
全速运行约 30mAMCU 运行功耗 + 外设正常供电
Sleep 运行约 2mALDO 关闭,DCDC 保持,外设全部断电
Stop 深度睡眠约 200uAMCU 唤醒逻辑保持,PMIC 节能模式
Standby + PMIC 低功耗约 8uA仅 PMIC 静态电流和唤醒电路

如果你的设备在低功耗模式下电流还是很大,优先检查有没有哪一路电源没有真正关闭。我遇到过 PMIC 使能位写了关闭,但没回读确认的情况。后来查看寄存器,发现某一位因为写入的掩码错误没生效,那一整路电源其实还在工作。所以低功耗进场之前回读寄存器,应该作为固定动作。

6. 实测调试:从波形、总线和电流曲线定位问题

6.1 常见现象与原因对照表

调试阶段遇到的问题是多种多样的,结合 PMIC 和 MCU 组合的常见情况,我整理了一份对照表:

现象大概率原因处理办法
上电后 MCU 反复复位某路电压建立太慢或瞬态跌落检查输出电容、电感饱和电流,考虑提升 PMIC 启动速度配置
PMIC 输出纹波明显电感布局、电容 ESR 偏高或接地回流过长调整 PCB 布局,核对纹波电流计算
I2C 通信偶发失败上拉阻值不合适、总线电平不一致、唤醒后总线未释放换合适上拉,校准电平域,唤醒后先清总线再通信
待机电流比预期高很多某路电压轨未真正关闭,外设漏电流叠加回读 PMIC 寄存器,逐路断开排查
电压调整后系统卡死调压期间负载仍满载导致瞬态响应失败先降负载再调压,检查低电压阈值
PMIC 温度偏高DCDC 长期处在深度 PFM/PWM 切换状态调整模式,降低开关损耗或电感感值

6.2 一套完整的排查步骤

如果问题不明,我会按下面的链路排查,从物理层到协议层再到软件层,一步一步排除。

第一步,示波器看输出波形。至少看两路输出:MCU 主电源轨和 PMIC 使能信号。重点看上升沿、电压过冲和稳定时间。如果输出在启动过程中有塌陷或者振荡,先不要动软件,从硬件参数找原因。

第二步,逻辑分析仪抓 I2C 时序。确认每一帧数据里面地址、寄存器、数据都正确,尤其要留意 ACK 位和 STOP 条件是否完整。PMIC 通信这类简单 I2C 设备很少出复杂的协议错,但我在真实的项目里碰到过因为 PMIC 器件 7 位地址左移一位没配置对,导致整个初始化毫无反应,这个看波形一眼就能发现。

第三步,电流测量。在电池输入处串入采样电阻,用示波器观察电压降换算成电流。通常能看到电流在运行、睡眠、唤醒不同阶段的跳变。如果某一段电流异常偏高,把 PMIC 各路使能位逐个关掉,每次关闭后看电流下降量,就能锁定谁是耗电大头。

第四步,回读寄存器做软件复盘。PMIC 寄存器只反映当前状态,经常能帮你发现“之前写的配置在某些边界条件下被意外覆盖”这类问题。回读后和期望值比对,如果偏差出现在保留位,基本可以断定写入的配置值格式有问题。

6.3 调试中用到的几个实用技巧

第一,给 PCB 预留测试点。在 PMIC 输入侧、每一路输出侧都预留 0Ω 电阻位或者直接焊上 10mΩ 采样电阻。不要依赖万用表表笔去夹小型化器件的引脚,那个接触不稳定,尤其在测量动态电流的时候几乎没法用。

第二,I2C 上拉电阻不要焊死在 PCB 默认值上。设计初期可以留 0402 封装的位置,多试几个阻值。100kHz 模式和 400kHz 模式对总线上升沿的要求不同,阻值太小增加功耗,阻值太大波形边沿过缓容易误判。一般 4.7kΩ 是一个比较均衡的起点。

第三,所有电源轨的测试点尽量集中布置在一个区域。调试时示波器探头地线夹子能共地,否则不同探头之间的地环路会引入大量噪声,会让你把正常的纹波误判成问题。

第四,排查时不要忘了看 PMIC 数据手册里的“时序要求”部分。有些配置建议是在特定时间窗口内完成的,比如上电后多少个毫秒内不要对芯片进行 I2C 操作,否则内部校准还没完成。这些细节在应用笔记里写得很清楚,提前看一眼能省很多排查时间。

调试完成之后,再把整个配置流程固化到代码里。我倾向于把 PMIC 初始化函数分成“最小启动”和“完整配置”两段:最小启动只把必要电压轨打开,保证系统能跑;完整配置再调整到性能优化状态,包括启用动态调压策略。这样以后如果遇到启动问题,可以快速切换成最小启动模式,快速定位是软件配置问题还是硬件问题。

这台样机后来跑得比较稳,关键是清楚了“PMIC 不是普通稳压器,而是可编程电源系统”这个思路。把默认 strap 先调到能无代码启动,再通过 I2C 逐个优化电压和模式,整个调试试错周期会短很多。另外就是,PCA9422 的寄存器定义和时序要求一定要对着最新数据手册做,版本不同配置方法可能有差别,手头有文档比凭记忆更重要。希望这篇文章对正在调电源的你有一点帮助。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/19 17:48:18

医疗大数据预测分析落地全链路:从数据到决策闭环

大数据预测分析这个词&#xff0c;在医疗保健领域已经不算新鲜了&#xff0c;但真正把它落地到具体业务里的人&#xff0c;应该都有同感&#xff1a;它听起来宏大&#xff0c;实际做起来全是细节。我在协助几家医院梳理数据项目的过程中&#xff0c;感受最深的一点是&#xff0…

作者头像 李华
网站建设 2026/10/16 2:16:39

老破小翻新机构有哪些 靠谱专业公司实力参考

长春老破小翻新避坑指南&#xff1a;靠谱装修公司选哪家?很多长春老小区业主都在找靠谱的老破小翻新公司&#xff0c;却很容易被低价引流、外包队、隐性增项等套路坑到。作为长春市装饰协会会员单位&#xff0c;长春市好工长装饰工程有限公司深耕本地老房改造赛道7年&#xff…

作者头像 李华
网站建设 2026/10/21 19:07:30

第 31 章 · 特征值分解

第 20 章讲了特征值的概念&#xff0c;本章讲如何在 Eigen 里求解特征值和特征向量&#xff0c;以及它们的应用。31.1 对称矩阵&#xff1a;SelfAdjointEigenSolver 对称矩阵&#xff08;AᵀA&#xff09;的特征值全是实数&#xff0c;用 SelfAdjointEigenSolver&#xff1a; #…

作者头像 李华
网站建设 2026/10/19 11:37:35

从车友群刷屏说起:安卓车机用户被“盒子“统治了多久?

从车友群刷屏说起&#xff1a;安卓车机用户被"盒子"统治了多久&#xff1f; 【免费下载链接】DiPlay Independent CarPlay receiver for compatible Android head units. Wired and wireless public preview. 项目地址: https://gitcode.com/gh_mirrors/di/DiPlay …

作者头像 李华
网站建设 2026/10/16 10:31:34

Linux驱动-系统移植

结束了ARM架构的学习&#xff0c;现在开始Linux驱动模块的学习。首先是Linux系统移植&#xff0c;我们需要把Linux系统移植到硬件平台。今天从头到尾完整实操了整套流程&#xff1a;从理解Linux内核基础概念、搭建Ubuntu虚拟机开发环境&#xff0c;配置双网卡网络&#xff0c;使…

作者头像 李华
网站建设 2026/10/16 1:58:57

FreeRTOS 任务调度机制

一. FreeRTOS 中的任务状态一个任务通常会处于以下四种状态之一。1.1 运行态 Running当前正在使用 CPU 执行的任务处于运行态。在单核 MCU 中&#xff0c;同一时刻通常只有一个任务处于运行态。1.2 就绪态 Ready任务已经具备运行条件&#xff0c;但当前没有获得 CPU。例如&am…

作者头像 李华