1. 课程导论与项目全景
各位同学好,我是你们这门课的老周。做嵌入式低功耗这件事,我前前后后折腾了快十年。从最早的8位单片机一路做到现在的STM32L4,踩过的坑、烧过的板子,说多了都是泪。
今天咱们先不急着写代码。第一节课,我想跟你聊聊——为什么我们要花30节课来死磕低功耗?
1.1 低功耗设计的意义
先问一个问题:你手头有没有做过电池供电的产品?
我猜很多人遇到过这种情况:产品功能都调通了,一测整机电流——好家伙,50mA。客户要求电池用一年,结果三个月就趴窝了。这就是典型的“功能做完了,功耗没管”。
低功耗设计,说白了就是在保证功能的前提下,让系统尽可能多地睡觉。你想想看,一个智能传感器节点,99%的时间都在等数据,真正干活的时间不到1%。如果这99%的时间都在全速跑,那不是浪费电吗?
核心观点: 低功耗不是“降性能”,而是“按需供电”。该睡就睡,该醒就醒,醒的时候麻利干完活继续睡。
我在一个环境监测项目里遇到过特别典型的案例。客户要求用两节AA电池供电,节点每10分钟上报一次温湿度。第一版我们用了STM32F103,待机电流做到20μA,看起来不错。结果现场部署了200个节点,三个月后电池全换了一遍。为什么?因为无线模块的峰值电流没处理好,电池内阻大,电压被拉垮了。
从那以后,我养成了一个习惯:做低功耗设计,不能只看平均电流,更要看峰值电流的持续时间。
1.2 项目目标:基于STM32L4的智能传感器节点
咱们这门课要做的项目,是一个智能环境传感器节点。它长什么样?
- 采集温度、湿度、气压、光照强度
- 通过LoRa无线模块上报数据
- 用CR2032纽扣电池供电
- 目标续航:1年以上
你可能会说:“老周,CR2032才200多mAh,跑一年?你逗我呢?”
嗯,这就是咱们这门课要解决的问题。我告诉你,STM32L4系列在待机模式下,电流可以做到0.3μA。加上外部传感器和LoRa模块的休眠控制,整机平均电流控制在10μA以内,200mAh的电池跑一年,理论上完全可行。
小提示: 理论计算和实际测试往往有差距。咱们这门课会手把手带你做功耗实测,用数据说话。
1.3 功耗指标定义
做低功耗设计,先得知道“低”到什么程度才算合格。我习惯把功耗指标分成三个层级:
| 指标层级 | 典型值 | 适用场景 |
|---|---|---|
| 运行模式 | 几十μA ~ 几mA | CPU全速运行,执行代码 |
| 睡眠模式 | 几μA ~ 几十μA | 保留RAM,等待中断唤醒 |
| 待机模式 | 0.1μA ~ 1μA | 几乎全关,仅保留RTC |
咱们这个项目的目标很明确:
- 运行模式: 采集+发送,平均电流 ≤ 15mA,持续时间 ≤ 100ms
- 睡眠模式: 两次采集之间,平均电流 ≤ 5μA
- 待机模式: 深度休眠,电流 ≤ 1μA
- 整机平均电流: ≤ 10μA(按10分钟上报一次计算)
注意: 我曾经在项目里吃过亏——只测了芯片的待机电流,没算上外设的漏电流。结果整机电流比预期大了10倍。所以咱们后面会专门讲“系统级功耗拆解”。
1.4 开发环境与硬件平台
工欲善其事,必先利其器。咱们这门课用的硬件平台是:
- 主控芯片: STM32L431RCT6(Cortex-M4,80MHz,256KB Flash,64KB SRAM)
- 传感器: BME280(温湿度气压)+ BH1750(光照)
- 无线模块: SX1278(LoRa,433MHz)
- 电源: CR2032 + 3.3V LDO(TPS7A05,超低静态电流)
开发环境方面,我建议你用:
- IDE: STM32CubeIDE(免费,集成CubeMX)
- 调试器: ST-Link/V2(板载或独立)
- 功耗测量: 万用表(至少6位半)+ 串联电阻法,或者直接用Joulescope
我个人习惯用STM32CubeIDE,因为它把配置、编译、调试都集成在一起了。尤其是CubeMX的功耗估算工具,虽然不准,但能给你一个大概的方向。
1.5 知识体系全景图
下面这张图,是咱们整个课程的知识结构。你可以把它当成一张地图,后面每节课都会对应到其中的一个模块。
从这张图你能看到,咱们的课程不是零散的知识点,而是一个完整的闭环:从硬件选型开始,到软件调优,再到实测验证,最后输出一份可量产的方案。
1.6 写在开始之前
最后,我想跟你说几句心里话。
做低功耗设计,最忌讳的就是“差不多就行”。我曾经在一个项目里,因为觉得“1μA的漏电流无所谓”,结果整机功耗超标了30%。后来花了整整两周才找到问题——一个上拉电阻没配置好。
所以,这门课我会带着你,一个寄存器一个寄存器地抠,一个波形一个波形地看。你可能会觉得烦,但等你真正做出一个续航一年的产品时,你会发现——这一切都值得。