1.はじめに

前回No.125では、GPSを使った1ppsユニットを作りました。次は、これを使用するカウンタを作らないと、何の意味もありません。そこで、普通のカウンタとしては少々使い難いのですが、長めのゲートタイムを使って0.01Hzまで測る、写真1のような校正用のカウンタを作りましたので紹介します。

photo

写真1 このような校正用のカウンタです。

このBEACONも長い間書いていますが、キット以外で周波数カウンタを作ったのは初めてです。その理由は簡単で、ソフトの割り込み概念が苦手、という私の事情です。昔から割り込み処理は頭痛のタネで、Z80の時代から一本道以外は迷子状態になります。これで鍛えましたので、また次のカウンタも作ってみようと思っています。

2.カウントの方法

まずは実験を行い、苦労して積み上げたカウント方法を説明します。要となる基準は、No.125で作ったGPSの1ppsです。1秒パルスですので、1回の間隔をゲートタイムとして使用すると、1Hzまで測れる事となります。10回(つまり10秒)で0.1Hz、100回(100秒)で0.01Hz、1000回(1000秒)で0.001Hzです。しかし0.001Hzまで測ろうとすると、1000秒=16分40秒もかかりますので実用的ではありません。トリマーを回すなどの調整に使えるのは、せいぜい100秒まででしょう。10MHzに対して0.01Hzで合わせられるとすると、誤差は±1×10-9乗になりますので、基準としては立派なものです。この値は無理としても、±1×10-8乗程度は期待したいところです。

GPSの出力は測定結果1のようなパルスです。立ち上がりから次の立ち上がりまでが正しい1秒です。最初はこのパルスをソフトで直接取り込み、立ち上がりから次の立ち上がりまでのパルスを数えていました。上手く動いたのですが、どうしても10MHzに対して2~4pps多くカウントしてしまいました。これはカウントしている途中で分岐を入れなくてはならず、遅れの影響が出てしまったことが理由です。普通に使うなら十分としても、校正用となるとまずい事になります。高精度を狙う時の難しさです。

photo

測定結果1 GPSの出力です。立ち上がりから次の立ち上がり間が正確な1秒となります。(※クリックすると画像が拡大します。)

そこで1ppsのパルスにはロジック回路を使って測定結果2のような1秒のゲートタイムを作りました。ゲートタイムの立下りで割り込みをかけ、カウントを止めて(ゲートが閉じるので実際には同時に止まっている)LCDに表示してカウンタをクリアします。そしてカウンタをスタートします。スタートしてもゲートが開いていないので実際にはカウントしませんが、ゲートが開くと自動的にカウントします。このような非常に単純な流れとなって、流れに分岐がありません。ソフト的にはゲートタイムに依存しない事となります。もちろん、ゲートが閉じている間に、LCD表示等の処理を全て終わらなくてはなりません。この処理に1秒かかる事はありませんので、心配は全くありません。この部分はロジック回路を使ったハードで作りました。但しゲートが開かないインターバルも10秒とか100秒になってしまいました。この時間については無駄ですので、もうひと工夫したいところです。

photo

測定結果2 74HC74で1秒幅のゲートパルスにします。(※クリックすると画像が拡大します。)

実験は、まず写真2のようにNo.2で紹介した「PIC/AVR開発用ボード」を使って動作テストをしました。入力信号はNo.122の可変クロックジェネレータを使っています。その後サンハヤトのICトレーナを使って、写真3のようにクロックの分周回路を追加テストしました。

photo

写真2 最初の動作実験です。

photo

写真3 サンハヤトのICトレーナ(左側)を使って分周回路の実験を追加しました。

3.回路

図1が回路になります。GPSの出力は測定結果1のようになりますので、これを74HC74で測定結果2のような1秒幅のパルスに成型し、ゲートタイムとして使えるようにします。次に74HC390で10秒と100秒のゲートタイムを作ります。CPUにはAVRのATmega165Pを使い、数えたパルスをLCDに表示します。

photo

図1 全体の回路図です。(※クリックすると画像が拡大します。)

ゲートタイムはロータリースイッチで1~100秒を切り替えています。CPUは基本的にゲートタイムを知らず、ただパルス数をカウントするだけです。ゲートが閉じた時にPB0~2の状態からゲートタイムを読み取り、表示の桁合せだけに使います。そのためにロータリースイッチは2回路を使っています。

ATmega168Pのシリーズには、クロックが16MHzと20MHzがあるようです。ここでは20MHz用を使います。しかし、タイマーを使ってカウントする場合、カウントするものの2.5倍のクロック周波数が必要となります。周波数カウンタの基準は10MHzが良く使われますので、25MHz以上のクロックでCPUを動かしたい事となります。つまりオーバークロックです。10MHzを1/2分周すれば良いのですが、それでは更に時間がかかってしまいます。そこでCPUがどの程度のオーバークロックまで可能なのかを、No.122で作ったクロックジェネレータで試したところ、33MHz程度は可能でした。あまり度が過ぎても良くないので、25MHzを使う事としました。これで25÷2.5=10MHzはクリアできます。実際には11.2MHz程度まではカウントできました。33MHzのクロックであれば、14.7MHz位まではカウントできる事になりますが、あまり意味はなさそうです。

