基于LoRa技术的通用型环境监测节点低功耗设计
2022-08-02王书涵陈相全郭景富董永军
谢 晖,王书涵,陈相全,郭景富,董永军
(1.东北师范大学 物理学院,长春 130024;2.吉林省先进能源开发与应用创新重点实验室,长春 130024)
0 引言
随着物联网行业的迅速发展,无线通信终端的需求量陡增,越来越多的无线通信技术被开发和应用。无线网络节点搭载所需传感器并将采集的数据进行传输,构成了无线传感器监测网络。显然,作为无线传感器网络的基本组成单元,监测节点的功耗特性、通信距离、可扩展性等决定了传感器网络的运行寿命、覆盖面积和成本。因此,开发一种可扩展性强、功耗低的节点尤为重要。
目前,国内外针对传感器网络节点的软硬件低功耗和可扩展性设计开展了相关的研究工作。邓洲等通过预留多种传感器接口,实现了节点与多种传感器的硬件连接[1]。陈磊提出将传感器统一采用USB总线连接至节点,再通过CH341转换读取,从硬件上扩展了节点的适配传感器[2]。施成威等通过读取JSON文件实对现传感器操作的封装,节点通过读取JSON文件学习该传感器的控制[3]。该方案解决了传感器的软件适配,但依赖于片上系统,占用节点资源多,功耗大。王能辉等基于NB-IoT技术设计了农田监测系统,将新兴的通信手段与监测节点相结合,有效降低了网络的传输功耗[4]。王杰等提出一种动态休眠算法,合理调度,控制节点的平均功耗[5]。陈华强等设计了低功耗节点硬件,并提出了功率自适应算法,软硬件相结合,延长节点寿命[6]。上述研究工作在可扩展性或低功耗设计方面取得了一定的研究成果,但很少同时兼顾这两个方面。
针对上述问题,本文综合考虑监测节点的功耗与可扩展性,开发一种基于LoRa技术的低功耗通用型监测节点,通过硬件低功耗选型、软件低功耗管理、多传感器适配接口设计、合理封装传感器、优化配置休眠状态以及功率自适应调节等方法实现监测节点的低功耗、通用性设计,与现有环境监测节点相比,该节点具有功耗低、覆盖广、适用场景多等优点[7-11]。
1 系统结构及原理
本文综合考虑监测节点的功耗与可扩展性,开发了一种基于LoRa技术的低功耗通用型监测节点。该节点主要包括电源管理单元、处理器单元、LoRa通讯单元以及传感器控制接口单元四部分,如图1所示。其中,节点采用STM32L系列低功耗芯片作为系统的主控制器,预留接口外接传感器,通过读取传感器采集环境数据进行分析、处理,最终经LoRa无线通信模块将数据上传。
图1 监测节点硬件框图
2 系统硬件设计
无线传感器节点通常采用电池供电,由于电池容量有限,节点的功耗是影响整个网络寿命长短的关键因素, 因此,对节点进行低功耗设计尤为重要[12-14]。构建低功耗硬件平台是实现节点低功耗的重要环节,本文通过对MCU、无线模块进行对比分析,筛选出具备多种运行模式、功耗低的器件;采用电源管理芯片和负载开关,为电源动态管理提供了硬件基础;通过预留丰富的传感器接口以提高节点的可扩展性。
2.1 微处理器
目前多家芯片厂商推出了应用于低功耗场景的主控芯片,其中,Atemel公司的ATmega系列微处理器、TI公司的MSP430系列超低功耗微处理器以及ST公司的STM32L系列微处理器应用较为广泛,其性能参数如表1所示。
表1 常见微处理器低功耗主控性能对比
相较于另外两种微处理器,STM32L031C6T6的工作电流较低,待机电流最小,片上资源丰富,能够满足节点的功能需求,适合作为该节点的主控制器。
2.2 无线通讯模块
图2所示为几种典型LPWAN技术的性能比较[15-16]。其中,NB-lot技术虽然在传输数据长度、传输速度方面有一定优势,但在效率和覆盖场景方面相对较差,难以实现环境监测节点要求的通信网络覆盖大多数场景的实际需求;而Sigfox通信距离最远,网络可以覆盖大多数检测环境,但传输速度和传输数据长度方面的限制使其不具备实现环境监测网络的能力。综合分析各通信技术的性能差异,本文设计的节点采用LoRa扩频通信技术。表2为LoRa模块E22-400T30S的部分参数,表3所示为不同传输速率下的实测功耗。
图2 LoRa、NB-IoT、Sigfox性能比较
表2 E22-400T30S性能参数
表3 LoRa传输功耗实际测量
实验验证了该模块具有多种空传速度,调节范围大、收发功耗低,且操作简便易于二次开发。此外,在空旷环境下采用4.0 dBi增益天线,还通过实验得出该模块最远通信距离为1.6 km,因此,使用该模块组网覆盖范围大,功耗低,通信服务质量高,满足户外环境监测的需求。
2.3 电源电路设计
电源单元主要由电源转换芯片以及各路电源控制开关构成,核心器件是开关电源芯片,节点整个生命周期内,电源芯片均处于工作状态,其静态功耗参数是评价电源电路的重要指标。另一方面,为适应不同环境,节点往往需要适配不同电压的电源,具有较宽输入范围的电源芯片可以拓宽节点的适用场景。通过实际调研,最终采用TI公司的TPS62110芯片,其具体参数如表4所示[17]。
表4 低静态功耗电源管理芯片对比
电源管理电路基于电源转换芯片,通过控制电源通断管理各模块的工作状态,调度节点资源配置,使电能效益最大化,因此,合理设计电源电路可以有效减少不必要的能量开销。
电源电路使用负载开关配合实现节点的动态电源管理功能。根据芯片工作电压和功耗的不同采用TPS22993和TPS22810两种负载开关,分别实现模块的电源管理以及传感器的电源控制。TPS22993为四通道负载开关,具有通用输入输出(GPIO)和I2C控制功能,1.0~3.6 V输入电压,最大17 μA静态电流,用以控制E22-400T30S、SP3485等芯片占用资源少、功耗低[18]。TPS22810为单通道负载开关,输入电压最大18 V,持续工作电流最大2 A,静态电流12 μA,可以用于控制传感器电源通断[19]。节点的电源电路如图3所示。
图3 电源系统框图
节点一路电源受负载开关TPS22810的控制为传感器提供能量,另一路通过TPS62110输出3.3 V为MCU供电,同时作为TPS22993的输入为其余各模块供电。通过I2C总线对TPS22993芯片进行控制,设置SP3232、SP3485的电源通断,实现对接口电路的能耗控制。
2.4 接口电路设计
监测节点的通用性在于能够兼容多种传感器。由于传感器种类繁多、接口各异,常用监测节点为扩展新的功能往往需要重新开发或定制传感器。本文通过预留丰富的接口使得节点能够适配大多数传感器,从而提高了节点的可扩展性,降低了环境监测系统的开发成本。
针对现有传感器接口类型,节点设计引出了RS232、RS485、I2C、SPI四种接口。其中,I2C、SPI通信模块集成在主控芯片内部;RS232模块核心器件为SP3232芯片,该芯片支持两路RS232通信;选用SP3485作为RS485电路的转换芯片,采用自动收发电路完成对该芯片的收发控制,降低了操作难度且节省了主控芯片的IO口资源。通过与电源电路配合可以实现对每一个接口电路及对应的传感器进行供电控制,保障了节点低功耗运行的同时可以实现对多种接口传感器的连接,便于使用者针对各种待测参数构建监测系统。
综合上述设计方法,绘制得到节点的硬件结构原理图如图4所示,经实验测得节点采用12 V电池供电时运行功耗仅1.22 mW,休眠功耗仅0.3 mW。
图4 节点原理图
3 系统软件设计
节点查询运行过程中,需要完成工作模式的自动切换、模块电源通断的管理、传感器的读取以及与LoRa模块的发送及接收。此外,考虑到节点的设计需求,程序还需要以硬件平台为基础,通过自适应功耗调节、在线配置传感器等功能对程序进行设计与优化,实现节点低功耗、高可扩展性的设计目标。
3.1 功能分析
环境监测节点需要周期性获取环境参数并在规定的时间上传采集到的数据,其软件设计流程如图5所示。节点上电初始化后,配置数据上传周期,收到休眠指令后节点休眠等待传感器监测倒计时结束,执行采集功能。采集过程节点需要访问传感器寄存器,因此节点需要先使能接口模块和传感器,建立与传感器的连接,再发送查询指令获取数据,对数据进行处理、存储后,节点进入休眠状态。当上传计时结束,节点执行数据上传功能。上传过程,节点需要配置LoRa模块周期唤醒等待连接请求,完成握手后与汇聚节点建立连接并上传数据,随后断开连接重新进入休眠,完成一个监测周期的任务。
图5 监测节点软件框图
3.2 低功耗管理
低功耗节点不仅需要一个节能的硬件平台,还需要一个能够合理调度资源、充分发挥硬件低功耗特性的软件系统。本文在实现节点的基本功能的基础上,对软件进行了低功耗优化设计。一方面,节点始终处于相同配置容易造成资源浪费,本文基于有限状态机将节点的监测周期划分为不同工作状态,再根据各个工作状态的特点、需求,有针对性地对节点资源进行合理分配;另一方面,节点监测过程中无线传输功耗最高,本文提出了一种基于LoRa通信技术的自适应功耗调节算法,通过削减传输时间、控制传输功率,实现了通信质量与节点能耗的平衡,减少了节点的能量浪费。
1) 状态与配置:
根据节点任务的不同,可以将节点的工作状态划分为:空闲、休眠、查询、等待和无线通信,各状态的特点如表5所示。
表5 节点的状态划分及其特点
在各工作模式下节点有不同的性能要求,针对不同需求对节点各状态进行合理配置可以有效延长节点寿命。这里以休眠状态为例,首先确定主控芯片的配置。就主控而言改变工作模式、时钟源、系统时钟或IO口配置均会影响功耗,其中工作模式对主控的功耗影响最大。STM32L031C6T6拥有5种低功耗模式,表6给出了各模式实际功耗的测量结果。
主控处于休眠状态的时间占比最多对功耗影响最大,由表6可知,Standby模式功耗最低,然而此模式下,SRAM关闭,唤醒后程序重头执行,耗时久、功耗大。stop模式功耗次之,唤醒后程序继续运行,重要数据如传感器结构体、传感器链表等可存放在Flash中以防丢失。且此模式可以使用RTC唤醒,唤醒时间最长达到36 h,满足大多数环境监测的需要。因此,节点休眠时MCU配置为开启RTC的stop模式,时钟源为MSI,频率65 kHz,未使用IO口关闭时钟,未使用引脚配置为模拟量输入模式。考虑到休眠状态节点不需要使用接口模块和LoRa模块,节点将关闭这些模块的电源。至此,休眠状态的配置方案设计完毕,再以相同方法对节点其他状态进行配置,并对各个模块的电源进行管理,具体配置如表7所示。
表6 工作模式对功耗的影响
表7 节点各工作模式配置情况
上电初始化后,节点默认处于空闲状态,启动定时器设置最大等待时间,触发等待超时事件则节点进入休眠状态。休眠状态下节点关闭大多数功能,各模块的能量开销均维持在最低水平,从而降低平均功耗。节点进入休眠状态前,根据程序构建的传感器链表获取各传感器查询倒计时,对倒计时排序找出最近一次查询的传感器,设置为唤醒时间,随后主控进入低功耗模式运行模式。唤醒后节点返回空闲状态,并根据唤醒事件的不同进入相应的状态,如果节点被周期性查询时间唤醒,则进入查询状态,打开部分接口电路电源,通过访问传感器获取环境参数;如果触发事件为上传数据事件,则进入等待状态,配置LoRa模块为休眠状态,定期监听信道,等待实现网络连接。触发连接完成事件时,节点进入通信状态,通过LoRa模块完成与汇聚节点的信息交互,上传采集、处理的环境信息并返回空闲状态,完成一个工作周期。具体的状态迁移过程如图6所示。
图6 节点状态迁移图
2)自适应发送调节:
LoRa无线通信的链路裕度可以很好地反映链路通信状况,链路裕度可表示为:
SFM=RSSI-SR
(1)
式中,SFM为链路裕度,RSSI为接收信号强度,SR为接收灵敏度。当链路裕度大于0时,可以认为通信成功[20]。其中,接收信号强度可表示为:
RSSI=Pt+Gr+Gt-Lc-Lbf
(2)
式中,Pt为发射功率,Gt为发射天线增益,Gr为接收天线增益,Lc为接口衰耗,Lbf为空间损耗。可以看出在环境相同、距离一致的情况下,RSSI与Pt呈正比。
表8所示为通信模块接收灵敏度与空传速度之间的对应关系。
表8 空传速度与接收灵敏度
通过拟合可得SR与V的关系:
SR=-21.84×e(-V/7.70)-110.99
(3)
因此,空传速度越大,接收信号灵敏度越低。实际测量发现空传速度与接收信号强度无关且发射功率与接收灵敏度无关,结合公式(1)~(3)可知,链路裕度与发射功率Pt正相关,与空传速度V负相关。
传输功耗可以分为发射功耗和接收功耗,其中每Bit数据发射功耗为:
(4)
式中,BW表示带宽,SF表示扩频因子。可以看出ETbit与Pt正相关。
每Bit数据接收功耗计算公式为:
ERbit=PR×Tbit
(5)
式中,PR为接收功率,实际测量不同空速、发射功率下不变。显然,发射功率一定时,每bit数据收发功耗与Tbit成正比。
而空传速度为:
(6)
式中,CR为编码率,由公式(4)(6)可知每bit数据传输时间:
(7)
根据官方数据空传速度V与扩频因子SF、编码率CR的关系如表9所示。
表9 空传速度与单位数据传输时间Tbit的关系
将表9数据带入公式(4),拟合得到V与Tbit的曲线,如图7所示。因此,Pt一定时,ETbit、ERbit均与V负相关。
图7 Pt为1时,V与Tbit的拟合曲线
因此,在相同环境以及SF、CR、BW正确时,传输功耗、SFM均与Pt正相关,与V负相关。显然,链路裕度既可以反映LoRa模块的通信功耗又可以用来评估网络的传输质量,通过改变LoRa模块的发射功率、空传速度调节通信的链路裕度,从而控制节点通信功耗。因此,本文提出了一种基于链路裕度的自适应调节控制算法,动态调节无线网络的链路裕度,使链路裕度逐步逼近能够正常通信的最低链路裕度值,以最低的能量开销进行稳定通信。自适应调节算法工作流程如图8所示。
图8 自适应调节算法流程图
4 可扩展性设计
节点通过预留多种传感器接口实现与传感器的硬件连接,但目前市场上的传感器通信协议互不兼容,要真正实现多传感器的适配,还需要在软件上实现对新增传感器的识别、通信,从而使节点能够扩展不同的传感器,监测各类环境数据。
4.1 基本功能实现
考虑到接口模块、电源模块等底层程序需要被反复调用,为优化程序结构,设计采用了模块化的编程思想。根据硬件模块划分,将底层驱动分为负载开关、232模块、485模块、I2C模块、SPI模块、LoRa模块,各模块程序尽可能独立封装,仅提供调用接口。以RS485模块为例,程序提供了以下功能函数:RS485初始化函数、RS485发送函数、RS485接收函数、RS485失能函数,将该模块所有操作封装为函数,无需重复繁琐的资源配置等操作,降低了错误概率。完整的模块功能封装有利于优化程序结构,实现程序的高内聚、低耦合,有利于降低节点与传感器通信的开发难度。
程序在识别新增传感器之前先要实现对已挂载传感器的管理。针对已挂载传感器的记录、管理问题,程序构建了传感器指针和传感器链表用以记录和管理传感器相关信息,链表的每一个节点存储一个传感器指针,每一个传感器指针指向对应的一个传感器配置文件,需要操作某一个传感器时,只需遍历传感器链表找到对应的指针,根据指针得到该传感器的配置文件,从而获取传感器的操作信息。
传感器唤醒周期、接入时间各不相同,为每个传感器单独配备定时器会造成片上资源浪费。本文在传感器链表的基础上,为每一个传感器添加了倒计时属性,记录该传感器下一次唤醒的时间,节点每次查询传感器后,根据该传感器的查询周期在传感器链表中重新写入倒计时,随后遍历链表,找出倒计时最小值即为唤醒的时间,倒计时与该值的差值为新的倒计时,跟新倒计时后进入休眠状态。该方法使用一个定时器完成所有传感器计时,有效节省了片上资源。
4.2 传感器接入
传感器接入节点后,节点首先需要等待接收配置文件,解析配置文件后对需要的接口进行配置并发送读取指令。若传感器正常反馈数据且解析后数据正确,则认为传感器接入正常,系统会为该新增传感器构建指针,将其加入任务列表,进行周期性查询。若传感器没有反馈数据或数据解析不在有效值范围内,重复读取,读取三次依然失败,则上报接入异常请求核验操作指令。图9为传感器接入流程。
图9 接入传感器流程
由图9可知,节点识别传感器分为3个环节:传感器接入节点,实现硬件连接;根据传感器操作参数,打包配置文件;节点解析配置文件构建结构体、读取传感器,实现软件通信。传感器硬件连接问题已经通过接口设计解决,配置文件的设计和解析功能尚未实现。
为方便节点记录和使用传感器配置文件,这里以结构体的形式表示该配置文件,且在节点程序中同样以结构体的形式存储、解析。本文设计的配置文件结构如下:
struct sensor
{
uint8_t name ; //传感器类型
uint8_t mode ; //接口类型
uint8_t baud ; //波特率
uint8_t delay ; //传感器预热时间
uint8_t cycle ; //监测周期
uint8_t ID ; //传感器地址
uint8_t CRC_mod ; //校验类型
uint8_t command_long; //读取指令长度
uint8_t* command; //读取指令
uint8_t frame_long; //反馈帧长度
uint8_t data_long; //数据长度
uint8_t data_location; //数据地址
uint8_t flaf ; //是否是实际值
uint8_t data_max; //数据最大值
uint8_t data_min; //数据最小值
};
5 实验结果与分析
5.1 传感器识别
为了检验传感器是否可以被识别,本文采用Labview设计了上位机,图形化显示采集到的数据,通过检验该数据,判断传感器是否接入正常。这里以土壤温湿度传感器为例,测试系统如图10所示。
图10 系统连接示意图
监测节点接入传感器后,首先需要上位机通过汇聚节点下发传感器操作参数。参数输入界面如图11所示。
图11 上位机配置界面
通过上位机手动输入传感器参数后,上位机对数据打包并采用RS232通信方式上传至汇聚节点,再由汇聚节点通过LoRa无线通信的方式告知监测节点,完成传感器的配置。监测节点收到采集数据后,发送回汇聚节点,通过上位机完成人工确认,核验正确后反馈监测节点,节点将传感器添加至传感器链表,完成传感器的识别过程。当传感器被唤醒时,由监测节点查询传感器链表,MCU依次读取每一个传感器操作信息,并将读取到数据上传上位机显示。
图12所示为节点采集的土壤温湿度数据,通过上位机界面显示当前温、湿度数据,并在界面的左下侧,以折线图的形式显示历史采集数据的变化曲线。通过数据的成功采集可以直观看出,节点正确识别并读取了传感器数据。
图12 温度传感器采集测试
该实验以土壤温湿度传感器为例,测试了本文设计的配置文件和以此为基础的传感器识别程序,结果表明该配置文件可以记录传感器接口信息。因此,节点可以实现对未知传感器的软硬件连接,具有较强的可扩展性。
5.2 功率测试实验
针对本文提出的LoRa传输功耗自适应调节算法,利用控制变量的思想设计了功耗对比实验,实验测试点选取示意图如图13所示。
图13 测试点选取示意图
保持空传速度为2.4 kbps恒定不变,分别以30 dBm、27 dBm、24 dBm、21 dBm作为发射功率,测出最远通信点A、B、C、D,CD间任意选取m点,BC间任意选取n点,AB间任意选取p点,m、n、p为测试点,实验数据如表10所示。
表10 自适应算法传输功耗
实验在m、n、p三点进行,每点采集3种状态数据。状态一是节点以30 dB为发射功率、2.4 kbps为空传速度的情况下进行收发功耗测量;状态二为空传速度保持2.4 kbps,仅调节发射功率时的功耗;状态三为既修改发射功率又修改空传速度时的功耗。实验结果如表10所示,通过计算可知:m点状态三较状态一的功耗下降了89.5%、较状态二下降了81.8%。n点状态三较状态一功耗下降69.9%、较较状态二下降65.6%。p点状态三下降了65.6%。
显然,本文设计的自适应算法相比单独调节发射功率,可以更加有效地控制节点在通信过程中的能量损耗,延长节点的寿命。
6 结束语
本文针对现有环境监测节点存在的可扩展性不足以及低功耗设计需求等问题,设计了一种兼容多传感器的低功耗环境监测节点。为进一步提高节点可扩展性,程序提供了传感器结构体以及传感器链表,无线接收传感器信息后,可以识别、存储并读取传感器。测试结果表明,该方案可以实现节点与新增传感器的软硬件连接,且无需重新烧录程序,提高了节点的可扩展性、灵活性。另一方面,基于STM32L031和LoRa模块构建了硬件平台,基于有限状态机对节点的工作状态进行了划分,优化了各状态的配置方案,并提出了自适应功耗算法,通过实验证明了,该自适应算法相较于正常收发方式最高节约了89.5%的发射功耗,有效降低了节点在无线通信时的功耗。因此,本研究有效提高了节点的适用场景与寿命,对于无线传感器网络节点在环境监测领域的推广应用提供了一定的理论方法和技术支撑。