1.2 降低微处理器的功耗

1.2.1 选择低功耗的微处理器

对于一个嵌入式系统,一旦微处理器和操作系统(OS)被选定,整个系统的框架便大致可以确定了。在选择一个微处理器时,除了要注意其性能的优劣(如时钟频率等)及所提供的接口和功能外,也不能够忽视其功耗特性。因为微处理器是整个嵌入式系统主要的功率消耗源。对于一个移动(手持)设备,除了显示屏以外,微处理器的功率消耗几乎是的整个系统功耗的一半,甚至更多(视系统具体情况而定)。选择合适的微处理器对整个系统功耗大小有举足轻重的影响车健.嵌入式系统中的低功耗设计考虑.[EB/OL].http://www.ed-china.com/ART_8800011853_400011_500009_TS_41d96a85.HTM.孟海斌,张红雨.超低功耗嵌入式系统设计技巧.单片机与嵌入式系统应用.2010.8:16-19.胡叔军.基于MPC8270的嵌入式系统研究和低功耗设计[D].北京邮电大学硕士学位论文,2008.

微处理器的选择通常在微处理器的性能(Performance)和功耗(Power Consumption)两方面进行比较。通常可以采用Watt/MIPS这个指标来进行衡量,即每执行1M次指令所消耗的能量。实际上,由于各个微处理器的体系结构有很大差异,衡量性能的方式也不尽相同。

微处理器的功率消耗可以分为两大部分:一是内核消耗功率PCORE,二是外部接口控制器消耗功率PI/O。总的功率消耗是两者之和,即P=PCORE+PI/O。PCORE与其供电电压和时钟频率有关;而PI/O除了与各个专门I/O控制器的自身功耗有关外,还与地址总线和数据总线宽度有关。

为了满足低功耗系统设计的需求,很多微处理器生产厂商都推出了自己的低功耗产品,如Philips公司的P8XLPC系列、TI公司的MSP430系列、Microchip公司的PIC系列,以及NXP公司的ARMCortex-M0系列等。这一系列的微处理器本身具有超低功耗特性,能够工作在低电压和低频率状态。选择时需要对微处理器的特性、工作模式、工作电流、休眠电流、掉电电流等参数进行详细的分析。

例如,Microchip公司采用nanoWattXLP极低功耗技术的MCU,其典型电流消耗为:掉电电流小于100nA,看门狗电流消耗小于800nA,实时时钟和日历电流消耗小于800nA。该公司的PIC24F16KA系列的MCU,典型休眠电流可以低至20nA,实时时钟电流达490nA,看门狗定时器电流达370nA。

NXP公司采用ARMCortex-M0内核的LPC11××系列32位微处理器的能耗仅为85μW/MHz。在睡眠工作模式(@12MHz)下的功耗为600.0μW,深度睡眠工作模式的功耗为19.8μW,深度掉电工作模式的功耗为0.726μW。

1.2.2 降低供电电压和时钟频率

由式(1.4)可知,CMOS电路中的功率消耗与电路的开关频率呈线性关系,与供电电压呈二次平方关系。

低功耗微处理器中几乎全部采用CMOS器件,对于一块微处理器芯片来说,VCORE(芯片内核电压)电压越高,时钟频率越快,则功率消耗越大。所以,在能够保证满足正常功能的前提下,应尽可能选择能够在低电压工作的微处理器芯片。由于器件的功耗与器件供电电压的平方成正比。当供电电压由5V降到3.3V时,功耗将减少50%以上;当电压降到1.8V时,功耗将减少80%以上。

对于已经选定的微处理器芯片来讲,应尽可能降低其工作(时钟)频率。例如,NXP公司采用ARMCortex-M0内核的LPC11××系列32位微处理器,在系统时钟为12MHz时,功耗为9.9mW;在系统时钟为50MHz时,功耗为29.7mW。MPC8270微处理器在CPU时钟为233MHz时,功耗为1W;在系统时钟为450MHz时,功耗为1.67W。

可以采用动态电源管理、动态改变微处理器时钟、RC振荡器(比晶体振荡器或锁相环更省电)等技术降低微处理器的功耗。

1.2.3 选择合适的总线宽度

如果考虑数据传输速度,微处理器的总线宽度越宽越好。而对于一个对功耗敏感的低功耗系统来说,如何选择微处理器的总线宽度就需要仔细考虑了。

根据公式,对于总线上的每一条线,都会存在这样的功率消耗。显而易见,当总线宽度越宽(数量越多)时,功耗自然越大。总线的每一条线上的容性负载可能不一样,但一般都在4~12pF之间。如表1.1所示,一片1MbFlash通过8bit和16bit的总线与微处理器相连,在总线频率为4MHz、总线电压为3.3V时,采用16bit总线和采用8bit总线之间存在3.7mW的功耗差异车健.嵌入式系统中的低功耗设计考虑.[EB/OL].http://www.ed-china.com/ART_8800011853_400011_500009_TS_41d96a85.HTM.孟海斌,张红雨.超低功耗嵌入式系统设计技巧.单片机与嵌入式系统应用.2010.8:16-19.胡叔军.基于MPC8270的嵌入式系统研究和低功耗设计[D].北京邮电大学硕士学位论文,2008.

