摘要:基于一种树型网络和星型网络相结合的混合型网络结构,采用即时同步技术和时钟自校准技术,以很低的同步代价,实现了同步周期的扩展。在周围环境不变的情况下,扩展了近100倍,为采用低成本石英晶体振荡器的网络节点间的同步需求提供了一种高效的方法。
关键词:同步;自校准;无线传感器网络;Si1000
引言
目前,无线传感器网络时间同步技术的研究重点已经从单跳网络发展到多跳网络。现有的多跳时间同步算法充分体现了同步功耗和同步精度以及同步周期间的折衷,本文着重解决的问题就是在不显著增加同步功耗的前提下扩展同步周期,本文的硬件平台为Silicon Labs公司的Si1000无线MCU芯片。
1 网络拓扑结构
无线传感器网络的拓扑结构主要有星型网、树型网和网状网,本文以应用较多的星型网和树型网结合的多级网络结构为例进行同步过程的设计。
一个典型的网络结构如图1所示。网络中的节点可以分为根节点、树枝节点和树叶节点3种类型。其中,最上端的0-0为根节点,网络中间的如0-1、0-2、5-8等为树枝节点,网络末端的1-3、4-7等为树叶节点。每两个相连接的节点互称为父子节点,如0-1和1-4互为父子节点。其中0-1是1-4的父节点,1-4是0-1的子节点,而1-4是4-7的父节点,4-7是1-4的子节点。在对节点编址时,每一个节点都有两个地址信息,其中低位地址表示本节点在网络中的唯一的ID号,高位地址表示该节点的父节点在网络中的ID号。这种表示方式的优势在于,每个节点只跟自己的父节点和子节点通信,不与其他节点交互信息,即使收到其他节点的数据包,也会当作无效数据丢掉。这样,每个节点的程序相对简单,网络的层数可以不受限制,网络层数和网络内节点数的增加,不会导致每个节点的程序复杂度的增加。
一般情况下,在网络中,根节点为网关节点,树叶节点和树枝节点均为簇头,每个簇头在为其他簇头作数据转发的同时,均可以接收传感器节点的数据。簇头的数量由ID号的位数决定,如果用一个字节来表示ID号,则网络中簇头的最大数量为255个。
根据传感器节点与簇头节点的紧密程度,可以将传感器节点划分为若干个区域,每个区域设置一个簇头,簇头与采集节点之间采用星型网连接。
2 即时同步技术
在无线传感器网络刚建立时,由于某些原因导致节点间的同步状态丢失时,需要进行时钟同步的“初始化”,采用即时同步的方式进行。
即时同步技术是星型网络结构中一种高效的同步技术,同步以网关节点为起点,并由近及远的同步树型网络结构中的各簇头节点,之后簇头节点再分别同步各自的传感器节点。
下面以簇头同步传感器节点为例说明同步过程,同步的时序如图2所示。
一般情况下,传感器节点在刚上电或复位之后,处于低功耗模式,实验时,以5 s为一个周期,即节点睡眠状态4 995 ms,接收状态5 ms,如果没有有效数据。则继续转入睡眠状态,如此循环下去。5 ms称为数据侦听窗口。由于节点的个体差异、晶振的漂移等因素的影响,经过一段时间后,各个节点的数据接收窗口的起始时间差距就比较大了。如果簇头要让所有的传感器节点都收到同步命令,必须连续发送5 s。这个同步命令包括了簇头的低位地址和一个不断累加的序列号,共3个字节。若以115.2 kbps的速率传输,发送一个同步命令需1.72 ms,连续不断地发送,从1开始,每发送一次,序列号加1。这样,序列号本身就携带着时间信息。在实际编程中,共发送2907次,约为5s。
簇头连续发送5 s同步序列后,转入低功耗模式,5 s结束时的时间点称为同步时间点,即图中的10 s点的位置。如图2所示,所有的传感器节点在数据接收窗口内都至少能收到一条完整的唤醒命令。以收到的第一条完整的同步命令为有效命令,根据序列号,节点能够判断自己在时间轴上所处的位置,经过计算后,得到自己距同步时间点的时长t。可以看到,经过5 s的持续同步后,所有传感器节点均可以同步到同步时间点。
传感器节点的同步流程图如图3所示。
网关节点同步簇头节点的时序与传感器节点类似,只是将通信速率降低到4 800 bps,相对应的簇头的侦听窗口为50 ms,睡眠4 950 ms,网关发送的同步命令字为本地ID+末端簇头ID+一个不断累加的序列号,共3个字节。以4 800 bps的波特率发送,每个同步命令需要22 ms,实际编程中,共发送227次,约为5 s。经过即时同步后,网络中的各个节点均被同步到网关节点的时钟上。
3 时钟自校准技术
3.1 理论分析
理想情况下,标称值相同的晶振应该有相同的振荡频率,但是实际并非如此。晶振在标定频率之外还有一个参数,称之为精度,单位是ppm,即每百万次中的误差次数。一颗标定为32.768 kHz,20 ppm的晶振,意味着每振荡一百万次,会偏差20次,正负都有可能。在本实验系统中,采用的是32.768 kHz,20 ppm的晶振。
如果第N级节点和第N+1级节点所采用的两颗晶振的偏差方向相反,则10 min后两级节点的时钟偏差至多为2×12=24 ms。
时钟偏差临界点时刻示意图如图4所示。
这里选择10 min作为本算法的补偿周期是由物理层的具体特性决定的。在低功耗模式中,簇头的侦听窗口为50 ms,被上层节点唤醒的通信波特率是4.8 kbps。经过试验得出:物理层发送一个有效载荷为3个字节的同步命令帧所需的时间约为22 ms。
即使10 min后的同步偏差达到24 ms,第N层节点和第N+1层节点仍然有50-24=26 ms的侦测窗口重叠期。如果第N层节点以两个命令帧的密度向第N+1层节点发送同步指令,底层节点仍有机会捕获到其中一个命令帧,因为26 ms>22 ms。以上均属临界时间状态,如果两级节点的晶振偏差方向相同,则捕获到上层同步指令的几率还会增加。
要想保证两级节点的可靠同步,必须在10 min内执行一次同步算法,否则低层节点将偏离出高层节点的发送窗口,即高层发送的命令,低层节点将不会收到。
将第N+1层节点的时钟同步到第N层节点并实现自校正的步骤如下:
①由第N层节点发起同步。首先第N层节点利用即时同步技术将低层(N+1)节点的时钟同步到同步时间点t0,同时第N层节点将t0作为自身时间的零时初始时刻。
②t0+600 s后,第N层节点向第N+1层节点发送两个时间校验命令帧,帧格式如下所示。
③第N+1层节点判断收到的时间校验命令帧的序号(第一个字节)和第N层节点的时间tN(后两个字节)。
④计算出第N+1层节点的本地时钟tN+1与tN的差值△t。
⑤将△t作为一个常数,每隔10 min补偿到tN+1中一次。
3.2 软件流程
两层节点以第N层和第N+1层节点为例说明软件的流程。第N层节点的流程图如图5所示。
由于所有节点在上电后处于低功耗模式,且各层节点不同步,所以需要初始第一次同步动作。第N层簇头连续发送“本地ID+时间序列”同步帧,利用即时同步技术,将两层节点同步到“零时”。
Sync是一个unsigned char型变量,可以追踪时间的增长。在实际中,采用芯片内部的RTC进行计时,Sync的初始值为0,每发生一次RTC中断事件,Sync的值加1。RTC中断事件每5 s发生一次,所以当Sync=120时,意味着10min的补偿时刻到了。
在发送本地时钟时,为了保证第N+1层节点能可靠地收到时间校正信号,采用了两次发送同样内容的方法。两次发送帧中所带的时间信息完全相同,物理层完成两次发送的时间差是22 ms。帧头0x81和0x82用来帮助下层节点区分收到的是哪一次发送的时间校正信号。
第N+1层节点的软件流程图如图6所示。
当收到父节点ID帧头时,利用即时同步机制第一次将本节点和上一层节点初始同步。当收到0x81或者0x82帧头时,进行两层节点间的时钟校对:把本地时钟和上一层时钟的差值D_value保存,并把收到的上一层参考时钟写入本地RTC的CAPTUREn寄存器中。
本层节点每600 s进行一次晶振偏移补偿:将本地时钟减去D_value,然后写入RTC寄存器,完成校对。
由于传感器节点的侦听窗口为5 ms,若同样采用精度为20 ppm的晶振,经过计算,需要在第1 min的时候进行时钟校验,否则就会超出侦听窗口。
4 实验结果
实验采用两块基于Si1000芯片的节点电路板,其中一块作为第N层节点,另一块作为第N+1层节点。
在两级节点的软件中加入测试信号输出:每过5 s,RTC中断事件会把MCU唤醒,同时会在MCU的一个端口输出一个低电平脉冲。将脉冲信号输入到示波器的两个输入通道中,记录波形。
将示波器的时域解析度放大至5μs,会发现在初始的即时同步后,两个节点之间存在绝对误差e=5.4μs,如图7所示。如果不加以干预,两节点的时钟偏差会逐步扩大,最终导致网络的不同步。
数据采集的方法是,将这对节点每隔3 min测量一次脉冲的时间差△t,连续记录一个小时,将结果保存到表1中(两节点每10 min误差17 ms)。
对比试验:将上述两节点软件中的自校正机制移除,即仅用即时同步机制初始同步一次,其后的晶振偏移不再校正。每隔3 min记录一次△t,将结果保存到表1中。
用MATLAB绘制两种同步方式的对比曲线如图8所示。
由实验结果可以看到,仅仅做了一次即时同步的一对节点,它们的时钟偏差在不断扩大,其呈现线性特征,每10 min的时钟偏差约为17 ms。
采用了自校正技术的同步算法的一对节点,具有本地晶振振荡偏差自动补偿机制。每隔10 min,它们之间的偏差就会被校正。节点间的同步有效时间显著延长。在实际测试中,经过16个小时的实验后观测,仍能达到理想的同步效果。
5 结论
本文基于Si1000芯片平台,实现了一种将无线传感器网络节点的同步周期进行扩展的方法,利用即时同步技术进行节点间同步的初始化,随后每间隔一段时间,节点主动校准自己的时钟,从而实现了在没有显著增加能量消耗的前提下,扩展同步周期,提高同步精度。