google-site-verification: google3bd66dd162ef54c7.html
FC2ブログ

GPSでRTC (DS3231) の姿勢差を測定 (音叉型水晶の姿勢差の測定)

◆まえがき
前の記事の実験で、GPSモジュール( u-blox M8N)から出ている1PPS信号のジッタは極めて少ないことが判りました。こういう高精度(確度)の信号を手軽に使えるようになると、いろいろなことが出来るようになるはずです。

そんなことで、ジッタの少ない1PPS信号だから出来る測定事例を紹介します。

◆RTCに変な誤差が発生する
最近の取り組みで、RTCのDS3231の精度(歩度)をエージングレジスタを使って正確に合わせ込もうとしているのですが、なんだか変な結果が出ています。きっちり合わせ込んだはずなのに、予想外の誤差が発生することがあるのです。DS3231のスペック上の精度である 2ppm には充分入っているので文句は言えないのですが、なんだか釈然としませんでした。

◆RTCでも姿勢差発生
いろいろ調べてみると、どうもRTCのチップを置いた時の、地面に対する角度の違いで誤差が変わってくるようです。つまり、重力の方向に対し、どういう姿勢でRTCを置くかで誤差が変わってくるようです。詳しく調べると、ICの長手方向を鉛直に置いた時にその違いが大きくなることが判りました。これ、機械式時計では姿勢差という言葉で呼ばれる現象なのですが、まさか電子時計でも、測定に引っ掛かるほどの姿勢差が検出されるとは思っていませんでした。これ、ちょっとした発見です。

文書だけでは判り難いので、写真で説明すると、

▼RTCの向きと、時計の進み遅れ
DS3231
これはRTC(DS3231)のチップです。この写真のチップの左側を上にすると時計は遅れ、右側を上にすると時計は進みました。その違いは、1.584e-7 つまり 0.1584ppm でした。

とても小さな差なのですが、これをどうやって測定したのか? その方法を解説します。

◆位相差を測定
ユニバーサルカウンタをタイムインターバル ( TI )モードで使い、GPSとRTCから出ている 1秒信号(1PPS)の時間差を測定します。もちろん基準はGPSです。この時間差が拡大(縮小)すれば、時計には遅れ(進み)誤差があることになります。位相差は0.1μの分解能で測定出来るので、1秒の測定で10のマイナス7乗の違い(誤差)が判ります。また、時間をかければかけるほど、高い分解能で測定出来るようになります。

▼正常な姿勢で測定
1ピン側が下
RTCの基板は直立した状態です。この時 DS3231 のPin1側が下になっています。

この状態での位相差の測定結果は、60秒間で-3.6μsの変化だったので、誤差は -5.833e-8 です。

▼天地逆で測定
1ピン側が上

この状態での位相差の測定結果は、60秒間で-13.0μsの変化だったので、誤差は -2.167e-7 です。

◆姿勢差
ということは、両者の差の 1.58e-7が姿勢差と言うことになります。判り易い値で表現すると 0.158ppmです。小さな値ですが、何度測定しても同じような値が出るので、姿勢差があると考えて間違いありません。

ちなみに DS3231 はエージングレジスタの値をいじることで誤差の微調整が出来ます。その感度は 0.035ppm/LSBなので、姿勢差は4.5LSB 分あることになります。実はデバイスを立てた状態で測定と補正を行い、電源を切った時(時計は電池でバックアップされて動き続けます)は横に寝かせた状態で放置していました。これでは姿勢差の影響がもろに出るので、いくら調整しても時計をぴったりの精度に調整出来るはずはありませんでした。

◆まとめ
RTC で使っている水晶は、音叉型で非対称な形状なので姿勢の違いの影響を受けそうな感じではあります。音叉型水晶の姿勢差で調べてみると、シチズンの腕時計で、姿勢差を無くすために音叉型水晶からATカットの水晶を使う物があるようです。この時計の精度は何と年差で±1秒というのだから大したものです。

GPSと一般的な測定器を組み合わせるだけで、10のマイナス7乗台の時間精度(確度)の測定が簡単に出来るようになりました。これって結構便利だと思います。

