google-site-verification: google3bd66dd162ef54c7.html

Arduinoで時間間隔の精密測定

 前の記事ではGPSレシーバーの1PPSパルスを使ってルビジウムオシレーターの精度確認を行いました。結果はまずまずだったのですが、周波数カウンターの値を手書きでメモするのはあまりスマートなやり方ではありません。

 Arduinoを使えば良さそうですが、そのままでは時間分解能は4μs以上には上がらないので精度不足です。とは言っても大量にデーターを取ってそれを平均化すれば何とかなる可能性はあります。ということで、無理は承知でArduinoでタイミング測定をやってみました。
 やり方としては、I/O pin割込みを使ってmicros()の値を取得します。割込みは二つあるのでGPSとルビジウムに割り当てればちょうどいいです。

▼使った機器
GPSレシーバーとルビジウムオシレータ
 ルビジウムオシレーター、GPS受信機、Arduino UNOです。

 以下は測定結果の例です。

▼ルビジウムとGPSの位相差測定結果
位相差の変化(補正前)
 これは2時間ちょっとの測定結果で、位相差は0.817秒程度。縦軸は1目盛りで20μsです。グラフ化するためにTeraTermでシリアルデーターを受信してPCのファイルに落とし、EXCELでグラフ化しています。

 4ケタくらいの分解能の測定が出来ているので普通の物理量の測定にはこれで充分な性能だと思います。でも残念ながらGPSとルビジウムの位相差比較のように極めて高い分解能が必要な測定にはこれでは不十分です。

 測定結果が4μsステップに離散化されるのは承知のうえですが、挙動が少し変です。GPSの受信状態が悪い時は値が飛ぶのは仕方ないとしても、ある程度一定の値に収束する期間があって欲しいのですが、そういう感じのグラフになっていません。

 この測定ではArduino UNOのクロックの精度を基準に時間差の測定をやっています。しかしArduino UNOのクロックはセラロックなので安定した周波数は得られません。そのあたりが気になるので、UNOのクロック精度の時間変化データを同時に取ってみました。ルビジウムからは正確に1秒毎の割り込みがかかるので、この時間をCPUで測ればCPUクロックの変化が判るという仕組みです。

▼クロックの変動
Arduinoのクロックの時間変化

 やはり結構な変動があります。とは言ってもセラロックの仕様(確か0.5%)範囲内です。

 このデータを使って位相差のデーターを補正したのが次のグラフです。

▼補正後のGPS/ルビジウムの位相差変化グラフ
補正後

 818783μs付近に測定結果が集まっています。おそらくこれがGPSとルビジウムの位相ズレ量を表わしているのだと思います。時々20μsくらい少ない値が出る傾向は前の記事の測定結果とも一致しているように思います。
 1時間45分以降の値の上昇は衛星の位置の関係でGPSのロックが外れたのだと思います。
 ちなみにこのデーターはGPSの測定結果が不安定になり易いようにベランダに出したアンテナを少し引っ込めて測定しています。

 使ったプログラムは以下の通りです。クロックの周期、位相差、位相差の補正結果をシリアルに流すようになっています。
/*
 1PPSパルスを使ったGPSとルビジウムの位相比較
 GPSを基準として、ルビジウムの1PPSまでの時間を測定
 CPUクロック周波数の変動はルビジウムで補正
 2015/2/22 ラジオペンチ 
 */

volatile boolean state = false;
volatile unsigned long Tgps, Trubi, oldTgps, oldTrubi; 

void setup() {                
  Serial.begin(9600);
  attachInterrupt(0, gpsIRQ, RISING);   // GPS割込み Pin2
  attachInterrupt(1, rubiIRQ, RISING);  // ルビジウム割込み Pin3
}

void loop() {
  unsigned long diff, diffAdj;
  float k, kk;
  while(state==false){       // ルビジウムの割り込みが入るまで待つ
  }
  state = false;
  k = Trubi - oldTrubi;      // 補正用に入力の周期を計算(70分毎に破綻)
  kk = k/1e6;                // 補正係数

  diff = Trubi - Tgps;       // GPSに対するルビジウムの時間差を計算
  diffAdj = diff/kk;         // 時間差を補正
  Serial.print(k);          // ルビジウム1秒間のmicrosの値 
  Serial.print(", "); 
  Serial.print(diff);       // 補正前の時間差
  Serial.print(", "); 
  Serial.println(diffAdj);  // 補正後の時間差(位相差)
}

