【GPS授时系列】通过USB接口获取PPS信号

前言

本文翻译自Don Drawn的博客
https://blog.dan.drown.org/
斜体是译者加的注释,方便读者理解

目标

为了获取精确时间,最划算的做法是从GPS模块同步PPS信号(秒脉冲信号),这种模块一般只需要几十元钱,而精度却能达到100ns,从GPIO引脚获取PPS信号是比较常用的同步PPS信号的方法,但并不是所有系统都支持这种方法,USB接口是一种比GPIO使用更广泛的接口,但是用USB接口同步PPS信号会引入额外的误差,因为USB接口的特性,会给信号同步带来不小的延迟,本项目的目的,既是测量这个延迟,并且试图减小这个延迟。

评价时钟质量的几个指标:
分辨率(resolution):时钟每次自增量,如果时钟每次增加一秒,则分辨率为1秒
精度(precision ):时钟精度,来说是外部程序能获取时钟时间的最小间隔,如时钟的分辨率可能是1ns,但是时钟的精度可能是1ms
抖动(jitter):重复读取时钟值,每两次读取之间的间隔是不同的,两次读取之间的间隔的差值既是jitter
精准度(Accuracy ):时钟值与理想精确时间的差值
频率误差(frequency  error):时钟一般由某种频率发生器件驱动,这些器件频率会发生漂移,频率误差一般用PPM作为单位,PPM既是Part Per Million,如果时钟PPM为12,差不多一天下来积累的误差就有1秒

USB同步PPS信号原理图

从图中可以看出USB的轮询机制必然导致较大的延迟

【GPS授时系列】通过USB接口获取PPS信号_第1张图片

测试

测试中同一个PPS信号同时连接了USB和GPIO
GPIO同步PPS信号时,没有做额外的延迟补偿(这个延迟大概在10us左右)

PPS 信号产生IRQ

PPS信号产生IRQ请求的延迟
【GPS授时系列】通过USB接口获取PPS信号_第2张图片
大概是 1.7us-1.8us

USB 延迟

图标中的纵坐标标识的是USB设备在收到PPS信号到USB host(既主机)获取到PPS信号之间的时间差。
在这次测试中,USB设备的轮询时间被设成1000us,USB host会在每个USB包之间轮询USB设备的状态,USB延迟就此产生。
【GPS授时系列】通过USB接口获取PPS信号_第3张图片
USB延迟介于26us到1033us之间,稍后作者会详细讲解这个三角形的图像背后的原理。

误差修正值

测量值用UART串口传送

数据整合

主机收到测量值与PPS信号后,就可以计算本机时间与GPS时间的差值,这个差值叫偏移(offset),下面的图形是GPIO PPS信号与USB PPS信号的时间差记录,在理想情况下,这两条线都应该是一条平的直线,不过现实是USB PPS有一个125us的固有偏移,可能是由于USB hub 的缓冲机制带来的,固有偏移很容易处理,只要减掉就可以了,所以一下图形中作者已经将125us的固有偏移消除了,这种固有偏移在不同机器间也是相同的,作者测试过树莓派 Pi 2和一台intel的机器。

在上节中作者测量到USB延迟介于26us到1033us之间,但是这里USB PPS的偏移只有100多us,这里作者应该是使用了某种修正方法,利用UART传输测量值来修正延迟,但是即使如此,USB传输延迟中的抖动(jitter)依然存在。

【GPS授时系列】通过USB接口获取PPS信号_第4张图片

GPIO PPS 与 USB PPS对比

USB PPS时间源能保持±5us的偏差,因此它是一个长期的,优质的时间源,但是对比GPIO PPS时间,依旧多了絮都尖峰,而且偏移持续时间也更长。
研究偏移时间的分布,作者认为它们都符合高斯分布(Gaussian distribution)。
【GPS授时系列】通过USB接口获取PPS信号_第5张图片

GPIO PPS 信号更接近高斯分布,作者认为这是一种很好的测量短期偏移的方法。

扩展

此处未翻译

USB latency pattern

Looking closer at the USB latency, you can see the PPS drifting relative to the host schedule of polling the USB device for its status. The system clock error was 2.215ppm during this time period, and this drift matches that error exactly. This probably means USB on this system shares the same clock as the system clock. This hardware is a Raspberry Pi 2, and I suspect it won’t be true for other platforms. I also suspect the stability of the polling schedule can’t be relied upon, as the host controls it and can reschedule it whenever it wants.
【GPS授时系列】通过USB接口获取PPS信号_第6张图片
Subtracting the 2.215ppm drift gives the remaining jitter (root mean squared error=2.278)
【GPS授时系列】通过USB接口获取PPS信号_第7张图片

你可能感兴趣的:(GPS授时)