ちなみに、前の記事でやったルビジウムはものすごく高精度なので、誤差を測定するのは一日掛かりになっています。でも普通の水晶なら精度は6乗台程度なので、1分くらいの測定で誤差は充分把握出来ます。これくらいの測定なら、Arduinoのソフトだけでもいけそうです。単純な仕掛けでやると時間分解能は4μs になりますが、積分時間を長くとれば、そこそこ実用的な測定精度が得られるのではないかと思います。

こう書いていて、それって昔やったような気がするので検索してみると、
Arduinoで時間間隔の精密測定という記事でやってました。だめです、5年前から進歩していません。でも、当時使ったGPSと比べ現在の物は1PPSのジッタが飛躍的に小さくなっているので、相手が水晶なら十分な精度で測定出来そうです。

あと、GPSモジュールから1PPSよりもっと高い周波数が出せるといろいろ便利になります。ということで、時間のある時に調べてみたいと思います。ともかく、新し部品が手に入るとそこからいろいろな応用が拡がる、ということで楽しいです。

書き忘れていました。この記事で測定を行ったチップは、こっちの記事に出てくるチップのAです。BとCはとんでもないジッタがあるので、精密な時間差の測定は無理です。あと、Aのチップが本物であるのかどうかは、私には判りません。なんだかややこしい世の中になったものです。

ルビジウムオシレーター (FE5680) の周波数をGPSで校正

GPSモジュール (GNSSモジュール) の u-blox M8Nを買ったので、これを使ってルビジウムオシレーターの周波数を測定し、さらに誤差の補正までやってみました。このルビジウムオシレーターの精度(確度)のチェックは2015年の2月にやったのが最後だったので、4年半ぶりの確認になります。

測定は単純で、GPSとルビジウムから出ている1秒パルス(1PPS)の位相差をユニバーサルカウンタで測定するだけです。以下、
順番に内容を見て行きます。

▼窓際にGPSモジュールを置く
GNSSレシーバーを窓際に設置
ここから同軸ケーブルで測定器が置いてある場所まで1PPS信号を送ります。

▼ルビジウムオシレーターとユニバーサルカウンター
ユニバーサルカウンタで位相差変化を測定
私の記事ではおなじみのルビジウムオシレーターとユニバーサルカウンター (アドバンテスト TR5822) です。

ユニバーサルカウンターをタイムインターバルモード (TI) に設定して、GPSとルビジウムの1PPSパルスのタイミングの差を測定します。アベレージング回数を10回にすると分解能10ns で時間差の測定が可能です。この写真は時間差が 405.27570ms であることを表示しています。

なお基準、つまり時間測定の開始信号はGPSにしています。あと、トリガ極性はプラスエッジに設定し、トリガは出来るだけ測定誤差が小さくなるような条件に設定します。

ともかく仕掛けはこれだけで簡単なのですが、高精度(高確度)の測定を行うためにはそれなりに時間がかかります。以下は、実際の測定結果です。

▼測定結果
補正前のルビジウム
これは約24時間の位相の変化グラフです。時々カウンタの値を紙に書き留める、という原始的な方法で記録しているので、測定間隔がばらばらになっています。実はこれを自動測定にしたいのですが、なかなかうまい手がありません。

グラフは右下がりになっているので、位相差は減っていく傾向です。ということはルビジウムの周波数が高いことになり、その量はグラフの傾きから判ります。

エクセルで求めた近似直線の傾きは -0.0015 となっているので、1日当たり0.0015ms、つまり1.5μsの変化となっています。この値から計算すると誤差は 1.5 e-6 / (3600 * 24) = 1.736 e-11 ということになります。以前(2015年2月)測定した時の誤差は1.4 eー11 だったので僅かに誤差は拡大しているようです。

まあこの程度ならどうでも良い範囲なのですが、せっかく値が判ったのでこれを補正してみることにします。このルビジウムオシレーターは外部からコマンドを送ることで、周波数の微調整が出来ます。最後にその調整を行ったのは2012年の6月なので、もう7年も前になります。

以下は調整の手順とその内容です。まずは書き込みのためのアダプタを引っ張り出してきます。

