基于GPSD的高精度校时系统
天文观测设备对于控制系统的时间准确度有严格要求。为此,采用搭建高精度NTP服务器的方法实现系统校时。基本思路是从NMEA018 3数据中提取时间信息,通过PPS信号来保证高精度。具体实现方法是采用GPS接收模块G591来构造硬件电路,软件部分需要NTP服务器软件和GPSD的正确安装和配置。对照实验表明,基于GPSD的NTP服务器校时精度可以达到微秒量级,工作性能稳定而可靠。
0 引言
准确的时间是天文观测所必需的。天文望远镜在特定时间内的准确指向、CCD曝光时间的控制以及不同波段观测数据所进行的高精度同步比对等应用需要系统至少有亚毫秒的时间准确度。然而就目前来看,一般的计算机和嵌入式设备所使用的晶体振荡器的精度为几个或者几十个ppm(百万分之一秒),并且会受温度漂移的影响,使得每天的误差能够达到秒级,若再考虑元器件的老化或外界干扰等因素,误差可能会超过10 s,如果不及时校正,其误差积累将不可忽视。
网络时间协议NTP(Network Time Protocol)是美国特拉华大学的MILLS David L.教授在1982年提出的,其设计目的是利用互联网资源传递统一和标准的时间。目前,使用GPS信号实现校时的研究工作很多,大多只是通过读取GPS模块解码出的串行数据,提取其中的时间信息来纠正系统时钟,该过程并不涉及NTP的使用,精度较低,一般为几十到几百毫秒。对此,本文充分利用了NTP服务器软件对GPS时钟源的支持,采用串行数据和秒脉冲相结合的方式来校准时间,校时精度大为提高。
1 GPS同步时钟的校时方式
1.1 GPS介绍
GPS(Global Positioning System,全球定位系统)是20世纪70年代美国研制的新一代卫星导航、授时、定位系统。24颗专用的GPS卫星上都各自带有原子钟,能够全天候向地面广播精确的UTC标准时间。在许多通用GPS解码芯片解码出的数据流中,除了有位置信息,还包含时间信息(年月日时分秒)和PPS(Pulseper Second,秒脉冲信号),PPS标识了时间信息的起点,其精确度可以到微秒量级。
1.2 校时方式介绍
NTP是用来使计算机时间同步化的一种协议,其同步时钟源不仅仅局限于网络的时间服务器,还包括时钟设备,如石英钟,原子钟,GPS接收器等。NTP服务器软件将这些时钟源抽象成相应的数据结构,对应于不同的内存地址,通过读取该地址中的信息,进行统计学算法的处理来同步计算机的时钟。
使用GPS作为同步时钟源的校时方案主要有三种:脉冲同步方式、串行同步方式和综合方式。本文采用的GPSD校时方案是综合方式。三种方式的对照如表1所示。
1.3 基于GPSD的综合校时
GPSD(GPS Daemon)是一个守护进程软件,用来处理GPS接收单元解码出的数据。基于GPSD综合校时的具体过程如图1所示。GPS天线接收GPS信号,传递给G591芯片进行解码,每秒输出NMEA0183协议格式的数据和PPS信号,MAX 232完成电平转换之后,分别经由串口的RXD和DCD端传递给计算机;GPSD软件经过处理,将准确的时间信息写到特定内存段中;NTP服务器软件通过共享内存的方式读取该地址段中的时间信息,进而完成校正系统时钟的工作。
基于GPSD综合校时方案是一种优势互补的校时方式。这种方式继承了NMEA串行校时方式可以获取时间信息的优势,同时利用了PPS脉冲校时延时估计误差小、精度高的特点,是一种简便有效的校时方案。
2 系统设计实现
2.1 硬件平台
GPSD综合校时方案需要的硬件设备分为三个部分:GPS天线、GPS接收器和与GPS接收器连接的计算机,其相应的功能和应用如下:
(1)GPS天线用于接收GPS信号。本文采用的是磁吸式GPS天线,使用时要水平放置,最好置于开阔地,如天窗、窗台、阳台等;
(2)GPS接收器由电源、GPS接收和电平转换三个模块构成如图2所示。GPS接收模块采用JRC(Japan Radio Company)设计的G591芯片,该芯片支持多达210 PRN通道,输出数据为NMEA0183协议的串行数据,波特率为9 600 b/s,适用于各种相关开发。在本设计中,G591主要用来获取时间信息和PPS信号,不涉及定位导航;电源模块采用的是AMS(Advanced Monolithie Systems)设计的AMS1117-3.3芯片,该芯片输出电压为3.3 V,最大输出电流为1 A,用来给G591和MAX232供电;电平转换模块主要采用MAXIM公司设计的MAX232芯片,该芯片负责把G591输出的CMOS电平转换成RS 232电平,供串口读取。
(3)计算机设备用于处理GPS数据,要求支持串口和网口等设备,以实现GPS数据接收和校时输出。
硬件平台搭建好了之后,本文对PPS信号和NMEA0183串行数据进行了相应的调试。对PPS信号的调试采用的是硬件方式,使用示波器来观察GPS接收器是否有秒脉冲信号输出,若天线和接收器工作正常,会检测到PPS端有脉宽为100 ms的秒脉冲输出;对NMEA数据的调试采用的是软件方式,使用Windows操作系统自带的超级终端或Linux操作系统的minicom等工具来读取串口,检测数据是否正常,正确的输出结果是NME A0183串行数据。
若由于天线或气象原因,G591模块没有接收到信号,则不会产生PPS信号,同时NMEA0183语句中的GPRMC语句的标志位也会变成无效。
2.2 软件平台
2.2.1 安装过程
本文使用的是Ubuntu 11.04操作系统,内核版本是2.6.38;需要的软件包有setserial,gpsd,gpsd-cli-ents,python-gps,ntp。在终端中使用Ubuntu自带的apt-get命令安装这些软件包,然后分别作出相应的设置:
(1)setserial的版本是2.17,该软件是用来对串口进行相应的设置。为了能够让串口识别PPS信号,要对setserial的配置文件修改。在autoserial.conf中对接收GPS数据的串口添加low_latency关键字。
(2)gpsd的版本是2.95。安装完成后,使用dpkgreconfigure命令要对gpsd重新进行配置,使其能够开机自动运行,读取串口数据。此外gpsd的调试方法也十分简便。如果放在后台执行,可以通过系统日志文件查看其工作状况;gpsd也可以在前台运行,通过进入调试模式来检查时间信息和PPS信号的捕获情况,详见gpsd的使用说明。
(3)ntp的版本是4.2.6。安装完成后,要对NTP的配置文件ntp.conf进行修改。NTP服务器的正确配置决定了最终的时间同步结果。本设计选用的时间服务器只有GPS时钟源,具体配置如下: