ルビジウムオシレーターの周波数調整(2022年、その1)
まえがき
前の記事で測定ツールの準備が出来たのでいよいよルビジウムの校正を行います。
◆外観
何度か記事に登場していますがこんな外観の物です
中には中国の携帯基地局の更新に伴って大量に放出されたルビジウムオシレーターモジュール(FE-5680)が入っています。
なお、このオシレーターについてはルビジウム FE-5680A のカテゴリに関連記事をまとめています。興味のある方はご覧ください。
◆測定回路
回路図は前回の記事にありますが、ブレッドボードの写真です。写真の上の方にあるBNCコネクタにGPS(NEO-8)とルビジウムの1PPS信号を引っ張って来ています。
・Arduino UNOのボードはクロックオシレーターが水晶の互換品を使っています。純正のボードはセラロックを使っているので精密なタイミング測定には向いていません。
・UNOの電源をパソコンから供給すると、電源電圧変動の影響を受けて測定結果がふらついたので、別ルートから電源を供給しました。こうするとUSBコネクタ経由の通信が出来なくなるので、シリアルデーターは別ルートのUSBシリアルアダプタを通してパソコンに送りました。
・風などの影響を減らすため、測定中は上の写真の回路全体に小さな段ポール箱を被せました。
◆測定結果
・パルス幅(pw)、周期(pp)の測定結果
16時間分のデーターです。グラフを見るとパルス幅(位相差)は8μs増加しています。しかし周期も同じ傾向で変化していて実際に8μsもの位相の変化があった訳ではありません。そもそも周期はGPSの1PPS信号なのでこんなに変動するはずがありません。
つまり、左上のグラフは(ほぼ)Arduino UNO のCPUクロックの変動を見ていることになります。1秒パルスの周期が8μs変化したのだからクロック変動は 8E-6 (8ppm) ということになり、水晶オシレーターとしては妥当な値だと思います。
ともかくこれでは10のマイナス10乗よりはるかに小さな変化の測定は出来ません。そこで上のグラフの両者を割り算して正規化しました。
・補正後のパルス幅(位相)変化
パルス幅(pw)の測定結果を周期(pp)の測定結果で割った値でプロットしたグラフです。これでようやくGPSとルビジウムの位相の変化が見えてきました。グラフの傾きがルビジウムの誤差でその値は 1.068E-11であることが判ります。なお、位相差は増加しているのでルビジウムの周波数が低いことになります。
◆ルビジウムの周波数調整
誤差の量が判ったのでルビジウムの周波数を調整します。その方法は前回ルビジウムの周波数を調整した時の記事に書いたのでポイントだけ紹介しておきます。
・調整量の計算
調整量 = ズレ量/調整ステップ = 1.068E-11 / 6.81E-13 = 15.69 ≒ 16LSB
従来の補正値は737(0x02E1) だったのでこれに16プラスして、753(0x02F1)を設定すれば良いことになります。
0x02F1に設定するための設定コマンドは、2C 09 00 25 00 00 02 F1 F3
注:2Cは書き込みコマンド、09はコマンドの総バイト数。4バイト目の25は1-3バイトのXORで求めたチェックサム。9バイト目は5-8バイトのXORで求めたチェックサム。結果確認は2D040029コマンドで行う。エラーがあっても無くても何も通知されない。
これをバイナリーモードで通信できるシリアルソフトを使って書き込みます。
・書き込み画面(RS232Cの画面)
◆調整後の結果
調整した結果を20時間くらいかけて確認したデーターです。
誤差は3.88E-12と-12乗台まで減りましたが、残念ながらまだ少し傾きが残っています。
◆まとめ
以前のやり方はマニュアル測定だったので数時間に1回程度の記録しか出来ず、細かい変化までは判りませんでした。今回は自動測定なので変化の様子が判り易くなりました。
ATmega328Pのインプットキャプチャー機能を使えば精密な位相変化の検出が可能になる、ということを「居酒屋ガレージ店主」さんから教えて頂いたのですが、狙い通りの効果が出ました。やって見て良かったです。なお、まだプログラムにバグがあって異常値が記録されてしまうことがあるのですが、とりあえずEXCELで手作業で修正しています。
まだ少し誤差が残っているので再度調整してみたいと思います。そうは言ってももう10のマイナス12乗台なので一般家庭でこんな精度はいらないのですが、ともかくもう少しやってみます。これを周波数の精度沼と言うんでしょうね、どっぷり浸かるのも悪くはありません。