开始之前
我们需要准备一些工具包括,GPS接收机天线、GPS接收机(我用的是ublox)和Raspberry Pi 2。由于ublox可以输出高精度的授时信号(PPS和ZDA),我们主要配置树莓派作为NTP服务器,同时可以接收ublox输出的高精度授时信号来校正自身的时间,以达到提高授时精度的目的。
硬件连接
将接收机天线放置户外,方向朝向西南方,注意不要上其它物体遮挡天线;接收机和天线连接;接收机的PPS信号连接到树莓派的18管脚,接收机的串口与树莓派的串口连接(注意电平);最后将树莓派的网口通过网线和路由器或交换机连接使其可以访问到互联网,同时也要确认可以被你的主机访问。
配置和更新Raspberry Pi 2
配置串口
首先需要禁止掉串口终端功能,输入如下命令:
sudo raspi-config
出现下图中的配置窗口:
这里选择
9 Advanced Options
回车,然后出现下图所示的界面:
这里选择
A8 Serial
回车,然后选择Disable选项,最后需要重启。
之后我们需要更新Raspberry Pi 2:
sudo apt-get update
sudo apt-get dist-upgrade
sudo rpi-update
sudo reboot
安装minicom
sudo apt-get install minicom
配置/dev/ttyAMA0串口波特率为9600
minicom -b 9600 -o -D /dev/ttyAMA0
测试串口
在终端输入如下命令:
cat /dev/ttyAMA0
串口有类似信息输出说明串口可正常使用:
$GPGSA,A,3,02,04,12,25,24,05,10,,,,,,02.4,01.1,02.1*07
$GPGLL,2834.2631,N,07720.5426,E,102954.00,A,A*6E
$GPGSV,3,1,07,02,71,345,50,04,40,038,48,12,62,315,47,25,20,321,45*7F
$GPGSV,3,2,07,05,41,167,23,10,48,086,23,24,24,236,30,,,,*48
$GPGSV,3,3,07,,,,,,,,,,,,,,,,*7E
在Raspberry Pi 2上安装PPS
安装PPS-tools
在网络终端输入如下命令:
sudo apt-get install pps-tools
sudo apt-get install libcap-dev
sudo apt-get install libssl-dev(可选)
sudo dpkg-reconfigure tzdata(可选)
配置相关文件
在终端输入如下命令:
sudo vim /boot/config.txt
在文件的最后加入如下内容保存退出
dtoverlay=pps-gpio,gpiopin=18
如下图所示:
在终端输入如下命令:
sudo vim /etc/modules
在文件的最后加入如下内容保存并退出
pps-gpio
如下图所示:
配置完成后需要重新启动树莓派。
验证PPS是否工作
我们需要用lsmod 命令去检验PPS模块是否被加载了:
lsmod | grep pps
如果正常加载应输出如下类似信息:
pps_gpio 2555 0
pps_core 7092 1 pps_gpio
使用dmesg 命令检查PPS GPIO是否被配置:
dmesg | grep pps
应当输出类似下图所示的信息:
使用ppstest 命令检查pps模块是否工作:
sudo ppstest /dev/pps0
应当输出类似下图所示信息:
(按 CTRL+C 退出)
在Raspberry Pi 2上安装NTP
安装NTP
在终端输入下面的命令,来下载、编译、安装NTP:
wget http://archive.ntp.org/ntp4/ntp-4.2/ntp-4.2.8p3.tar.gz
tar zxvf ntp-4.2.8p3.tar.gz
cd ntp-4.2.8p3
./configure --enable-linuxcaps
make
sudo make install
sudo service ntp stop
sudo cp /usr/local/bin/ntp* /usr/bin/
sudo cp /usr/local/sbin/ntp* /usr/sbin/
配置NTP
使用如下命令编辑ntp.conf文件:
sudo vim /etc/ntp.conf
在文件的服务器列表后增加对GPS和PPS的支持,增加的内容如下:
# NMEA refclock driver directly from serial port
server 127.127.20.1 mode 24 minpoll 4 iburst prefer true
fudge 127.127.20.1 flag1 1 flag2 0 flag3 0 flag4 0 time1 0.00 refid GPS
# ATOM PPS driver directly from interrupt through /dev/pps1
server 127.127.22.1 minpoll 4 maxpoll 4 iburst true
fudge 127.127.22.1 flag2 0 flag3 0 flag4 1 time1 0.0 refid PPS
保存退出即可。
以上内容的参数说明可参考NTP源码目录下的帮助文档:
- ntp-4.2.6p5/html/drivers/driver20.html
- ntp-4.2.6p5/html/drivers/driver22.html
在Raspberry Pi 2运行NTP
在运行NTP之前我们还需要创建两个软连接以是NTP软件能够识别我们的PPS信号和ZDA信号,并处理它们。使用如下命令创建软连接:
ln -s /dev/ttyAMA0 /dev/gps1
ln -s /dev/pps0 /dev/gpspps1
我们的软连接命令应符合/dev/gpsX这样的格式,其中的X应与上面的127.127.20.X中的X相匹配,同样/dev/gpsppsX中的X应与上面的127.127.22.X相匹配。(X = 0,1,2……)
从新启动NTP:
service ntp restart
然后使用如下命令检查ntpd是否在用GPS NMEA和PPS工作:
watch ntpq -p
应当会输出类似如下的信息:
remote refid st t when poll reach delay offset jitter
==============================================================================
-120-88-47-10.in 103.1.106.69 2 u 43 64 377 51.624 537.091 1.517
+27.114.150.13 130.133.1.10 2 u 36 64 377 222.386 481.023 0.583
+77.235.14.49 131.188.3.220 2 u 41 64 377 284.982 510.672 1.408
*GPS_NMEA(1) .GPS. 0 l 10 16 377 0.000 1.996 0.204
oPPS(1) .PPS. 0 l 9 16 377 0.000 -469.94 0.191