1、前言

MCU系统中的低功耗功能非常重要,如果你的MCU系统供电方式是连接市电,降低功耗可以减少发热,延长使用寿命;如果你的设备是移动端设备,使用小型电池供电,那么低功耗的意义就更大了,更低的功耗可以延长使用时长,提高用户体验。

2、硬件降低功耗的方式

  • 正确合理的配置IO:
    一般的IO的内部或者外部都会有上下拉电阻,举个例子,假如某个IO口有个10KΩ的上拉电阻,把引脚拉到3.3V,如果IO口被设置成输出低电平,根据欧姆定律,此引脚就会消耗3.3V/10K=0.33mA的电流,假如有四、五个这样的IO口,会有几个ma的额外功耗
  • 外围芯片独立供电:
    假设系统中有一个GPS芯片需要供电,在硬件设计时应该考虑这个GPS芯片单独用一个供电芯片供电,软件可以在不使用GPS功能时将芯片关掉

3、软件降低功耗的方式:

  • 降低MCU主频:
    降低MCU主频通常来说可以显著降低MCU的功耗,合适的业务匹配合适的主频,如果运行一段复杂的算法,可以将主频提高,如果只是做简单的检测任务,则可以将主频降低
  • 在MCU空闲时,将MCU进入休眠状态:
    假设我们的业务中存在一个按键检测任务,在按键按下后,改变LED状态,我们可以将业务修改为休眠50ms醒来检测一次,业务运行结束后立刻进入休眠
  • 使用freertos的tickless机制(与上一个方法类似):
    freertos可以在空闲的状态下控制MCU进入睡眠模式,freertos在睡眠控制更加合理,关于tickless更详细的解释和使用,可以参考我以前的文章Freertos使用tickless
  • 合理控制芯片休眠与工作:
    在不使用外围芯片时将其下电或者进入低功耗状态:比如有一个业务是通过陀螺仪判断角度,在角度大于某个值时发出警报,那就可以将业务修改为每20ms唤醒起来读取角度,然后进入休眠
  • 合理使用外设:
    与上类似,在陀螺仪进入休眠时,我们可以顺带将MCU上与陀螺仪通信的接口deinit,降低MCU功耗;又比如周期使用ADC读取电池电压时,在读取前初始化使能ADC,在读取完成后失能ADC

以上方法都可以有效降低MCU功耗,但是我这篇文章看起来怎么一股子AI味~

文章目录