2、低功耗设计基础:功耗来源分析、动态功耗与静态功耗、低功耗设计策略
做嵌入式系统这么多年,我越来越觉得功耗设计是一门「算账」的学问。你想想看,电池就那么大,能量就那么多,怎么把这笔账算明白,决定了你的产品能跑多久。今天咱们就聊聊功耗到底从哪来,又该怎么省。
2.1 功耗从哪来?先拆开看看
很多人一上来就想着怎么省电,其实第一步应该是搞清楚电都去哪了。我习惯把功耗分成两大类:动态功耗和静态功耗。这两兄弟性格完全不同,处理方式也天差地别。
核心公式(记住这个就够了):
Ptotal = Pdynamic + Pstatic
Pdynamic = α × CL × VDD² × f
Pstatic = Ileak × VDD
这里 α 是翻转率,CL 是负载电容,VDD 是供电电压,f 是时钟频率,Ileak 是漏电流。说白了,动态功耗跟干活多少有关,静态功耗跟漏电有关。
2.2 动态功耗:干活就要耗电
动态功耗是芯片在「干活」时产生的。每次信号翻转,都要给电容充放电,这就要消耗能量。我在项目中遇到过最典型的例子:一个传感器采集系统,MCU跑在48MHz时功耗是3mA,降到16MHz后直接掉到1.2mA。为什么?因为频率降了,动态功耗就线性下降。
动态功耗有三个主要来源:
- 翻转功耗:信号从0变1或从1变0时,给负载电容充放电。这是大头。
- 短路功耗:信号翻转瞬间,PMOS和NMOS同时导通,形成电源到地的短路电流。虽然时间短,但频率高了也不容忽视。
- 竞争功耗:多个信号到达时间不一致,导致逻辑门反复翻转。嗯,这个在设计时要特别注意。
我的经验:动态功耗跟电压的平方成正比,跟频率成正比。所以降电压比降频率效果更明显。但电压不能随便降,得看芯片能不能撑住。我曾经在一个项目中把电压从3.3V降到1.8V,功耗直接降了70%,但代价是系统稳定性变差了,后来加了稳压才搞定。
2.3 静态功耗:躺着也在耗电
静态功耗是芯片「闲着」的时候也在消耗的功率。很多人容易忽略这个,觉得芯片休眠了就不耗电了。其实不然,漏电流一直在流。
静态功耗主要来自:
- 亚阈值漏电:晶体管关断不完全,仍有微弱电流通过。工艺越先进,这个问题越严重。
- 栅极漏电:栅氧化层太薄,电子直接隧穿过去。我记得在90nm以下工艺,这个问题开始凸显。
- PN结漏电:反偏PN结的漏电流。温度每升高10°C,漏电流差不多翻一倍。
为什么会这样?说白了就是晶体管做得太小了,关不严实。我曾经调试过一个电池供电的温湿度传感器,休眠时电流居然有50μA,查了半天发现是某个GPIO没配置好,内部上拉电阻一直在漏电。改完之后降到2μA,电池寿命从3个月变成了2年。
避坑指南:我曾经在一个项目中,所有外设都关了,MCU也进了深度休眠,但功耗还是居高不下。最后发现是电源芯片本身的静态电流太大。选型时一定要看数据手册里的「Quiescent Current」参数,有些LDO的静态电流比MCU休眠电流还大。
2.4 低功耗设计策略:怎么省?
知道了功耗从哪来,接下来就是怎么省。我总结了几个实战中屡试不爽的策略:
2.4.1 动态功耗优化
- 降电压:这是最狠的一招。电压降一半,功耗降到四分之一。但要注意芯片的工作电压范围,别降过头了。
- 降频率:频率降一半,功耗降一半。适合对实时性要求不高的场景。
- 门控时钟:不用的模块直接把时钟关掉。很多MCU都有这个功能,记得用起来。
- 减少翻转率:比如用格雷码代替二进制编码,减少信号翻转次数。
2.4.2 静态功耗优化
- 电源门控:不用的模块直接断电。这需要芯片支持,比如PMU(电源管理单元)。
- 多阈值电压:关键路径用低阈值(速度快但漏电大),非关键路径用高阈值(速度慢但漏电小)。
- 体偏置:通过调整衬底电压来改变阈值电压,休眠时加大偏置减少漏电。
- 温度管理:温度高了漏电就大,所以散热也很重要。
实战口诀:
能休眠就别跑,能低频就别高频,能低压就别高压,能关断就别悬空。
2.5 知识体系:一张图看懂
下面这张图是我自己整理的,把功耗来源和优化策略串在了一起。你看一眼就能明白整个逻辑。
2.6 实战中的取舍
说实话,低功耗设计没有银弹。你不可能同时做到性能最高、功耗最低、成本最低。我一般会按这个优先级来权衡:
| 场景 | 优先策略 | 典型做法 |
|---|---|---|
| 电池供电、长期监测 | 深度休眠 + 间歇工作 | 99%时间休眠,1%时间采集发送 |
| 实时响应要求高 | 动态调频调压 | 空闲时低频低压,任务来时拉满 |
| 成本敏感 | 选型优化 | 选低功耗MCU,减少外围器件 |
| 高温环境 | 静态功耗控制 | 加强散热,选高阈值工艺 |
一个小技巧:我习惯在项目初期就做一个「功耗预算表」,把每个模块的典型功耗、休眠功耗、工作时间列出来。这样一眼就能看出瓶颈在哪。有一次我发现蓝牙模块的峰值功耗占了总功耗的60%,后来改成只在发送数据时才上电,效果立竿见影。
好了,关于功耗来源和设计策略就聊到这。记住,低功耗设计不是最后才考虑的事,而是从选型、架构、软件到硬件,每一步都要想清楚。你想想看,一个传感器节点如果因为功耗没做好,三天两头换电池,那用户体验得多糟糕?