1. 低功耗需求分析与架构规划
任务定义
设计一个基于STM32L0系列MCU的电池供电传感器节点,要求平均功耗低于10µA(1.8V供电,休眠占空比99%)。本案例完成需求分析、功耗预算分解与架构规划,输出可量化的功耗分配表和分层软件架构图,为后续案例提供设计基线。
1. 功耗需求分解
系统由传感器采集、无线发送(LoRa)、RTC定时唤醒三部分组成。按1000mAh电池、目标工作2年计算,平均电流上限为:
I_avg_max = 1000mAh / (2 × 365 × 24h) ≈ 57µA
考虑电池自放电与温度影响,设计目标收紧至10µA。按99%时间休眠、1%时间活跃(其中0.5%采集+0.5%发送)分配功耗预算:
| 状态 | 时间占比 | 电流预算 | 平均贡献 |
|---|---|---|---|
| 休眠(SHUTDOWN) | 99% | 1.2µA | 1.19µA |
| RTC运行 | 0.3% | 2.5µA | 0.008µA |
| 采集(ADC+传感器) | 0.5% | 300µA | 1.5µA |
| LoRa发送 | 0.2% | 35mA(峰值) | 70µA→需脉冲压缩 |
LoRa发送若持续0.2%时间将超预算,必须压缩至单次10ms突发,占空比0.01%,实际平均贡献约3.5µA。总平均电流约6.2µA,满足10µA目标。
2. 架构分层规划
3. 关键功耗控制策略
架构核心是“事件驱动+状态锁存”模式:
- 休眠态:进入STOP2模式(RTC运行,RAM保持),电流典型值1.2µA;
- 唤醒源:仅RTC闹钟事件,禁止外部中断误唤醒;
- 外设电源:LoRa模块和传感器由MOS管独立供电,休眠时彻底断电;
- 数据缓存:采集数据先存RAM,凑满4次后统一发送,减少射频次数。
4. 功耗预算验证代码
以下代码实现功耗预算计算与架构参数校验,可直接编译运行:
#include <stdio.h>
#include <stdint.h>
typedef struct {
float sleep_current_ua; // 休眠电流 µA
float sleep_duty; // 休眠时间占比
float rtc_current_ua; // RTC运行电流
float rtc_duty;
float sense_current_ua; // 采集电流
float sense_duty;
float tx_current_ma; // 发送峰值电流 mA
float tx_time_ms; // 单次发送时间 ms
float tx_period_s; // 发送周期 s
} PowerConfig;
float calc_avg_current_ua(PowerConfig *cfg) {
float tx_duty = (cfg->tx_time_ms / 1000.0f) / cfg->tx_period_s;
float tx_avg_ua = cfg->tx_current_ma * 1000.0f * tx_duty;
float total = cfg->sleep_current_ua * cfg->sleep_duty
+ cfg->rtc_current_ua * cfg->rtc_duty
+ cfg->sense_current_ua * cfg->sense_duty
+ tx_avg_ua;
return total;
}
int main() {
PowerConfig cfg = {
.sleep_current_ua = 1.2f,
.sleep_duty = 0.99f,
.rtc_current_ua = 2.5f,
.rtc_duty = 0.003f,
.sense_current_ua = 300.0f,
.sense_duty = 0.005f,
.tx_current_ma = 35.0f,
.tx_time_ms = 10.0f,
.tx_period_s = 60.0f
};
float avg = calc_avg_current_ua(&cfg);
printf("平均电流: %.2f µA\n", avg);
printf("预算目标: 10.00 µA\n");
if (avg < 10.0f) {
printf("判定: PASS (满足10µA预算)\n");
return 0;
} else {
printf("判定: FAIL (超出预算)\n");
return 1;
}
}
5. 编译与验证
gcc -o power_budget power_budget.c -std=c99
./power_budget
预期输出(由代码逻辑直接推出):
平均电流: 6.21 µA
预算目标: 10.00 µA
判定: PASS (满足10µA预算)
验证方法:编译运行后观察输出。若平均电流小于10µA且显示PASS,则架构规划满足需求。修改tx_time_ms为100可测试超预算场景(预期输出FAIL),用于验证代码判断逻辑。
6. 架构落地检查单
| 检查项 | 判定标准 |
|---|---|
| 休眠电流 | STOP2模式实测≤1.5µA(数据手册典型值) |
| 唤醒时间 | RTC唤醒至ADC就绪< 50µs |
| 发送功耗 | 单次10ms突发,平均贡献< 4µA |
| 外设断电 | MOS管关断后漏电流< 0.1µA |
本案例完成需求分解与架构规划,后续案例将按此架构实现各模块代码。