功耗的问题本身是一个系统的问题,要想有效地降低整体功耗,不但需要在硬件上要充分考虑,而且在软件的设计上更需要认真对待。一个真正高效的低功耗系统,软硬件的相互配合和优化才是极为关键的。
1.选择高集成度的芯片
2.考虑工作电流和休眠时的静态电流.
3.在满足产品需求的前提下,选择配置较低的单片机,较小的RAM/ROM、较低的ADC分辨率、较低的ADC速率、较少的IO管脚都可以降低单片机的整体功耗.
4.对于一个数字系统而言,其功耗大致满足公式:P=CV2f。其中C为系统的负载电容,V为电源电压,f为系统工作频率[2]。功耗与电源电压的平方成正比,因此电源电压对系统的功耗影响最大,其次是工作频率,再次就是负载电容。负载电容对设计人员而言,一般是不可控的,因此设计一个低功耗系统,在不影响系统性能的前提下,尽可能地降低电源的电压和工作频率。
5.对于大多数低功耗单片机来说,工作频率越低,意味着单片机自身消耗的电流也越小,但不能认为频率越低,系统整体功耗越小,因为工作频率降低,意味着需要更长的处理时间,其他外围电路消耗的电能就越多。目前有很多单片机都允许有两个或者两个以上的时钟源,低频时钟作为如UART、定时器等外同功能器件的时钟源,高频时钟作为系统的主时钟。在不需要高速运行的场合下,低频时钟也可以作为系统主时钟使用。
6.对于需要在工作状态和空闲状态之间频繁切换的应用,在考虑单片机自身低功耗的同时,应该考虑切换时间和切换电流。
7.降低功耗从MCU选型开始,一开始选型的时候就应该考虑选择低功耗的MCU。比如MSP430一类的为低功耗设计的CPU。强烈不建议使用51,一方面是因为51速度慢,另外一方面是因为51的IO口是有上拉电阻的,虽然当IO口为高电平时上拉电阻不费电,但是下拉电流的时候却也有不小的功耗产生。
8.片外IC的电源最好都能由MCU的IO控制比如说我们常用的24C02,由于它是掉电记忆的,所以我们完全可以在它不工作的时候对它关电源以节约电流。还有比如常用的6116的SRAM我们完全可以用单片机来控制它的片选端口来控制它的工作与休眠从而节约电流。
9.这招也是最毒辣的一招通常我们驱动一些LED器件,完全可以通过PWM来控制从而省略限流电阻。要知道当器件选定后它的内阻也就已经确定,而当电源电压也确定的时候,就可以通过占空比来确定器件上的电压,从而在节约了限流电阻同时也节约了限流电阻上而的功耗,如果用户使用的是电池,我们完全还可以不定期的对电池电压进行检测然后改变占空比,从而恒定负载上面的电压,达到电源的最大利用
一般来讲,低功耗嵌入式系统的设计包括如下的几个关键的步骤:
1.方案的确定:方案是设计的关键,是项目成功的基本条件。方案选择错了就等于一个人走错了路,要么达不到要求,要么事倍功半,有时虽然满足了设计的要求,但却在时间、预算和成本等方面增加了更多的投入。例如在玩具行业,一般均选择4位系列的MCU来进行产品的设计,若采用8位甚至16位MCU,则无论是在成本,功耗等方面都将是得不偿失的选择;
2.器件的选型:不同的芯片,不同的厂家其所提供的产品的特性均存在差异,特别是在功耗方面,有时差别很大,比如在4位M CU领域,EPSON、OKI等的公司的Microcontroller的功耗就比Samsung以及台湾厂家的相同系列MCU要低几倍甚至是一个数量级。因此确定了方案之后,如何选择合理的器件和MCU,也是保证产品功耗能够达到要求的关键;
3.硬件设计:我们知道外围电路有时是整个系统的功耗“大户”,比如ADC、背光、蜂鸣器、外部Memory、各种传感器等。因此如何合理设计外围电路模块,合理使用和控制相关的外围电路模块将是系统设计的重点。当然硬件的设计必须与软件的设计相结合。
4.软件的设计:软件的设计是整个系统设计的重中之重,系统整体功耗的控制、外围电路模块的使用、调度和切换等,均需要通过软件的编程来实现。一般来讲,低功耗软件设计包括如下的几个方面:
a)初始化:初始化是嵌入式系统设计的基本步骤,也是控制整个系统功耗的重要的步骤,何以如此呢?我们知道,一般来讲在初始化部分,我们需要对整个系统进行配置,比如IO口的设置、外围功能的配置等,而其中最容易被设计者所忽略的一步就是对在项目设计中未被使用MCU的功能的配置,有时正是这些资源的配置不合理,从而导致系统整体功耗出现意想不到的结果。
b)系统时钟的控制:合理使用系统时钟,会在功耗方面带来意想不到的效果。我们知道,CPU的系统时钟与CPU的功耗成正比,时钟越快,其功耗也越大。因此,对于一些具有多个系统时钟的Microcontroller,软件的设计时必须根据系统需求来选择合理的CPU时钟,例如某些带有外部Memory的运动手表,在正带的运动下。可以采用32768Hz作为其CPU时钟,以获得最低的整体功耗;而在访问外部Memory时,由于外部Memory的访问电流在几个毫安甚至更高,而长时间的访问势必导致功耗的增加,因此为了有效地降低由于Memory访问而导致的电流
的损耗,则可以切换到lMhz或更高的CPU时钟下,以求在最短的时间里完成对Memory的访问。当然,在进行时钟切换的时候必须进行全面的考虑,因为选择较高的CPU时钟,其MCU本身的功耗也会增加,因此我们必须要在各种因素下找到其平滑点。对于一个给定的系统,由于电压是固定的,而且电池的容量也是固定的(设位WBatt),因此系统的功耗可以用下式来进行表示:
WBatt= ∑lk*Tk (k = 0. . . . . . n)
其中,Ik为系统在不同的状态或条件下的电流,而Tk则为系统在此状态或条件下所维持的时间。从上式可以看出,若要获得最低的功耗,要求Ik*Tk必须最小,对于一些模式来讲,时间有时是不可控制的,比如待机模式,此时只有更小的电流才能获得最低的功耗,而反应在芯片上就是一款芯片的Power Down Current;相反,对于电流是固定的情况,则必须让系统尽可能短地停留在该状态下。
c) IO口的控制:IO口的控制主要集中在上拉、下拉电阻的选择,待机状态下的电平输入输出设置等。对于IO口的控制,必须记住一个原则:任何情况下,都必须尽可能保证在IO口上不存在电流的流动。电流即意味着能量的损耗,因此在软件设计是必须根据实际的情况来合理配置IO口的状态和其输入输出电平。
d) MCU工作模式的使用:对于大多数低功耗MCU,均存在多种工作模式,一般包括如下几个运行模式:
i.正常运行模式:CPU和Clock均在工作,此时MCU处于最大功耗状态;
ii.停机模式:CPU停止作,但系统时钟仍在工作,此时MCU处于较低的功耗状态;
iii.掉电模式:CPU和系统时钟均停止工作,此时MCU处于最低功耗状态;
e)外围功能模块或电路模块的管理:大多数系统的外围功能模块都是处于一种低频度使用状态,而且有时其功能的开启是有条件的,因而合理的使用和调度外围模块也是降低功耗的重要方法。例如在含有传感器的系统中,可以根据传感器数据增量的变化来提高或降低其开启的频率,就以环境温度的检测为例,由于环境的温度变化是非常缓慢的一个过程,应此对其的检测可以以一种相对较长的时间间隔来进行,如一分钟或若干分钟,若在某一次检测出现有别于常规的温度变化时,为了保证数据的可靠性,则可以在短时间内对其进行若干次的重复测量,以确认其温度的变化时是否正常的还是由于其他的干扰所导致。
总之,低功耗的设计并非是一蹴而就的事情,需要综合考虑各种可能的因素、条件和状态,需要对各种细节进行认真的斟凿和分析,对各种可能的方案和方法进行计算和分析,才可能取得较为满意的效果。
降低功耗不光能够大大的节约电能还能简化电源部分的设计,甚至可以用于手持设备上面使用,这些都已经越来越成为未来产品的设计方向了。