电子说
对于电池供电的互连设备而言,能耗是至关重要的,降低能耗可以最大程度地延长电池的更换时间,甚至让设备在没有环境能量源的情况下运行。虽然很多嵌入式系统开发人员精通优化代码,但要为物联网 (IoT) 设备节省能源,还需要更加全面的方法。
此类方法不仅必须要考虑存储容量、MCU 性能和功耗的因素,还必须考虑到无线电、模拟电路、电源转换器和传感器。虽然所有这些因素都会影响系统的整体能耗,但开发人员最好控制的主要因素是微控制器。
本文将描述如何为物联网设备选择低功耗微控制器,以及在板载外设方面要注意哪些问题。本文还将演示如何使用功率监测工具,并提供达到最佳功率及性能的技巧和诀窍。
选择低功耗微控制器架构
要选择低功耗微控制器,首先必须确定微控制器应该使用的合适处理器内核。目前行业中有很多专有微控制器内核,但从 ARM Cortex-M 微控制器入手是非常合理的选择。业界的多家供应商都支持这些微控制器内核,从而形成了提供支持和资源的稳定生态环境。
为了最大程度地降低能耗,必须及早考虑到两大因素:性能和能效。对于微控制器而言,这两个指标很难量化,但开发人员可以使用两种基准标准: EEMBC 的 CoreMark 和 ULPmark。
CoreMark 用于测量微控制器的处理能力,这个值越高,处理能力就越强。例如,STMicroelectronics STM32L053 处理器可使用 STM32L053 Nucleo 开发板进行测试,它的 CoreMark 值为 75.18。另一款 STMicroelectronics 零件 STM32F417 的 CoreMark 值为 501.85。初看起来,开发人员可能认为使用 STM32F417 是可取的,因为它的性能似乎出色得多。但是,在做出决定之前,还要考虑另外几个因素。
图 1: STMicroelectronics 的 STM32L053 Nucleo 板采用 ARM Cortex-M0+ 内核,专门针对低功耗、资源受限的应用而设计。(图片来源:STMicroelectronics)
首先,CoreMark 只是告诉开发人员它能够在一秒钟内执行多少次基准测试迭代。在不同时钟速率下运行的处理器将产生差异很大的值。对处理能力进行比较的更好方式是比较 CoreMark/MHz。在本例中,STM32L053 处理器得出的结果为 2.35,而 STM32F417 得出的结果为 2.98(数据来源: EEMBC)。两款处理器在效率方面非常接近。
其次,开发人员必须关注内核架构。STM32L053 采用 ARM Cortex-M0+,该处理器经过优化,具有很低的功耗,而且调试模块的数量最少。此外,它还舍弃了高性能处理器上的所有附加部件,这些也是功耗最高的部件。
而 STM32F417 采用 ARM Cortex-M4,该处理器是作为高性能处理器设计的,在 168 MHz 而不是 32 MHz 的时钟速度下运行。该时钟速度达到了 STM32L053 的五倍,但 CoreMark/MHz 值仅提高了 26%。
ULPmark 可测量微控制器执行操作(例如计算和存储器操作)的效率高低。最新版本甚至可测量外设效率,让开发人员能够很好地从能源利用的视角,了解处理器的整体效率如何。
寻找合适的外设组合
微控制器内核只是开发人员在选择低功耗微控制器时应该考虑的第一个因素。应该考虑的另外一个因素是板载外设。CPU 的能耗大小在很大程度上取决于外设。开发人员希望确保他们选择的零件采用尽可能自动化的低功耗外设。
首先,开发人员应该寻找提供了不止一个直接存储器访问 (DMA) 通道的器件。利用 DMA,开发人员能够在微控制器内部传输更多信息,而无需 CPU 干预。这意味着 CPU 能够腾出手做其他工作,例如运行应用程序代码,或者关闭或进入深度休眠模式以节省能耗。同时,DMA 通道还用于将数据从外设传输到存储器,从存储器传输到外设,甚至在存储器的不同区域之间进行传输。
Texas Instruments 的 MSP430FR5994 就是专为低功耗工作设计的零件的很好例子,MSP430FR5994 Launchpad 开发套件包括了这种零件。MSP430FR5994 带有内置的 DMA 控制器,它有六个单独的通道,可以同时在后台工作。
图 2: Texas Instruments 的 MSP430FR5994 Launchpad 开发套件包含多个低功耗外设,例如用于信号处理的六通道 DMA 控制器和低功耗加速器,另外还提供多种低功耗模式。(图片来源:Texas Instruments)
另一个例子是寻求多种低功耗模式。新型微控制器将提供多种功耗模式,可将 CPU 和外设置于不同状态,从简单的休眠状态一直到深度休眠状态,微控制器在深度休眠状态下几乎接近关闭。在这些深度休眠模式下,整个微控制器的工作电流仅为几毫微安。
在了解微控制器的低功耗状态时,还要评估工具链和生态系统功能。设置和配置低功耗模式以及唤醒这些模式的事件,可能是一项颇具挑战性的工作,而且非常耗时。新型微控制器,例如 Renesas 提供的 Synergy,在开发环境内部包含了配置软件,开发人员只需几次点击即可配置这些模式。对于低功耗应用,开发人员应该考虑使用带有 64 或 128 KB 闪存的 S124 32 位 MCU。要快速启动采用这些器件的开发工作,可以使用 Synergy DK-124 开发板。
图 3: Renesas Synergy DK-124 开发板带有低功耗模拟比较器,提供多种休眠模式,实现了低功耗运行。(图片来源: Renesas)
测量和验证微控制器功耗
选择低功耗微控制器,只是确保系统能够达到可能的最低功耗的第一步。为了真正达到最低功耗,开发人员必须在整个软件开发过程中仔细地监控微控制器的能耗。开发人员可以采用多种不同方法来监控微控制器的能耗,包括电流探头和能量感知调试器。
电流探头的作用只是测量分流电阻器两端的电压,然后根据该电压和分流电阻值来计算电流。如果您希望测量整个系统的电流消耗,那么这种解决方案的效果非常好,但如果您真正希望将微控制器执行的操作与它们消耗的能量关联起来,则应使用能量感知调试器。这让开发人员能够确定哪些代码区域需要进一步优化或返工。
市场上有多种适用于 ARM Cortex-M™ 微控制器的能量感知调试器,例如 I-Jet 调试探头的 IAR Systems I-Scope 电源探头(图 4)。
图 4: 连接到 IAR I-Jet 时,I-Scope 可用于测量系统电压、电流和微控制器电流,然后全部反向关联到程序计数器 (PC),以确定哪些代码区域消耗的能源最多。(图片来源: IAR Systems Software)
I-Scope 工具带有一个基于差分放大器的内部电压监视器。它可以测量与微控制器电源轨串联的分流电阻器两端的压降。这使得 I-Jet 调试探头能够测量电压,同时对微控制器的 CPU 内核中的程序计数器 (PC) 进行采样(图 5)。
图 5: I-Scope(突出显示为黄色)与 I-Jet 调试探头配合使用,将分流电阻器的电流与在特定时间执行的代码关联起来。(图片来源: IAR Systems Software)
程序计数器准确告诉探头:应用程序处于执行过程的什么位置。将 PC 计数器信息与电流测量值相关联,可生成应用程序的能耗概况数据,以便开发人员能够利用这些数据来优化和验证代码。
设计低功耗器件的技巧和诀窍
找到合适的微控制器并监控硬件,只是开发人员设计低功耗器件的第一个阶段。此时的诀窍是了解如何充分利用微控制器来最大程度降低能耗。为了达到这个目标,开发人员可以遵循以下的一般技巧。其中包括:
预先制定电池预算,包括最小功耗、最大功耗和平均功耗的估算值。
使用低功耗定时器来驱动计划程序或 RTOS 的任何内部系统节拍。
尽可能经常地将 CPU 置于休眠模式(对于实时应用,请务必考虑到唤醒和掉电时间)。
让系统成为事件驱动型系统。可以利用中断来唤醒系统并执行功能,然后立即返回到休眠模式。
将 DMA 控制器和任何自动化外设集成到软件架构中,以实现“并行”处理。
根据需要管理微控制器时钟频率,以实现额外的能源节省。
监控软件能耗,不要害怕试用不同的架构和配置。第一次尝试的很可能不是功耗最低的配置。
适当时,请使用中断的 Sleep-on-exit 功能,该功能可在中断结束时将处理器置于休眠模式,每个事件节省几十个时钟周期。
总结
为物联网设备选择低功耗微控制器是一项非常棘手的工作。正如本文所述,我们必须考虑到诸多因素,从微控制器架构一直到板载外设功能。
选定了低功耗微控制器之后,并不能保证开发人员能够实现最低功耗的目标。下一个阶段是认真地设计架构,并在整个开发生命周期中监控软件的性能。只有这样,开发人员才能充分利用所选微控制器的低功耗特性和性能。
全部0条评论
快来发表一下你的评论吧 !