单片机低功耗模式实现技巧

低功耗对单片机具有重要意义和深远的影响,因此人们在单片机上降低功耗的努力也在多方面进行

低功耗对单片机的意义:

  • 只有降低功耗,才有可能既使用轻便电源又保证长期供电,这对便携式设备和掌上智能设备(PDA)中使用的单片机十分必要. 功耗可低到用纽扣电池就可以为其长期供电, 几年才更换一次电池
  • 低功耗可以降低芯片的发热量,电路中元器件的排列才可能更加紧密,从而有利于提高芯片的集成密度,并降低芯片的封装成本
  • 由于低功耗芯片工作时发热量少,进而有利于提高芯片工作的可靠性
  • 单片机芯片的低功耗,有效的促进了单片机系统的整体低功耗化. 设计单片机系统时候,必须把低功耗作为一个目标,采用低功耗电路设计方法,选用低功耗的外拓展部件,如液晶显示器等.
  • 人们做出的降低功耗的努力:

    1. 电路和工艺上
    2. 为单片机配备高速和低速两套时钟,可根据需要选择,以减少不必要的功耗
    3. 今天要详细介绍的,为单片机设置低功耗模式

    单片机除了电路上面的低功耗措施外,还在常规的程序运行模式之外,设置了低功耗工作模式.
    80C51单片机有两种低功耗模式: 待机模式和掉电模式
    STM32F413单片机有四种低功耗模式: 睡眠模式,停止模式,批采集模式和待机模式
    而AT32F421 单片机也有三种低功耗模式: 睡眠模式,深度睡眠模式和待机模式

    由于是初学,分别对此进行介绍,并尝试分辨出差别

    80C51

    SMOD GF1 GF0 PD IDL

    80C51单片机的工作模式是通过电源控制寄存器PCON进行设置的.其位格式如上所示:
    通用标志位GF1和GF0通常用于指示中断发生的时刻,即中断是在待机期间发生的还是在待机之前发生的,以便通过编制为状态检查,使中断服务程序执行后能返回正确的断点.
    掉电方式位PD,用来设置单片机的功耗模式,PD=1,单片机进入掉电模式
    待机模式位IDL,用来设置单片机的功耗模式,IDL=1,单片机进入待机模式

    待机模式(IDLE Mode)

    待机模式的主要特点是关闭CPU,办法是阻断向CPU提供时钟信号的通路. CPU因得不到时钟信号而停止工作,同时与CPU相关的PSW,ACC,PC,SP以及寄存器都保持原状态.
    待机模式的典型例子是液晶显示器LCD处于静止不变的显示过程,此时因用不着CPU而只需要外围电路接口工作,所以单片机进入待机模式

    待机模式下,有两种方式退出待机模式返回常规程序运行模式的方法:

  • 中断方法
  • 为了保证能采用中断方法退出待机模式,振荡器应正常工作,继续向中断逻辑,串行口和定时器/计数器等电路提供时钟信号,以维持其中断功能. 因为响应中断时,电源控制寄存器PCON的IDL位自动被清0,从而使单片机退出待机模式.
  • 可使用外部中断或定时中断,中断响应后执行终端服务程序,但只需在中断服务程序中安排一条RETI指令,就可以使单片机恢复正常工作后返回断点处继续执行程序.
  • 复位方法
  • 加在RST引脚上的的有效复位信号,同样也能将电源控制寄存器PCON的IDL位清0,从而使单片机退出待机模式,进入程序运行模式
  • 掉电模式(Power Down Mode)

    在掉电模式下,振荡器停振,单片机停止工作,但内部RAM单元的内容能被保存.
    使用查询设备时,当操作了触摸屏上对应用来说无效的输入区域时,就应当让单片机进入掉电状态.

    退出掉电状态的唯一方法是硬件复位. 并且复位信号要维持足够长的时间,使振荡器能够启振并且稳定下来.
    复位操作将使系统重新初始化,并从头开始执行程序,但内部RAM仍保持掉电前的内容.

    这里所说的掉电模式只是人为设计的一种降低功耗的方法,并不是电源真的没有电压了. 此时Vcc仍然存在,正因为此,RAM的内容才能保存下来


    AT32F421

    睡眠模式(Sleep Mode)

    执行 WFI 或 WFE 指令可以进入睡眠状态。根据 Cortex™-M4 系统控制寄存器中的 SLEEPONEXIT 位有
    两种进入睡眠模式的机制:

  • SLEEP-NOW 模式
  • 当 SLEEPDEEP=0,SLEEPONEXIT=0 时,执行 WFI 或 WFE 指令,此时可立即进入睡眠模式。
  • SLEEP-ON-EXIT 模式
  • 当 SLEEPDEEP=0,SLEEPONEXIT=1 时,执行 WFI 指令,此时当系统从最低优先级的中断处理程序中退出时,可立即进入睡眠模式。
  • 在睡眠模式下,CPU 时钟关闭,其他时钟均正常工作,电压调节器正常工作,所有的 I/O 管脚都保持它们在运行模式时的状态,调节器 LDO 以正常功耗模式提供 1.2V 电源(CPU 内核、内存和内嵌外设)。

  • 执行WFI指令进入睡眠模式时,只要产生外设中断,都能使系统退出睡眠模式。
  • 执行WFE指令进入睡眠模式时,存在两种方式的唤醒事件,使系统退出睡眠模式:
  • 使能任一外设中断(未在 NVIC 中使能)且使能 SEVONPEND 位可以产生唤醒事件。系统唤醒
    后,需清除外设中断挂起位和 NVIC 通道挂起位。
  • 配置内部 EXINT 线为事件模式来产生唤醒事件。
  • 从执行 WFE 指令进入睡眠模式唤醒所需的时间最短,因为没有时间损失在中断的进入或退出上。

    深度睡眠模式(Deepsleep Mode)

    通过设置 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 和寄存器内容保持。

    1. 执行WFI指令进入深度睡眠模式,任一外部中断线在中断模式下产生的中断,即可使系统退出深度睡眠模式。
    2. 如果执行WFE指令进入深度睡眠模式,任一外部中断线在事件模式下产生的事件,即可使系统退出深度睡眠模式。

    系统从深度睡眠模式退出时,HICK RC 振荡器开启并在稳定后被选为系统时钟。当电压调节器处于低功耗模式时,退出深度睡眠模式时,需要额外等待电压调节器稳定,从而会增加一段额外的唤醒时间。

    待机模式(Standby Mode)

    待机模式可最大限度的降低系统功耗,在该模式下,电压调节器关闭,只有 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)中的某些配置位,就可以在
    低功耗模式下继续调试软件。


    STM32F413

    和AT32F421类似,只是多了个BAM模式
    立即睡眠和退出时睡眠对应上述的SLEEP NOW和SLEEPONEXIT两种模式
    低功耗模式汇总
    MCU 通过执行 WFI(等待中断)或 WFE(等待事件)指令进入低功耗模式,也可通过在从
    ISR 返回时将带 FPU 的 Cortex®-M4 系统控制寄存器中的 SLEEPONEXIT 位置 1 进入低功
    耗模式。
    仅当没有中断或事件挂起时,才可通过 WFI 或 WFE 进入低功耗模式。

    四种具体模式的进入和退出方式和STM32F1有些许差别,具体可以查看相关的参考手册


    了解了低功耗模式之后,我们还可以了解一下低功耗模式的应用

    1. 降低功耗

    待机模式和掉电模式主要使位降低功耗而设置的. 以台湾华邦公司的80C51衍生芯片W78LE516为例
    对于2.4V供电的12MHz晶振频率下的最大工作电流,程序运行模式下为3mA,待机模式下为1.5mA,而掉电模式下仅为0.02mA. 因此,在单片机工作过程中,只要有可能,就应该使其处于待机或掉电状态下,这是降低功耗的一种有效途径

    例如,许多单片机系统的程序运行都是处于键盘扫描和显示的交替循环中,绝大部分机器,时间花费在等待键输入上,真正用于数据处理的有用时间很短. 为此,可以在键等待期间,让单片机处于待机或掉电状态,当有键输入的时候再唤醒机器进入程序运行模式,从而使功耗大幅度降低.

    1. 抗电磁干扰

    当单片机的控制对象为开关型大电流电感性负载(继电器,电磁阀和开关等)时候,如果单片机与控制对象的距离较近,则负载开启和关闭时产生的强电磁干扰将影响单片机工作的稳定性. 这时待机模式就是避开干扰的最好办法
    在单片机发出负载开关指令后,紧接着一条将PCON.IDL位设置为1的指令,让单片机进入待机状态. 在待机状态下,即使有电磁干扰,也不会对单片机有任何影响. 隔一定时间后,等电磁干扰消失,再结束待机,使单片机返回正常工作.

    物联沃分享整理
    物联沃-IOTWORD物联网 » 单片机低功耗模式实现技巧

    发表评论