基于nRF905的无线传感器网络节点的设计与实现
基于nRF905的无线传感器网络节点的设计与实现
无线传感器网络是计算机技术、传感器技术和网络通信技术相结合的产物。它由大量随机分布的、具有实时感知、无线通信和自组织能力的传感器节点组成[1]。随着无线技术的高速发展,无线传感器网络越来越多地走进人们的视野中。与有线技术相比,无线技术具有成本低、体积小、省去复杂的布线等优点。但是由于现有的无线传感器节点大都采用电池供电,放置地点随机变动,随时可能出现节点中断的情况,通信能力十分有限,需要经常性的人工维护。因此,无线传感器网络节点要具有自组织、中断自我修复的功能,需要设计合适的通信协议和路由算法,以提高系统通信的可靠性。为此,本文采用无线射频芯片nRF905和STC12系列单片机设计了一种无线传感器节点,并且在典型自组织网络的通信协议-动态源路由协议DSR(Dynamic Source Routing)[2-4]的基础上,针对路由维护算法做出改进,设计出一种易于实现且实用性高的通信协议,实现了自组织和多跳传输数据的无线通信系统。
1 节点硬件设计
节点分为协调器节点和普通节点,普通节点带有传感器,负责采集需要的数据并组成网络,协调器节点负责整个网络的控制和数据的汇总、分析、处理等。1.1 MCU
STC12LE5410AD单片机是单时钟/机器周期(1T)的兼容8051内核单片机,是高速、低功耗的新一代8051单片机,指令代码完全兼容传统8051,而速度快8~12倍,内部集成硬件高速SPI(Serial Peripheral Interface)接口、2 KB EEPROM、A/D转换模块和MAX810专用复位电路。工作电压2.4~3.8 V,因此可用电池工作,并可长时间工作。器件在少于6 μs的时间内可以从低功耗模式迅速唤醒。STC12LE5410AD的超小封装、高度集成、精简外部电路可设计出更小的节点,超低的价格可以大规模铺设传感器节点。STC12LE5410AD单片机的这些特征,非常适合应用在无线传感器网络中。
1.2 射频收发器件nRF905[5]
nRF905由挪威Nordic公司生产,是一个为433/868/915 MHz-ISM(工业、科学、医疗)频段设计的单片无线收发芯片,32脚QFN封装,工作电压为1.9~3.6 V,最大发射功率为10 dBm。该收发芯片由频率合成器、接收解调器、功率放大器、晶体振荡器和调制器组成,片内自动完成曼彻斯特编码/解码。nRF905有两种活动(TX/RX)模式和两种节电模式。活动模式之间转换时间小于550 μs,活动模式与节电模式之间的转换时间小于650 μs。
nRF905通过SPI与微控制器通信,自动处理字头和循环冗余码校验(CRC)。当进行数据发送时,只需将配置寄存器信息、所要发送的数据和接收地址送给nRF905,它就会自动完成数据打包(加字头和CRC校验码)和发送。接收数据时,nRF905自动检测载波并进行地址匹配,接收到正确数据后自动移去字头、地址和CRC校验码,再通过SPI将数据传送到微控制器。
1.3 硬件连接设置
STC单片机通过内部集成的硬件高速串行外设接口SPI与nRF905连接,最快可达3 Mb/s,比软件模拟SPI方式快30倍左右,大大减少了程序执行时间,提高了网络的吞吐率。同时在设计协调器节点与PC上位机软件通信程序时,利用STC单片机1T时钟的优势,设置串口波特率使用的定时器12倍速方式,使串口波特率提高至115 200 b/s,提高了协调器节点的反应速度,减少了等待时间,提高了系统的吞吐率。
2 节点软件设计
本系统的软件设计分为协调器节点Connector软件和普通节点Node软件的设计,其中协调器节点作为整个网络系统的主节点,起着控制全网络的作用,通过PC机的上位机软件,可以对协调器进行接收和发送命令及数据,从而实现对整个系统网络的控制。而每个普通节点也预留通信接口,可以在需要的时候与其他设备相连接。
由于本系统实现自组织网络的需要,在物理层中为每个节点(包括协调器和普通节点)定义了相同的物理地址,实现全网的广播功能。在网络层为每个节点分配唯一的网络地址,通过软件判断接收数据的目的节点是否是本机。
图2为节点自组织流程图。当网络中增加一个新节点,新节点上电初始化后,首先会向协调器发送路由请求RREQ请求加入网络,并打开定时器;协调器收到RREQ后,记录新节点信息,并通过反路由发送应答信号ACK至源节点;如果新节点在设定的时间内收到ACK信号,表示加入网络成功,并且记录本节点至协调器的路由信息;如果在设定的时间内没有收到ACK信号,那么重新发送路由请求RREQ至协调器,如此循环直至收到ACK信号。如果重发次数达到设定的上线,仍没有收到ACK信号,则进行全网广播RREQ,并打开定时器,等待返回RREP命令;在设定时间后进行重新广播RREQ,直到到达重发上限。新节点收到RREP表示加入网络成功,同时保存RREP命令帧中的路由信息。
2.1 路由协议
现有无线网状网络的路由协议通常可分为:表驱动式路由协议和按需路由协议。前者需要网络中的每个节点维护一张或多张路由表,以记录到其他节点的路由,增加了路由开销。而按需路由协议——动态源路由协议(DSR)使用了源路由,每一个数据分组的帧头中包含整条路由的信息,中间节点不需要维持当前的路由信息,分组自己带有路由信息,按需路由的特性避免了周期性路由广播和邻居节点的检测。
DSR协议包括两个过程:路由发现和路由维护。路由发现过程使用泛洪路由(Flooding Routing)。为了减少路由发现过程的开销,每一个节点都包括一个缓存器,存放最近学到的和用过的路由信息。路由维护过程是源节点用来检测网络拓扑是否发生变化的机制。若拓扑发生变化、源路由发生中断,源节点就会收到路由错误信息。其他节点收到路由错误信息后删除中断路由,并且重新发起广播寻找路由。
本系统中的路由协议采用DSR协议,并对DSR协议进行一些改进。
(1)每个节点中到达目的节点含有最多两个路由缓存。
(2)查到中断节点后先检查本节点中有无到中断节点下级节点的信息,若有,则直接使用此路由,若无,则立即广播发送RRER。
(3)所有节点收到RRER后,检查是否含有终端路由,有则删除中断路由。
系统通信协议格式如表1所示。其中,FRAME_TYPE表示命令帧类型,SOURCE_ADDR表示源地址,FIRE_ADDR表示目的地址,MID表示路由节点地址,REMIAN表示最大跳数下剩余跳数,MAX表示最大跳数,DATA表示要传输的数据,ODD代表奇校验。
2.2 程序设计
2.2.1
广播
在广播RREQ时,为了避免广播冲突,利用nRF905的载波检测多路访问机制CSMA/CA,发送前先进入接收模式,监听该信道是否空闲。如果检测到CD信号为高,则表示该信道被占用,根据退避延时一段时间,再检测CD信号是否为高。
而根据检测,数据包接收的时间大致为20 μs,时隙为60 μs,加上程序运行的时间,定义短帧空间SIFS和时隙分别为50 μs及100 μs,分散帧空间DIFS为SIFS加2个时隙即250 μs。后退次数(NB):NB的初始值为0,当设备有数据要传送时,经过一段后退时间(2BE-1)×100 μs后,检测CD,若检测到信道忙,则会再一次产生倒退时间。此时NB值会加1,NB值最大定义为4。当信道在经过4次的后退延迟时间后仍为忙,则放弃此次的传送,以避免过大开销。
尝试次数(CW):循环判断当前频道是否空闲,当判断到了一定次数后该频道依然空闲则跳出循环,开始传送数据,设初值为2。
后退指数(BE):初值设为2。
本设计中,CD信号为高时必须通过切换至standby模式来使CD信号复位,以保证下次CD信号的检测。
根据nRF905模块的时序可知,模块从standby模式切换至接收或发送模式的时间为650 μs,发送和接收模式之间的切换需要550 μs,切换时间远大于时隙及DIFS的值。因此,BE设置为2,最大为4。
2.2.2
数据传输
在进行数据传输时,源节点首先检查自己的缓存中是否有到目的节点的路由信息,如果没有,则先进行路由发现,与广播模式相同。如果有至目的节点的路由信息,则根据路由信息,先发送数据请求命令RTS。当目的节点接收到返回的允许发送命令CTS信号时,则表示已经建立了数据传输通道,由请求节点开始传输数据,传输完毕后,由目的节点发送DATA_ACK给源节点,表示数据发送完毕。2.2.3
路由修复
数据传输时,每个节点收到数据后,都要先回复应答ACK信号给其前一个节点,再转发至下一个中继节点,节点中设置超时定时器,约等待1 633 μs ACK信号,前一个节点没有收到ACK,则重发数据,设置重发次数为3。假若重发3次都没有收到ACK信号,则判断下一个节点为中断节点。查询缓存路由中是否有其他到达中断节点下游节点的信息,有则使用这个备用路由,无则广播发送RERR给所有包含中断节点路由的源节点,每个节点在收到该RERR后,就会从它的路由缓存中删除所有包含该中断节点的路由。
路由修复示例如图5所示。节点0需要发送数据给节点5,节点0中含有到节点5的路由信息,0→1→2→5;节点0开始发送RTS,每个节点收到RTS后返回给前一个节点ACK,表示路由无中断;假若节点1没有收到ACK,重发3次后仍没有ACK返回,则判断节点2是中断节点;这时查询节点1中有无到达节点5的路由,发现1→3→4→5,则按照此路由继续发送RTS;当节点1返回DATA_ACK,表示数据传输完成,延迟10×跳数(ms)后,广播发送RRER,收到RRER的每个节点查询本节点是否含有中断路由,有则从路由缓存中删除包含中断节点的路由。
3 试验结果
试验网络系统由10个普通节点和1个协调器节点组成,采用人工随机安放的方式把所有节点放置在约200 m的空旷地带。首先,把协调器节点通过串口与主控PC机连接,打开上位机控制软件,并给协调器节点上电;随后在随机放置普通节点的同时一一打开节点的电源。
通过上位机软件可以清楚地看到,每当有新节点加入网络(打开电源),上位机会实时显示出新加入节点的地址和路由信息,并且通过反向路由返回应答信号给新节点,表示成功加入网络。当所有节点都加入网络后,可以通过上位机软件看到整个网络中各个节点的路由信息,并且可以对每个节点或多个节点进行远程控制。
为了实时监测到每个节点的运行情况,每个节点程序都加入定时扫描程序,定时时间1 min,检测节点本身在1 min内是否为空闲状态,如果是空闲状态,则向协调器节点发送节点信号,保证本链路无中断;协调器在一定时间周期内,检测接收到的每个节点信号,如果缺少某个节点的信息,则由协调器发送检测信号给这个节点,寻找中断节点并进行路由维护。也可以直接通过主控电脑的上位机软件手动发送检测信号给每个节点,从而检测每个节点的运行情况。
nRF905的空中传输速率峰值为100 kb/s,有效传输速率为50 kb/s。
通过上位机软件对整个网络进行连续数据传输试验,测试在本协议下的网络吞吐率。测试条件:200 m空旷地带,分别测试一个节点至10节点网络中点对点,1跳、2跳、3跳情况下的吞吐率,数据包大小32 B。传输要求一个包到达目的节点后返回到应答表示传输完成,可以看出,网络中进行点对点的数据传输,吞吐率约为16 kb/s,并且随着节点数的增多,影响很小;随着跳数的增加,网络吞吐率降低,但是网络中节点数量增多,同时节点传输几率增加,因此逐渐趋于稳定值。最后在网络设定最大跳数(3跳)、10个节点网络的情况下,网络吞吐率约为4 kb/s。
通过实验测得数据表明,在短距离的无线通信网络中,该系统可以稳定可靠地运行,数据传输率高,网络吞吐率完全可以达到一般的无线传感器网络的要求。并且该系统具有良好的扩展性、移植性和实用性,可广泛运用于温度、湿度、光传感器采集数据、能量监测及电路控制等技术。
迅通科技-NORDIC中国专业代理
010-64390487 15810361561 ap@rfbit.com
刚好用得上!谢谢小编!
学习中。
haoren
有没有文档的,有没有节点故障诊断的
多谢小编分享,很适用,谢谢
学海无涯荡轻舟。