表1.1 16bit总线和8bit总线的功耗

然而,对于需要大量频繁地存取数据的场合,采用8bit总线也不见得会降低功耗,因为频繁地存取数据,增加了读/写周期,也同样需要消耗功率。

与采用外置Flash相比,采用内置Flash的微处理器可以大大降低系统的功率消耗。在存储容量需求较小的条件下,采用FRAM代替一般的Flash或E2PROM,将会节省很多电能,因为FRAM的写入功耗是Flash和E2PROM的

1.2.4 设计低功耗的接口电路

接口电路的低功耗设计需要考虑:选用低功耗的外围接口芯片、上拉电阻/下拉电阻的选取、对悬空引脚端的处理、是否需要采用I/O缓冲器等因素车健.嵌入式系统中的低功耗设计考虑.[EB/OL].http://www.ed-china.com/ART_8800011853_400011_500009_TS_41d96a85.HTM.孟海斌,张红雨.超低功耗嵌入式系统设计技巧.单片机与嵌入式系统应用.2010.8:16-19.胡叔军.基于MPC8270的嵌入式系统研究和低功耗设计[D].北京邮电大学硕士学位论文,2008.

1.上拉电阻/下拉电阻的选取

例如,在一个3.3V的系统中,I/O接口采用4.7kΩ的上拉电阻,当输出为低电平时,每只引脚端上的电流消耗为0.7mA,如果有10个这样的引脚端,就会消耗7mA电流。采用10kΩ的上拉电阻,每只引脚端上的电流消耗为0.33mA,10个引脚端仅消耗3.3mA电流。

当一个引脚端在多数情况下为低电平时,也可以考虑采用下拉电阻,以节省功率。

因此,系统设计时,在保证驱动能力的前提下,即能够确保IC的VIH或VIL的情况下,电路中应尽可能采用阻值较大的上拉/下拉电阻,以减小在电阻上的能量消耗。

2.悬空引脚端的处理

因为CMOS器件引脚端的输入阻抗极高,悬空的引脚端很可能感应一些电荷,电荷的积累可能导致器件被高压击穿。根据电量与电容C和电压U的关系Q=C·U可知,电荷的累积Q会产生影响引脚电平状态的电压U,从而导致输入端信号的在“0”和“1”之间变化。如果微处理器在休眠状态,有可能导致微处理器不断地被唤醒,从而无法进入休眠状态或产生其他莫名其妙的故障。正确的方法是将未使用到的引脚端连接到VCC或地。连接到VCC的上拉电阻可以选择1~10kΩ,为了降低功耗,阻值可以取得大一些。

3.缓冲器

接口电平要尽量匹配,以减少电平匹配电路带来的额外功耗。

缓冲器常用来完成电平转换,增加驱动能力,实现数据传输方向的控制等功能。如果仅仅是为了考虑驱动能力而增加缓冲器,为降低功耗就应该慎重考虑了。首先应检查芯片的最大输出电流IOH和IOL是否足以驱动下级IC,如果可以通过选择合适的驱动接口参数,减小缓冲器的使用量,或者避免缓冲器的使用,这对降低功耗来说是一个很好的选择。

如果允许,应适当降低外部驱动引脚的电压。

1.2.5 选取不同工作模式

根据公式,系统的时钟频率对于的影响功耗是非常明显的。在满足性能要求的基础上,必须考虑如何降低时钟频率,动态地设置时钟,以达到最大程度降低功耗的目的。

微处理器内部的各种时钟信号,都是通过外部晶振,经由内部锁相环(PLL)倍频后产生的。可以通过内部寄存器,设置各种工作频率的时钟来控制微处理器的功耗。

现在的微处理器都有多种工作模式,可以通过控制微处理器进入不同的工作模式来达到降低功耗的目的车健.嵌入式系统中的低功耗设计考虑.[EB/OL].http://www.ed-china.com/ART_8800011853_400011_500009_TS_41d96a85.HTM.孟海斌,张红雨.超低功耗嵌入式系统设计技巧.单片机与嵌入式系统应用.2010.8:16-19.胡叔军.基于MPC8270的嵌入式系统研究和低功耗设计[D].北京邮电大学硕士学位论文,2008.。例如,S3C2410×(32bitARM920T内核)具有正常模式、空闲模式、休眠模式、关机模式四种工作模式,各种模式的功耗车健.嵌入式系统中的低功耗设计考虑.[EB/OL].http://www.ed-china.com/ART_8800011853_400011_500009_TS_41d96a85.HTM.孟海斌,张红雨.超低功耗嵌入式系统设计技巧.单片机与嵌入式系统应用.2010.8:16-19.见表1.2。