4.ソフト

ソフトは、JA9TTT加藤さんがブログ(http://ja9ttt.blogspot.jp/)で発表されたものを参照しました。加藤さんのブログではこの記事を見る事ができないので、ブレッドボードラジオのページ(http://bbradio.sakura.ne.jp/)を参考にして下さい。とても詳しい説明があります。昨年(2014年)のハムフェアで加藤さんにアイボールした際に、引用を快諾して頂きました。ブレッドボードラジオの橋本さんにも承認して頂きました。ありがとうございます。従って、本機を参照して発表する場合、加藤さんとブレッドボードラジオの橋本さんの承認が必要となります。

加藤さんのソフトは12.8MHzを基準に用い、ソフトでゲートタイムを作っています。これをもっと応用しようとしたのですが、私の能力では逆立ちしても無理でした。基準が1ppsなので、そのまま使う事はできません。そこで加藤さんのソフトを基にして、カウントの方法を変えています。またゲートタイムのスイッチの位置によって、表示の桁合せをしています。しかしどう見ても加藤さんのソフトの方が完成度は上です。

このように作ったソフトですが、参考までに置いておきます。なお、PCの環境はWINDOWS XPで、BASCOM AVRの製品版 VER.1.11.9.8を使ってコンパイルしています。書き込みはAVR ISPmkII ですが、基板のISP端子との接続には自作の変換ケーブルを使っています。これ以外の環境についての確認はしていません。

ソフトダウンロード

5.作成

プリアンプは図2のように実装図を書き、写真4,5のように作成しました。この部分だけは部品面にシールドの付いたユニバーサル基板を使っています。一応デジタルではなくアナログという考えですが、効果は良く解りません。出力はそのままメイン基板にメッキ線で接続し、同時に固定しています。メイン基板はデジタルIC用の写真6のような基板を使用する事とし、図3のような実装図を作成しました。普通のユニバーサル基板でも良かったのですが、手持ちにある基板はチャンスに使用しないと残ってしまいます。電源とアースが引き回してあるので配線は楽ですが、逆に制約にもなってしまいます。自由度は普通のユニバーサル基板の方が上です。最近では流行らないように思いますので、入手できるかは不明です。普通のユニバーサル基板で十分です。写真7はレイアウトを考えているところです。

photo

図2 プリアンプ部分の実装図です。(※クリックすると画像が拡大します。)

photo

写真4 プリアンプをこのように作りました。

photo

写真5 プリアンプのハンダ面から直接メイン基板に接続します。

photo

写真6 メイン基板に使ったユニバーサル基板です。

photo

図3 メイン基板の実装図です。(※クリックすると画像が拡大します。)

photo

写真7 レイアウト中です。まだプリアンプは作る前です。

基板の作製後には写真8のようにバラックで配線を行い、動作確認をしました。LCDの配線などはケースに入れた時を考え、方向や長さを合わせておくと後が楽です。

photo

写真8 バラックで動作チェックをしています。

ケースにはリードのPSA-2を使用し、写真9のように穴あけを行いました。基板をケースに入れて、固定と配線を行ったところが写真10です。

photo

写真9 ケースの穴あけをしたところです。

photo

写真10 内部はこのようになりました。

6.使用感

思ったように動くのですが、「ん?」という時があります。時々数カウントジャンプする事がありますが、その原因が良く解りません。少なくとも100秒のゲートタイムであれば、0.1Hzまでは十分に信頼できそうです。ゲートタイムを作るのにロジック回路を使っていますので、そのパルスの立ち上がり立ち下りの誤差が積算されたり、ソフト上の遅れなど、誤差要因はいくらでもあります。元は正しいと言っても、ケーブルで接続しているため波形の訛り、ノイズの影響もあるのでしょう。全てを検証して、トータルとして納まる誤差を考える必要があると思いますが、今のところは1×10-8乗程度かなと思っています。ゲートタイムを正しく測る方法がありませんので、GPSによるものか、ソフトの不具合なのか、評価が難しい状況です。もう少し使って考える事にします。GPSの1ppsにも「ゆらぎ」があるという話がありますので、いずれにしても過信はしない事でしょう。

4月頃までは上手く動いていたのですが、GWの頃から1ppsが出なくなったりしました。良く解らない状況があり、暫く悩んでいましたが、窓を開けると1ppsが受信できて気がつきました。周囲の木々に葉が付いてきたためのようです。このような外的な要因を含めて、長期間のテストが必要です。

トータルすると、カウンタの校正用として作ったのですが、もう一歩か二歩の踏み込みが足りないと自覚しています。クセの強いカウントとも言えますので、まだ全く満足はしていません。今後も実験は続くのでしょう。