以0 MIPS运行你的嵌入式系统
扫描二维码
随时随地手机看文章
即使是在诸如物联网应用的无线连接这种主导功耗的事件中,让尽可能多的进程自主运行,也可大大提高电池寿命。降低功耗一直是微控器(MCU)市场的一个主要关注点。超低功耗MCU现在可以大大降低工作模式和深度睡眠模式下的功耗。这种变化的效果是显而易见的,它大大提高了我们日常嵌入式应用中的电池寿命,并且提供了在未来使用能量收集的可能性。
然而,要基于新型MCU降低功耗,开发人员必须考虑到许多因素,对此Silicon Labs特别撰写一篇技术文章:“以0 MIPS运行你的嵌入式系统”,帮助开发人员了解如何利用新型MCU中外设的自主运行,通过更接近以“0”MIPS运行,来实现数据手册中所承诺的低功耗。
低功耗为嵌入式系统研发关键
对于在功耗敏感型物联网(IoT)应用中所使用的新型MCU和无线MCU(WMCU)来说,执行代码时的功耗已经明显下降,甚至达到40μA/ MHz以下。使用这些低功耗规格,您可能会想知道为什么我们需要睡眠模式,为什么不以500 kHz运行您的代码来实现20μA的电流消耗,并且允许您的应用使用电池运行10年?其实事情并不是这么简单的。
睡眠模式下的功耗在过去几年中也有显著的改善。我们现在可以看到深度睡眠模式下的功耗低于2μA,而一些睡眠模式下的功耗甚至低于50 nA。您可能会觉得拥有这些模式设计出来的系统功耗自然很低,然而事实并非如此,应用能否利用睡眠模式才是关键。
为什么工作模式是好的...也是坏的
使用MCU或WMCU的最直接的方法是让CPU管理一切。例如,您可以启动模数转换(ADC),将一些数据放入通信接口(如USART传输)中,读取ADC数据,并对数据做出一些处理,所有一切都由CPU直接控制。直接的CPU控制简化了开发,但其成本是:每当外设或外部事件需要处理时,MCU都将处于工作模式,从而使功耗大增。
近期,一些数据手册显示工作模式的电流是40μA/MHz甚至更低,它们通常是高时钟频率下的参数,低频下会变大,进而导致绝对功耗变大。这是因为工作模式下频率和功耗不是线性关系。功耗由如下两部分组成,其中第二部分和频率联系不紧密:
1. 处理器本身,它是和频率按比例变化的。
2. 有基础工作电流的模块,比如低压差线性稳压器(LDO),欠压检测器(BOD)等。
要想降低功耗,应尽可能地减少MCU在高功耗的工作模式下运行,尽可能地关闭外设,让CPU尽可能多地睡眠。
功耗预算
对于受限于能源的电池供电型应用来说,要知道能源消耗在哪里才能进行优化。表1显示了一个传感器检测无线应用的功耗预算,它的功耗优化不太好。
通过平均计算每个组件的功耗来测量或估计功耗。如果CPU占空比为两个百分点,并且在60μA/ MHz时工作在20 MHz,则CPU的消耗为24μA。
请注意,表1所示的功耗预算是根据功能划分的。例如,基础睡眠电流包括一个低频振荡器和一个实时时钟(RTC)来对系统事件进行定时从而允许深度睡眠。
传感器测量部分是由一个0.5kHz的中断触发,中断之间深度睡眠。低功耗蓝牙每秒钟都要把数据发出去,这是个很普遍的低功耗应用。最后,还有一些非MCU部分的功耗。MCU可能无法直接控制这些模块中的一部分,包括电源管理外设,在这个例子中,MCU是直接控制ADC对传感器进行采样,如果不是的话,传感器电流将完全是图片中的数据。
对于这个例子,传感器的持续电流大约是390μA,但是通过调整占空比,每个ADC采样仅仅使用了10 μs的时间,从而可以大大降低功耗。
表1 目标应用的功耗预算
如果该无线应用由具有225 mAh容量的CR2032电池供电,则在61.6μA功耗下操作时其寿命约为0.4年。事实上,我们可以做得更好。
改善现状
我们来看看降低MCU传感器测量电流的方法。虽然此示例涉及ADC测量外部传感器,但相关示例可能集中在一系列不同类型的测量以及与外部环境的交互上。在这两种情况下,MCU和外部环境之间都会发生频繁的交互。
实现低功耗传感的最简单的方法是让CPU尽可能多地处于睡眠模式,只在采样时唤醒,并尽可能快地重回睡眠模式。对于非常低的采样率来说,这种方法很好,但是从图1可以看出,当每秒采样次数增加时,系统的功耗也会显著增加:
图1 采用中断进行ADC采样,显示出随着每秒采样次数的增加,功耗也在增加
许多类型的应用必须具有频繁的活动,同时还需要保持电池寿命。超过1kHz的活动率并不是闻所未闻,这时候就需要采取措施来保持低功耗。