私はイーサネットケーブルを介して接続された同じ学生AUVの他のコンピュータに時間を提供する小さなNTPサーバー(Chrony)を持っていると思います。私たちの主な関心事は、車両のさまざまな部分を数日間10ms未満で互いに同期させることです。
一部の電子デバイスは1PPSソースを介して直接同期するため、NTPサーバーと1PPSソースの同期を維持することが非常に重要です。
現実世界と同期される「システム時間」は必須ではありませんが、無料であれば良いようです。
現在私達は:
- 1PPS周波数ソース
- 起動時にRTC読み取り機能を備えた組み込みコンピュータ
- GPS受信機。しかし、理想的には、GPSが水中で正しく動作しないため、この受信機は信頼できません。
現在、1PPS信号とGPSシリアル文字列をUSBシリアルコンバータ(FTDI)に供給しています。次に、Chronyの1PPSとGPS文字列を正しく選択するgpsdがそれを準備します。これは効果があり、1PPSとGPSと約2usの同期を提供しました。
既存の設定にはアプリケーションに制限があります。
gpsdは時間を初期化するために有効なGPS時間文字列が必要ですが、水中ではGPS受信が悪く、水中では受信できないため、常に使用できるわけではありません。
GPSDはまた、1pps割り込みを処理するために連続した有効な文字列を必要とします。バッテリーを節約するために水中でGPS受信機を無効にしたいが、それでも1PPSと同期を維持したい場合は、これは主に問題です。
GPSが失われたり、GPSデバイスがオフになると、システム時間は1PPSソースから外れ始めます。
私は「gpsd」がGPSに大きく依存していることに気づいたので、間違ったツールを使用していました。
質問:
1PPSをchronyに直接提供できますか?
1.1 chrony RTC以外の実際のタイムソースを取得せずに、この1PPSとシステム時間を単独で使用できますか?
FTDI USB-Serial Converter RIまたはDCDピンを使用して/ dev / ppsソースを追加する方法の例ですか?たとえば、gpsd は背後で作業を行いますが、使用しません。
ベストアンサー1
私の質問は試行錯誤を通じて部分的に答えられました。
質問1.1PPSをchronyに直接提供できますか?
答え:1Chrony 構成では、PPS を取得するために 2 つの方法を使用します。
- gpsdが保存する共有メモリ(SHM1)から取得します。
- /dev/pps デバイスから直接インポートします。
構成行の例:
refclock SHM 1 refid PPS precision 1e-9
refclock PPS /dev/pps1 refid PPS2 precision 1e-9
待ち時間に関連するいくつかの潜在的な落とし穴も以下でカバーされています。よくある質問
質問:1.1RTC以外の実際のタイムソースを取得せずにchronyはこの1PPSとシステム時間を単独で使用できますか?
答え:1.1はい、次の行を追加すると:
local stratum 10
chronyがすべてのソースを失うと、ローカルクロックに戻ります。これは、/ dev / ppsソースのみがあり、GPSデータがない場合は、タイムサーバーがまだ満足するために必要な行であるようです。
質問:2。FTDI USB-Serial Converter RIまたはDCDピンを使用して/ dev / ppsソースを追加する方法の例ですか?たとえば、gpsd は背後で作業を行いますが、使用しません。
部分的な答え(解決方法)2:gpsdはRIまたはDCDからppsを受け取り、タイミングデータをSHM1に伝播します。 gpsdは自動的に仮想/ dev / pps1デバイスを作成し、それをcomポートに接続します。これはgpsdが内部的に使用する1ppsとは異なります!
/dev/pps1 で ppstest を使用すると、DCD への PPS 変換は表示されますが、RI への変換は表示されません。 RIまたはDCDを使用してpps変換を表示するには、comポートでppscheckを使用します。
私たちはgpsdが独自の新しい1PPS検出方式をリリースしていると思いますが、仮想dev / pps1ポートはDCDにハードコードされた古いldattach(ラインルール)を使用しています。この投稿を見た。