在提高计算性能和集成更多功能的市场需求驱动下,16位和32位微控制器(MCU)的应用领域在不断扩大。电源电压降低,采用先进的CMOS制造工艺的32位微控制器实现了高性能,缩小了芯片尺寸,这些因素使电池供电的设备也在不断扩大应用范围。
不过深亚微米技术存在一个重大缺陷,就是泄漏电流非常高。这是一个严重的问题,对电量有限的电池供电应用影响特别大。为了克服这个缺陷,新的32位微控制器(包括通用微控制器)必须具有能效非常高的超低功耗模式,以延长待机使用时间。
静态电流可能是产生电池供电应用功耗的主要原因,本文主要介绍创新的STM32 ARM Cortex-M3内核微控制器如何实现低功耗模式以及最大限度降低泄漏电流对电池供电应用的影响。
泄漏电流
泄漏电流是CMOS晶体管栅极在静态(无开关操作)下存在的连续电流,产生泄漏电流的原因有多个,每个缩减芯片尺寸的新技术都会提高泄漏电流。泄漏电流主要是由栅极、亚阈压和结隧道三种泄漏电流组成,参见图1。
亚阈压泄漏电流是由亚阈压降低引起的,每一代新技术降低电压时都需要降低阈压;栅极泄漏电流是由栅极氧化层厚度降低造成的,降低栅极氧化层厚度是降低“短沟道”效应;结隧道泄漏电流是由反向偏置P-N结(电子隧道)上的电场引起的。
因为亚阈压泄漏电流随温度升高而以幂数形式升高,所以泄漏电流随温度升高而增加,温度与泄漏电流的关系曲线如图2所示。在没有开关操作的状态下,采用先进制造工艺的32位微控制器在通常的环境温度下能够把静态电流限制到几微安。然而这种强度的静态电流还会随温度升高而增加,在125℃时甚至会超过1mA,基于这个原因,考虑到最高应用温度下的泄漏电流是非常重要的。
虽然目前存在几种技术能够限制一个数字单元的泄漏电流(延长多晶硅的长度,超过技术准许的最短长度;提高晶体管上的氧化层厚度),但是这些技术会影响数字单元的时间延迟。如果在一个完整的核心逻辑内使用这样的单元,会影响芯片的性能。
从结构的角度看,数字逻辑电路和存储器是导致泄漏电流增加的主要原因。除了因为尺寸缩小而引起泄漏电流提高的原因外,新一代8位、16位和32位微控制器还大幅度提高了数字逻辑门的数量和存储器的容量,所以,泄漏电流是采用最新半导体工艺的通用微控制器亟待解决的一个主要问题,因为电池电量有限,电池供电应用需要对这个问题给予特殊考虑。
泄漏电流对电池使用时间的影响
当平均运行电流相对于待机电流变得很小时,静态电流消耗是引起平均电流功耗的一个主要原因。
如果电池提供的电量已确定,我们就可以快速估算出设备的电池使用时间(不考虑Peukert法则中的电池电容的非线性),见下式。
其中,Irun是运行电流,单位是mA;Istdby是待机电流,单位是mA;Eb是电池容量,单位是mAH;Trs是待机模式下的相对使用时间,取值范围是0~1。
以STM32 128kB闪存微控制器为例,在所有外设开启的条件下,72MHz的运行电流的典型值仅为36mA(0.5mA/MHz),这要归功于ARM Cortex-M3架构和低功耗设计方法。不过,因为采用了先进的制造工艺,泄漏电流到了55℃时会明显增加。但是,静态电流在55℃时仍然能够限制到50mA,这归功于一个超低功耗的电压监控器及稳压器。与运行功耗相比,这个数值非常小,可以忽视不计。但是,如果应用系统每天只运行一分钟,则静态电流功耗则在总功耗中占很大比例(64%)。为了解决这个问题,STM32的设计工程师们在架构层上实现了一个内置稳压器、几个独立的电压区和集成电源开关,由此实现的低功耗模式可以根据应用优化电池使用时间。
实现超低功耗待机
一个微控制器的总功耗是动态功耗(CMOS栅极的开关操作)与静态电流功耗(泄漏电流和静态模拟电流功耗)的总合。静态电流是引起功耗的一个主要原因,停止时钟运行,消除所有动态功耗,对于电池供电应用显然不是一个有效的待机状态。即便在停止时钟时降低内核电压,对实现有效的待机模式也没有太大的帮助。为实现超低功耗待机模式,必须关闭大部分的内核逻辑器件(和存储器)的电源。
为了做到这一点,可以在器件上做出两个由内部稳压器供电的电压区,一个是供给低功率控制器的始终导通的小面积电压区,另外一个是为了在待机模式下关闭而通过一个开关驱动所有其它功能的“主内核”电压区。因此,在主内核电压区可以专注于处理性能,而在“始终导通”电压区内限制泄漏电流(静态电流)却十分重要。
不过,在这两个电压区内,内部稳压器在待机模式下必须始终保持通态,这预示会产生一股巨大的静态电流。因此,最好停止嵌入式稳压器的运行,以便达到一个超低的待机电源电流。
STM32按以下方式实现这两个电压区,其框架如图3所示。
● VDD后备主电压
区基于静态电流非常低的厚氧化层高压晶体管技术。因为有了高压晶体管,这个电压区可以直接由主VDD电压供电。该电压区包括低功率模式控制器和功率极低的看门狗,以及相关的低功率RC振荡器和一个门数量优化的逻辑电路;
● 主内核从电压区包括限制在低压下的所有其它功能(CPU内核、大多数外设和存储器),主要用于提高性能,降低动态功耗。
有了这两个电压区,STM32F103能够提供一个功耗极低的安全待机模式,在3.3V电压下典型电流为2mA,这是电压监控器所消耗的电流,这个监控器是为确保待机模式与运行模式一样可靠而监控主电源电压的。因为泄漏电流可以限制在很低水平,所以在85℃和3.3V条件下,器件随温度升高而增加的待机电流被限制在2.4mA。
我们也可以在主电压域内实现动态降低功耗的功能,例如,STM32包括一个独立的超低功耗的看门狗,该看门狗在待机模式下工作,总增加功耗(专用RC振荡器和看门狗的数字功耗)在3.3V电压下仅1mA。如果在待机模式下出现一个意外输入,这个功能则可以防止应用失效。
在微控制器芯片上分离电压区会遇到很多设计限制因素,例如:
● 必须在后备电压区实现完整的唤醒和模拟电路,结果很难提供大量的唤醒信号源
● 必须在断电期间分离两个电压区(内核电压传出的所有信号都是浮空的) ;
● 需要以特殊的顺序停止时钟源,电源断电/上电必须可靠。例如,主内核电压逻辑电路需要一个专用复位;
● 因为两个电压区在电压和工艺方面几乎是相互独立的,而在温度方面却是相互关联的,所以必须考虑到两个电压区的时序限制。这意味着在时序分析过程中必须兼顾更多的情况(例如,电压和工艺最差的备用电压区,以及工艺和电压最好的主内核电压区) ;
● 为防止程序意外地进入待机模式输入,必须在备用电压区内实现某些安全功能,如看门狗;
● 为了保证产品在小封装内拥有32位的性能,还必须保持可用I/O与I/O总个数的比例。在STM32上,主内核稳压器无需外部去耦合电容器,所以这个产品并没有因为是双电压区而损失封装上的引脚,即没有采用额外的电源输入。
不过,作为复杂设计的回报,STM32获得了真正的超低功耗待机,有助于应用开发人员优化电池使用时间。
STM32的功率模式及优化的电池使用时间
因为实现了双电压区,STM32提供了两个不同的低功耗模式:停止模式和待机模式。两个功能中电压监控器都是导通的,以便在出现电压下降时保护应用。
在停止模式下,低功耗稳压器保持通态,但是时钟停止运行。通过内部阻容振荡器,稳压器提供极短的重启时间(<10mS),并保留软件环境。在环境温度下的典型电流为15mA(3.3V),但是这个模式无法减轻泄漏电流问题,因为泄漏电流会随着温度以幂数形式升高。
在待机模式下,稳压器是断态,在环境温度下电流消耗为2mA(3.3V),电流几乎不会随温度升高(在85℃下,一个典型器件的电流为2.4mA)。不过,待机模式重启意味着软件内容丢失,RAM、内核和大多数外设寄存器都会丢失数据。
为具体应用选择最佳的模式能够极大地影响电池的使用寿命,下面是在选择省电方式时应考虑的基本要求。
● 检查微控制器的待机状态是否符合应用要求(例如,I/O待机状态、唤醒信号源);
● 考虑最恶劣的但是能够保证应用功能正常运行的温度条件对电池使用寿命的影响;
● 检查从待机时间开始的重启时间是多少,是否达到应用对重启时间的要求;
● 检查待机模式是否比停止模式省电,在两个事件之间,待机功耗与待机重启功耗之和是否小于停止模式的功耗。
这些问题与应用有关,待机模式重启时间包括从唤醒到读取复位向量这个过程所用的时间,待机模式重启时间取决于硬件(稳压器启动时间,STM32的时钟源启动时间大约为40ms)和软件恢复应用环境所需的时间。软件通常必须检查唤醒信号源,从备份寄存器恢复环境信息,并重新配置应用系统使用的微控制器功能。
因为待机软启动与软件有关,所以在唤醒阶段消耗的能量也与应用有关。一个实用的估计能量损耗的方法是,在一个时限内(从唤醒后到软件立即回到待机模式)生成数个给定的唤醒信号,然后比较在唤醒信号没有生成时的平均电流消耗。为了优化待机模式启动时间,开发人员不得忘记优化编译器增加的初始化阶段,并尽可能减少初始化阶段(例如,应该去除RAM初始化过程)。
含有自动电源开关的实时时钟及数据备份专用电压区
电池供电应用都需要一个实时时钟,不过,内核电压关闭必然导致整个程序环境丢失,这相当于一个产品的复位重启。给程序实现一个备份寄存器库,有助于恢复程序执行所需的最小环境。
可以在一个备用电压区内,把所有这些功能都直
接集成在微控制器上。不过,实时时钟功能通常应在很长时期(数年)内有效,即便电池供电的主应用也是以充电电池为电源的。为实时时钟设计第三个电压区,并设置一个实时时钟电源专用引脚,就可以使用一个很小的专用钮扣电池给实时时钟供电,同时主应用由另一个主要电源供电,这样钮扣电池只给实时时钟和相关的振荡器供电,而不给其它功能供电,例如,在待机模式下才可用的电压监控器。
不过,实现第三电压区也不是最完美的,因为当主电源可用时,钮扣电池仍然给实时时钟和备份寄存器供电。为此,STM32采用了一个聪明的延长实时时钟电池使用时间的方法,具体做法是给实时时钟和备份寄存器增加一个电源开关,当主电源可用时,从主电源给实时时钟和备份寄存器供电;当主电源不可用时,从电池给实时时钟和备份寄存器供电。STM32电压区电路如图4所示。
主电压监控制器通过一个闩锁机制向电源开关发布命令,当发现VDD电压低于VDD的下限时,开关把实时时钟和备份寄存器的电源转接到外部Vbat电源。如果VDD电压高于VDD上限时,开关自动选择VDD给这个特殊的电压区供电。
采用电源开关设计还有另外一个优点,软件对这个特殊的电压区读写操作(通过电平转换器)产生的额外动态功耗决不会增加对钮扣电池的功耗,这是因为在运行模式下,电池始终是由主电源提供的。因此,根据实时时钟的功耗和钮扣电池的电量,可以直接计算钮扣电池最短使用时间。
STM32的实时时钟典型电流消耗为1.4mA(环境温度,3.3V),当使用一枚CR2032电池时,电池最短使用时间近20年。然而,如果应用在大多数时间都连接着主电源,电池的使用时间可以更长,即便电池电量非常低,还能照常使用。
STM32实现的实时时钟和备份寄存器在待机模式下仍正常工作,因此,实时时钟可以作为待机唤醒的信号源,而且在系统进入待机模式前,备份寄存器还可以保存一些重要的参数值。
增添电源开关的方法大幅度提高了微控制器设计的复杂性,因为它要求:
● 电压区之间的隔离变得更加复杂;
● 可靠的电源开关设计,经过正确调整后,功耗可达到预期的水平(为避免小封装上可用的GPIO数量减少,内部实时时钟电压区没有外部引脚,因此无需增添去耦合电容器);
● 考虑到了不增加Vbat静态功耗的各种启动情况,例如,当VDD不存在时Vbat电压的升高不应产生意外状态(钮扣电池可能在生产线上被焊接到产品内,这时不应有额外的功率消耗,否则电池的电量会被白白地消耗掉);
● 实时时钟电压区在转接VbatV电压前必须能承受VDD最低阈压以下的大电压降。
、