Eco:物联网原位功率测量方案

Eco:一种面向低端物联网系统的原位功率测量软硬件协同设计

摘要

本文提出了Eco,一种软硬件协同设计,可在物联网节点上实现通用能量管理。Eco针对资源受限的设备而设计,因此适用于大多数新兴的物联网场景。所提出的测量模块结合了商用组件和常见系统接口,能够灵活、便捷地与多种硬件平台及RIOT物联网操作系统集成。我们对Eco的精度和开销进行了全面评估和比较。研究结果表明,我们的商用设计方案在性能上可与高度优化的方案相媲美,同时具备显著更高的通用性。我们将Eco应用于RIOT上的能源管理,并通过为期五周的现场试验验证了其在能量收集系统中的部署就绪性。

1 引言

能量在资源受限的物联网(IoT)独立供电节点中是一种稀缺资源,其中许多节点需要在其目标生命周期内将任务与可用能量进行平衡。构建能量感知系统是一项复杂的任务,要求开发者深入处理大量底层、平台特定的细节。部分原因在于,能量可用性和功耗比处理和内存资源等系统属性更加动态。

尤其是在从环境能源获取能量的节点上,能量水平会不断波动。因此,对于一个系统以跟踪其功率输入和消耗,从而使运行时任务能够快速有效地适应能量可用性。

能量收集描述了一种过程,即收集通常较弱的电源输出并加以存储,直到积累到足够的能量以执行所需的任务。在低端物联网网络的背景下,能量收集使得构建独立供电的系统成为可能,有望实现持续运行,从而提升性能并降低维护成本[3]。由于常见能源具有不稳定的特性,能量收集需要有效的能量管理机制,以避免系统中断。

跟踪、控制和优化能耗取决于诸多因素,且迅速变得复杂。受不同操作或环境条件影响的系统通常无法完全依赖于a priori推导出的预测,而需要有关实际部署条件的准确信息。因此,in situ测量是获取真实世界信息的关键策略。为此,人们期望有一种可移植、可复用的通用现成解决方案,能够覆盖各种软件和硬件组件的配置。

在本文中,我们介绍了Eco,一种软硬件协同设计,可在低端商用物联网设备上实现通用能量管理。作为一种通用适用方法,Eco基于两个关键原则。首先,它通过标准的I2C接口连接一个简单的外部测量模块,该接口在所有目标微控制器上均广泛可用。仅需连接控制引脚,并将电源线通过该模块进行布线。其次,它采用平台无关的软件接口,使得在更换微控制器板时无需进行任何软件适配。具体而言,我们的贡献包括:

  • 一种新型关键组件,可在由电池供电、仅有几千字节内存和兆赫兹级中央处理器性能的自主物联网节点上实现能源管理。
  • 在物联网操作系统RIOT中实现Eco,促进部署,并支持对单个任务和线程进行在线能量评估。
  • 对Eco的评估,包括其跨平台验证以及对误差和开销的详细量化。
  • 在能量采集系统中进行的大规模真实世界部署,作为硬件与软件在领域内垂直集成的综合性概念验证。

Eco优于当前最先进的技术。文献中最接近的相关研究[9]主要关注单纯的测量问题,而没有高层系统的集成。这种专用的、无组件的方法具有较低的电流测量精度(他们的10% 对比 Eco的 1%)、较低的分辨率(他们的10μA 对比 Eco的1.25μA),但能量开销更低(他们的 ≈0.05% 对比 Eco的 ≈ 1%)。测量硬件仅由一些通用元器件组成。

2 动态能源管理的问题与相关工作

任何在资源受限设备上管理能量的方法都依赖于对实际状况的准确了解。高估可用能量可能导致节点迅速停止服务,而低估能量则可能影响其操作效用。在变化且动态的环境中,深入了解各种能量流(包括不同应用任务的消耗以及潜在的输入能量)变得尤为重要。

动态能源管理的关键问题源于难以及时、以足够的精度并在可容忍的开销下确定这些能量流。量化能耗的方法包括理论或(半)经验估计、简化模型的仿真,以及外部或在线自测量。

