此次所用到的设备有定位定向板卡进行搜星与发送数据,有时间同步板两个,一个给工控机和另一个时间同步板授时,一个给相机与激光雷达进行时间同步与硬触发。

图一
GPS时间同步原理
核心原理:基于信号传播时间的计算
GPS时间同步的核心原理是测量信号从GPS卫星传播到用户接收机所需的时间。卫星在特定时刻(由卫星上极其精确的原子钟标记)发射包含该时间戳的无线电信号。接收机记录下接收到该信号的本地时间。信号在真空中以光速$c$传播。因此,接收机与卫星之间的距离(称为伪距)可以通过计算信号传播时间$Delta t$乘以光速$c$来获得: $$ ext{距离} = c cdot Delta t $$ $$ Delta t = t_{ ext{接收}} – t_{ ext{发射}} $$
关键点:接收机时钟偏差
接收机的本地时钟通常不如卫星上的原子钟精确。因此,接收机记录下的接收时间$t_{ ext{接收}}$包含一个未知的时钟偏差$delta t$。这个偏差是接收机时间相对于GPS系统时间的误差。因此,实际的传播时间测量值也包含了这个时钟偏差的影响。
四星定位与时间解算
为了确定用户的位置(三维坐标$x, y, z$)和接收机时钟偏差$delta t$,需要同时观测至少四颗卫星:
-
对每颗卫星i,我们有一个测量方程: $$ sqrt{(x – x_i)^2 + (y – y_i)^2 + (z – z_i)^2} = c cdot (t_{ ext{接收}i} – t{ ext{发射}_i} – delta t) $$ 其中:
- $(x, y, z)$ 是接收机的位置坐标(未知)。
- $(x_i, y_i, z_i)$ 是卫星$i$在信号发射时刻的位置坐标(由卫星播发的星历数据计算得到)。
- $t_{ ext{发射}_i}$ 是卫星$i$发射信号的时间(包含在信号中)。
- $t_{ ext{接收}_i}$ 是接收机记录的接收到卫星$i$信号的时间(包含时钟偏差)。
- $delta t$ 是接收机时钟相对于GPS系统时间的偏差(未知)。
- $c$ 是光速。
-
将上述方程整理为伪距观测方程: $$
ho_i = sqrt{(x – x_i)^2 + (y – y_i)^2 + (z – z_i)^2} + c cdot delta t $$ 这里$
ho_i = c cdot (t_{ ext{接收}i} – t{ ext{发射}_i})$称为伪距,因为它包含了接收机时钟偏差$delta t$的影响。 -
当观测到四颗或更多卫星时($i=1,2,3,4…$),就得到了一个包含四个未知数($x, y, z, delta t$)的方程组。通过求解这个方程组,不仅可以计算出接收机的三维位置$(x, y, z)$,同时也解算出了接收机时钟相对于GPS系统时间的偏差$delta t$。
时间同步实现
一旦求解出$delta t$,接收机就可以用这个值来校正它的本地时钟: $$ ext{GPS时间} = ext{接收机本地时间} – delta t $$ 这样,接收机的时钟就与GPS系统时间实现了同步。这种同步精度通常在几十纳秒到几百纳秒量级,具体取决于接收机的质量和观测条件。
附加校正
为了提高精度,实际应用中还会考虑各种误差源并进行校正:
- 电离层和对流层延迟: 信号穿过大气层时传播速度会减慢,需要进行模型校正或利用双频信号消除。
- 卫星时钟误差: 虽然卫星原子钟很精确,但仍有微小偏差,由地面控制系统监测并通过卫星信号播发给用户进行校正。
- 卫星轨道误差: 卫星的实际位置与播发的位置信息有微小差异,也由地面系统监测和播发校正。
- 相对论效应: 卫星高速运动和地球引力场差异导致卫星原子钟比地面钟略快,在系统设计时已预先补偿。
通过以上原理和过程,GPS接收机能够实现高精度的时间同步。
GPS时间同步步骤
通过板卡连接天线(俗称蘑菇头)进行搜星,配置板卡后进行数据输出。
通过给com1口输出gprmc与pps融合传输给时间同步板1来进行时间同步,再由时间同步板1通过内部系统将其转换成可供工控机识别的模式给工控机来授时,同时将同步是时间与pps转发给时间同步板2来进行时间同步,最后由时间同步板2将同步的时间发送给相机与激光雷达来进行时间同步与硬触发。
1. 高精度时间基准
通过接收GPS卫星的原子钟信号,时间同步板可为本地设备提供微秒级($mu s$)甚至纳秒级($ns$)的时间精度。例如:
- 卫星时间信号的误差范围通常小于$100$纳秒。
- 本地化处理后,时间同步误差可控制在$1 mu s$以内。
2. 频率同步
部分板卡内置恒温晶振(OCXO)或铷原子钟,利用GPS信号校准本地时钟频率,实现长期稳定性。例如:
- 普通晶振的频率漂移约为$10^{-6}$/天,而GPS校准后可达$10^{-12}$/天。
- 频率同步公式可简化为: $$f_{ ext{local}} = f_{ ext{GPS}} + Delta f_{ ext{补偿}}$$
3. 多系统协同
在分布式系统中(如通信基站、电力电网),时间同步板确保所有节点基于统一时间基准运行:
- 通信基站:保证时分多址(TDMA)的时隙对齐,避免信号冲突。
- 电网保护系统:故障录波数据的时标误差需小于$1 ms$,以便精准定位故障点。
4. 守时功能
当GPS信号丢失时,高端板卡可通过高稳时钟维持时间精度:
- 铷钟守时:24小时内时间偏差小于$100$纳秒。
- 普通晶振守时:1小时内偏差约$10$微秒。
5. 时间戳生成
为数据采集或事件记录提供精确时标:
- 网络数据包:记录$t_{ ext{发送}}$与$t_{ ext{接收}}$以计算延迟。
- 科学实验:同步多传感器数据,如: $$t_{ ext{事件}} = t_{ ext{GPS}} + t_{ ext{传输延迟}}$$
典型应用场景
技术实现核心
- GPS接收模块:解码卫星时间信号(如UTC格式)。
- 时间处理单元:将GPS时间转换为本地时钟信号。
- 输出接口:支持IRIG-B、PTP、NTP等协议。
了解了时间同步板后,我们就需要将时间同步板的时间转发给工控机,通过时间同步板的网口转发给工控机,让工控机去接收这个时间来进行自我授时。
ubuntu环境下,使用LinuxPtp开源软件对PTP时钟服务器的PTP授时协议接口、授时功能进行测试。
PTP时钟服务器通过网口提供高精度网络授时,遵循IEEE1588 v2标准,使用Ubuntu操作系统的工控机接入网络,在该工控机上运行LinuxPtp软件模拟PTP slave节点,通过配置多种PTP模式下,与PTP时钟服务器进行同步流程,验证PTP通信协议、PTP授时功能。
Linuxptp是Precision Time Protocol (IEEE1588v2)在Linux操作系统上的实现,该软件遵循GNU GPL授权协议,任何人都可以免费获取,并在Linux 内核3.0以上操作系统上安装和运行。该软件主要包含如下内容:
- ptp4l模块,该模块遵循对IEEE 1588v2标准协议,对PTP协议的Ordinary clock, Boundary clock等时钟“角色”的实现,实现与网络中其他PTP节点进行PTP通信交互、同步等。
- phc2sys模块,该实现PHC时间与系统时间相互同步。
其他就是一些调试和维测工具,如phc_ctl。
Linuxptp遵循GNU GPL授权协议,该开源软件在Linux操作系统平台上安装、运行需具备如下条件:
- Linux内核版本不得低于3.0;
- Linux操作系统平台已安装好最新的gcc编译器,用于编译Linuxptp软件;
- 运行PTP网卡需具备硬件时间戳特性。可以运行命令ethtool -T eth0(网口名),查看网口时间戳支持参数。
Linuxptp安装步骤如下:
- 浏览官网linuxptp download | SourceForge.net,下载3.1.1版本软件包,目前该版本具有极高的稳定性;
- 解压软件包,进入软件目录,执行Make命令,对软件进行编译;
编译成功后,可以使用LinuxPtp软件。
运行
LinuxPtp软件解压目录,使用root权限分别执行ptp4l、phc2sys命令,实现PTP同步。
其中,ptp4l用于实现网卡时钟与PTP网络其他节点时间同步功能;phc2sys用于实现网卡时钟与系统时间同步功能。
执行./ptp4l -h 查看命令参数定义,如下图所示,可配置延时机制(E2E/P2P)、报文格式(IEEE 802.3/UDP)、时间戳模式(硬件时间戳/软件时间戳)、配置文件(-f)、固定从模式(-s)、指定网卡(-i)等参数。
执行./phc2sys -h 查看命令参数定义,如下图所示,实现系统与硬件网卡时钟同步一般执行./phc2sys -c CLOCK_REALTIME -s /dev/ptp0 -w -m,其中/dev/ptp0为对应网卡生成得ptp clock名称。
-
- 时间同步测试
- 测试说明
时钟服务器与工控机硬件网卡同步功能,工控机硬件网卡与系统时间进行同步功能进行验证。
- 测试方法
参考图 4中网络接线定义,时钟服务器、工控机、辅助计算机接入同一网络,工控机网卡运行LinuxPtp软件,使用硬件网卡eth1,运行ptp4l软件在E2E、UDP、slave模式下,与时钟服务器进行同步,观察ptp4l软件打印log,该log会打印网卡同步状态、告警、错误、参数等信息。若时钟服务器PTP协议输出无错误,工控机网卡时钟会快速识别时钟服务器,并进入slave状态,跟踪时钟服务器PTP时钟,稳定输出与主时钟的时间偏差、网络延迟,与PTP时钟服务器实时同步。
同时运行phc2sys软件,操作系统时间与硬件网卡PTP时钟同步,观察软件打印log, 该log会打印操作系统时间同步状态、告警、错误、参数等信息。快速识别硬件网卡PTP时钟,跟踪时钟硬件网卡PTP时钟,稳定输出与PTP时钟的时间偏差和延迟,与硬件网卡PTP时钟实时同步。
在同步过程中,手段修改操作系统时间,修改完成后,想通过PTP同步功能,恢复操作系统时间,指定PTP调相门限值,配置文件default.cfg 中step_threshold默认值为0,表明PTP同步过程中不会调相,因此修改操作系统时间后,PTP同步无法通过调相立即恢复正确时间。因此需将该值修改为0.3。
测试步骤
- 设备上电启动,时钟服务器接入卫星天线,等待其同步状态锁定;
- 将主时钟授时网卡PTP模式配置成master、一步法、E2E、UDP报文模式,XQ850设备网页提供时钟优先级设置,将priority1设置为127, priority2实则为128,XQ500不用设置;
- 在Ubuntu终端使用root权限,在Linux Ptp目录下执行命令./ptp4l -E -4 -H -m -i eth1 -s -f configs/default.cfg;
- 在Ubuntu终端使用root权限, 在Linux Ptp目录下执行命令./phc2sys -c CLOCK_REALTIME -s /dev/ptp0 -m -w -S 0.3;
- 等待硬件网卡PTP时钟进入同步状态,等待操作系统时间同步进入同步状态;
- 在Ubuntu终端使用root权限,执行命令date -s 2000,修改操作系统时间,查看phc2sys软件打印log,查看时间跳变,然后时间恢复。
- 计算公式
观察ptp4l软件打印log,网卡PTP时钟启动后,识别到PTP时钟服务器,并根据bmca算法选择最优主时钟,打印主钟服务器CLOCK ID,并向其同步,时钟状态会依次进入LISTENING、UNCALIBRATED、SLAVE。
观察phc2sys软件打印log,识别到网卡PTP时钟后,与网卡时钟进行同步,同步过程中打印时钟偏差。修改操作系统时间后,时钟偏差打印会突变,然后在时间同步作用下,恢复正常。
2.判断依据
测试10分钟内,观察打印ptp4l软件log,无错误日志,且打印出来的master clock id为时钟服务器clock id,网卡时钟稳定进入slave状态,持续打印时钟偏差、网络延迟,参考4.2节描述。
观察phc2sys软件log,如下图所示,无错误日志,且识别到硬件网卡PTP时钟,且进入同步状态,持续打印时钟偏差,当修改操作系统时间后,时间偏差突变,然后又恢复正常,所有条件都满足则测试通过。
按照以上步骤就可以将工控机进行gps时间同步了,剩下的相机与激光雷达也会与另一个时间同步板进行时间同步与硬触发了。












