基于北斗的嵌入式时间统一服务器的设计实现
2014-07-25吕晨阳
吕晨阳,王 建
(南京船舶雷达研究所,江苏 南京210003)
现代高技术战争需要高精度的时间同步。普通的独立时钟通过晶振提供信号,晶振的频率精度和稳定性都比较差,一般约为10-4~10-5,每天的累计误差可达十几秒,需要定期调整[1]。对于联网的主机,使用网络时间协议(NTP)对时,精度高、使用方便[1-2]。 但由于武器装备的特殊性,不方便接入互联网,同时很多装备需要进行机动,无法接入专用网络,为满足时间同步要求,可在系统内架设专用的时间同步服务器,为系统内的众多主机提供授时服务。时间同步服务器需要高精度的时钟源,导航卫星授时精度高、获取容易、易机动[3],满足授时要求。本文基于实际应用需求,构建以我国自主导航系统——北斗系统为源的时间统一服务器,能进行系统内主机的网络对时,同时还可提供IRIG-B码用于专用设备对时。
1 NTP和IRIG-B授时协议
网络时间协议 NTP(Network Time Protocol)是互联网普遍使用的时间同步协议,在全世界各地都分布有NTP服务器,对于联网的计算机可以通过NTP协议进行授时,授时精度对于广域网可以达到10 ms,对于局域网可以 达 到 250 μs[1]。
NTP协议使用时间戳来进行对时,对于Server/Client模式,设客户端发出请求的时间戳为T1,服务端接收到的时间戳为T2,服务端响应时间戳为T3,客户端接收到的时间戳为T4,设客户端与服务器之间的往返时间相同,则服务器与客户端的时间偏差θ=[(T2-T1)-(T4-T3)]/2,网络延迟σ=[(T2-T1)+(T4-T3)]/2。客户端通过时间偏差和网络延迟来调整本地时间。
IRIG-B简称B码,是IRIG串行码的一种,码元速率为100 pps,通过码元的宽度来区分0、1和参考标志。0、1的宽度分别为2 ms和5 ms,参考标志为 8 ms。B码发送时、分、秒、天和年,使用BCD码进行发送[4]。IRIG-B可以达到比较高的精度,参考文献[5-6]中采用GPS的1 pps信号进行同步的IRIG-B码发生器的前沿精度略微低于1 pps信号。
2 系统结构
图1 系统框图
系统框图如图1所示,主要包括北斗模块、ARM系统、CPLD和网络接口4个部分。北斗模块接收北斗卫星信号,输出1 pps和NMEA0183导航授时电文。网络接口进行NTP数据包的收发,同时也是系统的控制终端。IRIG-B发生器通过VHDL在CPLD内部实现,与ARM系统通过SPI总线相连,接收ARM系统提供的时钟信号,在1 pps信号的同步下生成B码。ARM系统是本系统的核心,运行Linux操作系统,在此基础上运行功能所需的应用程序,包括NTP对时程序和IRIG-B码发生器控制程序。
3 系统硬件设计
系统北斗模块选用UM220-T,该模块是和芯星通推出的一款专用于电信、电力、军事的高精度授时模块,具有GPS/BD2双模模式,输出兼容NMEA0183协议,在NMEA0183的基础上增加了北斗专用语句。其1PPS信号的标准差1σ=20 ns,满足本应用要求。
系统硬件设计部分主要包括原理图和PCB的设计。PCB设计的主要注意事项包括模拟、数字电源的隔离、差分线的等长和阻抗匹配。硬件实物图如图2所示。
4 软件设计
系统的主要功能需通过软件实现,软件设计内容主要包括 Linux系统移植、NTP服务器程序的移植、B码发生器控制应用程序的编写和IRIG-B码发生器的VHDL实现。
图2 系统硬件图
4.1 NTP服务器软件移植
ntp.org提供和维护一个开源的NTP程序,该源程序功能全面、运行稳定,得到了广泛的应用。上文中提到北斗模块采用兼容的NMEA0183协议,增加了北斗专用语句。原生NTP程序包不支持北斗专用语句,需对其源代码进行修改才能使用。
在Linux系统下从www.ntp.org下载源代码到本地工作目录,在工作目录下新建src目录,将源代码解压到src目录下,打开src/ntp-x.x.x/ntpd/refclock_nmea.c文件,将文件中的如下代码:
修改为:
NMEA0138协议通过每一行的头来区分该行数据。对NTP源程序修改以增加北斗专用语句头,"$GNRMC"、"$GNGGA"、"$GNGLL"、"$GNXXX" 表示现在是北斗/GPS 双模,"$BDRMC"、"$BDGGA"、"$BDGLL"、"$BDXXX"表示现在是北斗单模。对上述修改文件保存退出。在工作目录下新建编译脚本,命名为run,内容为:
保存退出。脚本指定编译器为arm-linux-gcc,用于ARM平台的交叉编译,同时打开NMEA接受支持,用于接收北斗模块信号。运行脚本,编译得到目标文件,包括3个文件夹bin、lib、share,把得到的文件拷贝至ARM文件系统相应的文件夹内。NTP服务器通过文件/etc/ntp.conf进行配置,配置文件通过 server:127:127:20.u 打开 NMEA0138作为时钟源,u是NMEA的参数设置,包括串口的波特率和使用NMEA的哪条语句作为时间码,具体配置参照参考文献[7]。
测试使用一台客户机进行,测试结果如图3所示,图中第1列为服务器列表,使用国际标准NTP服务器作为对比,其中GPS_NMEA(0)为本设计的嵌入式时间同步服务器,bogon为客户端本地时钟,图中加星号的为系统自动默认选择的服务器,从图中可以看出本服务器性能理想,满足授时需求。
图3 NTP服务器测试结果
4.2 IRIG-B码发生器设计
为满足系统内专用设备的需求,设计IRIG-B码发生器,把北斗时间码转换成IRIG-B码。IRIG-B码直接采用北斗模块的1 pps信号作为系统同步时钟,授时精度与北斗模块相同。
IRIG-B码发生器系统框图如图4所示,系统由100 MHz时钟输入作为本地时钟,通过内部分频模块产生100 Hz和1 kHz的频率信号,IRIG-B码时序如图5所示,其中码元速率为 1 pps,故分频产生100 Hz信号作为码元时钟,脉冲宽度分别为 8 ms、2 ms和 5 ms,分频产生1 kHz用于控制脉冲宽度。发生器通过SPI接口与ARM系统相连,接受ARM系统控制。
图4 IRIG-B码发生器框图
图5 IRIG-B协议图示
ARM系统通过NTP程序使本地时钟同步于北斗时钟,另一个进程运行IRIG-B码发生器控制程序,在1PPS信号同步下取得本地时钟,转换成IRIG-B码格式,通过SPI接口发送到CPLD内部,程序流程图如图6所示。
图6 IRIG-B码转换发送程序
图7 IRIG-B发生器测试结果
4.3 IRIG-B码实测结果
IRIG-B码发生器的测试结果如图7所示,从图中可以看出,B码输出严格同步于1 pps信号,时序符合IRIG-B码规范。
采用ARM+CPLD体系构建时间统一服务器,采用Linux和成熟稳定的开源程序,降低了系统的开发难度,提高了系统的可靠性,采用CPLD硬件实现IRIG-B码发生器,时序精度高,满足高精度IRIG-B码授时要求。目前本装置已应用到实际项目中。
[1]黄沛芳.基于NTP的高精度时钟同步系统实现[J].电子技术应用,2009,35(7):122-127.
[2]宋妍,朱爽.基于 NTP的网络时间服务系统的研究[J].计算机工程与应用,2003,39(36):147-149.
[3]王文瑜.基于北斗卫星的授时系统研制[D].北京:北京邮电大学,2008.
[4]Standard I.200-04-IRIG serial time code formats[S].Timing Committee.Telecommunications and Timing Group.Range Commanders Council,US Army White Sands Missile Range,NM.
[5]姚军.利用 GPS实现高精度 IRIG-B码的设计[J].遥测遥控,1997,18(2):33-37.
[6]高林,胡永辉,侯雷.基于 ARM+FPGA的 IRIG-B码产生器的研制[J].时间频率学报,2012,35(4):218-227.
[7]POGO,KELLY W.Generic NMEA GPS receiver[EB/OL].[2013-10-29].http://www.eecis.udel.edu/~mills/ntp/html/drivers/driver20.html.