挑战低功耗7小时纪实

  版权信息:
● 本博客使用CC 3.0协议,转载请保留该信息。
● 原文作者: 戴晓天 @ 云飞机器人实验室
● 原文地址: 挑战低功耗7小时纪实

今天,我的一位同事在低功耗设计上遇到了麻烦,他所设计的一个电池供电的设备不到几天就将电池消耗殆尽。经过测量,我发现这个设备的待机功耗过大,达到6.6mA,经核算,按照该功耗,即使设备一直处于休眠状态也只能工作2天。

按照低功耗设计的一般分析方法,可以从硬件和软件两个方面减小设备的功耗。

首先,我怀疑是所用的一些模块功耗较大,于是我把一些可插拔的模块断开,但是功耗没有明显下降,可见功耗损失不来自这些部分。

之后,我仔细核对了他的原理图,我发现了几个可能导致功耗较大的问题:
1、有一些不必要的上拉电阻,如SWD接口的上拉;
2、开关电源的电压反馈分压电阻过小,只有数k;
3、电路中有一个调试中使用的Max232芯片;
4、用于AD检测的分压电阻较小。

每一步的改进结果让人很吃惊:
1、SWD上拉电阻去除:节约0.01mA
2、电源分压电阻改进,由数k调整至数十k:节约0.8mA
3、电源检测电阻去除,节约150uA
4、Max232去除,节约5mA
5、AD分压电阻从1k、2K改为10k与20k,节约0.3mA
总计降低待机功耗: 6.31mA。

几个电路细节的改进之后,待机功耗就降低到了区区250uA。但我对这个结果仍不满意,我希望再通过软件进行进一步优化,我采取了以下措施:
1、IO设为高组态,防止类似I2C的上拉电阻在休眠后因为引脚电平不正确导致电流灌入;
2、关闭IO时钟;
3、关闭外设模块,将不必要的外设在休眠时关断可以减少不必要的功耗损失;
4、关闭AD使能与时钟;
5、关闭Systick,如果使能了Systick,在休眠时可以关断;
6、使用待机模式而不是睡眠模式。
可惜的是,这些并没有起到显著降低功耗的目的,看来STM32对待机的处理已经做得比较完善。

整个分析、解决过程用了我们7个小时,电路功耗由6.6mA降至250uA,工作时间也由2天提高到了72天。我调侃到,我们只用了7个小时,增加了70天的使用时间,还是值得的。

%d bloggers like this: