1.一种可设定周期的高精度GNSS时间同步方法,其特征在于,通过PPS脉冲与高精度时间报文UBX‑NAV‑PVT去同步系统时间,包括如下步骤:步骤1:获取GNSS接收机输出的PPS秒脉冲信号,解析以晶振为时钟源的系统内部时间戳和脉冲序列号;
步骤2:根据脉冲序列号和设定的时间同步周期,判定当前是否到达时间同步时刻;
步骤3:通过UART串口通信读取GNSS接收机输出的高精度时间报文UBX‑NAV‑PVT,解析时间报文中的UTC时间;
接收和提取高精度的GNSS时间报文的方法包括:
利用生产者消费者异步处理模式,接收和提取高精度的GNSS时间报文UBX‑NAV‑PVT,其中生产者表示实时读取GNSS报文数据,将数据追加到环形队列中;消费者表示实时提取UBX‑NAV‑PVT时间报文,采用环形队列的先进先出原则,通过判断队列中时间报文的帧头、Class、ID、长度关键字,提取UBX‑NAV‑PVT时间报文;
解析高精度时间报文UBX‑NAV‑PVT的方法为:
定义时间报文结构体类型,其中包含年、月、日、时、分、秒和纳秒时间信息,利用类型的本质是指示编译器如何解释一段内存空间这一特性,将提取出的十六进制UBX‑NAV‑PVT时间报文执行memcpy内存拷贝运算,使用已定义的结构体类型来解释该十六进制报文,进而解析UBX‑NAV‑PVT报文中的UTC时间;
步骤4:计算PPS脉冲时间戳与解析完时间报文之间所用时间补偿量,与并与解析出UTC时间相加,解算出向系统同步的时间,进行时间同步。
2.根据权利要求1所述的可设定周期的高精度GNSS时间同步方法,其特征在于,所述步骤3中读取GNSS接收机输出的高精度时间报文UBX‑NAV‑PVT需要如下硬件支持:全球卫星导航系统GNSS接收机,用以输出PPS脉冲和GNSS时间报文UBX‑NAV‑PVT;
GNSS接收机天线,用以接收卫星实时发送的信号;
UART串口模块,将GNSS接收机映射为Linux内核系统中的设备节点/dev/ttyUSB0;
GNSS接收机天线接收卫星发送的信号,并将卫星信号转发给GNSS接收机;GNSS接收机收到信号后,生成高精度的UBX‑NAV‑PVT时间报文;UART串口模块将GNSS接收机和Linux域控系统进行硬件连接,即在硬件驱动上,将GNSS接收机映射为内核中的设备节点/dev/ttyUSB0。
3.根据权利要求2所述的可设定周期的高精度GNSS时间同步方法,其特征在于,所述UART串口模块需要进行UART串口通信配置,具体包括:UART串口通信配置,设置波特率、数据位、校验位和停止位;
通过串口下发配置指令到内核空间中设备节点/dev/ttyUSB0的读缓冲区,使其输出高精度的GNSS时间报文UBX‑NAV‑PVT;
通过访问节点/dev/ttyUSB0的写缓冲区,间接读取GNSS接收机输出的时间报文;
其中,UBX‑NAV‑PVT报文表示GNSS的时间、速度和位置解。
4.根据权利要求1所述的可设定周期的高精度GNSS时间同步方法,其特征在于,所述步骤1中获取PPS秒脉冲信号具体包括:通过拉低GNSS接收机天线的引脚电平,使其每秒输出PPS脉冲信号,其频率为1Hz;
PPS脉冲以GPIO作为PPS信号源,通过注册GPIO中断的方式,记录引脚电平变化,当PPS脉冲到来时,访问脉冲节点/dev/pps0即可获取PPS脉冲信号,获取PPS发送时刻的系统时间戳和序列号信息。
5.根据权利要求1所述的可设定周期的高精度GNSS时间同步方法,其特征在于,所述步骤2中设定时间同步周期,判定当前是否到达时间同步时刻的方法包括:时间同步程序启动时,输入时间同步的周期,通过PPS脉冲信号中提供的序列号,对设定同步周期进行模运算,通过下述公式的结果来判定是否要执行时间同步;
result=sequence%period
其中,sequence表示PPS脉冲序列号,period表示同步周期,result表示模运算结果。
6.根据权利要求1所述的可设定周期的高精度GNSS时间同步方法,其特征在于,所述步骤4中解算系统同步时间的方法为:计算读取、提取和解析时间报文过程所用的时间补偿量,与UBX‑NAV‑PVT时间报文所提供的时间相加,通过下述公式表示向域控系统的授时;
timestamp=pvt_time+Δt
其中,pvt_time表示高精度的GNSS时间,Δt表示补偿时间,timestamp表示向域控系统同步的时间。
7.根据权利要求6所述的可设定周期的高精度GNSS时间同步方法,其特征在于,所述步骤4中还包括:将UTC时间转换为Linux系统时间,将UBX‑NAV‑PVT时间报文中解析出的UTC时间,转换为可同步到域控上的Linux系统时间,然后,将域控系统的授时时钟由默认时区转换为东八区北京时间。