先々回のブログで「BPIB-RS232C 変換インターフェースの製作」をアップしましたが、周波数の測定はどうしても基準周波数との比較でおこなうため、精度よく測定するにはどのような周波数標準を持つかが鍵となります。
ということで、アマチュアが対処できるベストな方法をいろいろ考えた結果、GPSから送られてくる電波の中の時間信号を使うのがよいと考えました。GPS受信機を購入して、同期発振器を製作する手もあったのですが、数年前ごろから携帯電話の基地局で使われていたとされるGPS 同期発振器がシステム更新のため中古品が大量に市場に出てきました。幸いにもタイミングよく入手できたものが手もとにありましたので、これをつかって「我が家の周波数標準の製作」となったわけです。
写真に示したのが Trimble社の ThunderBolt というGPS 同期発振器で、出力に10MHZと1PPS(1秒)の両方を持っています。
カバーをはずした中に見られるように、 GPS 衛星に搭載されている原子時計の超正確な時刻情報である1PPS (1秒間に1個のパルス信号)を受信機から取り出し、OCVCXO (Oven-Controlled Voltage-Controlled X'tal Oscillator:恒温槽付電圧制御水晶発振器)(写真中の四角い金属製のブロック)をPLL技術を使ってロックし、正確な10MHzの信号を得るものです。
事前の予備実験で、必要な電源は、定常状態で実測したところ、+5V-250mA、+12V-125mA、-12V-3mAが必要であることがわかりました。もちろんウォームアップ時にはヒーター用の+12Vはマニュアルによればmax750mA流れるとありますので注意が必要です。
出力のピュリティも考慮して、トランスによるアナログ電源も検討したのですが、大きくかつ重くなるのがいやで、外付けの16V1Aスイッチング電源を使いました。
写真に見られるように、ケースは幅15cm、高さ5.5cm、奥行き20cmのものを使い前面にLCD(液晶)パネル、LEDランプそして後面に各種コネクタを配しました。
主電源(+16V)は写真右下のコネクタから入り、コモンモードチョークを経てアルミ放熱板に取り付けたシリーズレギュレータLM317に入り、+12Vを得ます。+5Vも同様にシリーズレギュレータ7805によって+12Vから得られます。当然のことながら、シリーズレギュレータの損失熱がかなりありますので、対策を打つ必要があります。
電源としては、さらに-12Vが必要ですが、せいぜい5mAもあればいいので、NE555で発振回路を作り、4倍圧整流ののち79L12で安定化しました。(上写真中の左側基板)
発振周波数は、約922Hzで-12V-10mAが取り出せました。このユニットは効率が悪く、そのときの入力電力は16V-35mAでした。
このユニットはRS232Cの端子を持っており、パソコンソフトを使うことで多くの情報を得ることができます。 (親元のTrimble 社より Tboltmon.exe というモニタ&設定ユーティリティソフトが提供されており、容易にネットからダウンロードできます。)
右上がパソコン画面ですが、パソコンとはCOM1のポートでつながっており、GPS衛星は6個捕捉しています。そして、ステータスはグリーンで、発振器はPhase Lockingの状態であり、10MHzの精度は0.10ppbであることを示しています。
このソフトはよくできているのですが、いちいちパソコンに接続するのも大変ですので、赤い枠で囲った、「Activity」と「10MHzの精度」のみをケースにつけたLCDに表示し、発振器がロックして正常なときはグリーンのLEDを、非正常のときは赤のLEDを点灯させることにしました。
そのためには発振器からRS232Cで送り出される多くのデータの中から、必要な部分を取り出さねばなりません。
マニュアルを調べてゆくと、データ中の 0xBF-ACという部分に情報があることがわかりました。左側の表にあるように、0xBF-ACブロックのACを0バイトとして数えたときの13バイトが「Activity」で、ここに0から6の数字(16進数)が入ります。
0ならPhaseLocking、、、6ならInactiveといった具合です。
さらに20,21,22,23の4バイトには10MHzの精度情報があり、この4バイトから計算して10MHzからの偏差±ppbを出せばいいのです。
右図は発振器からのRS232Cデータ( 9600, 8-N-1の条件で)を通信ソフトの「 Tera Term ]でファイルに落とし、(ここが肝心です)バイナリ-エディター「 BzEditor 」で開いたものです。上述したようなデータを見ることができます。
あとはお得意の?AVRをつかって、読み取り、判断、LCDとLEDへの表示をさせればいいのです、、、、が符号付浮動小数点の10進化には苦労しました。
今回AVRはATtiny2313、コンパイラにはWinavrを使用しましたが、もちろんArduinoでもいいですが吐き出されたファームが大きくなるのでATtiny2313にははいりきらず、ATmega44,88クラスが必要かも、、、、
AVR周りの概略回路を示します。RS232Cのデータはトランジスタを使った簡単なものですが、十分に機能しています。LCDにはお定まりの6線結線です。
基板もコンパクトなのでLCDのソケットに直付けしてあります。(右写真)
完成した全体写真を下に示します。
右下の橙色LEDは電源用、その上の赤いLEDはまだ発振器がロックしていないことを示し、LCDもわかりにくいですが、「 inactive 」を表示しています。
ウォームアップ時間が経過すると、右写真のように赤のLEDからグリーンのLEDに切り替わり、LCD表示も下段に「 status_locking 」、そして上段には「 +0.003ppb 」と正常な作動状況を示します。
また、裏面パネルは、向かって左側から、電源、GPSアンテナ(古いカーナビ用を流用)、10MHz出力、1pps出力そしてRS232Cコネクタと並んでいます。
先々回のブログでアップした
「BPIB-RS232C 変換インターフェースの製作」をつかって早速データを取ってみました。10秒おきに100回のデータですが、ほぼ8mHzの間に入っています。これは、10000000000分の8ということですからかなりの精度だと思います。ただし、よく考えてみるとこのデータは周波数カウンタ自体の精度を示していることでもあるのですね、、、、
マニュアルを調べてゆくと、データ中の 0xBF-ACという部分に情報があることがわかりました。左側の表にあるように、0xBF-ACブロックのACを0バイトとして数えたときの13バイトが「Activity」で、ここに0から6の数字(16進数)が入ります。
0ならPhaseLocking、、、6ならInactiveといった具合です。
さらに20,21,22,23の4バイトには10MHzの精度情報があり、この4バイトから計算して10MHzからの偏差±ppbを出せばいいのです。
右図は発振器からのRS232Cデータ( 9600, 8-N-1の条件で)を通信ソフトの「 Tera Term ]でファイルに落とし、(ここが肝心です)バイナリ-エディター「 BzEditor 」で開いたものです。上述したようなデータを見ることができます。
あとはお得意の?AVRをつかって、読み取り、判断、LCDとLEDへの表示をさせればいいのです、、、、が符号付浮動小数点の10進化には苦労しました。
今回AVRはATtiny2313、コンパイラにはWinavrを使用しましたが、もちろんArduinoでもいいですが吐き出されたファームが大きくなるのでATtiny2313にははいりきらず、ATmega44,88クラスが必要かも、、、、
AVR周りの概略回路を示します。RS232Cのデータはトランジスタを使った簡単なものですが、十分に機能しています。LCDにはお定まりの6線結線です。
基板もコンパクトなのでLCDのソケットに直付けしてあります。(右写真)
完成した全体写真を下に示します。
右下の橙色LEDは電源用、その上の赤いLEDはまだ発振器がロックしていないことを示し、LCDもわかりにくいですが、「 inactive 」を表示しています。
ウォームアップ時間が経過すると、右写真のように赤のLEDからグリーンのLEDに切り替わり、LCD表示も下段に「 status_locking 」、そして上段には「 +0.003ppb 」と正常な作動状況を示します。
また、裏面パネルは、向かって左側から、電源、GPSアンテナ(古いカーナビ用を流用)、10MHz出力、1pps出力そしてRS232Cコネクタと並んでいます。
先々回のブログでアップした
2 件のコメント:
サンダーボルトの簡易表示器を探してこのブログにたどり着きました。シンプルでコンパクトに纏められた作品に魅せられました。
そこでお願いですがこの作品のソフト、ハードを使わせていただきたく連絡いたしました。宜しくお願いします。
私の拙なるブログをご覧いただきありがとうございます。
当ブログの公開内容はご自由にお使いくださって結構ですが、それ以上の情報はお出ししないことにしていますのでよろしくご了承ください。
コメントを投稿