以往关于节点能耗测量的研究通常要么侧重于本地实验室设置以实现高精度监控,要么侧重于轻量级现场评估。

软件方法用于大规模传感器网络的仿真[21]以及基于离线参考测量的估算[6, 8]。仿真可以从高层视角[1]进行,直至估算CPU周期[21],甚至可考虑单个CPU指令[22]。由于在重现现实时存在环境变化、硬件公差差异以及其他多种动态因素的不准确性,不同抽象层次会影响功耗和电池寿命的预测精度[18]。尽管仿真是进行apriori优化的有力工具,但它不支持在线适应,且通常过于专业化而难以提供通用适用性。相反,在线估计能耗能够通过实际跟踪系统状态来纳入运行时特定条件。Dunkels等[6]表明,该原理可用于实现针对 Contiki[7]的应用程序网络层性能分析。

将实际能耗的运行时信息作为反馈纳入能源管理算法已被证明可提升应用层性能以及对不确定性的鲁棒性[11]。要实现这一点,系统必须具备在线测量自身能耗的能力。通常在节点上跟踪能量流动的方法是使用库仑计数器。尽管其时间分辨率足以评估充电状态,但不足以将能耗归因于特定任务或外设。

为解决此问题,Jiang et al.[13]提出了基于电压转频率转换的功率测量定制硬件SPOT。随后,Dutta et al.[9]进一步简化了该概念,基本上消除了由开关稳压器供电平台对任何额外硬件的需求。这些方案的不足之处源于固有的高电感器的制造公差(∼±10%)、频率相关的功耗开销,以及假设电压恒定而不进行测量。

其他方法要么使用高度专用的现场可编程门阵列实现来完成测量任务[2],要么通过测量储能元件上的电压变化来间接评估能耗[19]。所有这些解决方案还缺乏与现代物联网操作系统集成的易用软件接口,或者在所使用的储能元件或微控制器平台上缺乏通用适用性。

能源管理的基础是了解系统中实际的功率消耗者。在无线传感器节点上运行的软件决定了能量的使用方式,例如,通过读取传感器或请求硬件传输数据。由于中央处理器、随机存取存储器或硬件外设等资源在大量软件组件之间动态共享,将确切的能耗量归因于正确的软件实例具有挑战性。因此,一个核心问题是如何将功耗与执行的软件相关联。利用率可通过线程占用中央处理器的时间来推导,可作为功耗的一个基础度量指标。跟踪各个组件的功耗状态可进一步提高准确性。在 TinyOS[10], Kellner[16]展示了物联网设备通用状态跟踪模型的可行性,以将功耗归因于各个TinyDB查询。

与Hester et al.[12]所展示的工作类似,我们希望促进易于使用的能量收集系统的发展,但我们的重点不是构建一个非常易于使用的模块化平台,而是明确关注与各种不同设备的兼容性,以便将其集成到一个通用的软件平台上。这使得已建立的操作系统的用户能够从我们的贡献中受益。

3 集成能源管理:设计与实现

软硬件协同设计的集成方案概述如下。首先,介绍了一种灵活的模块化硬件平台。图1展示了由无线传感器节点和电源子系统组成的抽象硬件架构。电源子系统包括电源、充电和测量模块以及储能元件。节点本身则由微控制器、无线收发器、传感器和持久性数据存储模块完全模块化组合而成。

在第二部分中,我们讨论了能量测量原语在RIOT软件中的集成。RIOT是一种面向资源受限的物联网设备的开源操作系统,专注于开放的网络标准和广为人知的编程接口。使用 RIOT的一个主要优点是其可移植性以及广泛的库和驱动支持。因此,它能够快速开发高度模块化且松散耦合的应用程序设计,利用不依赖于特定硬件的可重用代码。

实现了两个正交的概念用于在线测量,它们在集成复杂性和精度之间提供了不同的权衡。为了向新应用程序添加能量感知功能,我们提供了一个应用程序编程接口,用于显式地测量单个任务基础上消耗的能量,即针对预定义的代码段。此外,我们实现了一个操作系统调度器的扩展,以提供能量线程级统计。通过将能耗隐式归因于软件实体,该系统甚至可以在无需修改应用程序代码的情况下提供能耗信息。

