如何让MCU更多功能、更少功耗?

kelly的头像
kelly 发布于:周五, 10/21/2016 - 16:31 ,关键词:

摘要:近年来,便携式电池供电应用的日益普及促使设计人员致力于将更多功能集成至更小的产品中。这些增添的功能,尤其是无线通信功能,对系统电源提出了更高要求。如何在实现所需系统功能的同时延长电池的寿命成为设计人员需要解决的一大挑战。单片机特性近年来的发展,包括各种集成特性和外设,嵌入式设计电源管理的实施变得更加简单灵活。同时,这些 MCU 也推进了设计技术的进步。

更多功能、更少功耗

也许您不曾注意到,我们周围的一切似乎都变得越来越智能,几乎所有东西都能联网。鞋子装上了传感器,您可以根据智能手机上显示的步数来调整跑步时间。体重秤不仅可以将您的体重数据自动保存至云端跟踪应用程序,它还能通过智能手机发送提醒,告诉你为什么上次吃甜甜圈不是好主意。只要在锅炉旁边安装一个小型无线传感器,您的家居安防系统就可以在车库出现漏水时用手机短信通知你。

随着技术的不断进步,便携式电池供电应用的普及程度迅速提高。因此,工程师们一直力争让自己设计的每个产品都能在升级换代时增加更多的功能并缩小整体的尺寸。然而,这些新增的性能对系统电源提出了更高的要求。如何在更小的空间内添加这些新功能并延长电池的寿命,给设计人员出了个难题。

传统的电池供电应用设计理念就是让尽量多的模块在尽量长的时间里保持在低功耗状态,偶尔需要执行任务时才被唤醒,任务完成后又再返回到休眠模式。在一个包含多个MCU/MPU 和元器件的复杂设计中,低引脚数 8 位单片机经常被用于系统监控功能,根据需要来执行一些类似打开和关闭模块之类的管理任务,这样能最大程度的提高功效。然而,大多数的设计仍然是采用一个主单片机搭配许多集成外设来实现所需的系统功能。在这种情况下,主单片机的功耗就成为关键的参数。然而并非所有单片机均具有良好的低功耗性能。在这一方面,许多应用中 8 位单片机比 32 位器件更胜一筹。部分 8 位单片机在最低功耗设置时电流消耗可低至 20 nA,而同样情况下 32 位器件的电流消耗最低也比 8位单片机高 10 到 20 倍左右。

将单片机从休眠状态中唤醒的方法有许多种。一种常见的做法是使用单片机的内部定时器定期唤醒系统。这个定时器经过配置可以在溢出发生时触发中断。一个带 1:8 预分频器的16 位定时器,外加一个独立运行的 31 kHz 低功耗内部振荡器(或者带一个外部晶振)可以让器件休眠 17 秒左右。另一种做法就是使用 MCU 自带的看门狗定时器(WDT),理想条件下其待机时间最长可达 256 秒,期间消耗的电流约为 440 nA。(同样的,一个启用了 WDT 功能的 32 位 MCU 典型情况下消耗的电流至少是一个 8 位 MCU 消耗电流的 3倍。)

以不需要频繁唤醒的应用为例,比如环境监测器,它大约每四小时被唤醒一次以读取湿度传感器的数值然后再次返回休眠状态。这是不是意味着由于内部定时器的限制,我们不得不需要进行更频繁的唤醒操作呢?不一定。其中的一个选择就是在需要时使用实时时钟(RTC)和晶振来提供以小时、天、月甚至年为单位的精确计时。当然,往往因为成本原因并非所有的单片机都会集成 RTC 和晶振,这时我们可以考虑使用分立式 RTC。

独立于内核的外设

另一个可以延长待机时间既无需添加任何元件也不会出现功率损耗的选择,就是使用某些新一代 8 位单片机器件所包含的特有外设。举个例子来说,设计人员可以将这些 MCU 自带的一个可配置逻辑单元(CLC)和它的数控振荡器(NCO)与 16 位定时器连接起来,从而将待机时间从 17 秒延长至 205 天,这之后才会触发中断唤醒 MCU(见图 1)。当然,很少有一个应用会需要待机如此之久,但是如果需要的话,这个性能是可以实现的。而如果使用一个外部晶振来代替 MCU 自带的 31 kHz 内部振荡器的话,功耗甚至可以减少 50%,达到 2.3 µA 左右。

