PIC18Fを使った周波数カウンターの製作

 前回の「PIC18Fを使ったLCメーターの製作」に続いてPIC18Fを使った電子工作です。PICと言えば、「周波数カウンター」ですね。←意味不明ですが・・・周波数カウンタは、AVRよりはPICに軍配が・・・・というような意味です。^^;
 LCメーターは、周波数カウンターで発振周波数を測定して、そこからコンデンサの容量やコイルのインダクタを計算しています。ということで・・周波数カウンターは、すでに出来たようなものです。
 過去、「PICを使った周波数カウンター」で製作していますが、今回は外付けのプリスケーラを使ってVHFからUHFまでKHz単位で測定できるものを作ります。プリスケーラは、PLLなどに使用される富士通製のMB504を使用します。MB504は、入力が10MHz~500MHzまで対応し、分周比は、32,33,64,65を選択できます。今回は、32分周を使用します。

 いつものようにブレッドボードで開発します。入力は、V,UHF帯対応の10~500MHzとそれ以下のHF帯対応の0~20MHzの2系統とします。PICは、18ピンのPIC18F1320を使用します。
 V,UHFは、入力アンプを内蔵しているMB504へ直接入力とします。MB504の出力はECL(電流モード)なので抵抗で電圧変換し、さらにシュミットトリガインバータの74HC14でロジックレベルに変換します。
 0~20MHzは、2SK241とトランジスタを使った入力アンプへ入力することにします。アンプの出力もシュミットトリガインバータを使用して信号レベルを安定化します。

 PIC18Fは、Timer1でゲート時間を生成して、Timer0でカウントするというPICの周波数カウンターでは一般的な方法で使用します。ゲート時間は、0.2秒、0.5秒、1秒の3段階とします。
 PIC18Fを外部クロックモジュールから供給する12.8MHzで動作させると、Timer0ではプリスケーラなしで2MHz程度までしか測定できません。よってTimer0のプリスケーラを1/1、1/4、1/8の3段階切替として最大20MHzまでカウントできるようにします。
 なお、外部プリスケーラからのカウントは、内部プリスケーラを強制的に1/8とします。これにより最小測定単位が、32*8=256Hzに固定されますが、KHz単位の表示には十分と判断しました。

 回路図です。2系統の入力は、ロジックレベルでの切替となるのでNANDなどの汎用ロジックを使ったマルチプレクサなども検討しましたが、基板実装の制限から単純にトグルスイッチによる切替としました。シュミットトリガインバータも74HC14ではなく、シングルロジックのLMOSを2個使用することにしました。

PIC18F周波数カウンター回路図
PIC18F周波数カウンター回路図

 PCBEで作成した基盤の実装図です。基板は、共立電子で販売されているガラスエポキシのユニバーサル基板で秋月電子のポリカーボネートケース中サイズにピッタリです。(この基板サイズと同じものが秋葉原の千石電商の店頭でも販売されていた記憶があります。)

PIC18F周波数カウンター基板パターン
PIC18F周波数カウンター基板パターン

 基板に部品を実装しました。ゲート時間とプリスケーラ(PICのTimer0前置プリスケーラ)の切替はLED内蔵プッシュスイッチとしました。

PIC18F周波数カウンター基板表
PIC18F周波数カウンター基板表
PIC18F周波数カウンター基板裏
PIC18F周波数カウンター基板裏

 液晶モジュールは、秋月電子の8文字2行の白文字小型液晶モジュールを使用します。全体の消費電流は最大で60mA程度となりました。バラックで動作確認した後、いつものポリカーボネートケースに組み込みました。緑LEDのスイッチがプリスケーラ切替でLEDが電源ステータスを示します。青LEDのスイッチがゲート時間の切替でLEDがゲート時間に応じて点滅します。

PIC18F周波数カウンター
PIC18F周波数カウンター

 左は、信号発生器から12.345678MHzの入力時です。プリスケーラは1/8なので最小周波数単位の8Hzで丸められた値を表示します。右は、1.234567MHzを入力したときです。プリスケーラは1/1なので1Hz単位の測定が可能です。なお、プリスケーラが1/1では2.4MHzまで、1/4では12MHzまで、1/8では24MHzまで測定できました。

 V,UHF対応の外部プリスケーラ側で周波数を測定してみます。信号発生器から123.456MHzを入力したときにゲート時間を1秒と0.2秒に切り替えてみましたが、ともに正確に計測します。

 500MHzまでは問題なく測定できました。ためしに555.555MHzを入力してみました。一応は計測できるようですが、この辺りが外部プリスケーラの測定限界です。

 秋月電子の液晶は、バックライトの光源漏れがすごいです。白色LED懐中電灯としても使用できそうです。通常は、透明ケースでの使用を考慮しないので問題ないのでしょう。また、小型と言えどもいつも使っている8文字2行の液晶モジュールと比較すると縦横と厚みも大きいので小型ケースに収納するには注意が必要です。今回もBNCコネクタと干渉するのでBNCコネクタ側を加工する必要がありました。


 ソースプログラムです。MPLAB IDE v8.30とMPLAB C18で開発しました。周波数カウンタの部分は、前回のLCメーターとほぼ同じです。0.1秒単位のTimer1のコンペアマッチ割り込みをゲート時間分だけ繰り返してTimer0でカウントする方法です。各ゲート時間に合わせた処理ディレイも適当にいれて(ほぼ)正確に周波数が測定できるようにしてあります。(校正に使用した信号発生器の周波数精度は保障されていませんが・・・・)
 ゲート時間とプリスケーラは、それぞれ3段階の切替としましたが、実質3段階も必要かといえば疑問です。2段階にすれば安いトグルスイッチが使えるメリットも考慮すればちょっと無駄だったかなぁ・・というところです。
 LCD関係のライブラリは「PIC18Fを使ったLCメーターの製作」と同じく他のサイトのものを改造して利用しているのでここへは掲載していません。・・・が、よく調べてみるとMPLAB C18には標準でLCD関連のライブラリが用意されているようです。(でも使うのが大変そう・・・)

アイコン

pic18f_frequency_counter.c 4.87 KB 51 downloads

...

1件のピンバック

コメントは現在停止中です。