4、低功耗设计原则:峰值电流与平均电流、占空比计算、能量预算分析
做低功耗蓝牙产品,很多人一上来就盯着芯片的休眠电流看。觉得只要休眠电流够低,整机功耗就一定漂亮。嗯,这个想法其实是个坑。我见过不少团队,选了一颗号称休眠电流只有几百纳安的芯片,结果做出来的产品电池续航还是惨不忍睹。
问题出在哪?说白了,你忽略了两个关键因素:峰值电流和占空比。今天这一章,我们就来把这笔账算清楚。
核心观点:低功耗设计的本质不是追求某个状态下的电流极低,而是控制整个时间轴上的能量消耗。峰值电流、占空比、能量预算,这三者缺一不可。
4.1 峰值电流 vs 平均电流:谁才是真正的耗电大户?
先看一个我实际项目中遇到的案例。某款穿戴设备,蓝牙广播间隔设为100ms,广播期间峰值电流约8mA,休眠电流1.5µA。客户觉得休眠电流已经很低了,但实测整机平均电流却高达180µA。为什么?
我们来拆解一下。设备每100ms醒来一次,广播持续约3ms。这3ms里,电流从1.5µA瞬间跳到8mA,差了5000多倍。虽然广播时间短,但峰值电流的冲击非常猛。
| 参数 | 休眠状态 | 广播状态 |
|---|---|---|
| 电流 | 1.5 µA | 8 mA |
| 持续时间 | 97 ms | 3 ms |
| 单周期电荷量 | 0.1455 µC | 24 µC |
看到没有?广播状态虽然只占了3%的时间,但它贡献的电荷量却占了总电荷量的99.4%。这就是峰值电流的威力。你想想看,如果只盯着休眠电流优化,哪怕你把1.5µA降到0.5µA,对整机续航的提升也微乎其微。
我的经验:在做低功耗设计时,我习惯先抓峰值电流的持续时间。先把广播、连接、数据收发这些高电流事件的时长压到最短,再去抠休眠电流。这个顺序不能反。
4.2 占空比计算:把时间轴切成片
占空比这个概念其实很简单,就是高电流状态的时间占总周期的比例。但真正用好它,需要你理解系统的工作模式。
一个典型的BLE设备,工作周期可以分成三个阶段:
- 休眠阶段:电流最低,但时间最长
- 唤醒准备阶段:时钟稳定、外设初始化,电流中等
- 活动阶段:广播/连接/数据收发,电流最高
占空比的计算公式:
占空比 = 活动时间 / (休眠时间 + 唤醒准备时间 + 活动时间) × 100%
平均电流 = 休眠电流 × 休眠占比 + 准备电流 × 准备占比 + 活动电流 × 活动占比
举个例子。假设你的设备每1秒唤醒一次,做一次温度采集并通过BLE上报:
- 休眠:990ms @ 2µA
- 唤醒准备:5ms @ 500µA(传感器上电、ADC稳定)
- 活动:5ms @ 6mA(BLE连接事件、数据发送)
计算平均电流:
平均电流 = 2µA × 0.99 + 500µA × 0.005 + 6000µA × 0.005
= 1.98 + 2.5 + 30
= 34.48 µA
你看,活动阶段虽然只占0.5%的时间,却贡献了87%的平均电流。这就是为什么我总说,降低峰值电流的持续时间,比降低峰值电流本身更有效。
避坑指南:我曾经在一个项目中,把BLE的连接间隔从50ms改到400ms,以为平均电流能降8倍。结果只降了不到3倍。为什么?因为唤醒准备阶段的电流被忽略了。每次连接事件前,MCU要从深度休眠唤醒,时钟重新锁定,这部分电流和时间占比反而变大了。所以,占空比计算一定要把每个阶段的电流和时间都算进去。
4.3 能量预算分析:从电池端倒推设计
能量预算分析,说白了就是回答一个问题:我的电池能撑多久?
我习惯的做法是,先定目标,再倒推设计。比如客户要求纽扣电池CR2032(标称容量225mAh)供电,设备要工作6个月。那么:
可用容量 = 225mAh × 0.8(放电效率,考虑电池内阻和温度)
= 180 mAh
目标平均电流 = 180mAh / (6个月 × 30天 × 24小时)
= 180 / 4320
≈ 41.7 µA
有了这个目标,你再回头去调整你的占空比和峰值电流。如果算出来平均电流是80µA,那要么换电池,要么优化设计。
下面这张图,是我做能量预算时常用的分析框架:
4.4 实战中的能量预算表
我习惯用一张表格来管理能量预算。每个工作模式都列清楚,然后累加。下面是一个BLE温湿度传感器的例子:
| 工作模式 | 电流 (µA) | 持续时间 (ms) | 周期 (ms) | 占空比 | 平均电流 (µA) |
|---|---|---|---|---|---|
| 深度休眠 | 1.2 | 9950 | 10000 | 99.5% | 1.19 |
| 传感器采集 | 850 | 20 | 10000 | 0.2% | 1.70 |
| BLE广播 | 6200 | 3 | 1000 | 0.3% | 18.60 |
| BLE连接事件 | 5800 | 2.5 | 1000 | 0.25% | 14.50 |
| 总计 | 35.99 |
你看,这个表一目了然。BLE广播和连接事件虽然时间短,但贡献了绝大部分平均电流。如果你想进一步降低功耗,优先优化这两个部分。
我的建议:做能量预算时,留出20%~30%的余量。电池的实际容量会受温度、放电倍率、老化等因素影响。我曾经有个产品,实验室测试续航6个月,结果冬天户外只撑了4个月。就是因为低温下电池内阻增大,可用容量缩水了。
4.5 一个完整的计算示例
我们拿一个实际的BLE门锁项目来走一遍流程。假设:
- 电池:2节AA串联,总容量约3000mAh(考虑放电效率后按2400mAh算)
- 目标续航:12个月
- 设备每天开关锁20次,每次BLE连接约500ms,峰值电流15mA
- 其余时间深度休眠,电流3µA
先算目标平均电流:
目标平均电流 = 2400mAh / (12 × 30 × 24h)
= 2400 / 8640
≈ 277.8 µA
再算实际平均电流:
休眠部分:3µA × (86400s - 20 × 0.5s) / 86400s ≈ 2.999 µA
活动部分:15mA × 20 × 0.5s / 86400s ≈ 1.736 µA
实际平均电流 ≈ 4.735 µA
嗯,4.735µA远小于277.8µA,这个设计绰绰有余。但如果你把BLE连接时间从500ms优化到100ms,平均电流还能再降。虽然这个项目不需要,但养成这个习惯,遇到真正严苛的项目时就不会手忙脚乱。
避坑指南:我曾经犯过一个错误——只算了典型工况,没算最坏工况。门锁在冬天低温时,电池内阻增大,峰值电流会被拉低,导致BLE连接失败重试。重试次数一多,平均电流直接翻倍。所以,能量预算一定要考虑温度、电池老化、信号强度波动这些边界条件。
4.6 小结:三个原则,一个工具
这一章的内容,总结下来就是三个原则:
- 峰值电流原则:优先缩短高电流事件的持续时间,而不是降低峰值本身
- 占空比原则:每个工作阶段的电流和时间都要算进去,不能只看休眠
- 能量预算原则:从电池端倒推,用目标平均电流指导设计
一个工具:能量预算表。把每个模式的电流、时间、占空比列清楚,累加出平均电流,再和电池容量对比。这是做低功耗设计最基础也最有效的方法。