嵌入式软件开发工具简化基于STM8的智慧装置开发
降低功耗一直是微控器(MCU)市场的主要关注焦点。超低功耗MCU现在可大幅降低主动和深度睡眠的功耗。此种变化的效果是显而易见的,因为它大幅提高了日常嵌入式应用的电池寿命,以及在未来使用能量采集的可能性。然而,为了适当地利用现有MCU的电流消耗规格,嵌入式开发工程师必须考虑许多因素。嵌入式开发工程师可利用现代MCU中周边装置的自主操作,透过更接近于'0'MIPS的操作,实现规格表中所要求的低功耗。
对于在功耗敏感的物联网(IoT)应用中所使用的现代MCU和无线MCU(WMCU),执行程式码时的功耗已经明显下降了,甚至达到40μA/MHz以下。藉由这些低功耗规格,您可能会想知道为什么需要睡眠模式。为什么不直接以500kHz运作时脉,以实现20μA的电流消耗,并且让您的应用以电池运行长达10年?这可不是那么简单的。
过去几年来,睡眠状态下的功耗已经显著地改善了。我们现在可以看到在深度睡眠模式时的功耗低于2μA,以及在某些睡眠模式时的功耗甚至低于50nA。您可能认为这些模式的可用性自动地使系统功耗降低,但情况并非如此。相反地,应用使用睡眠模式的能力才是关键。
为什么主动模式有好…也有坏?
使用MCU或WMCU最直接方法,是让CPU管理一切。例如,您可以启动类比数位转换(ADC),将一些资料放入通讯介面(如USART传输)中以读取ADC资料,并对资料做出决策,其中的一切都由CPU直接控制。直接的CPU控制简化了开发,但其代价是:每当必须关注周边装置或外部事件时,MCU将会发现自己处于主动模式,从而使功耗大增。
近来,一些规格表将指定40μA/MHz及以下功耗作为主动模式,尤其是在较高频率下。因为较低频率的μA/MHz数值较高,导致绝对功耗更高。这是因为在主动模式下的电流不会随着频率线性调整。其组成部份有二,其中的第二部份在较高的操作频率下具有较小的影响:
处理程式本身随时脉频率而变化
用于基础设施元件,如稳压器、欠压检测器(BOD)等的基准电流
尽可能地将其卸载到MCU中的其他周边装置,并尽可能使CPU处于休眠状态,以避免从主动模式带来的高功耗,是相当有助益的。
功耗预算
对于具有有限电能的电池供电应用,重要的是要知道能量在哪里被使用,以便能开始为其实现最佳化。表1显示未经有效最佳化的(感测器监测)无线应用之功耗预算。
藉由平均每个元件的电流消耗来测量或估计功耗。如果CPU的工作周期为2%,并以60μA/MHz操作于20MHz的频率,则CPU的贡献为24μA。
请注意,表1所示的功耗预算是根据功能划分。例如,基准睡眠电流包括一个低频振荡器和一个即时时脉(RTC),为系统事件进行定时并允许深度睡眠。感测器测量的贡献来自于采用中断以及中断之间的深度睡眠,以0.5kHz采样感测器。这种以蓝牙低功耗实现的装置每秒均传输广播数据封包,这对于低功耗蓝牙装置来说是非常普遍的。
最后,还有非MCU元件的贡献。MCU可能无法直接控制这些元件中的一部份,包括电源管理周边装置,但由ADC采样的感测器在这种情况下可由MCU直接进行工作周期。若非如此,感测器电流将完全进行控制。对于这个例子,连续的感测器电流约为390μA,但是在适当的工作周期下,每个ADC采样只能使用10μs,从而大幅降低了电流。
表1:目标应用的功耗预算
如果该无线应用由具有225mAh容量的CR2032电池供电,则在61.5μA功耗作业时的寿命约为0.4年。但我们其实可以做得更好。
改善现状
现在看看降低MCU感测器测量电流的方法。虽然此示例涉及ADC测量外部感测器,但相关示例可能集中在一系列不同类型的测量以及与外部环境的互动。在这两种情况下,在MCU和外部环境之间都会发生频繁的互动。
图1:采用中断进行ADC采样,随着每秒相互作用的次数增加,功耗随之增加
实现低功耗感测的最简单方法是尽可能地让CPU睡眠,仅在采样时唤醒,同时尽快地重新回到睡眠状态。针对非常低的采样速率,这会是个好方法,但从图1可以看出,当采样速率或每秒相互作用次数增加时,系统的电流消耗也会明显增加。
许多类型的应用程式必须具有高度的活动状态,同时仍保持电池寿命。超过1KHz的活动速率并非前所未闻,而且需要采取措施,才能使这些应用处于低功耗设置。
图2显示两种其他的感测器管理途径。周边反射系统/直接记忆体存取(PRS/DMA)途径完全无需使用CPU,并让ADC采样可完全在深度睡眠模式下进行。因此,RTC透过事件系统(如Silicon Labs的PRS)将事件直接发送到ADC,而不是由RTC唤醒CPU来启动ADC转换。ADC在接收到此事件时自动启动ADC转换;待完成转换后,DMA在这种情况下也能够从深度睡眠模式下启动操作,以及从ADC撷取资料并将其储存在RAM中。PRS/DMA途径的好处是显著降低了电流消耗。在1kHz时,系统电流从58μA降至25μA。
图2:ADC采样图显示最小化电流消耗的各种方法
更有效驱动ADC的方法是以PRS/比较器(CMP)驱动的途径,其中RTC仍然透过PRS系统触发转换,但在这种情况下,ADC使用比较器函数立即对样本进行评估,除非发现特别的事项,否则不启用DMA或CPU。这种途径能以1kHz的采样速率和3.5μA的系统电流进行最终的节能。
动态ADC比较器
使用PRS/CMP途径,CPU将只在必要时花时间查看样本,而使许多样本被弃置。当监视缓慢改变讯号或是寻找讯号中的特定事件时,这种途径多半都极其有利。
当使用比较器监测讯号时,一种方法是测量讯号值,并在讯号中最后一个已知值的任一侧设置比较器。只要讯号保持在比较器阈值范围内,系统将维持深度睡眠,而ADC同时监测讯号, CPU则将保持睡眠状态。
图3:当讯号超过阈值时,动态ADC比较器的值可透过CPU中断进行更改
然而,如果讯号发生变化且超过阈值,系统将会察觉并采取适当的措施。在回到睡眠状态之前,ADC阈值应该重新配置,以适应新的讯号值,并使系统再度进入休眠状态,直到下一次讯号发生变化。图3显示此种技术的一个例子。圆点表示ADC样本,箭头表示当CPU唤醒时,将会记录变化并重新配置阈值。
透过这种方法,系统将会失去一些讯号的准确性,因为讯号可以在触发器之间的阈值间移动。然而,其优点是功耗显著降低。
如果系统的目标是测量讯号的动态值,那么以PRS/DMA驱动方法十分理想,因为它让所有的资料可用,同时仍然提供非常有效的节能。
自主子系统
ADC示例只是睡眠模式可利用以显著降低应用功耗的许多方式之一。专注于低功耗应用的现代MCU(如Silicon Labs的EFM32 Gecko MCU)拥有大量功能,可在深度睡眠模式下运作,从而实现高度的自主行为。
例如,Gecko MCU的LESENSE(低功耗感测)周边能完全自主地对多达16个感测器进行自动化的采样和评估,完全不需要CPU的干预,并与感测器进行高频互动,同时让电池充电一次即可运作10年。
图4:自主ADC系统包括自动感测器工作周期和看门狗监测器
在许多情况下,单个周边装置就能自主地履行其职责,但也有许多需要互动的情况。在这种情况下,我们可以利用一些像现代MCU中的PRS系统等周边互连。这些互连可让多个周边装置互连,以便自主执行更复杂的任务。
图4显示此自主系统的示例,使用事件链来执行其功能:
RTC周期性地向ADC发送PRS讯号,以特定时间偏置开始转换
RTC讯号也开始外部感测器的激励,且将在采样时间之前准备就绪;
ADC采样并提醒DMA,该DMA撷取采样并将其传输到RAM;
来自ADC的完成PRS讯号,确保外部感测器断电;
当缓冲器已满时,CPU只会产生中断,或者在超过ADC阈值时才会中断;
PRS看门狗监测事件回圈功能确保持续运行,但这项功能是可选的。
请注意,在此不必再使用DMA,而且该设定可以与动态比较器设定一起使用,以实现最低的功耗。
这些自主子系统具有以下几个主要优点:
显著地节能;
确定性的感测器操作,即使是在具有大量CPU负载期间。
其缺点在于并非所有的MCU都支援这种类型的操作,而且在设定互动时,您可能会希望硬体设计者一样地思考。对于许多电池供电的应用,其优点明显多于缺点。