张 新, 张 怀, 蒋 励
(1.西安邮电大学 电子工程学院, 陕西 西安 710121; 2.西安邮电大学 通信与信息工程学院, 陕西 西安 710121)
无人船舰[1]是一种新型的搭载平台,依托船舶,可装载定位、导航以及控制设备。通过短距离无线传感网络[2],可使无线电波与其他系统进行短距离无线通信,扩大工作范围,实现无人船舰上的数据交互[3]。同时,搭载多种海洋传感器,监测各类数据[4],实现岸基对无人船舰自身参数的获取,以及在远洋上对其工作范围内的海洋环境、水面情况进行监测,完成各种海洋任务[5-6]。
短距离无线传感网络是由大量部署在监测区域中具有感知、通信和处理能力的传感器节点以自组织方式构成的网络。时钟同步技术作为无线传感网络中重要支撑技术,可为网络中各个节点的本地时钟提供统一的时间标尺[7]。但在无线传感网络中,节点晶振受温度、湿度、工程误差等因素的影响,会产生传输延迟,导致各节点本地时钟之间存在一定偏差。
目前,时钟同步主要是基于IEEE 1588协议[8]实现的。IEEE 1588协议是网络测量和控制系统的精密时钟同步协议的标准[9]。该协议通过软件和硬件,将网络设备的内时钟与主控机的主时钟实现同步,适用于大多数测控系统中[10-11]。而无人船舰数据传输系统属于短距离的物联网设备,其并不满足无人船舰对数据传输的要求。因此,本文建立基于nRF24L01的无人船舰数据传输系统。利用发送端和接收端nRF24L01芯片中的数据帧,判断接收端与发送端的时钟是否同步。根据基于令牌环的时钟同步协议,将通信时间片段化,再将每个时间片划分为100个时隙,在每个时间片开始的前三个时隙里,主时钟将时间戳信息以数据帧的方法发送给多个从时钟。从时钟按照收到的时间戳信息校准自身的时钟,最终实现发送端和接受端的时钟同步。
无人船舰无线数据传输系统是由数据发送端、无线信道和数据接收端组成,结构示意图如图1所示。数据发送端主要处理来自传感器采集到的数据并将这些数据传输到数据接收端;数据接收端主要控制各个数据采集模块之间的协调及对收到数据的处理,将处理后的数据上传到PC机上进行后期处理。
图1 无人船通信系统结构
在数据发送端中,微控制器(micro controller unit,MCU)均采用Cortex-M3系列中的STM32F103VET6芯片;通信模块的射频芯片均采用nRF24L01芯片。MCU通过串行外设接口(serial peripheral interface,SPI)总线与nRF24L01进行通信,通信速率最高可达10 Mb/s,数据发送传输率最快可达2 Mb/s。nRF24L01芯片内部具有自动应答和自动重发两个功能,通过SPI口对nRF24L01的寄存器进行配置,决定是否开启自动应答和自动重发。在自动应答模式下,nRF24L01收到有效的数据包后,系统将进入发送模式并发送自动应答信号,发送完自动应答信号后,系统进入正常工作模式[12]。
1.2.1 nRF24L01芯片
nRF24L01芯片[13]是工作在2.4~2.5 GHz世界通用频段的单片无线收发器芯片,利用其内置的频率合成器、功率放大器、晶体振荡器和调制器等功能模块实现无线数据的传输,同时其内部集成Enhanced Shock Burst协议,可以实现点对点或是点对多点的无线通信[14]。nRF24L01引脚封装如图2所示。
图2 nRF24L01 引脚封装
1.2.2 硬件接口电路
NRF24L01通过SPI接口与外部STM32F103微处理器进行数据交换,芯片使能引脚作为芯片的使能端,与STM32F103微处理器的PC2引脚相连[16];片选引脚与MCU的PA4引脚相连;时钟信号引脚与MCU的PA5引脚相连;主出从入引脚与MCU的PA7引脚相连;主入从出引脚与MCU的PA6引脚相连,中断请求引脚与MCU的外部中断3相连,当nRF24L01产生中断后中引脚将置低,MCU检测到此中断后通过程序得知其与nRF24L01无线射频模块的数据收发情况。通过MCU与无线通信模块的硬件连接,从而实现模式控制和数据交换。发送端和接收端的硬件接口设计如图3所示。
图3 MCU与nRF24L01硬件接线
1.3.1 数据发送端
数据发送端控制传感器进行数据的采集,并将采集到的数据通过无线的方式发送到数据接收端。在发送端对传感器采集到的每帧数据进行编号,然后将这些编号装入数据帧中和采集到数据一起发送出去。因此,在发送端可以通过查看帧序号判断发送数据的总帧数。
数据发送端每发送一帧数据,数据接收端收到这一帧数据后立刻给发送端一个应答信号,如图4所示。发送端可以根据实际发送的帧数和收到应答的帧数判断未收到应答的帧数,在接收端根据发送端发送的帧数和实际收到的帧数判断没有收到的帧数。
图4 单帧通信过程
1.3.2 数据接收端
数据接收端主要是协调各个数据采集模块之间传输数据的时间,以及处理采集到的数据,最后将处理的数据发送到PC机上做后期处理,或者发送到数据接收端的显示屏上进行实时观察。
接收端接收到发送端的数据以后,通过解析数据帧,从中提取传感器采集到的数据和相应的帧编号,就可以通过帧序号判断接收到的数据帧的总帧数,同时也可以统计出未收到帧数。
实际通信过程中,接收端给发送端的应答有可能因为信道的干扰丢失了,导致发送端没有收到应答的帧数大于接收端没有收到的帧数。
利用nRF24L01的自动应答功能判断发送端是否收到接收端的应答信号[17],再根据应答信号判断接收端是否接收到有效数据帧,如果没有收到应答信号,则表明接收端没有收到这一帧数据,那么在发送端就能统计接收端的丢失帧数,同时也统计出实际发送的帧数。在接收端可根据接收到的数据帧中的帧序号,判断实际收到的帧数和实际丢失的帧数。
设定工作时间为5 min,得到1 000组数据,按照每10次为一组进行统计,在同样的外界环境和系统设置下反复测试,结果如图5所示。
图5 校准前5 min内发送端与接收端帧数的差值
由图5可以看出,当通信时长为5 min时,发送端和接收端之间的数据帧编号相差12帧。如果按照每600 us发一帧数据计算,那么发送12帧数据就需要7 200 us,这刚好占了整个通信时间的24 PPM,超出了STM32F103 MCU的晶振的工程误差20 PPM。说明随着通信时间的增长,晶振的工程误差会进行累积,在整个测试的5 min内累积7 200 us,导致接收端比发送端的通信时间相差7 200 us,也就是说,随着通信时间的延长,接收端和发送端的时钟相差越来越大,这样就很难保证nRF24L01收发双方的时钟同步。
根据消息传递机制[18],可使控制网络中的时钟节点与接收端的时钟节点间保持同步。接收端的时钟节点为主时钟,其他时钟节点为从时钟。从时钟将记录的本地时钟t2与主时钟发送的时间戳t1作比较,再依据时间戳t1对从时钟进行校准。多个从时钟同时依据时间戳t1校准各自的本地时钟,最终使得整个通信网络达到时钟同步。
根据时钟同步原理,在发送端和接收端分别将时间按照50 ms分段,并将50 ms按照每500 us为一个时隙划,分为100个时隙。把100个时隙分为令牌帧段、数据段和备用段。
第1个时隙为0号时隙段,第2时隙为1号时隙段,依次类推,第100个时隙为99号时隙段。0号时隙段、1号时隙段和2号时隙段作为令牌帧段,用来发送令牌帧,告知每个从时钟,在当前的50 ms内时隙的分配方式以及当前时刻主时钟方的时间戳。每个从时钟从3号时隙段开始一直到98号时隙段,一共96个时隙作为传输数据的时隙段,99号时隙作为备用段,考虑以后留作它用。时隙分配模式如图6所示。
图6 50 ms信令周期时隙
在50 ms开始的前3个时隙,即帧序号分别为0x01、0x02和0x03作为信令帧,接收端以广播的形式,将当前的时隙分配模式信息及主时钟的时间戳作为1个数据帧,发送给各个发送端。信令帧的时间轴关系流如图7所示。
图7 信令帧的时间轴关系流
每50 ms进行一次时钟同步的矫正,使得通信系统达到时钟同步。发送端和接收端的工作流程分别如图8和图9所示。
图8 发送端工作流程
图9 接收端工作流程
基于令牌环的时钟同步协议具体实现步骤如下。
步骤1 发送端连续发送三帧无应答的载荷帧,接收端测试收到0x01、0x02和0x03的时间,即通信过程中的传输时延,分别为400 us、744 us和1 088 us。
步骤2 在接收端判断每个50 ms内收到的第一帧数据的帧序号。
步骤3 按照收到的第一帧数据的帧序号,给50 ms定时器当前计数值寄存器里面装步骤1中相应的值。
步骤4 从当前值开始计数至50 ms结束,此时,发送端与接收端时钟保持同步。
发送端和接收端50 ms计时开始时,MCU上的一个I/O口的电平进行反转。这样每50 ms相应的I/O口的电平就翻转一次,再用双踪示波器分别对发送端和接收端的I/O口电平进行观察。由于两边都是50 ms翻转一次,所以周期就是100 ms,可在示波器上观察到两个10 Hz的方波,波形如图10所示。
图10 示波器波形
由图10可以看出,示波器出现两个同频且同步的波形,其频率都是10 MHz。表明经过令牌环的时钟同步协议矫正后,发送端和接收端的时钟是严格同步的。
利用实际通信过程中的实验数据,验证基于令牌环的时钟同步协议的可行性。设定工作时间为5 min,得到1 000组数据,按照每10次为一组进行统计,在同样的外界环境和系统设置下反复测试,结果如图11所示。
由图11可以看出,经过令牌环的时钟同步协议矫准后,5 min 内发送的1 000帧数据中,发送端与接收端帧数的差值接近0,时钟误差始终保持在1 us以内。
图11 校准后5 min内发送端与接收端帧数的差值
建立了基于nRF24L01的无人船舰数据传输系统,利用nRF24L01芯片的自动应答功能找出了该系统收发双方时钟不同步的原因。基于令牌环的时钟同步协议,使得接收端和发送端时钟同步。实验结果表明,系统运行到稳态时,主时钟和从时钟之间的时间误差可精确到1 us以内。