A) ntp服务器简介
参考
- 百度百科
- http://chuansong.me/n/1453137833223(https://help.ubuntu.com/lts/serverguide/NTP.html)
- http://cn.linux.vbird.org/linux_server/0440ntp.php
- http://www.ntp.org/ntpfaq/NTP-s-config-adv.htm#S-CONFIG-ADV-PPS
NTP服务器【Network Time Protocol(NTP)】是用来使计算机时间同步化的一种协议,它可以使计算机对其服务器或时钟源(如石英钟,GPS等等)做同步化,它可以提供高精准度的时间校正(LAN上与标准间差小于1毫秒,WAN上几十毫秒),且可介由加密确认的方式来防止恶毒的协议攻击。时间按NTP服务器的等级传播。按照离外部UTC源的远近把所有服务器归入不同的Stratum(层)中。
NTP提供准确时间,首先要有准确的时间来源,这一时间应该是国际标准时间UTC。 NTP获得UTC的时间来源可以是原子钟、天文台、卫星,也可以从Internet上获取。这样就有了准确而可靠的时间源。时间按NTP服务器的等级传播。按照离外部UTC 源的远近将所有服务器归入不同的Stratum(层)中。Stratum-1在顶层,有外部UTC接入,而Stratum-2则从Stratum-1获取时间,Stratum-3从Stratum-2获取时间,以此类推,但Stratum层的总数限制在15以内。所有这些服务器在逻辑上形成阶梯式的架构相互连接,而Stratum-1的时间服务器是整个系统的基础。
B) GPS模块
目前在淘宝买高端版的UBLOX gps模块并不方便,原因在于国内为了扶持北斗系统采取了一定的禁售。目前gps比北斗的定位仍然比较优秀,而授时服务基本没有差距。
根据我们的需求,我们只需购买对应的国产的双模接受模块(GPS+北斗)
我们选择了淘宝上的UM220-III型芯片,模块照片如图:
我们使用上方的串口1进行设置和测试,相应的引脚分别是:
vcc_3, RXD1, TXD1, GND
带有短接帽的引脚连接的是pps信号和一颗led,在短接帽连接下,pps信号会驱动led一闪一闪。由于我们要使用pps,拔出短接帽,使用右边的pps信号来源口。
B.a) TTL和RS232电平
电平名称 | 输出L | 输出H | 输入L | 输入H |
---|---|---|---|---|
TTL | <0.8V | >2.4V | <1.2V | >2.0V |
RS232 | +3~+15V | -3~-15V | +3~+15V | -3~-15V |
CMOS | <0.1*Vcc | >0.9*Vcc | <0.3*Vcc | >0.7*Vcc |
B.b) GPS模块测试
按照淘宝说明在windows下连接测试可用
B.c) 模块配置
默认的波特率是9600, 主要完成3方面的配置:
- 关闭北斗频点,只使用GPS(由于后面的ntpd只识别GPS的NMEA语句,不支持扩展的北斗NMEA语句,故我们只使用GPS)
- 设置授时脉冲,周期为1000ms,脉冲长为100ms,脉冲上升沿与整秒对齐。只在授时有效时才输出授时脉冲(这一点暂时保留争议,看后续的使用)
- 设置动态模型为车载模式
C) Raspberry-Pi
参考:
https://www.raspberrypi.org/documentation/usage/gpio/README.md
使用的是Raspberry-Pi 3 model B。
其GPIO接口定义如下:
我们将要使用其中的串口15作为gps的NMEA语句接收端口,GPIO 18作为pps的接收端口。
raspberry pi的系统我们使用官方推荐raspbian,安装参考官方的安装说明
C.a) 连线
raspberry pi | gps model |
---|---|
3.3v | vcc_3 |
Ground | GND |
GPIO 15 | TXD1 |
GPIO 18 | pps |
C.b) 准备Raspberry-pi的串口
参考:
https://www.modmypi.com/blog/raspberry-pi-gps-hat-and-python
http://blog.youkuaiyun.com/qishi_blog/article/details/52843696
http://wengkai.github.io/ntpserver/ntpserver.html
http://www.satsignal.eu/ntp/Raspberry-Pi-NTP.html
C.b.a) 关闭串口登陆功能
关闭树莓派的串口登陆功能,使得树莓派可以使用GPIO 14和GPIO15作为串口通信。
进入系统后,进行配置:
sudo raspi-config
找到Serial
这一项,disable之