3.1 硬件

硬件由现成的评估板、作为能量缓冲器的超级电容器以及用于量化充放电速率的测量模块组成。整个系统采用独立模块的协同系统方式构建,所有模块均可更换,从而在特定组件的选择上保持设计的灵活性。为了代表典型的物联网应用场景,IO‐接口提供与外部外设(如用于数据采集的传感器)的连接。

网络上行链路由基于AT86RF233射频芯片的IEEE 802.15.4模块提供。当无法访问网络时,微型SD卡可提供成本效益高的持久存储,用于长期数据记录。

使用带有低功耗STM32L476微控制器的裸开发平台作为基础。但该设置并不局限于这一特定开发板,我们将在后面说明这一点。采用裸开发平台有助于在保持底层控制的同时,使用不同的射频模块、电压调节器、储能元件或传感器,从而简化对特定组件特性的分析。

为了实现功率测量,我们设计了一个可配置且简单的模块,采用德州仪器INA226分流监测器。该模块通过I2C接口连接,并支持更改从地址,以便在单个系统中使用多个模块。其最大压降电压固定为81.92mV,测量范围可通过三种不同的分流电阻进行手动切换,以实现简单适配。通过使用一个具有更高阻值分流电阻的附加模块,并结合旁路开关(如[15]所示),可以实现高动态范围。

用于部署就绪型能量收集系统的所有互连部件的组装如图2所示。裸露的开发板A顶部装有外部IEEE 802.15.4无线通信设备B,插入到一个接口板中,该接口板通过微型SD卡槽C提供与持久存储的连接,并连接电源子系统和各种外部传感器。一个100F(2.7V)超级电容器D结合定制光伏充电电路E以及之前介绍的测量模块F构成了外部模块化电源子系统。诸如无线通信模块、微型SD卡和外部传感器等所有组件均可通过单独控制开关的晶体管完全断电。

示意图0

示意图1

这些集成在微控制器下方的互连板上,并通过普通的GPIO控制进行管理。

3.2 集成系统软件

通过为硬件抽象层的相应接口提供用于控制 INA226 的外设驱动,实现与 RIOT 的集成。该驱动除了支持原始寄存器访问外,还提供了转换为物理单位和校准的功能。所需的校准值通过将可信参考万用表和测量模块连接到测试应用的相同负载上获得,并通过将这些值输入编译时配置来启用校准。

我们扩展了RIOT的简单命令行接口,增加了一个名为 es的命令。该命令基于现有的ps命令,添加了每个线程的功耗和消耗的能量信息,类似于默认的统计信息(如堆栈使用情况和上下文切换次数)。其实现逻辑通过一个独立的后台线程完成,该线程控制测量过程,从外部模块读取样本,并执行必要的计算。通过这种方式,可以利用操作系统的线程优先级控制功能,在测量的精确时效性和较低侵入性之间进行调节。

归因模式根据每个线程的活动时间来划分样本,并将能耗分配给不同的相关线程。这种方法的优点是,无需更改任何一行代码即可提供应用程序不同部分的能耗概览。然而,根据应用程序的特性,该方法可能存在不准确的情况。对于那些触发高能耗操作后立即进入睡眠状态的线程,其所消耗的能量无法通过此方法进行非常准确的评估。

为了克服这一局限性,实现了一种追踪机制,使应用程序能够明确记录由开发者定义的特定任务的能量轨迹。追踪可以通过接口调用 trace_start() 和 trace_stop() 进行控制。它可以记录一系列完整的能量样本,或返回单个聚合值。通过此追踪功能,应用程序可以在不同条件下(如环境温度、充电状态或组件健康退化)重新评估每个任务的能量使用情况。当测量功能未被使用时,该模块将进入低功耗模式,消耗低于 2微安 的电流。

4 原位测量的评估

