降功耗对于一款使用电池供电的产品来说是至关重要的。当然这项工作不只是软件开发人员的责任,还需要硬件工程师合理的电路设计,器件选型,最终共同努力将功耗控制到可接受的范围。MCU降功耗可以从以下几个方面着手:
1.器件选型
基于成本的考虑,电路使用的元器件可能不是低功耗的最佳选择,如某些传感器,本身功耗就比较大,这时想通过软件降功耗就很麻烦了。最好选择那些可以配置的,存在低功耗模式的传感器。至于MCU,是显而易见的,肯定选一款功耗低,满足功能要求的,这些评审时自然会考虑到。一些8位MCU功耗是几十微安,睡眠模式1uA左右,成为首选。这类MCU最容易出现的就是资源有限,引脚个数少,如某款IC ROM只有1K,RAM32字节,这样最后的软件实现很可能捉襟见肘。
2.降低主频
众所周知,芯片主频越高,功耗越大。降功耗方案一般不使用外部晶振,使用内部晶振,频率选择常用的32768Hz虽然低,却只能得到秒一级别的精度,想得到ms或us级别的精度,大于1M的频率少不了。
3.睡眠模式
睡眠模式是降功耗的主要方式,MCU可以睡眠模式睡眠,模块也可以睡眠。在外部触发唤醒MCU之后,MCU再唤醒功耗更大的模块,完成功能或通信后,马上又进入睡眠,总之进入睡眠状态自然是省电的。一些模块存在多种睡眠模式,都是为了在不影响功能的前提下更加灵活地来降低功耗。
4.关闭未用资源
在使用稍复杂一点的MCU时,它本身所带的外设,未使用时一定关闭。使用简单的MCU时,可能所有的功能都是引脚模拟实现,如IIC,SPI,Uart之类,不过也要注意,进入睡眠停止工作之前,应将与之对应的传感器等器件关闭或使其进入PowerDown Mode,唤醒后再做初始化、配置的工作。
5.配置IO口
前面提到睡眠之前,关闭外部器件,你以为这样就可以了,其实未必。如果某些引脚接了外部上拉电阻,而MCU睡眠时该引脚置低,这样一来,有压差,有电阻,就形成了不必要的功耗。这点容易被忽略,所以各个引脚一定要根据外部电路合理配置。
6.间歇工作原则
所谓间歇工作,就是劳逸结合,工作休息交替进行,采用切电源的方式,开和关交替执行,这样该器件的功耗就降了一半。如果某器件上电后,需要预热一段时间,那这个方法就行不通了。还有一些电平驱动的元件,给一定占空比的脉冲就可以工作,还可以根据电压调整占空比,平衡负载,实现电源最大利用率,不过这又是一项复杂的工作了。
以上是一些从MCU的角度降功耗的基本方法。降功耗是一项艰巨又具有挑战的工作,要求越高,就越能发掘出越多的方法出来。