电池供电设备,不管是电动牙刷、剃须刀、手机、个人数字助理(PDA)、MP3播放器,还是手无法够到的遥控设备,都成为人们日常生活的一部分。因此,电源管理对当今的嵌入式设计工程师来说是一件相当重要的的事。普遍存在的微控制器在许多设备的应用中为设计工程师提供了大量管理电源要求的方法。不同种类的MCU自身就拥有一系列节省电流消耗及许多节能特性。但是,在基于微控制器的设计中,对电源的管理不仅仅是选择一个正确的微控制器这么简单。
电源管理同样也需要最有效地使用MCU自身的降低电流消耗及节能特性的发展策略。在系统层面上,即使你所选择的MCU是独立的,同样能够使用许多策略来进一步延长您的应用设备的电池寿命。
应用实例:无线自行车里程表
接下来,我们将以无线自行车里程表为例,来展示有效的电源管理。该里程表由三部分模块组成:一个位于车把上的控制面板,一个位于车轮中的速度传感器及一个位于骑车者头盔上的显示器。
速度传感器将自行车的转速反馈给控制面板,控制面板则计算诸如:行车速度、行车里程、行车时间及能量消耗此类信息,并将计算好的信息传达给显示器。下方图1为一个自行车里程表控制面板的方框图。
图1:无线自行车里程表控制面板方框图,显示了当今MCU不断增强的电源管理特性。
低功耗模式数量的增加
MCU几何形状趋小型化,以减小芯片面积,这会导致晶体管无法承受3V或3V以上电压的直接作用。因此,就要在内部逻辑中使用电压调整器来降低电压。
遗憾的是,这些电压调整器会加大MCU的电流消耗。但是,由于功率大小等于电压乘以电流,因此一个带有调整器的1.8V至3V的系统功耗仍比一个不带调整器的5V的系统功耗要低。
MCU很强地依赖于电源管理模式,在降低整体的工作电流的同时仍能支持调节电源和加快时钟速度。新型MCU能够提供许多低功耗模式来满足这 些要求,同时保持系统灵活性。飞思卡尔公司的MC9S08GB60 MCU有四种低功耗模式:深度停止状态(stop1)、中度停止状态(stop2)、轻度停止状态(stop3)和等待模式。
在等待模式下,通过关闭CPU时钟来降低功耗,但是系统时钟由其它MCU外设来支持工作,如:模-数(A-D)转换器、计时器或串行通信模块。该模式在外设需要工作的情况下用于降低功耗是相当有效的,但是CPU在外设完成任务之前不能工作。
在我们的例子中,等待模式在串行外设接口(SPI)用于与射频(RF)收发器通信情况下使用。
要想更进一步降低功耗,可使用三种停止模式。Stop1、Stop2、Stop3分别提供不同级别的降低功耗操作。
Stop3是三种停止模式中功能性最强的一个。在Stop3模式下,片上电压调整器处于省电模式,但仍能提供最低限度的调节来保留随机存储器(RAM)和输入/输出(I/O)寄存器的内容。几个中断源和复位能够将MCU从Stop3模式下唤醒。Stop3 是三种停止模式中唯一一个低电压抑制(LVI)模块和晶振仍能工作的模式。
在我们的例子中,在从速度传感器读取速度值之间的一段时间里,MCU处于等待状态,此时可使用Stop3模式。Stop3模式下工作的实时接口(RTI)功能可用于及时唤醒MCU以进行下次读取。
Stop2的功能性较之Stop3要弱些,但其功耗更低。在Stop2模式下,电压调整器处于节电(powered down)状态。但是,RAM内容仍然保存着。I/O寄存器也处于节电状态,并且当它从停止模式被唤醒时需要进行重新配置。在Stop2中,能够唤醒 MCU的中断源更少,但是仍具有RTI功能。回到我们的例子中来看,Stop2可取代Stop3来更进一步降低功耗。由于该模式下RTI功能和RAM仍在 工作,所以速度读取之间的时间仍可被测得。
Stop1是MCU中功耗最低的模式。在该模式下,电压调整器及所有外设、CPU、RAM和I/O都完全进入节电状态。只有复位和IRQ中断脚能够唤醒MCU。当MCU能够进入节电状态,但在外部激励下,如按下按钮的情况下仍需做出反应时可用Stop1模式。
在自行车里程表这个例子中,当里程表处于节电状态时可进入Stop1模式。节电状态下的Stop1模式是MCU中可能存在的功耗最小的模式,而不需从芯片上切断电源。为什么不从芯片上将电源彻底切断呢?因为从芯片上切断电源需要使用一个更为昂贵的拨动开关。
同样的,MCU可使用一个与中断脚相连的按钮开关来实现许多不同的作用。这些不同的作用取决于系统当前的状态。因此,Stop1模式能够保持设计简单、成本低廉、并且几乎不消耗电流,堪称完美。
时钟管理
许多设计师将低功耗与低时钟频率等同起来。而事实上,根据MCU正在进行的不同操作及MCU可使用何种低功耗模式,以最高的速度工作事实上能够降低功耗。
如果MCU拥有一个有效的低功耗模式,那么使它最长时间地处于该模式下能够最大限度地降低功耗。因此,如果CPU在返回睡眠模式之前需要执行代码,那么以可能的最高速度完成代码执行,然后返回低功耗模式比持续以低速度工作消耗的电流少。
让我们再来看看自行车里程表这个例子,假设控制面板每秒钟更新速度一次,并且需要循环16,000个总线周期来计算数据并在显示器上显示出 来。由典型的32kHz晶体工作,并且假设有一个普通的一分为二的总线时钟,我们就能够拥有16KHz的总线,在这种情况下,需要使用整整一秒钟来完成计 算。
现在,如果我们可以使用8MHz的总线时钟,就可以仅花费2毫秒来完成计算,剩余的998毫秒可处于低功耗模式下。
当然,并非MCU须执行的每项任务都会得益于高速性能。在我们的例子中,如果数据速度相当的慢,无线通信所需的时间可能不需要8MHz的总线速率。因此,在这种情况下,要想将功耗最小化,我们就应该尽可能慢地运行MCU,直至无线通信结束。
因此,我们需要一个时钟灵活的MCU,如飞思卡尔公司的MC9S08GB60 MCU。拥有该设备,您可以使用高频晶体、低频晶体或内部振荡器。
拥有任一此类时钟源,就可以随意地使用片上频率锁定环(FLL)使总线速度成倍地升高或降低,来满足任务需求并且使功耗达到最小化。图2为自行车里程表例子中不同操作模式下功耗的改变情况。
图2:在自行车里程表例子中,如何通过高活性短脉冲及时间更长的非活性低功耗模式之间的转化来进行电源管理的图。
延长电池寿命的系统硬件策略
除了低功耗模式及时钟管理以外,想要使功耗最小化还应在设计时考虑许多硬件和软件方面的因素。从硬件角度来看,控制好MCU内外的外设功耗能够在很大程度上降低整体功耗。
禁止片上外设使用MCU控制寄存器是一个很直接的方法,但该方法的效果可能没有直接禁用MCU外部外设那么明显。使用通用的I/O引脚,可以控制外部电路的功耗。
里程表例子中是通过速度传感器来测量车轮的速度。这可以通过将LED和光传感器安装于车架上,并将槽盘安装于车轮中来实现。持续工作的LED和光传感器将会消耗大量的电流。而使用I/O引脚,使LED和光传感器只在进行速度测量时工作,就将会大大降低电流。
当前,分立元器件,如LED和光传感器可以明显地控制I/O,但仅限于能够以类似模式控制的电路。如果这些器件需要的电流大于MCU能够直接提供的电流,就可以使用缓冲器作为这些电路的电源开关。在某些情况下,将几个I/O脚并联在一起就能够提供足够的电流。
速度传感器同样有另一方法可以降低电流。如果持续读取光传感器来检查光线是否穿过槽盘,那么MCU必须一直处于更高电流的工作模式。由于我 们所关心的仅仅是从亮到暗或从暗到亮的转变点,因此可以使用中断来代替持续轮询。中断使MCU进入一个低功耗的等待模式。MCU的计时器可以持续计数,并 且通过使用与光传感器输出相连的一个输入捕捉特性,我们很容易就能够测出速度传感器的亮/暗时间,进而算出每分钟转速(RPM)。
如果配置不当的话,MCU的I/O脚自身就会成为过载电流源。不用的引脚应即时关闭,避免浮动输入造成一个大的电流路径。在使用采取多种封装形式的MCU时,这一点常常会被忽略。
我们常常容易忘记最高引脚数版本的封装中,可用引脚仍在较低引脚数版本的封装硅片上。任何浮动的输入引脚都会阻碍过载电流源电流的流出,在 某些情况下阻碍作用会高许多倍,如温度变化的情况下。在这些情况下,应启动内部上拉或者如果该引脚是I/O引脚,可将其配置成输出引脚(如果该引脚驱动的 是开路,则与数据无关)。
延长寿命的系统软件策略
从软件角度来看,有一些明显的降低功耗的窍门。如前所述,保存能量的最佳方法就是尽可能长时间地处于最低功耗状态。
由于在工作状态下,CPU活跃地执行各种指令,永远不会处于最低功耗状态中。因此,我们必须将CPU需要执行的工作量最小化。这就应该使CPU更快地完成其任务,让MCU迅速返回低功耗模式中。
这儿有一些降低CPU工作时间的技巧。尽量使用最短的数据类型。当写入C代码时,我们很容易忘记一点,即普通的整数常常被定义为16位或32位的数字,即使是在8位MCU的编译器中亦是如此。
对于8位的器件,应默认使用8位字符类型,除非必须使用更长的字节。即使字节长度需要更长,同样可以通过将16位或32位数字分解成几个8位片段,只在数据处理最后阶段才将其连接起来的方法就可以降低代码长度。
如果有额外的内存来使用直接插入码,就应避免使用短循环或子程序调用。每个循环和子程序都会使用额外的CPU周期来确认循环是否完成,或者是将程序计数器推入堆栈和弹出堆栈。
如果你知道一个短循环只会执行四次,那么就在一行之内写入四次相同的代码,而避免使用for-next或while-loop循环语句。如果一个子程序只有10或20比特的代码,考虑将其直接插入以取代使用子程序。在简单的任务中,这种方法将大大降低CPU负载。
在适当的时候将数值预先计算好。回到我们的自行车里程表例子中,根据主控制面板是与显示器还是与速度传感器进行对话,假设RF链路分别采用两种波特率。当写入C代码时,将实际波特率代替串行接口所需的实际预算数值传输给串行接口设置程序可能更好。
毕竟这会使代码的可读性更强些。但是,这同样也导致串行接口程序不得不在波特率每次发生改变时都根据新的波特率计算出预算数值。将预算数值预先算好并传输给串行设置程序将会减少CPU周期和代码长度。
要考虑使用查表方法取代复杂的计算。如飞思卡尔公司HCS08家族的MCU就拥有非常有效的访问表格数据的指令和寻址模式。根据计算的复杂 性,该方法能够节省一些CPU的计算。如果计算仍不可避免,那么就应在程序开始之前确保尽早退出计算。 简单的例子是通过“1”或“0”搜索乘法运算。
本文小结
当今的多功能微控制器能够为电池供电应用的设计工程师提供许多延长此类设备电池寿命的方法。多种低功耗模式和灵活的时钟源让设计工程师能够 对节能和所需的性能进行管理,以实现设计目标。当CPU要求高时进行高速运作,反之则进行低速运作。要在任何可能的时候转入低功耗模式。
除了对MCU自身功耗进行管理之外,通过深谋远虑的系统规划可使MCU管理整个系统的功耗。MCU能够在需要时使系统内的设备和电路开始运作或停止运作,几乎如同MCU管理其片上外设一样简单。
不可忽视的是,软件工程师们可以通过建立CPU周期意识来延长电池使用寿命。CPU所执行的指令越少,MCU就能够越快地进入低功耗模式。 创造许多简单的函数可以缩短代码长度,但是却断送了缩短电池寿命的努力。另一方面,尽可能使用最短的数据类型会在缩短代码长度的同时延长电池寿命。
因此,下次选用电池供电系统设计时,别忘了对您的MCU做出明智的选择,同时使用MCU能够提供的所有功能来管理整个系统的功耗。
评论
查看更多