2. MCU低功耗基础
在MCU低功耗设计中,第一步不是急着选芯片或改代码,而是把“电到底耗在哪里”看清楚。MCU的总功耗并不是一个单一数字,它由多个物理来源叠加而成:晶体管开关时的充放电、晶体管截止时的漏电、内部稳压器与时钟电路的静态偏置、外设与IO的驱动损耗,以及封装和PCB上的寄生路径。只有把功耗拆成可解释的分量,后续的降功耗手段才有明确的靶点。
一、功耗来源:从晶体管到系统
在CMOS工艺中,功耗主要来自两大类:动态功耗与静态功耗。动态功耗发生在电路翻转时,包括对负载电容充放电的开关功耗,以及PMOS与NMOS短暂同时导通的短路功耗。静态功耗则发生在电路不翻转、但电源仍然加在晶体管上的时刻,主要由亚阈值漏电、栅氧漏电、结反偏漏电和栅致漏极泄漏等构成。
到了MCU系统层面,还要加上常被忽略的“系统级功耗”:LDO或DC-DC的静态电流与转换损耗、晶振与RC振荡器的起振和维持电流、Flash/RAM的待机保持电流、IO上拉/下拉电阻的持续电流、以及未配置引脚悬空导致的输入级振荡电流。很多项目实测功耗高于数据手册估算,问题往往就出在这些系统级路径上。
二、动态功耗:与频率和电压平方成正比
动态功耗的经典表达式为 P_dyn = α·C·V²·f,其中α是翻转活动因子,C是等效负载电容,V是供电电压,f是时钟频率。这个公式给出了三个最直接的降功耗杠杆:降低电压、降低频率、减少无效翻转。注意电压是平方项,因此从3.3V降到1.8V,仅动态功耗理论上就降到原来的约30%。
在MCU中,动态功耗主要来自CPU内核、总线矩阵、Flash取指、SRAM访问和外设时钟。即使CPU进入睡眠,只要外设时钟仍在运行,动态功耗就不会归零。因此低功耗设计的第一条纪律是:不用即关时钟。通过时钟门控,把未使用外设的时钟源切断,往往能立刻看到毫安级到微安级的下降。
三、静态功耗:漏电是深睡眠的底线
静态功耗与频率无关,只要供电存在,漏电就存在。它由亚阈值漏电、栅氧隧穿漏电、栅致漏极泄漏和结反偏漏电组成。在先进工艺节点下,阈值电压V_th不断降低,亚阈值漏电呈指数上升,导致静态功耗占比越来越高。对于需要长期待机的MCU,静态功耗往往决定了电池寿命的上限。
降低静态功耗的手段包括:选择低漏电工艺或低功耗工艺库、使用高阈值电压器件、在深睡眠时关闭电源域、降低待机电压、以及减少芯片结温。温度对漏电影响极大,结温每升高10°C,漏电大约翻一倍,因此散热设计也是低功耗设计的一部分。
四、工艺与电压的影响:不是越低越好
工艺进步让晶体管更小、电容更小、动态功耗更低,但同时也让漏电更难控制。低功耗MCU通常采用“低功耗工艺+多阈值电压”的组合:关键路径用低V_th保证速度,非关键路径用高V_th压低漏电。电压方面,降低V_dd能显著降低动态功耗,但也会降低噪声容限、减慢速度,并可能使Flash和模拟外设无法工作。
实际设计中,MCU通常支持多个电压域和多种低功耗模式。例如运行模式用1.8V~3.6V,睡眠模式降到1.2V,深度睡眠关闭内核电源域只保留备份域。下表给出常见低功耗模式与功耗来源的对应关系,便于快速定位优化方向。
| 工作模式 | 主要功耗来源 | 典型电流量级 | 可优化手段 |
|---|---|---|---|
| 运行模式 | 动态功耗为主,漏电为辅 | mA ~ 数十mA | 降频、降压、时钟门控、DMA替代CPU搬运 |
| 睡眠模式 | 外设时钟动态功耗 + 漏电 | 数百µA ~ 数mA | 关闭未用外设时钟、降低内核电压 |
| 深度睡眠 | 漏电 + 保持域偏置 | 数µA ~ 数十µA | 关闭内核电源域、保留备份RAM、关闭高速晶振 |
| 待机/备份 | 漏电 + RTC/备份域 | 亚µA ~ 数µA | 使用低功耗RC或32.768kHz晶振、关闭IO上拉 |
五、案例:从3.3V/48MHz到1.8V/8MHz
某电池供电传感器节点原设计运行在3.3V、48MHz,实测运行电流12mA,待机电流80µA。分析发现:动态功耗占运行功耗的85%,其中Flash取指和SRAM访问占大头;待机时LDO静态电流和未配置IO上拉贡献了约40µA。优化措施如下:
// 优化前:全速运行,外设时钟全开
CLK_EnableAll();
CPU_SetClock(48000000);
VDD_Set(3300);
// 优化后:降压降频 + 时钟门控 + IO配置
VDD_Set(1800); // 动态功耗约降至 (1.8/3.3)^2 ≈ 30%
CPU_SetClock(8000000); // 频率降至 1/6
CLK_Disable(UART1 | SPI2 | ADC); // 关闭未用外设
GPIO_ConfigUnusedAsAnalog(); // 避免悬空输入振荡
EnterDeepSleep(); // 关闭内核域,保留RTC
优化后运行电流降至约1.2mA,待机电流降至3µA,电池寿命从约3个月提升到2年以上。这个案例说明:动态功耗靠“降压降频关门控”,静态功耗靠“关域关时钟关IO”,两者要分别治理。
六、常见误区与复盘
- 误区一:只关注运行功耗,忽略待机漏电。对于占空比极低的应用,待机电流才是电池寿命的决定因素。
- 误区二:认为降频一定省电。降频会延长任务执行时间,若静态功耗占比高,总能量可能反而增加。应比较“能量”而非“功率”。
- 误区三:忽略IO和外部器件。上拉电阻、指示灯、外部Flash待机电流常常比MCU本身还大。
- 误区四:深睡眠不关电源域。只进CPU睡眠而不关外设电源,漏电和偏置电流仍然存在。
总结来看,MCU低功耗设计的基础是把总功耗拆成动态、静态和系统级三部分,理解P_dyn = α·C·V²·f与P_static = V·I_leak这两个核心关系,再结合工艺、电压、频率、温度和IO配置逐项优化。只有先看清功耗来源,才能在运行、睡眠、深度睡眠和待机之间做出正确的能量权衡。