nobchaの電子回路日記ブログ                             2010.10.07 2010.12.31改

 

PIC16F88でLCメータ実験(74HCU04使用)  @2010

1. はじめに 

 オーストラリアのハムクラブが作ったものからアイデア頂きオリジナル仕様にして作ります。このLCメータはフランクリン型発振回路でLC発振させ、その周波数をカウンタで計り、参照用コンデンサ(精度が良いものを使う)から測定LあるいはCの値を算出するという方式です。日本でもCQ誌発表のもの含め、たくさんの方が移植、追試されています。またキットでも売られているようです。

 フランクリン型発振回路に74HCU04Aを用います。カウンタはTMR0とTMR1を使います。表示はPIC12F629などでも採用したTC4040Bカウンタ経由16文字2行LCDです。カウンタ用の基準発振周波数にもなるPICの発振は簡易カウンタということもあり、内部発振4MHzを選びました。

 元ねたは次のURLを参照願います。

  http://yd1chs.wordpress.com/2009/09/12/homebrew-vj3bhr-lc-meter/

 

2. 試作機の仕様は 

 LCメータ仕様は次の通りです。
項番 項目 詳細説明
 1 フランクリン型発振回路を74HCU04Aを用いて構成します。参照用C切り替えはTQ2リレーを使います。スイッチで、LC変え周波数を計ります フランクリン型発振回路のLとCを基本発振、更に参照用Cをリレーで追加して周波数測定します。その測定値を元に被試験LあるいはCの値を算出します。算出計算式や使い方は後で詳しく説明します。
 2 Lは1μHから2mH,Cは10pFから0.01μF(基本のLは22μH、Cは1000pF、参照用のCは1000pFとします) 発振回路の安定度、カウンタの測定限度などからこの程度です。カウンタの周波数もついでにLCDへ表示します。
 3 16ビットカウンタからなるタイマー1(TMR1)を使用してゲートタイムを作る LCメータでは大体10kHzから3MHzぐらい計れれば良いので10m秒をゲート時間にします。(1μS*10000カウント)
 4 8ビットカウンタのタイマー0で入力周波数をカウントして256カウントでオーバーフローしたら変数をソフトで加算していく TMR0の入力の周波数応答の関係でTMR0のプリスケーラを1:2に設定して使います。早い周波数だと割込み処理時間が次のカウントアップに影響を与えるのでオーバーフロー監視する
 5 カウンタの処理は割り込みで行います TMR0,TMR1の割り込みを監視してTMR0のときは変数のカウントアップ、TMR1の時はゲート時間終了でカウント値計算表示を行う
 6 MAPLAB+PICKIT2+HiTEC C 開発環境はMPLABV8.46 HiTECH C V9.71a
 7 表示は1602コンパチLCD(16文字2行) SL1602BSL8
 8 LCDインタフェイスはTC4040B経由 TC4040Bバイナリーカウンタにパルスを送り込みRS,4ビット信号をラッチ。PICのポートからはEN信号を出します

3. 回路図 
 

 実験回路では、CPU+ICSPコネクタ部をデバッグ用WSNIK基板を使用します。TC4040B+1602インターフェイス用フラットケーブルコネクタはユニバーサル基板にハンダ付けしたものを使います。この2枚の基板にブレッドボード用足を追加、リレー、フランクリン型発振回路の周辺LCR類をブレッドボード上に配置します。

1.  74HCU04Aで入力出力間にフィードバック用抵抗をつけて、発振回路を構成します。C2outのモードをTRISAレジスタ出力/入力設定へと切り替えることでカウンタTMR0への入力がON/OFF制御されます。

2. PORTBはデジタル設定でRB0がTC4040Bへのクロック出力。RB1はEN駆動信号。RB0からTC4040Bのクロックと積分回路経由でリセット端子につないで、LCD4ビット出力信号を出力します。RB2はC/CALモード切替スイッチ入力、RB3は参照用C接続用リレー駆動です。RB4はデバッグ動作表示用のLEDへ接続されます。(バグ発見!PICのポートでリレー駆動できず、論理反転しデジトラしてください)