我们在四种差异较大的MCU平台上验证Eco,并评估其测量精度和引入的开销,同时采用吉时利DMM7510台式万用表作为参考测量中的精确真实值。该万用表通过自动化脚本控制,以实现多次可重复运行。相应地,传感器节点由自定义 RIOT shell接口控制,该接口可启动测试运行并处理所有运行时参数的配置。在重复实验中,通过将被测设备的测量结果与万用表读数进行比较,来量化测量和数字化过程中的误差。

4.1 测量误差

4.1.1 精度

通过使用固定电阻作为静态负载来测试测量的精度。施加不同的电压以获得不同的电流值。同时对被测设备和参考设备进行测量,并重复1000次。

图3显示了电流测量值在200微安到2毫安范围内相对误差的分布情况。随着量程低端的逐渐增加,这是由于噪声的相对影响以及数字化分辨率所致。对于200微安的负载,中位误差保持在接近1%的水平,非常适合自测量。高于1.8毫安的电流则更为稳定,中位误差约为0.5‰。将此测量扩展到所选2欧姆分流电阻的全量程40毫安,结果证实,在较高电流下偏差极小的模式依然成立。

4.1.2 分辨率

电压分辨率在设计上具有固定的1.25毫伏值。电流测量分辨率取决于有源分流电阻值(Rshunt)以及分流电压固定的2.5微伏LSB步长,如公式1所示。

$$ I_{LSB} = \frac{2.5\mu V}{R_{shunt}} $$ (1)

我们选择了一个2欧姆分流电阻,可支持超过40毫安的电流,从而覆盖大多数典型的物联网设备(包括连接的传感器),同时仍将压降保持在约80毫伏的合理范围内。该分流电阻值可提供1.25微安分辨率。对于活动节点功耗的追踪而言,此分辨率已足够精确。

4.1.3 延迟

读取延迟的主要部分由I2C通信引入,其取决于布线和时钟速度配置。为功率测量线程选择合适的优先级也很重要。如果优先级设置过低,在高利用率情况下可能导致线程饥饿,并显著增加延迟和抖动;而如果优先级过高,则需要确保模块的采样率足够低,以避免对应用程序产生干扰。为了获得合理值,应在目标平台上编译应用程序,并包含’ps’命令功能,从而可以评估并调整自测量引入的总体计算开销,以适应特定用例和可用的硬件资源。

4.2 跨平台验证

Eco的一个主要目标是使大多数物联网平台能够进行能量测量,这需要一种无缝集成模块与现有平台的方法。我们选择了四块差异较大的开发板来验证Eco的跨平台适用性。为了涵盖来自不同制造商和架构的代表性样本,我们明确选择了一类更高性能的设备——基于32位Cortex M4的nucleo‐l476rg和slstk3402a,一类中端设备——运行32位Cortex M0+的samr21‐xpro,以及在目标设备中处于较低端的8位AVR arduino‐mega2560。这些名称指的是RIOT中各开发板的唯一名称。

通过选择的I2C连接方式,目前我们已经支持了上百种RIOT支持的开发板,而扩展此列表仅需提供一个I2C外设驱动。除了底层驱动之外,为新平台启用Eco仅需将微控制器上的六个引脚物理连接到测量模块,该模块随后连接至能量存储装置。软件支持的启用只需在硬件上提供引脚映射(即MCU的哪个引脚连接到测量外设)以及在项目Makefile中添加对驱动模块的依赖声明。

虽然该通用方法并不严格依赖于RIOT,但某些特定功能简化了实现过程。无滴答调度在没有事件时保持系统负载较低。通过多线程,消耗的能量可以隐式地归因于应用程序的不同部分。此外,优先级调度提供了对测量侵入性的直接控制。

所提出的解决方案的通用性是以比高度专业化的替代方案更高的计算开销为代价的,但下一节表明,该方法在低端8位平台上仍然可用。考虑到在无线传感器网络领域,这些架构甚至预计将被功能更强的32位变体[17]所取代,我们认为,外部模块及其紧密的操作系统集成可被视为对目标设备具有通用适用性。

4.3 开销

为了量化自测量的开销,我们从时间与功耗的角度研究了总线通信开销、测量本身的功耗以及处理样本的计算开销。

4.3.1 功率

