PIC24Fの 50MHz 周波数カウンタの製作


【周波数カウンタの概要】

少ピンで安価なPIC24Fを使った周波数カウンタの製作例です。
PIC16、PIC18とそれぞれ周波数カウンタを製作してみましたがやはり性能は
一番良くなりました。50MHzまでPICだけでカウントできます。
また基準パルスの出力機能も一緒に作りこみましたので、いろいろな使い道
があると思います
外観は下記のようになります。透明ケースに実装しました。
  

 液晶表示器に小型のものを使いましたので
 そのまま基板に直接実装できました。
 透明なケースなので液晶関連の加工が不要
 ですので加工が楽です。
 
 ピンジャックの左側が基準パルス出力用
 右側が周波数カウンタ入力用です。




【機能仕様概要】

全体のブロックは下図のようになります。





【回路】

 この周波数カウンタの回路図は下図のようになります。
 測定アンプ用のCMOSインバータに74HCU04を使っていますが、Uタイプは内部の
出力バッファが無いタイプで、入力アンプをこのインバータで構成すると安定なリニア
動作をします。アンプの構成はフィードバック抵抗を付けるだけですので簡単です。
R4の2kΩの抵抗は無いほうがゲインが大きくなります。実際に使う目的に合わせて
抵抗の有無を決めて下さい。

 このインバータの残りをパルス出力のドライバとして並列接続して使っています。
このCMOSインバータは出力を並列接続することができ、それだけ出力電流を大きく
することができます。

 表示としては液晶表示器を使います。16文字2行の小型でよく使われているものを
選択しました。接続は回路図のように、4ビットでデータを送信する方式とします。
また輝度調整用の可変抵抗も用意しておきます。R5は液晶表示器のバックライト用
ですので、必要な場合のみ取り付けて下さい、バックライトを使うと電源電流が30mA
から40mA程度増えます。

 電源にはリチウムイオン充電池を使うことにしましたので、3.7V供給になりますが、
液晶表示器用に5Vを作成するためスイッチングレギュレータを使いました。
マイクロチップ社のチャージポンプ方式のスイッチングレギュレータで、コンデンサ3個
だけで100mA以上の電流が流せますので便利に使えます。
通常のニッカド充電池が3本あれば同じように供給可能です。

 高精度発振器の出力振幅がやや低いので、10kΩの抵抗で電源電圧の中心付近の
パルス信号となるようにして、クロック入力のスレッショルド条件を満足するようにします。
バイパス用のコンデンサは必ず必要で、0.1μF程度のコンデンサをICの電源ピンの近く
に配置します。





【基板組み立て】


左側から、高精度クリスタル発振器、PIC
液晶表示器となります。




電源にはリチウムバッテリから5Vを生成する
ためDC/DCコンバータを使っていますが、
表面実装の小型チップですので、はんだ面側
に実装しています。


バッテリには薄型のリチウムイオン充電池を
使い、基板の下側に両面接着テープで固定し
ています。




【プログラム製作】

 プログラムはすべてフリー版のMPLAB C30コンパイラで作成しています。
周波数カウンタの部分と基準パルス発生器の部分とがありますが、いずれも
大部分を内蔵モジュールで実現していますので、プログラムの作業はほとんど
が液晶表示器を制御する部分です。

内蔵モジュールの動作のさせ方は、下図のようにしています。
 まず周波数カウンタ部は、図の(a)のように、タイマ4を使って内部クロックを
元にして正確な1秒のインターバル割り込みを生成します。
 この割り込みで、タイマ1のT1CONレジスタのTONビットをオンオフします。
これで正確な1秒間だけ、タイマ1が外部入力信号のパルスでカウントされます。
タイマ1のオーバーフローをモニタして、オーバーフローしたときに、タイマ5を
カウントアップして、32ビットカウンタを構成します。
 この32ビットのカウント値が測定した周波数ということになります。

 タイマを2個使って32ビット連結タイマを構成できますが、外部クロック入力は
常に内部クロックに同期させた構成にしかできませんので、高速の外部クロック
入力ができません。そこで非同期カウンタが構成できるタイマ1を使います。

 次に基準パルス出力の方は図(b)のような構成とします。
まずタイマ2をベースにして出力コンペア1モジュールをPWMモードで動作させます。
そしてタイマ2を6.4MHzの内部クロックで動作させます。これで、比較レジスタの値
により任意の周波数の出力がOC1に出力されます。
この出力をRP8ピンに割り当て、出力を1kΩの抵抗経由でそのままRP7ピンに
折り返します。
 このRP7ピンをタイマ3の外部クロック入力に割り当て、タイマ3を外部クロックモード
で動作させます。出力コンペア2モジュールのタイムベースをタイマ3とすれば、
出力コンペア1のPWM出力をクロックとして動作することになりますから、
出力コンペア2モジュールもPWM動作とすれば、さらに低い周波数のパルスがOC2
に出力されます。この出力をRP6ピンに割り当てて外部パルス出力とします。
出力周波数が高い場合には、出力コンペア2側だけを使って、タイマ3を内部クロック
で動作させます。






★★★ プログラムファイル ダウンロード





   目次ページへ