第二章:功耗模型建立——标签工作状态划分
做低功耗设计,说白了就是跟电池容量做朋友。你得知道每一毫安时都花在哪了。
我个人习惯,拿到一个电子标签项目,第一件事不是画原理图,而是先画功耗模型。为什么?因为只有把各个状态的电流消耗摸透了,你才知道优化空间在哪。
2.1 标签的三种工作状态
电子标签的工作流程,我一般把它拆成三个状态:休眠、侦听、发射。你想想看,一个标签从出厂到报废,绝大多数时间都在干嘛?对,在睡觉。
- 休眠状态:MCU进入深度睡眠,RF模块完全断电。这时候只有RTC在跑,或者一个超低功耗的定时器在计时。
- 侦听状态:标签醒来,打开接收机,看看有没有基站发来的指令。这个状态时间很短,但电流不小。
- 发射状态:标签上报数据,RF发射功率全开。这是最耗电的阶段,但持续时间也最短。
关键点:三个状态的电流差异可能达到三个数量级。休眠可能是1µA,侦听可能是10mA,发射可能是100mA。设计时一定要心里有数。
2.2 各状态电流消耗实测数据
我在项目中遇到过一款蓝牙BLE标签,实测数据如下。注意,这些数值会因芯片型号、天线匹配、供电电压不同而变化,但量级是差不多的。
| 工作状态 | 典型电流 | 持续时间 | 备注 |
|---|---|---|---|
| 休眠 | 1.2 µA | 99.9% 时间 | 含RTC + 唤醒定时器 |
| 侦听 | 8.5 mA | 2 ms | 接收窗口打开 |
| 发射 | 85 mA | 4 ms | 0 dBm 发射功率 |
我的经验:别完全相信数据手册上的典型值。我习惯自己搭一个电流测试板,用示波器或者精密万用表实测。有一次我发现某款芯片的休眠电流比手册标称高了3倍,查了半天发现是GPIO没配置成输出低电平,导致漏电。
2.3 时间占比分析——谁才是耗电大户?
很多人直觉上觉得发射最耗电,应该重点优化发射。但咱们算一笔账。
假设标签每小时上报一次数据:
- 休眠时间:3599.994 秒(约 99.9998%)
- 侦听时间:2 ms × 2 次 = 4 ms(约 0.0001%)
- 发射时间:4 ms(约 0.0001%)
然后算平均电流:
平均电流 = (1.2µA × 3599.994s + 8.5mA × 0.004s + 85mA × 0.004s) / 3600s
≈ (4.32mAs + 34mAs + 340mAs) / 3600s
≈ 0.105 mA
看到了吗?虽然发射电流高达85mA,但因为它时间极短,总耗电量只占约 90%。而休眠电流虽然只有1.2µA,但因为时间占比99.9%以上,它的贡献也不可忽视。
避坑指南:我曾经设计过一个标签,把发射功率从0dBm降到-10dBm,发射电流从85mA降到了45mA。本以为电池寿命能翻倍,结果实测只延长了15%。为什么?因为发射时间占比太小了,优化的边际收益很低。真正的大头其实是侦听窗口的时长和休眠漏电流。
2.4 建立功耗模型的实用方法
我建议用Excel或者Python脚本搭一个简单的功耗计算器。把三个状态的电流、时间、频率作为输入,自动算出平均电流和理论电池寿命。
这里给一个伪代码思路:
// 伪代码:功耗模型计算
float sleep_current = 1.2e-6; // 1.2 µA
float listen_current = 8.5e-3; // 8.5 mA
float tx_current = 85e-3; // 85 mA
float sleep_time = 3600 - 0.004 - 0.004; // 单位:秒
float listen_time = 0.004;
float tx_time = 0.004;
float avg_current = (sleep_current * sleep_time +
listen_current * listen_time +
tx_current * tx_time) / 3600.0;
float battery_capacity = 2400; // 2400 mAh 纽扣电池
float lifetime_hours = battery_capacity / (avg_current * 1000);
float lifetime_years = lifetime_hours / (24 * 365);
核心结论:功耗优化的优先级应该是:
1. 降低休眠电流(硬件选型 + 软件配置)
2. 缩短侦听窗口时间(协议优化)
3. 最后才是降低发射功率(天线效率、匹配网络)
2.5 实际项目中的注意事项
嗯,这里还有几个坑要提醒你:
- 温度影响:电池在低温下内阻增大,实际可用容量会下降。我做过-20°C的测试,容量直接打了七折。
- 电池自放电:CR2032纽扣电池每年自放电约1-2%,这个在长寿命设计中必须算进去。
- 电容漏电:MLCC电容在高湿环境下漏电流会增大,我遇到过因为电容漏电导致休眠电流从1µA飙升到5µA的情况。
一个小技巧:在原型阶段,我习惯在电池回路串一个10Ω采样电阻,用示波器看电压波形。这样能直观看到每个工作状态的电流尖峰,比看数据手册靠谱多了。
好了,功耗模型建立这块就聊到这。下一章咱们会深入讲电池选型和容量计算,到时候会用到今天建立的这个模型。