无线传感器网络时间同步协议的实现
扫描二维码
随时随地手机看文章
摘要:介绍了一种在IEEE 1588协议基础上改进的时间同步算法的实现,通过精简的IEEE1588协议发送的follow—up报文,来降低ZigBee网络的开销,同时改变了同步信息的发起者,由主节点换成从节点,从而适应了ZigBee网络节点即时加入和即时离开的特点。通过实际试验测定,该算法适合于无线传感器网络节点的高精度时间同步。
关键词:时间同步;ZigBee网络;IEEE 1588;定时器
本文主要是以高速运动目标的监测系统为研究背景,该监测系统是将多个ZigBee节点布设在监测区域(移动目标可能出现的区域),其中心节点和路由节点一直处于丁作状态;其他的节点在没有任务时,设定唤醒时间后进入休眠状态。最终各个传感器节点通过不同跳转路径将数据汇总到中心节点,由中心节点进行处理或者通过网关将数据传送到其他设备再进行处理。整个系统的网络示意图如图1所示。
本系统中由于目标的运动速度非常高,目标的具体位置和状态需要由多个ZigBee节点共同协作来工作,所以针对系统的时间同步研究是非常的重要。而导致时间同步的因素很多,除了发送时间、访问时间、传送时间、传播时间、接收时间、接受时间会影响网络时间的同步,还有就是由于网络拓扑的不同,数据在传递过程中,跳数的不同也会引入不同的时间误差。这就造成了网络中各节点的本地时间便有了较大的差距。
1 网络时间协议
1.1 IEEE 1588协议
IEEE 1588协议借鉴了NTP技术,具有容易配置、快速收敛以及对网络带宽和资源消耗少等特点。主要原理是通过一个同步信号周期性的对网络中所有节点的时钟进行同步校正,使基于以太网的分布式系统可以达到精确同步。
PTP时间同步的原理:主设备周期地以多播的方式发送sync报文,随后发送一个记录发送Sync报文的精确时间戳to的Follow—up报文,从设备收到这两个报文后记录下两个时间to(Sync发出时间)、t1(从设备收到Sync报文时间)。从设备在t2时刻发送时延请求报文,主设备在t3时刻收到延迟请求报文,并将时间戳放在时延响应报文中发给从设备,从设备此时又记录下了t2和t3。
当从设备获得这4个时间后,通过Delav=[(t1-t0)+(t3-t2)]/2计算出了从设备与主设备之间的传输时延。Offset=t1-(t0+Delay)=[(t1-t0)-(t3-t2)]/2计算出从设备与主设备的时间偏差。从设备根据计算出来的偏差修改本地时间,完成了时钟同步其同步原理如图2所示。
PTP时间同步协议还可以消除时间偏差和数据传输延时,使各个设备达到较高精度的时间同步。由于ZigBee网络的传输速率和吞吐量的限制,将PTP时间同步协议直接应用于ZigBee无线传感器网络中,会使该协议的精度下降,同步的可靠性降低,还会给ZigBee网络增加网络负载。
1.2 改进的时间同步协议
由于ZigBee无线传感器网络的传输速率小,带宽小等特点,便采用了降低PTP协议在网络中的开销来实现本系统的时间的精准时间同步。即减少握手次数,使PTP协议的偏移测量和延时测量在一次通信过程完成。这个时钟同步原理示意图如图3所示。
该协议也包括偏移测量和延迟测量:
(1)偏移测量:南于ZigBee网络允许节点是即时加入和脱离的,故不能使用主节点周期性组播发送同步报文的方式,而采取子节点周期性地向主节点发送同步报文的方式,主节点收到此同步报文经过处理后将白己的时间信息(包括处理时间,如下式Tm1~Tm2)发送给相应的子节点,该子节点收到此时间信息后,就可以计算出与Master的时钟偏移量。Offset=Ts2-Tm2 (1)
(2)延时测量:从下式可以看出,同步报文发送之后,子节点并没有再发送延时请求报文,这是因为利用偏移测量过程中的时间信息就可以计算出子节点到主节点的传输延时。这里计算延时的方法与PTP协议不同,子节点记录同步报文的发送时间和应答报文的接收时间,计算出2个时间的间隔,如下式的Ts2~Ts1,然后减去主节点的包处理时间,如下式的Tm1~Tm2,把网络当成对称网络,再除以2就得出从时钟与主时钟的延迟时间。即
偏移和延时都已经计算出来,子节点再调整时间Tb,从而达到主从时钟的同步。调整时间的公式
Tb=Tb-Offset+Delay (3)
2 时间同步的实现
ZigBee适用于开放和互操作的设备,标准从物理层开始定义。但是目前一般物理层和MAC层采用IEEE 802.15.4标准,网络层、安全层和应用层由ZigBee联盟开发,ZigBee协议的构架如图4所示。
2.1 本地时钟设计
我们采用的硬件是意法半导体(ST)公司最新推出的一个完全集成的系统芯片(SoC)STM32W108。它集成了32位ARM Cortex—M3微处理器、符合IEEE 802.15.4标准的2.4 G的收发器、1 28 KB的flash、8 KB的RAM以及各种通用外设。
STM32W108的定时器示意图如图5所示。
具体实现有以下几个步骤:
(1)通过TIM2_CR1,设置边缘对齐,向上计数模式,TIM2_ARR不使用缓冲;
(2)选择定时器时钟clock(本课内部时钟Fpclk=12 MHz);
(3)没置预分频值TIM2_PSC,给TIM2_PSC赋值0,不分频;
(4)装载TIM2_ARR和TIM2_CCR2,计数器清0;
(5)软件产生事件更新,重新装载TIM2_ARR;
(6)将GPIOA的引脚3定义为复用推挽输出,用timer2的通道2(映射到引脚PA3)作为输出比较;
(7)TIM2_CCR2和TIM2_CNT匹配时,翻转OC2REF信号;
(8)设置定时器中断方式,使能timer2的全局中断,开始计数。
(9)产生中断后,进入中断服务函数。
在中断服务函数里,使软件变量counter++,通过判断counter是否等于1000000;如果条件满足,UTC时间加1,counter和TIM2_CNT清0,清除timer2的所有中断标志。
我们将程序下载到芯片中,将数字示波器的探头连接到定时器的比较输出管脚PA3,经过实验的到本地时钟的情况如下图所示:
通过定时器和从网关获取UTC时间,可确保主节点有一个绝对时间,由于不能从节点获取UTC时间,所以从节点可能只有一个微秒级的相对时间。这就要求每次从节点定时唤醒后首要任务就是校时,确保其和它的父节点时间同步上。整个网络在最终对采集到的数据进行融合时不出现错误或误差减少。
2.2 时间同步协议的实现
在确保了每个节点都有了高精度的本地时间后,就可以进行时间同步协议的实现,使整个网络中各个节点的时间误差在一定允许范围内,时间同步协议的实现是建立在网络正常通信的前提下,具体是在应用层完成的,底层为用户提供的一个8 bit的接口,可以将要发送和接收的数据通过8 bit的接口来与网络层通信。发送数据的长度由安全层是否使用安全认证来决定。
时间同步主要依靠节点之间的通信,每次校时都是从节点发起的。首先,从节点向主节点发送同步命令,其次,主节点将自己收到同步命令的时间和响应从节点的发送时间通过单播方式传回给从节点,从节点依靠自身的两个本地时间(发送同步命令时间和接收到主节点响应的时间)以及接收到主节点的两个时间,可以汁算获取到通信延迟Delay和主从节点的偏差Offset,通过这两个量从节点就可以自行调整自己的时间,已达到与主节点的时间同步。
主节点主要是在形成网络后,监听信道,等待从节点的校时同步命令,再将收到同步命令和发送响应的两个时间发送个从节点。从节点主要是在加入网络成功之后,向其父节点发送同步命令(发送前记录发送时间),监听信道,有数据就记录时间,在判断是不是同步命令的响应。如果是就通过时间同步算法进行计算Delay和Offset,在获取从节点的当前时间,通过调整时间公式进行调整自身时间。
主从节点的具体流程如图6和图7所示。
将程序下载后,将两个节点的定时器的比较输出管脚PA3连接到示波器的CH1、CH2上,就会获得未校时前的情况,两个时钟没有重合在一起。等待一会,就回出现校时后的结果,两个时钟重合在一起。具体实验验证两个节点的时间同步情况如图8所示。
3 结束语
ZigBee具有超强的生命力和优势,应用前景好,值得广大嵌入式应用的技术人员关注,并加入到它的应用行列。时间同步技术的研究是ZigBee无线传感器网络在实际应用中最需要关注的一个关键技术。