图 1:使用一个 8 位单片机独立于内核的外设可延长待机时间至 205 天,既无需添加任何新元件也不会出现功率损耗

我们也可以使用诸如开关或传感器等外部中断源来唤醒单片机。部分较大的 MCU/MPU 还有带优先级的多个中断,但是这些性能通常是市场上现有的大多数低引脚数 MCU 所不具备的。还记得我们在之前的例子中曾使用可配置逻辑单元模块来延长定时器周期吗?事实上,CLC 不仅可在 MCU 只有一个系统 INT 时创建额外的中断源,它还允许设计人员为唤醒程序添加条件逻辑或顺序逻辑,不仅更加智能而且还不会产生额外的电流消耗。对于需要用多个信号代表一个特定状态以唤醒 CPU 进行核实的系统来说,真实情况往往是 CPU被唤醒仅仅是由于一个信号发生了变化,而其它信号并未出现。现在我们可以配置和组合CLC 现有的逻辑功能和状态机,甚至多个 CLC 模块,来创建特定的唤醒条件,避免出现频繁的误触发和不必要的功耗。

虽然我们希望能在休眠模式下执行所有任务,但是某些任务是必须在工作模式下执行的,这个时候相对于所有其他模式而言,MCU 内核的功耗是最高的。这样情况就有点棘手了。如图 2 所示,这是系统在一段时间内产生电流消耗的一个简化图形表示。电流消耗线下的图形面积代表一段时间内所有的放电量,以库仑(Coulomb)为单位。如果休眠模式周期内所有面积的总和比工作模式大得多,那么休眠电流值就更关键,因为大部分的能耗发生在低功耗模式下。反之亦然,如果工作模式周期内的面积总和明显更高,那么休眠电流值和休眠模式下花费的时间就变得无关紧要了。

图2: 单片机在一段时间内产生电流消耗的图形表示

特别是带有诸如 Wi-Fi®或 Bluetooth® LE 等无线通信功能的应用更是对系统的功耗提出了挑战。这些系统的设计人员必须要考虑发送或接收的数据量,因为这将会直接影响总体电流消耗。此类无线模块可设为“信标”模式(“Beacon Mode”),以便周期性的唤醒和搜索信号;或者可以在不使用时进入待机模式。

模拟传感器需要搭配使用 MCU 的片上 ADC 模块。通常情况下, ADC 采样所需的时间比转换时间长得多。在工作模式下花费的时间越长,电流消耗的就越多。但是,部分带有 ADC模块的 MCU 允许在休眠模式下进行转换,这就最大程度的减少了在工作模式下所需花费的时间并因而降低了功耗。

部分 MCU 器件集成了多种低功耗工作模式。这些模式令人们可以在选择关闭内核处理器或降低内核处理器速度的同时,针对片上外设有选择地让系统时钟保持在工作模式。

我们经常听到这样一种说法,“内核的性能越高,执行任务的速度就越快,那么它就能越早返回到休眠模式”。虽然有些情况可能确实如此,但是这个逻辑是存在缺陷的。我们得记住内核的功耗比 MCU 中任何一个其他模块都高。另外,无论速度如何,所有需要内核的任务都必须按序执行(FIFO)。因此,在最后一项任务完成之前内核是不可以被关闭的。当单片机可以借助无需内核即可运行的集成外设来并行执行所需任务时,内核的速度就毫不相干了,并且整体功耗也会大幅降低。毕竟,这些新外设大多数都可以在 MCU 内核处于休眠模式时正常运行。

由于电池供电应用功能的增多,其设计也越来越复杂。工程师应该研究分析并充分了解每个部件在不同功耗和活动模式下的电流消耗概况,以实现最高的电池使用效率。有了全新的外设集,新一代 8 位单片机令工程师们无需牺牲系统性能就可以进行创造性的设计。

围观 535