改善8051系统用电效率的微控制器
3.2 内部数据存储器
如前所述,采用片内存储器取代外部RAM能够节省电能。80C32衍生产品具有扩充了的临时存储器(256字节),足够小的程序的堆栈操作和数据存储,不必外接RAM。
对于需要更多数据存储器或设置外部堆栈的设计,javascript:window.open(this.src);" style="cursor:pointer;"/>还需要额外的SRAM。虽然可以找到低功耗的SRAM,在考虑它所带来的功耗时,还应将相关的74373系列锁存器、驱动外部总线的容性损耗等一并考虑在内。
4 时钟源
影响功耗的另一个重要的系统元素是时钟源。标准8051设计通常采用内部振荡器激励一个外部石英晶体产生时钟,或者采用外部晶体振荡器。如果采用外部晶体振荡器,时钟的波形会影响到功耗。如果采用外部晶体振荡器,时钟的波形会影响到功耗。XTAL1引肚子内的输入级用来将外部时钟信号输入8051内核,通常采用互补式驱动器。随着输入时钟在高、低电平之间的跳动,驱动器中的互补对管会有一个短时间的同时开通过程,造成显著的电流浪涌。对于矩 形波来说,高、低状态之间的过渡过程非常短暂,两管同时开通的时间最短。对于上升和下降时间比较长的波形,例如正弦或三角波,过渡过程比较长,驱动器两管同时开通的时间也更长。这将会增加电流和功耗。
图4表示电流消耗和波形的关系。时钟源是一个可编程波形发生器,可以产生正弦波、三角波或方波。图4显示的电流是4个器件的平均值,包括传统的和改进的高速处理核。比较发现电流消耗直接正比于时钟波形的上升(和下降)时间。三角波具有最小的斜率,而矩形波斜率最大。采用矩形波时的电流平均要比三角波低0.75mA。这预示着在用外部时钟振荡器时,采用上升和下降时间更快的振荡器将有利于降低电流功耗。这一点在较低频率下尤为重要,此时器件需要花费更多的时间用于过渡过程。
有些8051衍生产品包含了一个片内的环形振荡器。通常是一串反相器,脉冲在其中传播。它可以提供一个2~4MHz的内部时钟源,驱动器件。由于不需要使用晶体,这种振荡器是功耗很低的时钟源。从DS87C520高速微控制器的特性可以看出,工作于环形振荡器时,能够提供等同于7MHz8051的性能,而功耗仅有3.6mA。虽然环形振荡器没有压电式晶体那样稳定,它们的低拉耗以及可以忽略的上电延迟在功率管理方面占有显要位置。
5 时钟管理
微控制器的工作频率是影响器件功耗最重要的一个因素。虽然系统的时钟频率主要取决于硬件配置,8051还是提供了一些有限的控制手段。这些手段减缓或终止器件全部或部分单元的工作时钟。传统的8051架构采用了两种控制方法:空闲和停机。
5.1 改善停机模式
停机模式是8051设计得所能利用的最低功耗状态。在该模式下,内部振荡器停振,器件中止工作。脱离停机模式通常靠外部复位。某些变种也可以通过外部中断退出停机模式。
停机模式有一个缺点,就是在晶振恢复工作的一个死时间内的功耗问题。晶体振荡器的工作依赖于石英晶体的振动。物理层限性决定了晶体振荡器必须有一个确定的时间,才能达到足够的振荡器幅度来驱动器件工作。这个预热过程不管采用内部振荡器还是外部振荡器都会存在。时间大约在3~12ms,与晶体和振荡器的性能有关。
预热过程对于功耗的作用在于,在此阶段器件不执行任何有用的工作,但仍要消耗功率。如果器件频繁地进入和退出停机模式,或者退出停机模式后只执行很短时间的任务,这种效应会变得格外显著。事实上,如果任务非常短(<5ms),晶振启动期间消耗的能量甚至会超过执行任务本身的消耗。如果采用环形振荡器来实现从停机模式到快速启动,就可避免这种延迟。这将大幅降低退出停机模式时的功率消耗。
javascript:window.open(this.src);" style="cursor:pointer;"/>
图5表示两个系统退出停机模式并执行一个短任务时的工作情况。其中一个器件包含一个内置的环形振荡器,另一个使用传统的外部晶振。没有环形振荡器的器件必须经历一个晶振预热期。在此期间器件不断地消耗功率,却没有做任何有用的工作。第二个器件是一片DS87C520高速微控制器,片内包含一个环形振荡器。这就允许器件在退出停机模式时能立即恢复工作。在本例中,程序执行4ms以内,间隔大约为2MHz。正如图5所看到的,当需要退出停机模式执行短任务时,采用环形振荡器可以大幅减少能量消耗。
某些应用中,在退出停机模式后不久,要求时钟具有晶振的稳定度。这种情况下,环形振荡器仍不失其优越性。紧随着停机模式的退出,控制器应该立即启动是晶体振荡器。随后可以在晶振的预热期控制器初始化一些必要的数据或寄存器。多数高速微控制器可以用一个状态位来标示晶体振荡器是否达到稳定。一旦完成了晶振代码的初始化进程,软件可以查询状态位,以决定是否着手高精度定时操作。
另外一个改善停机模式效率的方法是采用中断而不是复位方式来唤醒控制器。这种方式使处理器能够紧接着设置STOP位的指令立即恢复工作,而不是从复位向量重新启动。这样就免去了对复位原因的判断,允许处理器在最短的时间内开始有用的工作。
5.2 空闲模式
空闲模式是早期8051架构使用的第二个时钟管理模式。该模式中止了CPU的运行,但片内的通用定时器保持工作。在功率敏感的应用中,这个定时器被用于周期性地唤醒处理器去执行任务,或者去判断是否该执行某个任务。
由于标准的8051定时器为16位,采用16MHz的时钟频率时,最大定时周期只有31ms。如果需要更长的周期,就需要定时器多次溢出。这会消耗额外的功率,因为处理器必需频繁地恢复全速工作来累积计数,但没有执行任何有用的工作。
对于比较长的周期,最好采用比较长定时周期的内部定时器。有些8051衍生产品包含了一个看门狗定时器,也可被用来唤醒处理器。看门狗定时器可被编程为比较长的定时,可达256个时钟周期。在16MHz的频率下能够提供4.2s的最长延时。假设某应用希望每幅3s从低功耗状态唤醒,去执行任务。如果采用内部定时器去定时,处理器将不得不退出空闲模式96闪而不作有用的工作。如果采用长定时周期的看门狗定时器,则处理器只需要在执行任务的时候退出空闲状态,完成任务后再次到低功耗状态。
还有一个选择就是采用带有实时时钟(RTC)的微处理器。DS87C530高速微处理器内置的RC能够产生周期长达24小时的闹钟信号。由该闹钟产生的内部中断可将处理器从空闲或停机模式中唤醒。利用RTC退出停机模式对于需要长时间挂起的系统来讲是最为有效的方式。
6 功率管理模式
尽管空闲模式通过挂起运行程序而使功耗得以降低,内部定时器仍在以外部时钟的频率连续运行。这会消耗掉数量可观的功率。试想一下,是否可以让定时器工作于基本上接近待机的状态。
一个比较好的办法是降低整个器件的时钟频率。javascript:window.open(this.src);" style="cursor:pointer;"/>这可以由一个内部的时钟分频器来实现,它将外部时钟频率分频后再送入CPU。这种方案已在DS87C520高速微控制器中实现。该器件使用了两种时钟分频系数:功率管理模式1,输入时钟源被64分频;功率管理模式2,输入时钟源被除以1024分频。这些模式或以通过设置特殊功能寄存器中的对应位来实现。
图6对DS87C520高速微控制器的时钟分频器和时钟控制模式加以对比。图6中,全速模式(除以4)、功率管理模式1(除以64)、功率管理模式2(除以1024)、空闲模式及停机模式下的电流消耗形成鲜明对比。正如所料,停机模式吸收最低的电流,因为所内部时钟都被关掉了。两种功率管理模式消耗的电流比空闲模式还低。这不仅降低了器件的功耗,还说明可以让它以较低的水平持续运行。在传统的8051结构中,任何类型的CPU运行只有两个状态:“全部或者没有”。处理器被迫频繁地运行于最高性能水平,尽管只在很短的时间内得到高性能,这会增加一些不必要的功率浪费。功率管理模式(PMM)的使用,使处理器(如系统)能够根据实际性能需求对其功耗进行最优化管理。
6.1 中断和PMM的使用
采用内部时钟分频器可能会带来的问题是,中断延迟会大大增加;另外,内部定时器的减慢会影响8051串口产生或同步标准波特率的能力。这会严重干扰处理器响应外部激励的能力。解决方案之一就是在外部中断或串行口活动被确认后,自动使处理器恢复到完全运行状态。这种方案已经在DS87C520中得以实现。处理器的这种回切功能使其能够迅速响应外部中断。紧随着中断回答,器件将自动切回到全速(除以4)状态,并且不需要软件参与。
串行口的工作方式十分相似。当在串行口接收脚上检测到下降沿(起始位)后,器件将自动切回到全速运行(除以4)。这个过程紧接着数据传送起始,因而器件能够以全速来正确地接收余下的传送数据。对于传统的8051结构,在低功耗配置中使用串口的唯一办法是利用闲置模式。功率管理模式的使用提供了一种更低功耗的替代方案。
6.2 改进突发工作模式
在低功耗设计中,觉见的工作模式是将处理器从停机模式中唤醒,执行一个突发任务,然后再加到停机模式。在这样的系统中,降低功耗的一个手段是提高工作频率。初看起来,似乎匪夷所思。因为在正常工作期间,高频率系统要比低频率系统消耗更多的功率。然而,系统工作时消耗的静态电流与频率无关。在一个最终设计中,通常评估的是其能耗,以便确定电池工作寿命。这一点在评估一个高性能微控制器时尤为关键,因为它综合地考虑了处理时间和处理功率。对于一个给定系统,如果它具有更小功率与时间乘积,那么它的能耗更低;而不必单独考虑两种参数。很多实例显示,高速微控制器由于运行时间更短,实际能耗更低;而处理时间更长的低速处理器正好与此相反。
这一点可以通过图6提到验证。假定从停机模式恢复后,DS87C520读取一个I/O端口,经过算术运行后将结果从另一端口送出,这个过程需要500个机器周期的CPU时间。按图6所示,电流消耗在10MHz时为12.4mA,30MHz时为34.6mA。表1归纳了在两种速度下执行读任务时的能耗情况。从表1中可以看到,30MHz工作时的效率更高,能耗降低6%以上。
表1 执行一个500机器周期的任务时所消耗的能量和处理器速度对比
时钟频率 | 机器周期 | 所用机器周期 | 总时间 | Icc | 电流时间积 |
10MHz | 400ns | 500 | 200ms | 12.41mA | 2.48mAs |
30MHz | 133ns | 300 | 6.5ms | 34.66mA | 2.30mAs |
6.3 跑跑停停
在很多应用中,停机模式以外的时间并不完全取决于运行速度。很多情况下,处理器需要访问一个具有固定响应时间的外围设备,例如A/D转换器或温控器。此种情况下,处理器将有个突发动作。一般是触发某个过程,随后的一段时间内,则只有很少的或根本没任何操作。在这种时候,一种组合的功率节省技术会更为有效。
可以用一个实例来说明在这样一个系统中,采用具PWM的高速微处理器所带来的好处。设想的DS87C520与一片DS1620数字温度计/温控器相接口。这个器件可使用标准8051串口的工作模式0串行访问。主机处理器在某个时刻通过外部中断将DS87C520从停机模式唤醒,并要求它从DS1620中读取温度数据。获得数据后,DS87C520会将其保存于内部存储器中,备随后传送。DS1620的工作类似于很多A/D转换器:发出一个命令后启动一次转换,然后,经过一定延迟后转换完成,接着,数据就可以被移走了。对于DS1620来讲,转换时间接近于1秒钟。通过查询器件来确定转换是否完成。DS87C520非常适合于此种任务,因为它可以非常迅速地执行启动和运算功能。随后,在等待转换完成期间,微控制器可以将其置于PMM。在传统8051中,转换被启动后,可利用闲置模式将传统8051置于低功耗状态。在这种模式中,可利用内部的16位定时器来测量转换时间。工作于16MHz时,传统8051需要在转换完成之前退出闲置模式多达32次。
本例可被进一步改进。因为DS1620是作为一个同步器件进行访问的,不要求高精度的定时操作。这样,微控制器在启动转换和读取转换结果时,可工作于环形振荡器。由于避免了稳定外部晶振所需的“死时间”,这会进一步节省功率。
javascript:window.open(this.src);" style="cursor:pointer;"/>