3. 100μS以上クロックをHにすると積分回路がHになりカウンタがリセットします。カウンタはクロックのH→Lエッジでカウントします。LCDのDBに出力するデータに当たる数値分をパルス出力でTC4040Bに与え、EN駆動のRB1をLにしてLCDに送り出します。

4. クロックは内部4MHzとします。

 

    回路図中のSC1602接続ピン番に誤記があります。#7〜#10を#11〜#14に読み替え配線願います。

 回路図は水魚堂さんのBSchを使いました。また関連記号類も利用させていただきます。公開された作者さん達のご努力に感謝いたします。

http://www.suigyodo.com/online/schsoft.htm

 

5. 計算法 

  このLCメーターではまずはキャリブレーションモードとして基本部分のL+Cによるフランクリン型発振回路で発振させ周波数F1を得ます。続いて値が正確な参照用コンデンサをリレーで並列に追加して発振させ周波数F2を得ます。最後に被測定Cを並列に入れるか、被測定Lを直列に入れて周波数F3を計ります。以上の3段階動作で得た周波数と参照用Cの値から被測定のCあるいはLを算出することができます。

 どのような原理でそんなことができるのか。次に説明します。

 

6. プログラム
 

  プログラムはMAIN部LCD表示部に分けて書いております。delay.hと_lcd_.hを引きこみ必要です。

  コンフィグ設定はBORDIS & UNPROTECT & PWRTEN & WDTDIS  & LVPDIS & MCLREN & INTCLK & DEBUGENです。ブラウンアウト無し、プログラム内容プロテクトせず、パワーオン時タイマー待ちスタート、ウオッチドッグなし、低電圧書き込みなし、クリア有、内部発振、DEBUGするということにします。

 

7. 測定手順

番号 処理ステップ 内容
1 キャリブレーション 電源ONかリセット時にキャリブレーションモードになり、その旨表示。スイッチがCAL側になるのを待つ
2 基本回路の22μHと1000pFで発振周波数を取得する。これをF1として記憶する
3 リレーをONして参照コンデンサCref1000pFを並列に付加する。そして周波数をはかり、F2として記憶する
Crefを基準にしてF1,F2からC,Lを導出する
4 測定 キャリブレーションが終わるとスイッチの状態が一旦L測定になるのを見極め、その後L測定かC測定かのスイッチ状態により計算処理(LかCか)を選択する
5 周波数を測定しF3とし、F1,F3,C,Lの値から、スイッチ設定に応じLtestあるいはCtestかを計算し、Ltest値あるいはCtest値として表示する
6 周波数が低いとき(2kHz以下)はエラーにする。またL測定時周波数が低いとmH単位に切り替える。

 

 8.  実験風景

ブレッドボード上に並べて実験をします。

 

9.  次はどうなる 

  これによりPIC16F88でLCメータを作るという実験の第一段階が終わりました。フランクリン型発振回路は外付け74HCU04Aを使いました。次はフランクリン型発振回路をPIC内蔵のコンパレータで構成します。

バグ対策情報 2012.01.29 この時点では動作していたので気が付きませんでしたが、リレーの定格駆動電流が30mAなので、ドライバ追加必要です。デジトラなどを入れて論理を反転して駆動してください。

 

 

「ご注意」 このWEBに掲載された内容(文面・回路・写真・プログラムなど)には著作権があります。無断転載やコピーは法律に抵触する場合があります。何か疑義ある場合はお問い合わせください。また本WEBに掲載された実験や試作はnobcha個人の趣味で行っております。ここに示す結果の再現性や正確性は保証するものではありません。あくまでも個人の趣味の範囲で参考にしてください。

PIC16FのTOPへ       WEB目次へ 戻る 

アイコンは「牛飼いとアイコンの部屋」から提供いただきました  http://www.ushikai.com/

inserted by FC2 system