表1.2 S3C2410×不同工作模式的功耗

由表1.2可见,微处理器在全速运行时的功耗,比在空闲或者休眠时的功耗大得多。降低功耗的设计原则是:在微处理器完成正常运行模式后,尽可能进入到空闲模式或休眠模式。在类似PDA的设备中,系统全速运行的时间远少于空闲的时间,可以通过编程设置,使CPU尽可能工作在空闲状态,然后通过相应的中断唤醒CPU,恢复到正常工作模式,处理响应的事件,事件处理完后再进入空闲模式。

1.2.6 关闭不需要的外设控制器

微处理器通常都可以提供I2C、I2S、LCD、Flash、Timer、UART、SPI、USB等外设控制器,但在一个系统中,这些外设控制器一般都不会全部用到。当你想尽可能降低功耗时,对于这些不用的外设控制器,不能任其处于各种状态,而是必须将其关闭车健.嵌入式系统中的低功耗设计考虑.[EB/OL].http://www.ed-china.com/ART_8800011853_400011_500009_TS_41d96a85.HTM.孟海斌,张红雨.超低功耗嵌入式系统设计技巧.单片机与嵌入式系统应用.2010.8:16-19.胡叔军.基于MPC8270的嵌入式系统研究和低功耗设计[D].北京邮电大学硕士学位论文,2008.。因为这些不用的外设控制器,即使没有使用它们,它们仍然会消耗电流。S3C2410×外设控制器消耗的电流见表1.3车健.嵌入式系统中的低功耗设计考虑.[EB/OL].http://www.ed-china.com/ART_8800011853_400011_500009_TS_41d96a85.HTM.孟海斌,张红雨.超低功耗嵌入式系统设计技巧.单片机与嵌入式系统应用.2010.8:16-19.

表1.3 S3C2410×外设控制器消耗的电流

从表1.3可知,可以通过设置SFR(特殊功能寄存器),有选择地关闭未使用的功能模块,以达到降低功耗的目的。例如,在一个系统中,如果ADC、I2C、I2S和SPI都没有用到,可以通过设置CLKCON寄存器,降低2mA的电流消耗。当然,也可以动态关闭一些需要使用的外设控制器,进一步降低功耗。例如,在空闲模式CPU内核停止运行,此时还可以进一步关闭如USB、Flash等其他的外设控制器,只保证唤醒CPU的I/O控制器正常工作即可,如果通过UART唤醒,则UART控制器不能被关闭。等到CPU被唤醒后,再将USB、Flash等外设控制器打开。

也可以同时动态改变处理器的供电电压和频率来进一步降低功耗,进行系统的动态电源管理。

1.2.7 控制微处理器的供电

为降低功耗,可以对微处理器的供电采取动态电源管理(DPM),这是一个复杂、系统的工程,涉及硬件、操作系统及应用层等方面。动态电源管理在系统运行期间,通过对系统的时钟或电压的动态控制,达到降低功耗的目的,电源的动态管理与系统的运行状态密切相关,动态控制往往需要通过软件编程来实现车健.嵌入式系统中的低功耗设计考虑.[EB/OL].http://www.ed-china.com/ART_8800011853_400011_500009_TS_41d96a85.HTM.孟海斌,张红雨.超低功耗嵌入式系统设计技巧.单片机与嵌入式系统应用.2010.8:16-19.胡叔军.基于MPC8270的嵌入式系统研究和低功耗设计[D].北京邮电大学硕士学位论文,2008.

1.分区/分时供电

分区/分时供电用于控制电源供电部分。它首先需要对电源进行分割,使系统功能模块的电源供电相对独立,并且可以控制,以便实现独立供电和电源的动态管理。分区/分时供电根据系统功能模块的工作状态,利用开关控制各个部分电源的关断,以节省电能。例如,在系统休眠或掉电工作时,关掉外围电路的电源,仅仅保留CPU和定时器电路的电源。

分区/分时控制电源电路示意图如图1.6所示。在图1.6中,晶体管用做电源开关,控制电源VCC向各分区部分供电,供电控制端接到微处理器的输出引脚上。

在图1.6(a)中,晶体管为PNP管,供电控制端为高电平时,切断分区供电部分的电源。供电控制端为低电平时,PNP晶体管导通,此时VCC向分区部分供电。在图1.6(b)中,晶体管为NPN管,供电控制端的控制信号正好相反。

2.利用I/O引脚为外部器件供电

微处理器的I/O引脚输出高电平时,可以提供mA级的输出电流,例如,S3C2410A的I/O可以提供12mA电流。当外部设备所需电流较小时,如图1.7所示,可以直接利用微处理器的I/O引脚为外部器件提供电源。微处理器的I/O引脚输出为高电平时,器件工作;输出为低电平时,器件停止工作。应注意的是,器件要有比较宽的供电电压范围。

图1.6 分区/分时控制电源电路示意图

图1.7 利用I/O引脚为外部器件供电