3. 系统级低功耗架构:电源管理单元(PMU)设计、动态电压频率调整(DVFS)、电源门控(Power Gating)技术

好,咱们进入正题。这一章聊的是系统级的低功耗手段,说白了就是怎么从架构层面把功耗「管」起来。我个人觉得,这部分才是真正拉开功耗差距的地方。你算法再优化,代码再精简,如果电源管理没做好,那电池还是撑不了多久。

我当年做第一个仿生定位项目时,就吃过这个亏。硬件选型、算法压缩都搞定了,结果整机功耗还是超标。后来一查,问题出在电源管理上——该关的模块没关,该降的频率没降。从那以后,我养成了一个习惯:画系统框图时,先把电源域画出来,再谈别的。

3.1 电源管理单元(PMU)设计

PMU 是什么?你可以把它理解成整个系统的「供电调度中心」。它不负责具体的计算,但负责给各个模块分配电压、控制上电时序、监测电源状态。

设计 PMU 时,我一般会关注这几个点:

  • 多电源域划分:把不同电压需求的模块分开供电。比如传感器接口用 1.8V,核心处理器用 1.1V,射频部分用 3.3V。这样每个域都能工作在最优电压下,不会互相拖累。
  • 上电时序控制:有些模块必须先上电,后上电的模块才能正常工作。比如 MCU 必须先起来,才能去配置传感器。时序乱了,轻则功能异常,重则烧芯片。
  • 低静态功耗设计:PMU 本身也在耗电。我习惯选用静态电流在微安级的 LDO 或 DC-DC,而不是那种动不动就毫安级的方案。

核心原则:PMU 的设计目标不是「供电」,而是「按需供电」。不需要的时候,连 1 微安都不要浪费。

我记得有一次,一个同事问我:「为什么我的系统休眠时还有 5mA 电流?」我让他查 PMU 的使能引脚,结果发现一个 LDO 的使能脚被悬空了,默认是开启状态。嗯,这种坑,踩过一次就记住了。

3.2 动态电压频率调整(DVFS)

DVFS 这名字听起来挺唬人,其实道理很简单:任务重的时候跑快点,任务轻的时候跑慢点。你想想看,处理器大部分时间其实都在等数据,没必要一直全速运行。

DVFS 的核心是找到「性能」和「功耗」的平衡点。CMOS 电路的功耗公式大家都熟:

P = C × V² × f

电压 V 是平方项,所以降电压的效果比降频率更明显。但问题是,电压不能无限降——频率越高,需要的电压就越高。所以 DVFS 的策略通常是:

  • 高负载时:提高电压和频率,保证性能
  • 中负载时:适当降低频率,电压跟着降一点
  • 低负载或空闲时:降到最低工作电压和最低频率

我在项目中用过一种简单的 DVFS 实现方式:根据 CPU 的利用率动态切换工作模式。比如利用率超过 80% 时切到高频模式,低于 30% 时切到低频模式。中间加个迟滞,防止频繁切换。

实战技巧:切换频率和电压时,一定要先升压再升频,先降频再降压。顺序搞反了,芯片可能会死机。我刚开始做的时候就被这个坑过,调试了两天才发现是时序问题。

下面这张图展示了 DVFS 的基本工作流程,我把它画成了 SVG,方便你理解:

DVFS 工作流程图 系统运行 监测 CPU 负载 负载 > 80%? 高频模式 升压 → 升频 低频模式 降频 → 降压 循环监测,动态调整电压和频率

3.3 电源门控(Power Gating)

DVFS 能降功耗,但降得还不够狠。当某个模块完全不用时,最好的办法就是——直接断电。这就是电源门控。

电源门控的实现方式通常是在电源路径上串联一个开关管(一般是 PMOS 或 NMOS),通过控制信号来决定是否供电。关断后,该模块的漏电流几乎为零。

但这里有个问题:模块断电后,它的状态就丢了。重新上电后需要重新初始化,这会带来时间和功耗开销。所以电源门控适合那些「不常用」或「可以快速恢复」的模块。

注意:电源门控不是随便加的。加多了,开关管本身的面积和导通电阻会带来额外损耗。我一般只在以下场景使用:

  • 模块空闲时间超过 100ms
  • 模块的漏电流占整机功耗的 5% 以上
  • 模块可以接受 1ms 以上的唤醒延迟

我曾经在一个仿生定位项目中,给 GPS 模块加了电源门控。平时只用惯性导航,GPS 完全断电。只有当定位误差累积到一定程度时,才唤醒 GPS 做一次校准。这样 GPS 的功耗从 50mW 降到了接近 0,整机续航提升了 3 倍。

实现电源门控时,有几个细节要注意:

  • 隔离单元:断电模块的输出信号不能直接连到其他模块,否则会漏电。需要加隔离门(比如 AND 门或 OR 门)来阻断路径。
  • 状态保持:如果模块需要保留少量关键状态,可以用「保持寄存器」或「常开域」来存。这样恢复时不用完全重来。
  • 唤醒时间:从断电到正常工作,需要留足时间给电源稳定和模块初始化。我一般会在软件里加一个延时,确保万无一失。

3.4 三种技术的协同使用

PMU、DVFS、电源门控,这三者不是孤立的。在实际项目中,我通常这样搭配:

场景 PMU 动作 DVFS 动作 电源门控动作
系统全速运行 所有电源域开启 高频高电压 所有模块供电
轻度任务 部分域降电压 中频中电压 不常用模块断电
深度休眠 仅保留常开域 最低频率或停振 绝大多数模块断电

你看,这三种技术其实是层层递进的。PMU 负责「分域供电」,DVFS 负责「动态调压调频」,电源门控负责「彻底断电」。把它们组合起来,才能实现真正的系统级低功耗。

我的习惯:在项目初期,我会先画一张「电源状态图」,把每个模块在不同工作模式下的供电状态标清楚。这张图画好了,后面的实现就顺了。否则,等到板子打回来再改,成本就高了。

嗯,这一章的内容就到这里。电源管理这块,说白了就是「该省则省,该给则给」。把握好这个度,你的仿生定位系统就能在性能和功耗之间找到最佳平衡点。


公众号:蓝海资料掘金营,微信deep3321