新しい中華GPSモジュールとChronyで作るNTPサーバ (前編)

前回(といっても既に3年以上前だけど)、NanoPi NEO用に購入したGPSモジュールだが、1PPSは正常そうに見えるがNMEAの取得タイミングが最初からなんかずっとヘン。グラフにするとノコギリの刃のようなギザギザ三角波が描かれる。他にあるGPSモジュールで取得したNMEAのグラフとは明らかに違うし、他の人がネットに上げている情報でもこんなグラフ見たことがない。とはいえ、遥かに精度の高い1PPSを録っているのだからNMEAのタイミングが少々ヘンでも全く問題はないということで放置してたけどやっぱり時々気になるのよね。

新しいGPSモジュールとChronyでNTPサーバ 1
問題のGPSモジュールを使っているNTPサーバのNMEAのoffsetのグラフ。謎の規則性があるんだけど何を示しているのかわからないノコギリの刃のようなグラフ。上下の振れ幅も約30msと大きめ。

新しいGPSモジュールとChronyでNTPサーバ 2
別のNTPサーバのNMEAのoffsetのグラフ。上下の振れ幅が10ms程度で変な規則性もなくこちらは正常。

新しいGPSモジュールとChronyでNTPサーバ 3
で、購入したのがubloxのNEO-M8Nを搭載したGPSモジュール。これはTCXOなので温度変化に強いやつ。
画像では商品価格が975円で送料が343円になってるけど、セール中に購入したので694円で送料が340円だった。NEO-M8Nなら破格の安さと思った。

新しいGPSモジュールとChronyでNTPサーバ 4
届いた商品。下にあるのは大きさ比較用のmicroSDカード。
ん?!なんか違う・・・

新しいGPSモジュールとChronyでNTPサーバ 5
そもそもGPSレシーバのチップメーカーがubloxではなく中科華微電子(杭州中科微电子有限公司?)。そしてチップの型番はATGM332D。チップに偽ラベルを貼るでもなく堂々とパチもん送ってきやがった。さすが中華。
ただ、このATGM332D、ICはAT6558-5N-31というやつでデータシートによるとそんなには悪くないらしい。5N-3XはGPSと北斗対応バージョン。TCXOみたいだし、ubloxのUBXバイナリコマンドも使えるようだし。ubloxのチップをそのまま置き換えられるというのはそういうことなのねという感じ。
なので今回はこの中華GPSモジュールを使ってみようと思う。

スペックで比較するとubloxのNEO-M8NのGPSのTracking sensitivity: -167 dBmに対してAT6558は -162 dBm。
ウォームスタート(ホットスタート)が、NEO-M8NとAT6558がともに1秒。コールドスタートはNEO-M8Nは26秒に対してAT6558が32秒。 性能に差がないわけじゃないので念の為。

新しいGPSモジュールとChronyでNTPサーバ 6
基板の裏。外部アンテナ接続用のSMA(左上)、同じくIPEX(左下)がある。オンボードのアンテナは無い。というかオンボードアンテナ無しを敢えて購入。NMEAがおかしいGPSモジュールはオンボードアンテナがあってジャンパスイッチ等でそのアンテナを切るというのができないのを異常の原因として疑ったので。
中央下に見えてる丸いのはボタン電池。これがあると電源を入れ直したときなどにウォームスタートが効いて衛星の捕捉開始までの時間が圧倒的に速い。電池が付く付かないでおそらく値段は変わらないと思うので電池が付くタイプの方が個人的には良いと思う。

新しいGPSモジュールとChronyでNTPサーバ 7
手前にある小さい基板が今回購入したもの。奥側が前回購入したublox NEO6のGPSモジュール。大きさがだいぶ違う。

新しいGPSモジュールとChronyでNTPサーバ 8
左側が新しく購入したGPSモジュール。右側が古い方。その中央に見えてる汚い白い四角いのはオンボードアンテナ。
赤枠で囲ったところが今回購入したポイントの1つ。ピンの並びとピッチが全く同じなので旧基板から5ピンまるごとごっそり抜いてそのまま新しい方に挿すだけ。簡単。

外部アンテナのSMA端子も差し替えたら交換完了。

しばらくArmbianのビルドをサボってたけど久しぶりにPPS対応カーネルで作ってみた。カーネルオプションは以前の記事を参照。なお、Timer frequencyはこれまで1000Hzで作っていたが、NanoPiNEOだと荷が重いかなと思ったので初期値の250Hzにした。これで調子が悪いようなら作り直す予定。イメージはminimalにしている。

置き場所(Google Drive)
Armbian_20.08.0-trunk_Nanopineo_buster_current_5.4.50_minimal.7z

NanoPi NEO用のArmbianは暫く初期起動で有線Networkが無効という嫌がらせ状態になっていたが、今回のビルドではDHCPのあるLANに接続すれば自動的にネットワークが使えるようになっていた。また、NanoPi NEOの電源用のmicroUSBのケーブルをACアダプタではなくPCに接続すればそのPCからUSBシリアル経由で通信できるのは以前と同じ。DHCPから静的な設定に変えるとき(しかも違うネットワーク用に変えるとき)にarmbian-configを使うと結構ウンコなのでトラブることがあるが、USBシリアル経由なら簡単確実かも。個人的にはarmbian-configなんて使わないで/etc/network/interfaces, /etc/resolv.conf, /etc/hostname の3ファイル直編集がオススメだけど。(特にネットワーク替えの場合)

1PPSを使う場合は/boot/ArmbianEnv.txtの編集をお忘れなく。変更の仕方は以前の記事と同じ。

で、Debianの新しいバージョンでは標準搭載のNTPサーバがntpdではなくChronyになっている。Chronyが流行りのようなので逆らわずにChronyでやることにした。比較的簡単だし。

と、いうことで、次回は中編としてChronyの設定、さらに次々回は後編としてGPSモジュールの操作を予定している。

関連記事: