GPSモジュールが接続されているRaspberry Piがあります。すべてのGPS衛星には非常に正確な原子時計が搭載されているので、Piの時計を衛星の時計と同期させたいと思います。私は次のように衛星から日付と時刻を取得し、Piに時間を設定する方法を知っています。
sudo date -s "MAR 14 2016 14:53:09"
しかし、これは秒までだけ正確です。少なくともミリ秒を取得したいが、ナノ秒を好む。
date +%s%N
返された時間がナノ秒単位であることがわかります。
ナノ秒単位で時間を設定する方法は?
答え1
データがUSB / RS232インターフェースを介してPCに到達すると、解像度と精度はもはや悪くなります。結局、専用の機器がない場合は、NTPを使用する方が良いです。
したがって、GPS同期チュートリアル
市場には安価なGPS受信機がたくさんあります。ほとんどの場合、RS232またはUSB接続を使用して接続されたコンピュータに情報を送信します。受信機自体の内部の時計は数ナノ秒の精度で動作しますが、データをコンピュータに送信するのに遅延が発生するため、ローカルコンピュータの時計をこの信号に数ミリ秒より正確に同期させることは事実上不可能です。この精度は、インターネット上で無料で利用可能なNTPタイムサーバーに接続することによっても達成できます。コンピュータと特別に高速で正確な同期方法を備えたGPSデバイスのみが時間同期デバイスとして使用できます。最も高価で正確な方法は、コンピュータのローカルPCIまたはPCIexスロットに適合するGPS受信機を使用することです。しかし、このカードは非常に高価で広く使用されていません。もう1つの解決策は、低速で不正確なRS232またはUSBインタフェースを使用して時間同期のための一般的なデータとパルスを送信することです。
@dfcが正しく指摘したように、PPSを持つRS232はこれを行います。ただし、デバイスはこれをサポートする必要があります。
ほとんどのパルス可能GPSデバイスでは、新しい秒から始まり、毎秒パルスが送信されます。これが、これらのGPSデバイスをPPS(秒あたりのパルス数)を含むGPSと呼ぶ理由です。
残念ながら、追加のPPS出力を備えたGPS受信機はあまりありません。私はカザフスタンへの旅行にGarmin GPSレシーバーを使用していたので、最初にこのメーカーがどの機器を使用できるかを確認しました。現在コンピュータで直接使用できるGarmin GPSレシーバーには、Garmin GPS 16x LVSとGarmin GPS 18x LVCの2つがあります。どちらもコンピュータから直接取り込むことができる+5V電源電圧で動作し、RS232インターフェイスを介してNMEAプロトコルを介して一般データを送信し、両方ともPPS出力を持ちます。