无线自组网节点极低基础功耗方案的设计
2018-10-31黄小兵聂兰顺
黄小兵, 聂兰顺
(哈尔滨工业大学 计算机科学与技术学院, 哈尔滨 150001)
引言
水表、电表、热表是常用的家庭计量仪器,出于成本的考虑,越来越多的家庭倾向于使用无线数据传输的方案。然而无线自组织多跳网络面临一个非常严峻的现实问题,即电池供电长周期运行的节点必须有极低的基础功耗。无线自组织多跳网络特点如下:
(1)无线自组织多跳的网络。无线自组网需要有物联网操作系统和微小的IPv6协议栈[1],操作系统为了更好地支持微小的IPv6协议栈必须提供满足一定粒度的定时服务。目前主流的开源物联网操作系统为Contiki[2]、TinyOS、FreeRTOS,虽然方便管理软件和硬件资源,但也增加了功耗开销。
(2)电池供电长周期运行。 根据实际的需求调查,面向抄表领域采用的工业电池容量为3 500 mAh,考虑自放电后能够提供给节点的电量大约仅为50%。这样要满足10年的网络寿命,节点每天的平均功耗必须不超过20uA。
(3)极低的基础功耗。 基础功耗是指不包括数据收发和侦听行为,操作系统管理软硬件资源带来的功耗开销。从业务角度分析,节点的平均功耗不能够超过20uA,那么节点的基础功耗应该很低,需要小于10uA。从节点的硬件功耗分析,比如CC1120节点待机的情况下为2.3uA,活跃时为2.85mA,那么使用操作系统进行管理时基础功耗应该尽量的靠近2.3uA,这样预留给网络通信的能量就越多。Raghunathan等人在文献[1]中提出没有感兴趣的事件发生时,节点应该尽可能处于超低功耗状态。然而多跳网络需要时刻保持活跃的状态,这样节点才能进行工作。
针对上述问题,本文对主流的开源IOT操作系统进行分析。基于操作系统的时钟,提出了一种极低基础功耗方案的设计,即在内核中创建一个软时钟。该软时钟用来控制操作系统的其它时钟(这些时钟驱动事件,维持网络正常的运行),进而控制网络活跃状态和非活跃状态的快速转换。
1 无线自组网节点功耗分析
1.1 节点硬件概述
1.1.1 节点硬件功耗特性
无线自组网节点硬件包括4个主要组成部分:射频通信模块、微控制器、传感器、电源。现有的主流硬件为CC1310、CC1120、CC2650、Avr、Sky、Zoul等,虽然每个硬件各项参数不同,但是大多数主流的自组网模块都具有较低的待机电流。例如CC1310和CC1120节点的主要功耗参数见表1,表中CC1120的硬件指CC1120射频模块与MSP430F5418A MCU构成网络节点。
表1 CC1310硬件平台和CC1120硬件平台的参数
1.1.2 节点硬件时钟特性
一个典型的无线网络节点有多个时钟源:低频时钟源精度相对较高,但在低分辨率的定时(见表2)所有的RTC精度都≤40 ppm。高频时钟源虽然有很高分辨率的定时,但是通常不能够满足40 ppm的精度要求。
表2 无线网络节点时钟源的比较
节点活跃状态既要用低频时钟源(驱动事件)来节约能量,同时也要使用高频时钟源(驱动CPU工作)来维持系统正常的组网通信。节点非活跃状态时需严格控制事件触发、进行IO处理、外设处理。
在抄表领域,节点与表的通信依赖于标准接口,以串口为例,节点功耗主要来自MCU、Timer&RTC、Radio、UART、Watchdog。表1,2中数据表明了这类设备具有极低基础功耗的硬件基础和支撑系统运行的时钟基础。
1.2 IOT操作系统的功耗来源
针对自组网,目前主流的软件架构是物联网操作系统和微小的IPv6网络协议栈。现有开源的物联网操作系统为Contiki、TinyOS、FreeRTOS,在无线传感器网络中有很广泛的用途。然而除TinyOS能够满足极低的基础功耗外,Contiki和FreeRTOS均不能满足极低的基础功耗条件。
Raghunathan等提出基于事件驱动的功耗管理方式能够最大化网络寿命,这种设计思想几乎用在了所有主流的物联网操作系统上。而Dunkels等指出基于事件驱动编程存在编写、维护和调试代码的困难,因此提出具有线程风格的事件驱动抽象层protothreads,并且用在了Contiki中。但是Contiki的进程管理功耗开销大,经在CC1310平台上测试结果为106 uA。Levis等指出TinyOS提供的功耗服务能够达到15 uA的基础功耗,并且TinyOS的Power-Management Interfaces提供开启和关闭服务的功能,可见TinyOS具有很优秀的功耗管理机制。FreeRTOS使用抢占式、多线程的编程模型,可以根据应用需求选择TCP/IP或者UDP/IP服务[6]。TI-RTOS在FreeRTOS基础上进行了裁剪,保存了内核的任务管理和时间管理。然而在CC1310上测试发现TI-RTOS基础功耗达到66uA。
通过分析实验结果,主流的操作系统采用了基于事件驱动的进程管理思想,通常的事件驱动指的是定时器中断事件。系统为了达到一定的及时性要求,定时器中断事件的粒度通常不会太大,如Contiki的etimer定时器中断粒度默认为1/128秒。如此频繁的定时器中断,带来较高的基础功耗开销。此外,物联网的应用多种多样,操作系统需要兼容各类服务,因此需要频繁的定时器中断。在极低基础功耗(如几个uA)情况下,需要严格控制操作系统的开销。
1.3 民用计量领域物联网应用的典型特点
不同于工业领域的物联网,民用计量领域的物联网技术实时性要求不高。每个节点每天只需要传送少量的数据,典型值为20~100个字节。同时,这类应用是周期性的,每个节点上报的数据时间并没有严格的限制,通常在指定的时间内上报成功即可。完成数据上报任务后,节点可处于休眠状态。等待下一个上报时间段继续上报数据。
大多数自然和人造系统都能描述为网络,其中实体通过物理或者抽象边连接,这迅速增加了人们对网络理论及其应用领域的研究兴趣 [1-3].基础设施系统,如电力网、因特网、车辆运输系统、航空网等都是网络实例,这些网络给人们的生活提供了极大的便利.然而,在这些网络中,非常局部的攻击或随机故障就能引发整个网络的级联崩溃,造成严重经济损失和社会混乱.典型的例子如,发生在美国、加拿大、意大利、印度、中国等国家的数次大规模停电[4],因特网崩溃以及一些大城市频繁的交通瘫痪[5].在此背景下,网络应对攻击和随机故障引发的级联故障的鲁棒性和安全性一直是网络科学领域的研究热点.
2 Contiki定时器功耗分析
Contiki操作系统是一款轻量级的操作系统,支持动态的加载和替代某个服务,是建立在事件驱动的内核上[8]。在Contiki内核中,有2类系统定时器,分别是etimer和rtimer。Contiki的进程轮询使用etimer定时器驱动。出于更高定时精度的要求,6LoWPAN[9]协议栈中的数据链路层使用rtimer定时器驱动。
假定某个IOT操作系统有n类周期性的系统定时器,每个定时器的固定频率为Fi,单位Hz;中断持续时间为Di,单位ms;平均电流为Ci,单位uA;这样定时器Timeri的平均功耗如下:
(1)
则系统定时器总平均功耗为:
(2)
(3)
系统平均功耗total_avg_current为:
(4)
etimer需要ms级别的计时粒度,rtimer需要us级别的计时粒度。根据CC1310的时钟特性,3路通道RTC和4个通用定时器模块均能够满足etimer和rtimer的定时精度。由于4个通用定时器模块带来的功耗高于3路通道RTC,因此选用3路通道RTC中的2路分别实现etimer和rtimer。
默认情况下etimer中断触发的频率为128 Hz,rtimer中断触发频率为8 Hz。无论选用哪一种,中断都会带来高功耗开销。采用RTC实现的rtimer、etimer一次中断的电流如图1所示,功耗高达410 uA,持续时间达2 ms。
图1 rtimer、etimer中断电流
根据公式(1)得到Contiki操作系统的etimer(每1/128秒触发一次)平均功耗为105 uA。实际测试的平均功耗为106.482 uA,如图2所示;rtimer(每1/4秒触发2次)的平均功耗为6.57 uA。由公式(2)得到etimer+rtimer的平均功耗为112.57 uA。
图2 默认情况下etimer的平均电流
3 基于contiki的极低基础功耗方案的设计
解决极低基础功耗有2种常见方式:一是尽可能地降低etimer、rtimer中断的频率;二是使用更低频率的时钟,来维持网络的活跃状态和非活跃状态的切换。这2种方式都需要满足多跳网络性能(如可靠性、网络功耗)不能受损。
针对方式一分析如下:在6LoWPAN网络里有很多的时间粒度限制,比如CSMA要求退避的时间间隔粒度需要达到125 ms;IPv6网络层DS6更新必须满足的最长周期为100 ms;一般对定时要求较苛刻的应用需要满足62.5 ms。此外,同类型FreeRTOS的系统时间节拍在1 ms-100 ms之间。由此看来etimer的精度必须在毫秒级别,且不能够高于62.5 ms,这样在CC1310平台上会带来13+uA的基础功耗。通过实验验证了当etimer周期低于16 Hz时,网络的性能不佳。在6LoWPAN网络中MAC层需要使用至少为2 Hz的rtimer,这是为了较小的网络延迟。当网络规模增大,MAC层频率太低会导致接收方不能及时地接收数据包,从而影响整体网络的收包率。因此不能简单的降低操作系统默认的时钟。
针对方式二,采用更低频率的时钟来严格控制系统的时钟行为,并且保证活跃状态网络正常工作,非活跃期系统时钟完全关闭,这样能够达到预期效果。此外,在方式二中,预先对引脚进行拉低电平处理,对外设进行完全关闭。
3.1 新增软时钟(soft-timer)
在contiki中,由于不能通过降低etimer、rtimer的频率来实现极低基础功耗。因此需要设计一个控制器,合理的控制网络状态。在contiki的时钟内核中添加一个控制器(软时钟soft-timer),其结构体中含有second、minute、hour,于是contiki由原来的2个定时器变成了3个定时器。soft-timer需要一个RTC定时器驱动,RTC的定时间隔必须达到秒级别(如1秒或2秒最佳),几乎所有的IOT设备均能够满足这样的要求。RTC中断每触发一次就更新soft-timer的状态。同时soft-timer维持一个活跃的标志位active_flag,其是一个共享变量,当active_flag=0节点进入非活跃期,否则节点进入活跃期。活跃状态的调度可以从根节点自动获取,也可以手动静态设置。手动配置只需要指定两个参数:active_period和inactive_period,例如在contiki-conf配置文件中定义active_period=1和inactive_period=35表示每个周期网络处于非活跃状态350分钟,网络处于活跃状态为10分钟。
3.2 etimer调度设计
结合软时钟网络状态控制和contiki操作系统的进程管理,设计出如图3所示soft-timer控制下的contiki进程调度状态机。在图3中,深灰色区域是contiki系统默认的处理方式,浅灰色区域为新增的部分。在inactive期间etimer中断关闭,计时变量count不会更新,则不会有过期的事件,因此不会对事件进行poll操作,contiki进程处于静止状态。当inactive切换到active时,活跃标志位为1,开启etimer中断源,此时更新count变量。当有过期的事件时,进程轮询就会执行到期的etimer事件。
图3 soft-timer控制下的contiki进程调度状态机
Fig.3Contikiprocessschedulingstatecontrolledbysoft-timer
3.3 rtimer调度设计
Contiki中的rtimer是独立的定时器,只被contikimac[10]使用。但是contikimac与历史状态有关,每次运行需要在上一次执行的断点位置开始,关闭rtimer会导致上一次的断点位置清空。如图4 rtimer变频的状态机,这里的回调函数采用rtimer实现,浅灰色区域为新增的部分。在这里的软时钟控制着rtimer的变频(因为rtimer关闭导致断点清空,进而导致contikimac时序错误)。当软时钟的标志位表示为非活跃期时,将rtimer的周期变长(如5 s)。当软时钟的标志位为活跃状态,将rtimer的周期(如250 ms)变成原来的正常状态。
4 实验评估
4.1 CC1310和CC1120节点功耗实验
为了达到实验的效果,需要对CC1310和CC1120的引脚进行预处理配置。没有进行预处理的引脚通常会带来十几个甚至几十个微安的电流。
CC1310在非活跃期间测量得到etimer、rtimer、soft-timer中断的平均电流如图5所示。非活跃期间待机状态,看门狗带来的功耗常数C=1 uA。
CC1120在非活跃期间测量得到etimer、rtimer、soft-timer中断电流分别为91uA*2ms、91uA*2ms、78uA*3ms,功耗常数C=3.3 uA。
CC1310和CC1120节点的软时钟频率均是1 Hz,通过修改配置文件的参数。设置不同的etimer、rtimer频率,在非活跃期间分别得到CC1310和CC1120节点的基础功耗测量值和估计值,见表3。
图4 Rtimer频率变换
图5 CC1310非活跃期etimer、rtimer、soft-timer中断电流
Fig.5Theetimer,rtimer,soft-timerinterruptcurrentofCC1310duringinactiveperiod
表3不同配置下CC1310和CC1120的基础功耗
Tab.3BasicpowerconsumptionofCC1310andCC1120indifferentconfigurations
etimer的频率rtimer的频率基础功耗测量值基础功耗估计值16 Hz4 Hz23.428uA/CC131024.352uA/CC1310关闭4 Hz5.985uA/CC13106.560uA/CC1310关闭0.2 Hz2.490uA/CC13102.334uA/CC1310关闭4 Hz4.243uA/CC11204.265uA/CC1120
4.2 CC1310网络传输实验
为了验证对网络的收包率是否有显著的影响,节点的发射功率设置成15 dbm、发射速率为50 kbps、信道434 MHz。rtimer非活跃期0.2 Hz,活跃期8 Hz,节点个数为22,全部部署在同一层楼的各房间里,其中一个节点接上电流表进行电流的测试。通过根节点下发活跃调度,节点的非活跃期设置成350分钟,,活跃期设置为10分钟,并且每个节点在活跃期间上报1个数据。
实验共运行3天,上报12轮数据,共收到数据包263个,收包率为99.62%,并没有显著导致网络的收包率降低。
5 结束语
本文在事件驱动的IOT操作系统上,基于系统的时钟完成了一种极低基础功耗方案的设计。极低基础功耗方案的核心在于采用RTC实现一个软时钟,用于控制系统的其它定时器。这种设计方式不仅对硬件资源要求低,系统内核改动少,还屏蔽了操作系统的任务执行方式和协议栈的复杂性。应用程序员不需要关心低功耗处理的细节,只需通过配置active_period和inactive_period参数,针对不同应用就能够满足功耗和网络传输要求。最后通过实验,在CC1310和CC1120上分别实现了2.5uA和4.3uA以内的极低基础的功耗。