【概要と性能仕様】
USB2.0対応の28ピンPICであるPIC18F2550を使って、超簡単な構成の周波数カウンタ
を作ってみました。
もちろんUSB2.0でパソコンに接続して、パソコンからプリスケーラの切替制御や、
測定結果の周波数の入力などが自由にできます。
電源をUSBのバスパワーにしましたので、電源も不要なため持ち運びに便利な道具に
なりました。
8桁表示で、1Hz単位なら最高10MHz 8Hz単位で最高50MHzまでカウントができます。
PICだけでこれだけの性能の周波数カウンタがてきてしまいますので、ハンディな測定器
としてはベストだと思います。
外観は下記のように透明プラスチックケースに入れてしまいました。
【全体構成】
この周波数カウンタの全体構成は非常に簡単で下図のような構成になっています。
PIC以外には高精度の12.8MHz発振器と入力のアンプとして使っている74HCU04だけ
です。
発振器のクリスタルが2種類ありますが、PICのシステムクロックには、USB用に使う
ため4MHzの倍数の周波数しか使えませんので、20MHzのクリスタルを使いました。
周波数カウント用の1秒ゲートパルスを作成するためのクロックとしては、高精度の
発振器として12.8MHzの発振器が安価で入手しやすいので専用につかうことと
しました。
この構成で周波数カウンタとして動作させるには、内部モジュールを下図のように使います。
まず周波数をカウントするカウンタ本体はタイマ0を16ビットで外部カウンタモードとして
使います。これで、外部ピンのパルスをカウントしますが、ソフトウェアで1秒間だけイネーブル
にされるようになっています。このカウントの間にオーバーフローしたときは、ソフトウェアの
カウンタ変数を+1します。
1秒の時間を生成するために、まずタイマ1を外部カウンタモードで12.8MHzの外部パルス
で動作させます。このとき正確な一定周期でカウントするように、CCP1モジュールをコンペア
モード使い、一致したときには、タイマ1をクリアするように設定します。
こうすると、プリスケーラに1/8を使うと、コンペアレジスタに64000を設定すれば
12.8MHz÷8÷64000=25Hz となりますから。CCP1は正確な40msec周期で割り込みを
発生し、割り込み処理速度などの影響を受けることがありません。
この割り込みを25回受け付けたところでちょうど1秒となります。
これで正確な1秒ができますから、タイマ0とタイマ1をクリアしてから両方をスタートさせ、
25回目の割り込みで直ぐ両方を停止させれば、正確な1秒間+数サイクルの間だけ
タイマ0が外部パルスをカウントすることになります。
割り込みがCCP1しかありませんから、この数サイクルは常に一定になりますので
12.8MHzを微調整すれば正確な1秒の一定値とすることができます。
これでぴったり1秒間のカウントをしますから周波数を測定したことになります。
【回路】
上記の構成を回路図にしたのが下図となります。
ここで入力アンプに74HCU04を使っていますが、Uのついた出力バッファ無しのタイプ
を使う必要があります。そうしないとリニアなアンプにはなりません。
アンプ出力をそのままPICのタイマ0の外部入力ピンに接続していますが、この入力
ピンはシュミットトリガ入力になっていますので、安定なカウント入力としてくれます。
このアンプでおよそ0.3Vの入力電圧パルスであれば正確にカウントします。
電源はUSBバスから供給しますので、USBコネクタにパスコンを付加しています。
12.8MHzの発振器の出力は2V程度の振幅しかありませんので、そのままPICに入力
すると電圧不足になりますので、74HCU04の余っているゲートを使って波形を整形
しています。
入力アンプの入力コンデンサには、低い周波数から高い周波数まで通すように
10μFの大容量セラミックコンデンサを使っていますが、チップ型なので基板のパターン
面に直づけしています。
【組み立て外観】
上記回路で組み立てた周波数カウンタです。部品点数が少ないので
工作は簡単に済みます。
![]()
基板部は部品も少ないので小さな基板に
納まっています。
クロック用のクリスタルが、PICのメインクロック
用の20MHzと、周波数カウンタ用の正確な1秒
ゲートを作るための12.8MHzの高精度発振器
の2つがあります。
入力アンプには74HCU04を使いましたので
すっきりしています。
液晶表示器を接続すれば、これで構成部品は
すべてです。
USBコネクタを接続すれば動作を開始します。
常にローカルで動作して液晶表示器に周波数
を表示します。
透明プラスチックケースに実装しました。
入力用のピンジャックだけ追加しました。