目前的低功耗设计主要从芯片设计和系统设计两个方面考虑。随着半导体工艺的飞速发展和芯片工作频率的提高,芯片的功耗迅速增加,而功耗增加又将导致芯片发热量的增大和可靠性的下降。因此,功耗已经成为深亚微米集成电路设计中的一个重要考虑因素。为了使产品更具竞争力,工业界对芯片设计的要求已从单纯追求高性能、小面积转为对性能、面积、功耗的综合要求。而微处理器作为数字系统的核心部件,其低功耗设计对降低整个系统的功耗具有重要的意义。
在嵌入式系统的设计中,低功耗设计(Low-Power Design)是许多设计人员必须面对的问题,其原因在于嵌入式系统被广泛应用于便携式和移动性较强的产品中去,而这些产品不是一直都有充足的电源供应,往往是靠电池来供电,所以设计人员从每一个细节来考虑降低功率消耗,从而尽可能地延长电池使用时间。
STM32的低功耗模式大体分为三种,睡眠模式、停机模式、待机模式。
细分有Sleep mode(睡眠模式)、Low-power run mode(低功耗运行模式)、Low-power sleep mode(低功耗睡眠模式)、Stop mode with RTC(带有RTC的停止模式)、Stop mode without RTC(不带RTC的停止模式)、Standby mode with RTC(带有RTC的旁路模式)、Standby mode without RTC(不带RTC的旁路模式。
在上述这些模式中功耗依次降低,具体值为:
Sleep mode:37uA/MHz
Low-power run mode:8uA
Low-power sleep mode:4.5uA
Stop mode with RTC:1uA
Stop mode without RTC:0.4uA VDD=3.0V
Standby mode with RTC:0.85uA VDD=3.0V
Standby mode without RTC:0.29uA VDD=3.0V
在上述这些模式中,使用时应注意以下几点:
1、睡眠模式,在所有外设全部关闭的条件下,16MHz时,电流为1mA左右,这个数值相对自身的项目来说还是有些大;
2、单片机内部功率是各功能部分功率的总和
3、低功耗模式是通过关掉部分内部功能达到省电
4、低功耗运行模式和低功耗睡眠模式,都限制了CPU的最大运行速度,如果CPU需要一直工作选择,该模式是比较合适的;
5、停止模式,电流比较低,唤醒的方法也比较多;
6、旁路模式,里面的RAM中的数据全部丢失,相当于复位重启。
根据手册我们可以得之:
在睡眠模式,只有CPU停止,所有外设处于工作状态并可在发生中断/事件时唤醒CPU。
在保持SRAM和寄存器内容不丢失的情况下,停机模式可以达到最低的电能消耗。在停机模式下,停止所有内部1.8V部分的供电,PLL、HSI的RC振荡器和HSE品体振荡器被关闭,调压器可以被置于普通模式或低功耗模式。可以通过任一配置成EXTI的信号把微控制器从停机模式中唤醒,EXTI信号可以是16个外部IO口之一、PVD的输出、RTC闹钟或USB的唤醒信号。
在待机模式下可以达到最低的电能消耗。内部的电压调压器被关闭,因此所有内部1.8V部分的供电被切断;PLL、HSI的RC振荡器和HSE品体振荡器也被关闭;进入待机模式后,SRAM和寄存器的内容将消失,但后备寄存器的内容仍然保留,待机电路仍工作。从待机模式退出的条是:NRST上的外部复位信号、IWDG复位、WKUP引脚上的一上升边沿或RTC的闹钟到时。
那就用图来总结一下这三种模式:
再用一张图表来深入表达
如果在一般情况下,STM32F103C8T6各种模式的功耗测试:
单片机最小系统电路功耗
√ 正常模式:10mA
√睡眠模式:2mA√停机模式:20uA
√ 待机模式:2uA
因不同型号,不同工艺差异,不同程序下功耗不同这里只能给出大概范围。
而在那种情况下用那种模式呢?
睡眠模式:
在ARM内核无事可做的时候,可以进入睡眠模式。但设备外设依旧可以工作,需要RM的内核工作时,再将ARM内核进行唤醒工作。
优点:对系统影响最小
缺点:节能效果最差
停机模式:
因SRAM内容不消失,程序不复位,可在唤醒后继续运行。节能效果与待机模式近似,却有着更多优势。主要用于电池供电的设备上,提高电池寿命。在电池供电的产品中必须使用,在外部供电的产品中没必要使用。
优点:节能效果好,程序不会复位
缺点:恢复时间较长
待机模式:
由于SRAM内容消失,唤醒后程序必须复位,从头开始运行。因为待机和停机之间的功耗差别是uA级的,几乎没有差别,所以开发者大多使用停机模式,待机模式极少使用。在一些偶尔需要工作的场合,且工作量不大、不复杂的情况下,待机模式可以保证最低的功耗。比如应用在室外温度测量产品上,每1小时测量一次。可用RTC闹钟唤醒,测量完再待机。
优点:最节能
缺点:程序会复位,只有少数条件可唤醒
综合各自的优点进行合适的模式进行开发吧
下面简单对各种模式进行使用以下(STM32CubeMX配置)
如果想使用睡眠模式,只需要调用写好的HAL库,既下面的函数(唤醒使用中断)
HAL_PWR_EntersSLEEPMode(PWR_MAINREGULATOR_ON,PWR_SLEEPENTRY_WFI)
这里简单的进行下使用,来看到停机模式的效果,设置引脚模式
使用停机模式,则调用以下的函数
HAL_PWR_EntersSTOPMode(PWR_MAINREGULATOR_ON,PWR_STOPENTRY_WFI)
设置一个按键,进行中断唤醒实验,最后看到的结果就是当运行到函数之前,LED灯进行闪烁,执行到停机模式函数停止等待唤醒。
待机模式在停机模式的情况下进行实验,如下进行修改配置(待机模式只有四个能唤醒):
待机模式根据标志位进行操作,因为一旦使用待机唤醒,这个时候单片机就会从从新开始(就像按了复位按键),在进行这一次运行。根据四个条件唤醒之后,从新执行一遍程序。
总结:
根据实际应用需求来进行选择,,其实运用倒是简单,但要选择合适的模式。