时钟同步是无线传感器网络的一项基础支撑技术,是无线传感器网络实现TDMA接入、协同休眠、能耗管理、通信调度、目标定位等技术的基础[1]。传统的时间同步协议,如NTP(Network Time Protocol)和GPS(Global Positioning System),已经非常成熟并得到广泛应用,但由于受到传感器节点能量、体积、硬件资源及成本的限制,传统的同步机制并不适合无线传感器网络。
近年来,依据不同的应用环境,出现了各种无线传感器网络的同步算法,如TinySync/MiniSync和RBS主要用于子网的同步,TPSN、DMTS、FTSP、HRTS和AD用于全网的同步[3]。各种同步算法中,有些侧重于提高同步精度,有些则侧重于减少同步过程中的开销,但都很难做到两者兼顾。
传感器网络时钟同步协议TPSN(Timing2sync Protocol for Sensor Network)采用双向通信,算法相对简单,同步精度较高,但算法未对节点间的时钟频差进行估计,因此需要频繁同步以保证精度,开销较大。
对于一个星型结构的无线传感器网络,网络结构简单,但子节点数量庞大,若采用TPSN协议,需要根节点对每一个子节点进行双向通信,且需要频繁的同步,整体开销较大。本文通过采用两种措施降低网络的同步开销:第一,根节点与某一子节点同步时采用广播方式,网络中的其他节点处于监听状态,获得同步信息,调整本地时钟[4];第二,节点同步后,通过计算根节点时钟和本地时钟的差值并分析其与同步过程周期之间的线性关系,以此为基础实现节点对本地时钟的自校正来维持本地时钟精度,以延长同步过程周期,降低同步开销[5]。
1TPSN同步
传感器网络时钟同步协议(TPSN)是基于层次模型的全网络同步协议,采用发送者/接收者同步机制,通过相邻层次节点之间对称的分组交互实现同步过程。协议的实现需要两个阶段[7]:层次发现阶段和同步阶段。网络层次确定后,由参考节点发起同步过程,根据level值划分的相邻层次节点之间同步后,向下延伸直至全网[6]。
星型网可以认为是只有0级和1级的无线传感器网络,网络结构简单,但子节点数量众多,如果采用传统的TPSN协议,需要交换大量同步信息。若采用广播方式,则会明显地降低同步开销。图1和图2说明了广播方式TPSN同步的过程。
图1TPSN协议在R和B间交换包信息图2广播方式TPSN同步过程
T1、T2、T3、T4分别是根节点R和子节点B发送、接收分组时间戳[7]。
设节点R和B的时钟偏差为δ,当时间戳打在MAC层时,可以认为R和B的分组交互具有对称性,所以可设传播延迟为d,则有:
由式(1)、(2)可得:
同步时,根节点随机从子节点表中选取一个子节点作为响应节点,并广播同步消息。如图1中,根节点R选取子节点B作为响应节点,所有接收到该同步消息的节点都用自己的本地时间记录消息的接收时间,但只有同步包中指定的子节点B返回应答消息。根节点R接收到应答消息后,用双向成对同步中计算节点时间偏移和传播延迟的方法(式(3)、(4)),计算出它和响应节点B之间时钟偏移δ,以及消息往返延迟d,这样指定响应节点B接收到同步消息的时间T2、根节点与之的时钟偏移δ以及传播延迟d,就构成了一个三元数据组。然后,根节点R再广播一个包含该三元组的消息。响应节点B接收到包含该三元组的消息后,根据时钟偏移δ以及传播延迟 d 调整自己的时间。 广播域内其他节点(如A和C)接收到该消息后,比较自己接收同步消息报的时间T′2 和相应节点的接收时间T2,可得到δ′=T2- T′2,最后矫正自己的时间为T=t +δ+δ′,t为节点的本地时间。
对于一个有n个子节点的星型网,若采用传统TPSN同步方式,需要2n个同步分组才能让所有子节点同步,而采用广播式TPSN同步方式,只需要3个同步分组就可以让所有子节点实现同步,网络的同步开销显著降低。
2本地时钟自校正
理想情况下,各节点时钟频率相同,同步一次之后稳定运行,不会产生累积偏差。
实际情况下,由于不同节点晶振频率(产生时钟的信号源) 的差异会造成同步后两节点实际时钟的漂移。通常所使用晶振为10~100 ppm,即1 s会产生10~100 μs的漂移。
由于晶振漂移的存在,在下一次同步前时钟偏差δ会随着同步周期的增大而增大,缩短同步周期可以提高平均同步精度,但势必会增加同步开销[89]。在无线传感器网络中,节点间通信占节点能耗的主要部分,即使节点处于侦听状态[10],能耗也远远高于休眠状态,所以频繁地分组交互不利于节约能耗。对此,采用一种在不缩短同步周期的前提下通过节点自身修正晶振频率漂移值来提高本地时钟实时精度的方法。
2.1自校正原理
节点内部时钟格式由时钟秒值T和RTC的计数值conts构成。节点使用频率为32768 Hz的晶振作为时钟源,RTC计数32768次为本地时钟的1 s,并产生一次中断,将时钟的秒值加1。时钟的最小单位(分辨率)就是RTC的conts值。时钟同步就是使节点间对应的秒值和RTC都相等,而晶振漂移造成不同节点计数器的计数间隔产生微小差异,使得节点本地时钟与参考时钟同步后,随着时间推移,本地时钟的计数值就会渐渐偏离参考时钟,使本已同步的时钟不再同步,直至下一次同步过程。
自校正的原理是在两次同步过程之间通过节点自身对计数器的调节来维持本地时钟精度。
2.2自校正的实现
节点利用 TPSN 协议同步后,得到一个同步周期内本地时钟和参考时钟的偏差值,即两个节点计数器 conts值的差值,记为δ,同步周期记为T,根据δ和T之间的线性关系,求出产生一个偏差的时间:
与时钟格式一样,T_diff也包含秒值和conts值,由于δ可能为正或负,为T_diff 增加一个符号项sign,sign为正代表本地时钟偏快。
利用MCU内部的实时时钟RTC实现本地时钟。将RTC的报警时钟设定为1s,则晶体每经过32768个周期,RTC报警一次,而由于晶振的漂移,对于参考时钟的1s,本地时钟的实际计数次数会偏离32768次。公式(5)已经得出产生1次的计数偏差经过时间 T_diff ,所以每经过T_diff的时间对本地时钟进行一次补偿即可完成自校正,一个同步周期内共补偿δ次,这样两次同步过程之间本地时钟产生的计数偏差将完全消除。
本地时钟的1 s由RTC决定,可以在每次补偿时刻来临时将RTC的值读出,并加1或减1,再写回RTC,即延长或缩短本地时钟一秒的时间长度来校准时钟。
根据前面得到的T_diff以及δ,可以计算出对 CCR进行调整的时刻t_sec,当这个时刻到来时根据 T_diff.sign的正负对CCR值做加一或减一处理 ,当计数器的conts值再次到达新的RTC设定值后,即完成了一次时钟补偿,每次补偿后复位RTC值并计算出下一次补偿的时刻t_sec,当完成δ次后,本同步周期的时钟补偿结束。第 n次调节的时刻计算公式如下:
3实验及结果分析
实验的硬件平台是微控制器C8051F920 + Si4432射频收发芯片,节点时钟采用标定频率为32768 Hz的晶振,网络由4个节点A、B、C和R组成,其中R为根节点。同步时,根节点R只固定的对A进行广播式TPSN同步。
由于采用广播式TPSN同步方式,只需3个分组包即可完成网络节点的同步,若采用传统TPSN方式则需6个分组包才能完成所有节点的同步过程,同步开销明显降低。
实验主要侧重于测试采用广播式TPSN和本地时钟自校正后根节点和子节点的同步精度。对4个节点时钟分别进行采样,采样周期为1 s,将A、B、C的采样值分别与R值做差处理,得到同步偏差曲线,分析、比较采用自校正方式前后同步偏差曲线的区别。
图3和图4是未采用自校正算法的同步偏差曲线,同步周期分别为5 s和20 s。从图中可以看出,每次同步后同步偏差会逐步增大,直至下一次同步;缩短同步周期,可以减小每次同步前的最大偏差;A、B、C三个节点中A的同步偏差比B、C的要小,说明采用广播式TPSN同步时,其他节点均参照目标节点A的信息进行同步,精度要略低,原因在于忽略了节点间传输延迟时间的差异。
图3周期为20 s时的同步偏差曲线
图4周期为5 s时的同步偏差曲线
图5是同步周期为20 s时,应用节点自校正算法后的偏差曲线。比较使用节点自校正算法前后的实验结果,可以看出,经过补偿,时钟偏差不再有明显漂移,趋于稳定状态。偏差主要分布在±80 μs以内,好于自校正前同步周期为5 s时的效果,并且已经分辨不出明显的同步时刻从而可以延长同步周期,降低同步开销。
图5自矫正后同步周期为20 s时的曲线
由于采用32768 Hz的晶振,节点的最小分辨时间为30.5 μs,由图5看到同步偏差基本上在±1个单位内。
由于实验系统的同步周期为20 s,在20 s内,如果由于温度、电磁波干扰等偶然因素造成节点间出现时间偏差,在20 s内是无法自恢复的。20 s后同步周期到来时,根节点R会再次发起一次同步,使得所有节点的时钟再次同步。
4结论
本文提出了一种适用于星型结构无线传感器网络的同步算法,针对星型网络结构的特点,采用广播式TPSN同步方式,同时在本地进行时钟偏差的自校正,在保证一定同步精度的基础上,显著降低了网络的同步开销,对延长节点生命周期具有重要意义。