功耗开销由三个因素产生。测量模块在采样期间消耗功率,总线在通信过程中消耗能量,而分流电阻会引入功率损耗。由于使用了I2C,相关的通信开销直接取决于配置的总线时钟和布线。只有使用低阻值的上拉电阻以确保快速的信号切换时间,才能达到最大总线速度。然而,较低的电阻会在线路被拉低时增加功耗,因此有必要在高速和低功耗之间找到适当的平衡。

$$ R_p(max) = \frac{tr}{0.8473 \cdot C_b} $$ (2)

因此,我们分析了从外部测量模块读取数值所导致的关于持续时间和功耗的开销。我们的测量结果显示,每次读取的能量成本可以从4.5 μW s(330 Ω上拉,快速模式)降至100 nW s(4.7 kΩ上拉,高速模式)。由于读取持续时间并未以相同的比例改善,因此能量最优值位于这两点之间,并且还取决于MCU在此事务期间消耗的能量。

通过公式3,我们确定在平均MCU消耗为12毫安时,采用2.2kΩ上拉的高速配置最为能效。这与I2C规范建议相反,但通过施加更严格的布线要求,有效利用了安全裕度。

$$ E_{read} = (P_{MCU} + P_{read}) \cdot t_{read} $$ (3)

使用此配置,我们检查不同的转换时间或平均步数是否对能耗产生显著影响。相应地,图4显示了采样期间的平均功耗。

短转换时间结合低平均(即高采样频率)与总体测量功耗相比具有显著影响。在使用16次平均步骤时,开销仅在最快采样配置下可见,而在使用64次或更多平均步骤时则变得完全可忽略。将无平均的值与四次平均步骤的对应值进行比较,显示目标采样间隔的实现方式并无明显依赖关系。

分流电阻引入的功率损耗取决于传感器节点的电流和供电电压。较低的供电电压意味着分流电阻上的固定最大压降具有更高的相对影响。因此,对于使用低至1V电压的系统,我们建议使用更低电阻的分流电阻,以牺牲效率来换取分辨率。综上所述,在不同的功耗开销贡献者中,采样过程本身的静态消耗在大多数情况下成为主导因素。模块通信仅在极高速采样时才变得相关,而分流损耗仅在同时需要极低电压和高分辨率时才需要关注。对于中高采样率情况,可通过减去固定偏移来补偿测量功耗。最大采样率则需要进行线性校正,并考虑通信开销的影响。

4.3.2 计算

我们需要量化在从测量模块采集样本时的CPU占用率,以为目标领域选择合适的采样率。CPU利用率通过RIOT shell中的ps命令进行测量。该模块设置为启用中断触发的连续采样配置。每次中断都会唤醒一个用于测量的专用线程,并读取电压和电流值。此工作模式持续运行十分钟,然后执行ps命令以列出所有线程的活动时间百分比。这些值包含了从读取设备寄存器到物理单位转换的每一个步骤。整个过程针对八种不同的采样间隔配置进行了测试。图5展示了在四个典型平台上的评估结果,范围从运行在80兆赫兹的32位Cortex‐M4开发板(nucleo‐l476rg)到运行在16兆赫兹的8位AVR(arduino‐mega2560)。当采样时间为280微秒时,性能更强的nucleo‐l476rg开发板的利用率为54%,而arduino‐mega2560则处于其极限状态,无法为其他应用程序线程分配任何CPU资源。几乎所有情况下,随着采样间隔增加,各值均几乎线性地下降到约1秒时的0.16‰和0.57‰。值得注意的是,在最高采样率下耗尽的计算能力并不会阻止在该平台上使用Eco。由于事件发生率较低,预期在计算能力受限的平台上所需的采样率也会降低。

将这些值与微控制器的原始计算性能进行比较表明,arduino‐mega2560上的利用率相比nucleo‐l476rg仅增加了≈4倍,而两者的性能差异达到6倍(16百万条指令每秒(MIPS)对比100 MIPS)。因此,CPU利用率主要由I2C传输时间决定,而非受限于原始指令执行性能。由于最慢采样率仅产生35次上下文切换到测量线程,其CPU数值易受ps命令的不准确性影响。

