低功耗对单片机具有重要意义和深远的影响,因此人们在单片机上降低功耗的努力也在多方面进行
低功耗对单片机的意义:
- 只有降低功耗,才有可能既使用轻便电源又保证长期供电,这对便携式设备和掌上智能设备(PDA)中使用的单片机十分必要. 功耗可低到用纽扣电池就可以为其长期供电, 几年才更换一次电池
- 低功耗可以降低芯片的发热量,电路中元器件的排列才可能更加紧密,从而有利于提高芯片的集成密度,并降低芯片的封装成本
- 由于低功耗芯片工作时发热量少,进而有利于提高芯片工作的可靠性
- 单片机芯片的低功耗,有效的促进了单片机系统的整体低功耗化. 设计单片机系统时候,必须把低功耗作为一个目标,采用低功耗电路设计方法,选用低功耗的外拓展部件,如液晶显示器等.
人们做出的降低功耗的努力:
单片机除了电路上面的低功耗措施外,还在常规的程序运行模式之外,设置了低功耗工作模式.
80C51单片机有两种低功耗模式: 待机模式和掉电模式
STM32F413单片机有四种低功耗模式: 睡眠模式,停止模式,批采集模式和待机模式
而AT32F421 单片机也有三种低功耗模式: 睡眠模式,深度睡眠模式和待机模式
由于是初学,分别对此进行介绍,并尝试分辨出差别
SMOD | — | — | — | GF1 | GF0 | PD | IDL |
---|
80C51单片机的工作模式是通过电源控制寄存器PCON进行设置的.其位格式如上所示:
通用标志位GF1和GF0通常用于指示中断发生的时刻,即中断是在待机期间发生的还是在待机之前发生的,以便通过编制为状态检查,使中断服务程序执行后能返回正确的断点.
掉电方式位PD,用来设置单片机的功耗模式,PD=1,单片机进入掉电模式
待机模式位IDL,用来设置单片机的功耗模式,IDL=1,单片机进入待机模式
待机模式的主要特点是关闭CPU,办法是阻断向CPU提供时钟信号的通路. CPU因得不到时钟信号而停止工作,同时与CPU相关的PSW,ACC,PC,SP以及寄存器都保持原状态.
待机模式的典型例子是液晶显示器LCD处于静止不变的显示过程,此时因用不着CPU而只需要外围电路接口工作,所以单片机进入待机模式
待机模式下,有两种方式退出待机模式返回常规程序运行模式的方法:
在掉电模式下,振荡器停振,单片机停止工作,但内部RAM单元的内容能被保存.
使用查询设备时,当操作了触摸屏上对应用来说无效的输入区域时,就应当让单片机进入掉电状态.
退出掉电状态的唯一方法是硬件复位. 并且复位信号要维持足够长的时间,使振荡器能够启振并且稳定下来.
复位操作将使系统重新初始化,并从头开始执行程序,但内部RAM仍保持掉电前的内容.
这里所说的掉电模式只是人为设计的一种降低功耗的方法,并不是电源真的没有电压了. 此时Vcc仍然存在,正因为此,RAM的内容才能保存下来
执行 WFI 或 WFE 指令可以进入睡眠状态。根据 Cortex?-M4 系统控制寄存器中的 SLEEPONEXIT 位有
两种进入睡眠模式的机制:
在睡眠模式下,CPU 时钟关闭,其他时钟均正常工作,电压调节器正常工作,所有的 I/O 管脚都保持它们在运行模式时的状态,调节器 LDO 以正常功耗模式提供 1.2V 电源(CPU 内核、内存和内嵌外设)。
从执行 WFE 指令进入睡眠模式唤醒所需的时间最短,因为没有时间损失在中断的进入或退出上。
通过设置 Cortex?-M4 系统控制寄存器中的 SLEEPDEEP 位,清除电源控制寄存器(PWC_CTRL)中的
LPSEL 位,再执行 WFI 或 WFE 指令即可进入深度睡眠模式。
还可以通过设置电源控制寄存器(PWC_CTRL)中 VRSEL 位选择深度睡眠模式下电压调节器的工作状态。当 VRSEL=0,电压调节器正常工作,当 VRSEL=1,电压调节器处于低功耗模式。
另外,深度睡眠模式下,在设置 VRSEL=1,控制电压调节器处于低功耗模式的基础上,可以通过设置内部电压调节器额外低功耗模式使能位(VREXLPEN),进一步降低深度睡眠模式下整个系统的功耗。
在深度睡眠模式下,所有 1.2V 时钟关闭,HICK 和 HEXT 振荡器都被关闭,电压调节器以正常工作或低功耗工作状态给 1.2V 域供电,所有 I/O 管脚都保持它们在运行模式时的状态,SRAM 和寄存器内容保持。
系统从深度睡眠模式退出时,HICK RC 振荡器开启并在稳定后被选为系统时钟。当电压调节器处于低功耗模式时,退出深度睡眠模式时,需要额外等待电压调节器稳定,从而会增加一段额外的唤醒时间。
待机模式可最大限度的降低系统功耗,在该模式下,电压调节器关闭,只有 VDD/VDDA 域维持供电,其他的 1.2V 供电区域,PLL、HICK 和 HEXT 振荡器都被断电。寄存器和 SRAM 中的内容也会丢失。
通过设置 Cortex?-M4 系统控制寄存器中的 SLEEPDEEP 位,设置电源控制寄存器(PWC_CTRL)中LPSEL 位,并清除电源控制及状态寄存器(PWC_CTRLSTS)中的 SWEF 位的情况下,执行 WFI 或WFE 指令即可进入待机模式。
在待机模式下,除了复位管脚、被设置为防侵入或校准输出时的 TAMPER 引脚和被使能的唤醒引脚之外,所有的 I/O 引脚处于高阻态。
当发生 WKUPx 引脚的上升沿、ERTC 闹钟事件的上升沿、ERTC 入侵事件、ERTC 时间戳、NRST 引脚上外部复位、WDT 复位时,微控制器将退出待机模式。
调试配置
默认情况下,在进行调试时,微处理器一旦进入深度睡眠或待机模式,会因为 Cortex?-M4 的内核失去了
时钟而失去调试连接。只需通过设置 DEBUG 控制寄存器(DEBUG_CTRL)中的某些配置位,就可以在
低功耗模式下继续调试软件。
和AT32F421类似,只是多了个BAM模式
立即睡眠和退出时睡眠对应上述的SLEEP NOW和SLEEPONEXIT两种模式
MCU 通过执行 WFI(等待中断)或 WFE(等待事件)指令进入低功耗模式,也可通过在从
ISR 返回时将带 FPU 的 Cortex?-M4 系统控制寄存器中的 SLEEPONEXIT 位置 1 进入低功
耗模式。
仅当没有中断或事件挂起时,才可通过 WFI 或 WFE 进入低功耗模式。
四种具体模式的进入和退出方式和STM32F1有些许差别,具体可以查看相关的参考手册
了解了低功耗模式之后,我们还可以了解一下低功耗模式的应用
待机模式和掉电模式主要使位降低功耗而设置的. 以台湾华邦公司的80C51衍生芯片W78LE516为例
对于2.4V供电的12MHz晶振频率下的最大工作电流,程序运行模式下为3mA,待机模式下为1.5mA,而掉电模式下仅为0.02mA. 因此,在单片机工作过程中,只要有可能,就应该使其处于待机或掉电状态下,这是降低功耗的一种有效途径例如,许多单片机系统的程序运行都是处于键盘扫描和显示的交替循环中,绝大部分机器,时间花费在等待键输入上,真正用于数据处理的有用时间很短. 为此,可以在键等待期间,让单片机处于待机或掉电状态,当有键输入的时候再唤醒机器进入程序运行模式,从而使功耗大幅度降低.
当单片机的控制对象为开关型大电流电感性负载(继电器,电磁阀和开关等)时候,如果单片机与控制对象的距离较近,则负载开启和关闭时产生的强电磁干扰将影响单片机工作的稳定性. 这时待机模式就是避开干扰的最好办法
在单片机发出负载开关指令后,紧接着一条将PCON.IDL位设置为1的指令,让单片机进入待机状态. 在待机状态下,即使有电磁干扰,也不会对单片机有任何影响. 隔一定时间后,等电磁干扰消失,再结束待机,使单片机返回正常工作.