void gpsIRQ(){      // GPSの割込み処理
  oldTgps = Tgps;
  Tgps = micros(); 
}

void rubiIRQ(){    // ルビジウムの割込み処理
  oldTrubi = Trubi;
  Trubi = micros(); 
  state = true;
}
 micros()は約70分で一回転するのでその境界付近で変な値が出るはずで、そのあたりの例外処理を入れないといけないのですが、手抜きで省略しています。どうせEXCELで後処理するのでその時に修正を入れればいいかと、、
 もしこのコードを流用される方はご注意下さい。
関連記事

コメントの投稿

管理者にだけ表示を許可する

別件ですが市内からのお誘い

はじめまして。元記事から時間が経過していますので、最新記事にコメントさせていただきます。記事内容からの乖離申し訳ありません。

稲城市向陽台6丁目の山本と申します。以前からこのページを訪問させていただいてますが、レベルが高すぎてコメントするのは初めてとなります。

実は、昨年12月に現役ご退職の記事を拝見して、ひとつお誘いしたいと思うようになりました。稲城市の主催で「おもちゃの病院」というおもちゃ修理のボランティアをしています。最初からご参加ということではなく、来週ある開院に遊びに見えませんかというお誘いです。
 稲城市広報:http://goo.gl/A0akIx (一面の左下をご覧ください)

現在、3名のドクターと受付の4人態勢で、技術レベルも低いので、ラジオペンチさんには役不足の催しですが、もしご関心いただけたら、と思い、ちょっと覗いていただくことをお誘いする次第です。

昨年末の開院では、大量のおもちゃ入院が発生しましたので、はじめて記録を公開しました。まだ記録途上ですが、ご覧いただくと治療の内容も見ていただけると思います。
 公開サイト:http://inagitoy.blog.fc2.com/
(目次リスト http://inagitoy.blog.fc2.com/blog-entry-1.html
ただし、ややこしい治療から書き出していしまいました。平均すると単純な故障や勘違いも多いです。

ここでは説明に限界もあります。もしご関心いただけたら、書き残したアドレスにメールをいただけましたら、折り返しであらためてご挨拶させていただきます。

突然のお誘いで恐縮ですが、ご検討いただけますと幸いです。

No title

今晩は、コメントというかお誘いありがとうございます。

12月に現役引退してますので、ご迷惑にならない範囲でお役にたてれば嬉しいです。

稲城市の広報のPDF拝見しました。2月28日の「第三回おもちゃの病院」ですね、ちょっとお伺いさせていただきます。

http://macos.way-nifty.com/home/
のブログにコメント入れて、メールアドレス連絡します。よろしくお願い致します。

No title

早々のご返信ありがとうございました。おもちゃ病院山本です。コメント欄にメルアドを記入したので、オーナー様には見えると思っていました。ずっと更新していないブログまでお越しいただいて恐縮ですが、メルアド欄に書いても見えないようですね(同じFC2の自分のとこで判りました-メールアドレスは取得できませんでした)。
つきましては、お手数恐縮ですが、以下のアドレス宛メールにて、もう一度ご発信いただけますでしょうか。
toyhospital@googlegroups.com
折り返しであらためて自分のアドレスからご挨拶させていただきます(アドレスはメーリングリストですが、部外からの投稿は管理人にだけ配信されます)。
もしメンバーに公開してよろしければそれも可能ですが、最初は私だけが拝読することにしようと思います。面倒なことになって恐縮ですが、よろしくお願いします。
遅い時間まで仕事場におりましたので、今から帰宅移動です。次の行動は明日になってしまいますことお詫びいたします。

re:山本様

お手数をおかけしてすみません、
コメントの管理者画面から山本様のメアドが出てきました。
メールを両方のアドレスに発信しましたのでよろしくお願い致します。
カレンダー
05 | 2017/06 | 07
- - - - 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コード