使用该模块集成的功率计算功能,而不是分别读取电流和电压,可将I2C的时间缩短约一半读取。RIOT的I2C外设驱动仍有改进空间,这些驱动通常未能充分利用所有硬件功能,例如中断控制或直接内存访问。表1简要比较了与第2节中讨论的相关工作的结果。如需更全面的比较,请参考我们的arXive论文[20]。

4.3.3 内存

内存开销由模块驱动程序、测量线程以及可选的历史存储缓冲区引起。总体内存需求因目标架构和启用的功能而略有不同,大约为1kB,大致平均分配在随机存取存储器和ROM之间。

解决方案 电压测量 电流精度 功耗开销 CPU开销 读取持续时间
SPOT [13] 3% ~5mW 未发表* 未发表*
iCount [9] ±15% (5μA–50mA) 0.3μW–30μW 未发表† 15μs
Nemo [24] 平均1.34%,最大8% 0.4μW–12mW 0.6% (10秒@0.5赫兹, 10毫秒@8千赫兹) 1毫秒‡
Eco <1% (>0.2mA) 6μW–1.1mW 0.16‰@1Hz, 1.5%@100Hz 33μs

* 由于每个样本需要多个步骤,且I2C运行在较慢的时钟(100kHz)下,因此指示的读取时间更长
† 通过使用内部硬件计数器,开销被认为非常低,但依赖于硬件
‡ 在忽略协议开销并假设为16位样本的情况下,所述带宽的最佳情况

5 现场试验中的验证

在真实环境条件下的现场试验中,我们为五个能量收集传感器节点配备了Eco,并将它们部署在户外,用于温度、湿度、大气压力和颗粒物的环境感知。我们在设置中采用了不同制造商、具有不同功耗需求的传感器,同时在所有节点上使用相同的通用固件。利用Eco提供的数据,通过控制感知和传输间隔,实现了持续的能量中性运行。

固件持续重新量化充电功率和任务执行所消耗的能量,并根据可用能量调整占空比。应用任务的能耗通过第3节中介绍的显式追踪机制进行量化。为了确定充电电流,系统启动一个启用告警的测量周期,然后立即进入低功耗睡眠模式。测量完成后,模块唤醒节点,节点读取该值。通过精确且及时地了解输入能量,节点可以尽早进行调整,从而实现最高的利用率。

图7展示了一个配备高功耗粉尘传感器的节点的电流细粒度跟踪。可以清楚地看到,当风扇达到最终转速时,启动电流逐渐趋于稳定。随后,粉尘传感器被关闭,收集到的数据被传输。通过这种自测量方式,该节点不仅能够根据环境变化自行调整,还能检测关键的组件健康状态,例如超级电容的等效串联电阻升高,或机械部件(如摩擦或堵塞)的异常行为。

经验教训是,在高能量可用性情况下,对非活动节点的充电功率测量需要仔细进行参数化。固件被配置为将占空比限制在最小10秒,以保持其他节点的链路负载较低。在高能量可用性情况下,测量周期后超级电容的充电时间有时短于所选的充电功率测量持续时间。

我们的现场试验表明,Eco在实际应用中是可行的,收集到的性能数据也进一步证明了它可以在更受限制的场景中使用,例如配备更小的太阳能板。

6 结论与展望

我们提出了一种软硬件协同设计,用于一类物联网节点的自测量能耗[4]。由于采用通过标准总线连接的商用硬件,并能够无缝集成到流行的物联网操作系统中,该设计具有通用性,可轻松移植到多种开发板上。该模块已在全面的现场试验中成功验证。我们评估了所提出的原位测量模块的可移植性、精度以及其开销。研究结果表明,该解决方案在高精度和低开销方面,能够与专用的高度优化设计相媲美。Eco所实现的灵活性与高精度相结合,有助于通过操作系统提供的原语为应用程序增添能量感知能力。

在未来的工作中,我们将致力于提供一个通用的、轻量级的管理工具集。作为对操作系统支持的自测量功能的合理补充,我们将开发一个独立模块,提供常见能源管理算法的默认实现,例如EWMA[14]、ENO‐MAX[23]和LT‐ENO[5]。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值