1.2 降低微处理器的功耗
1.2.1 选择低功耗的微处理器
对于一个嵌入式系统,一旦微处理器和操作系统(OS)被选定,整个系统的框架便大致可以确定了。在选择一个微处理器时,除了要注意其性能的优劣(如时钟频率等)及所提供的接口和功能外,也不能够忽视其功耗特性。因为微处理器是整个嵌入式系统主要的功率消耗源。对于一个移动(手持)设备,除了显示屏以外,微处理器的功率消耗几乎是的整个系统功耗的一半,甚至更多(视系统具体情况而定)。选择合适的微处理器对整个系统功耗大小有举足轻重的影响。
微处理器的选择通常在微处理器的性能(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的功耗差异。
表1.1 16bit总线和8bit总线的功耗
然而,对于需要大量频繁地存取数据的场合,采用8bit总线也不见得会降低功耗,因为频繁地存取数据,增加了读/写周期,也同样需要消耗功率。
与采用外置Flash相比,采用内置Flash的微处理器可以大大降低系统的功率消耗。在存储容量需求较小的条件下,采用FRAM代替一般的Flash或E2PROM,将会节省很多电能,因为FRAM的写入功耗是Flash和E2PROM的
1.2.4 设计低功耗的接口电路
接口电路的低功耗设计需要考虑:选用低功耗的外围接口芯片、上拉电阻/下拉电阻的选取、对悬空引脚端的处理、是否需要采用I/O缓冲器等因素。
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)倍频后产生的。可以通过内部寄存器,设置各种工作频率的时钟来控制微处理器的功耗。
现在的微处理器都有多种工作模式,可以通过控制微处理器进入不同的工作模式来达到降低功耗的目的。例如,S3C2410×(32bitARM920T内核)具有正常模式、空闲模式、休眠模式、关机模式四种工作模式,各种模式的功耗见表1.2。
表1.2 S3C2410×不同工作模式的功耗
由表1.2可见,微处理器在全速运行时的功耗,比在空闲或者休眠时的功耗大得多。降低功耗的设计原则是:在微处理器完成正常运行模式后,尽可能进入到空闲模式或休眠模式。在类似PDA的设备中,系统全速运行的时间远少于空闲的时间,可以通过编程设置,使CPU尽可能工作在空闲状态,然后通过相应的中断唤醒CPU,恢复到正常工作模式,处理响应的事件,事件处理完后再进入空闲模式。
1.2.6 关闭不需要的外设控制器
微处理器通常都可以提供I2C、I2S、LCD、Flash、Timer、UART、SPI、USB等外设控制器,但在一个系统中,这些外设控制器一般都不会全部用到。当你想尽可能降低功耗时,对于这些不用的外设控制器,不能任其处于各种状态,而是必须将其关闭。因为这些不用的外设控制器,即使没有使用它们,它们仍然会消耗电流。S3C2410×外设控制器消耗的电流见表1.3。
表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),这是一个复杂、系统的工程,涉及硬件、操作系统及应用层等方面。动态电源管理在系统运行期间,通过对系统的时钟或电压的动态控制,达到降低功耗的目的,电源的动态管理与系统的运行状态密切相关,动态控制往往需要通过软件编程来实现。
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引脚为外部器件供电