▼RS232C to USBインターフェイスアダプタ
RS232C to USB 変換アダプタ
ルビジウムのインターフェイスはRS232Cなのでその仕様に合ったアダプタを使います。なお、たぶんTTL(CMOS)レベルのアダプタでも強引に使えないことはありませんが、ともかくここはRS232C のアダプタを使いました。これ、ひょっとしたらもう使うことは無いかもです。

通信はバイナリーモードで行うので、それに対応した通信ソフトを用意します。私はRs232c を使っていますが今ならもっと新しいものがあると思います。

まずは確認のために現在の補正値を読み出してみます。コマンドは 2D 04 00 29 です。すると値は 762 (0x02FA)が帰ってきて以前設定した値と同じでした(当たり前ですが)、これで一安心です。

GPSとの比較測定結果から誤差は +1.736e-11 ですが、これを出力の 10Mhz に換算すると、173.6μHz 高いことになります。補正量の感度は 6.80789μHz/LSB なので、補正量は 173.6/6.80789 = 25 ということになります。つまり、周波数が高かったので 25 だけ補正量を減らせば良い、ということになります。絶対値で言うと、762 (0x02FA) だったのを 737 (0x02E1) に減らすことになります。

以下、実際に補正量の入力を行います。

▼補正量の入力(クリックで別窓に大きな図)
ルビジウムの周波数補正コマンド
2C 09 00 25 00 00 02 E1 E3 が設定コマンドです。
コマンドの意味は、最初の29が補正値書き込み命令、09 00 が全体のデーターサイズでリトルエンディアン表現のバイト数、25 がここまでのデーターのチェックサム、次の 00 00 02 E1 が 補正値でビッグエンディアン(負の値は2の補数表現)表現の値、最後のE3が補正値のチェックサムです。詳しくはFE5680のOption2のマニュアル参照ください。

▼ちゃんと設定されているか確認(クリックで別窓に大きな図)
確認
確認コマンド2D 04 00 29を送って、応答は2D 09 00 24 00 00 02 E1 E3 が返ってきました。オフセットは正しく 0x02E1 に設定されているのでうまくいったようです。

ここまでやったら確認のために再度測定します。この測定にも24時間かかります。

▼測定結果
ルビジウム補正後
傾きがほぼ水平になったので誤差の補正はうまくいっているようです。

えいやっと線を引くと、傾きはおよそ -0.2μs/Day なので、誤差は 0.2e-6 / (24 * 3600) = 2.31e-12 ということになります。つまりルビジウムオシレーターの精度(確度)を12桁まで追い込めたことになります。

◆まとめ
久しぶりにルビジウムオシレーターの校正をやってみました。以前同じことをやった時に使ったGPSモジュールと比べ、今回買った物は1PPS信号のジッタがものすごく小さくなっているので、短い時間で測定が出来て楽でした。技術の進歩をはっきりと感じることが出来て気持ち良いです。なお以前の記事のグラフと見比べるとその進歩を実感することが出来ると思います。

全く独立した系で作っている信号のタイミングが、24時間経っても 0.2μsしかズレないというのは恐るべき精度です。特に、このルビジウムオシレーターは数千円で買った物で、小さな箱なのに、電源を入れるだけでこんな精度(確度)の信号が得られる訳で、これは良い買い物でした。

この測定の最中に実はリアルタイムクロックのDS3231 の精度測定もやっていました。こっちは水晶なのでどんなに合わせ込んでもフラフラとズレて行くのですが、それはそれで興味深いデーターが取れています。近日中にご披露したいと思います。
カレンダー
08 | 2019/09 | 10
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 - - - - -
プロフィール

ラジオペンチ

Author:ラジオペンチ
電子工作を中心としたブログです。たまに近所(東京都稲城市)の話題など。60過ぎて視力や器用さの衰えを感じつつ日々挑戦!
コメントを入れる時にメールアドレスの記入は不要です。なお、非公開コメントは受け付けていません。

記事が気に入ったらクリックを!
最新記事
カテゴリ
最新コメント
リンク
FC2カウンター
検索フォーム
月別アーカイブ
RSSリンクの表示
QRコード
QRコード