GPSで周波数を追い込む
- 2016/03/31 15:57
- カテゴリー:make:
周波数カウンタにTCXOを搭載し,2ppm以下の周波数精度を手に入れた私ではありますが,2ppmといえば,1MHzに対して2Hzですから,8桁の周波数カウンタの精度としては,ちょっと心許ないのも事実です。
フルスケール10MHzを測定するとすれば,1ppmなら10Hzです。ちょうど3桁目が10Hzの桁ですので,8桁のカウンタなら下2桁が信用出来ないという事になります。せっかくの8桁カウンタなのに,寂しいですよね。
温度変化や経年変化はやむを得ないとして,今出ている周波数が一体どれくらい正確なのか知りたいと思っても,そういうチャンスはなかなかありません。ルビジウム発振器に手を出すとか,校正済みのOCXOを買うとか,そういうことは費用の問題もそうですし,維持の問題もあるので,素人には厳しいです。
ちょっとまった,手軽に高精度な「絶対値」が手に入る方法があります。GPSです。かつてはJJYの10MHzをつかまえるとか,カラーテレビの内部からカラーバースト信号を引きずり出すという方法がありましたが,JJYの短波は停波して久しく,カラーバーストも地デジになった現在では無い物ねだりに過ぎません。中国政府が威信をかけて出している標準電波もありますが,それこそ知る人ぞ知るでしょう。
GPSではすべての衛星で位相まで揃った高精度な周波数が手に入り,これを元に測位を行います。周波数の精度が高くないと測距精度が上がりませんので,GPSの衛星には10E-13という精度の原子時計が搭載されて,しかも精度は地上で管理されています。
GPSの受信機はこの周波数と位相まで一致させて測位を行います。ですから,理屈の上では10E-13の精度が手元にくるはずですが,なにせ宇宙から飛んでくる電波ですから,空気の揺らぎもあって,そこまでの精度は出ません。
調べて見るとGPSモジュールが出力する1秒パルス(1PPS)の精度は10nsくらいとのことです。1nsは10E-9秒ですから,1PPSの精度は10E-8ということになります。
ここで重要な事は,この1秒で10nsのズレという精度は,常に補正され続けているので,10秒だろうが100秒だろうが1000秒だろうが,トータルのズレはやっぱり10nsということです。ということは,長いスパンで見れば見るほど,精度は上がっていくのだという事です。
また,正確なパルスは1秒に一度しか出ませんから,パルスが出ていないときは,GPSとは別の時計を持っていないといけません。ここに変動の大きな発振器を使うと,1秒ごとに正確な時間に補正されるとは言え,1秒未満の時間は全くあてにならないということになってしまいます。
よく,GPSを使ったタイムベースにOCXOを使う例を見るわけですが,1秒未満の時間はOCXOを使い,これを1秒ごとにGPSで補正して使っているわけです。
GPSの1秒ごとの精度は10E-8から10E-9くらいですが,これが1000秒になると10E-12くらいに精度があがります。こうして長い時間かけてOCXOの補正を続けて,最終的に10E-12という原子時計に迫る精度を手元に作り上げるのです。
まあ,ここまでやると結構大変です。そこでふと見方を変えてみたのですが,10E-8でよければ,1秒でいいのです。なら,面倒な仕組みも必要なく,GPSモジュールから出てくる1PPSだけでいいですよね。
もちろん,周波数も異なるので,この1PPSをそのまま,周波数カウンタのタイムベースにすることはできません。しかし,タイムベースを校正するための基準クロックとしてなら,十分です。
そう,GPSの1PPSのパルスが,正確に1Hzになるよう,周波数カウンタのタイムベースを調整するのです。
とはいえ,この方法では1秒に一度しかパルスが出ませんので,ゲートタイムが10秒程度の普通の周波数カウンタでは10個のパルスしか数える事が出来ません。10MHzがGPSから出てくればいいんだけどなあ・・・
そんなことを数年前から考えていたんですが,周波数は周期の逆数ですので,周期を計ればいいんじゃないかと気が付きました。
周波数カウンタのモードを周期を測定するモードに切り替えます。正確な1秒を入力に突っ込むのですから,この1秒の間にタイムベースのパルスがいくつあったかを数えれば,校正できそうです。
例えば10MHzのタイムベースを数えることにすると,カウントされた数字は10000000となり,1000000.0us,すなわち1秒という測定結果を得られることでしょう。
とまあ,そんな風に妄想していたところ,ふと最近のGPSモジュールのタイムパルス出力が,1PPSではなく10kHzや1MHz,はては10MHzまで設定可能であることを知りました。
なんと,GPSから10MHzが直接出てくるなんて,夢のようです。
しかし残念ながら,それは夢でした。というのも,ジッタが大きすぎて使い物にならないんだそうです。理由はどうやら,GPSモジュールの内部クロックが48MHzで,ここから10MHzを作っている関係で,どうしてもジッタが大きめに出るのだとか。だから,1MHzや8MHzといった整数比であれば,ジッタは少ないものが手に入ります。
さて,話を整理します。
うちの周波数カウンタは,TCXOを使って安定度を2ppm程度にしてあります。これは10MHzフルスケール(8桁フルカウント)で,20Hz程度の測定誤差が出ることを意味しています。
ただし安定度ですから,初期値に対する変動が2ppmというだけで,初期値がいくつかはデータシートを信用するしかありません。VM39S5Gという秋月のTCXOは1ppm以内に合わせてあるということですが,以前ここに書いたように電源電圧で大きく変動し,0.1Vで40Hzも動きます。0.03Vずれると1ppm変動するというのですから,これはかなり大きいです。
一応,高精度な電圧計で電源電圧を5Vぴったりに追い込んでいますし,秋月の話を信じるなら5Vで1ppm以内に調整されているということですので,そんなにずれているわけではないと思いますが,それでも初期値は現在不明なままです。
そしてその初期値は,絶対精度がはっきりしている,GPSから生成された周波数との比較で手に入ります。本来GPSでは1PPSしか出てきませんし,これも長期的に平均を取らないと10E-12レベルにはなりませんが,1秒でも10E-8程度の精度は持っているという話です。
そこで,GPSで1PPSを元にしたもっと高い周波数を作り,これを周波数カウンタに突っ込み,その周波数になるように周波数カウンタのタイムベースを調整します。タイムベースの調整は,TCXOに供給する電源電圧の微調整で行います。
よし,あとはどうやって行くかを考えましょう。
GPSといえば,aitendoです。aitendoのGPSの取り扱い品種は多く,でもあまり詳しい説明がないので,正直敷居は高いです。ですが,先人達の苦労のおかげで,なにを買えばいいのか,調べることができます。
今回私が買ったのは2種類,u-bloxのNEO-6Mが搭載された基板とアンテナのセットでNEO6M-ANT-4Pです。数ヶ月前のトラ技にも出ていたんですが,値段が上がったようで1980円ではなく2780円で買いました。
もう1つは最新のNEO-M8Tが搭載された,GM-8013Tです。最新だけにちょっと高くて,3980円でした。最新のものが欲しいのは,別のいろんな衛星をつかまえたいわけではなく,少しでも感度を稼ぎたいと思ったからです。
そうと決まれば,在庫があるうちに注文です。迅速な対応で,翌日には届きました。ありがたいですね。
さて,届いたGPSですが,いずれもシリアルポートで繋ぎます。RS-232Cではないので,レベル変換はいらないのですが,この時手元に,USB-シリアル変換基板が1つもありませんでした。
しかも,u-bloxのツールである,u-centerはWindows Vista以降しか動かないという事なので,古いPCではダメ。USB-RS-232C変換ケーブルも新しいOS用のドライバがなくて動かず,結局買い直す羽目になりました。
Windows8.1でu-centerが動くようになって,ようやくこの2つのモジュールに火を入れます。PCとの通信は問題がないのですが,室内なのでなかなか衛星をつかまえてくれません。特にGM-8013Tは全然だめです。壊れたのか?
そのうちつかまえるだろうと,u-centerで先に設定をいじってみます。configuration viewからTP5の設定をあれこれいじって,8MHzを出してみました。衛星をつかまえていないので,あくまでこのモジュールの内部クロックです。
周波数カウンタで調べると,7Hzほど高いです。なるほど。
・・・さて,そのうちつかまえるだろうと思っていた衛星は,なかなかつかまりません。やっぱり壊れたのか?
ふと気が付くと,一緒に電源を入れたNEO6M-ANT-4Pは結構しっかりつかまえているようです。
こっちにシリアルポートをつなぎ替えて,設定をします。衛星をつかまえていないときには1MHzを,衛星をつかまえてロックしたら8MHzになるようにしました。こうすれば,いちいちPCを立ち上げなくても状態が出力される周波数でわかります。
衛星をつかまえない状態では1MHz,つかまえたら8MHzに鳴っていることを確認して,これを10MHzに設定してみると,値がパラパラとばらつきます。オシロで見れば,それはそれはひどいジッタで,これは全然使い物にならないです。
1MHzや4MHz,8MHzや規格外ですが12MHzにすると,ジッタが目視できないくらいの綺麗な波形が出てきます。周波数カウンタでも値は動きません。
とりあえず,この8MHzを校正用基準周波数として,周波数カウンタのタイムベースの電源電圧を調整し,8MHzになるようにあわせます。最初はゲートタイムを1秒にして大まかにあわせ,次にゲートタイムを10秒にして追い込んで行きます。
10秒に一度しか値が更新されませんので調整は難しいのですが,ちょっとずつちょっとずつあわせます。
8000000.0Hzになるように根気よく合わせるのですが,5Vを作っている可変電圧LDOの可変抵抗が,いかに多回転型を使ったとはいえ,時間と共に変動があるのです。TCXOで温度変化を相殺しても,電源電圧に温度依存があったり経年変化があったらなんか意味がないです。
最終的に,0.1Hzの桁まであわせ込みました。
8桁の周波数カウンタは,ゲートタイム10秒で0.1Hz以下をカウント出来ません。最大0.1Hzの測定誤差を起こすわけですから,これは0.0125ppm,すなわちこの段階では1.25ppb以内の精度になっているということになります。
もちろん安定度が2ppm以下ですので,こんなものはすぐに変動してしまうでしょう。そんなに意味はありません。けど,やっぱり限界ギリギリまでせめた,という気持ちよさはありますね。
一応,このまま二晩通電して周波数を測定し続けました。周波数カウンタは最終桁が2ほど動く事はありますが,なんとか追い込めたようです。ゲートタイムが10秒で精一杯ですので,1PPSから作る8MHzの精度も10E-8くらいがいいところでしょう。あるいはGPSモジュール内蔵のPLLから生成する8MHzなので,もっと悪いかも知れません。
仮に10E-8出ていれば,この周波数カウンタの精度としてはまずまずでしょう。
ところで,GM-8013Tも同時に調べていたのですが,翌日の朝になるとちゃんとつかまえるようになりました。窓際に置いておくとたくさんの衛星をつかまえるようになり,ロックした瞬間に7Hzのズレがあった8MHzも,ピタッと8MHzになりました。
ということで,周波数カウンタの校正は終わりました。TCXOの安定度が気になる場合は,GPSで校正をしてから測定をすればいいわけで,TCXOとGPSの手軽さが生きてきます。
この状態で,手元のOCXOも調整をしましたし,TCXOも可能な物は確認して調整をしました。優秀だったのは以前鈴商の店頭で買ったNECの15MHzで,これはもともと1ppm以下のズレしかない上に,電源電圧の変動に対しても安定でした。優秀です。
TG-5021も電源の変動には強かったです。これがトヨコムの9.98MHzのものだとバンバン動きます。VM39S5Gもそうです。こういう観点で評価をしないと,このあたりの発振器は難しいですね。