nobchaの電子回路日記ブログ                             2010.10.15 2011.4.30改

 

PIC16F88でLCメータ実験(内蔵コンパレータ使用)@2010、2011

1. はじめに 

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

 その1ではフランクリン型発振回路に74HCU04Aを用いました。その2ではPIC16F88内蔵のコンパレータを組み合わせて作ります。カウンタはTMR0とTMR1を使います。表示はPIC12F629などでも採用したTC4040Bカウンタ経由16文字2行LCDです。 

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

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

 

2. 試作機の仕様は 

 LCメータ仕様は次の通りです。
項番 項目 詳細説明
 1 フランクリン型発振回路をPIC16F88内蔵のコンパレータを用いて構成します。参照用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.  コンパレータ1をフランクリン型発振回路に使用します。回路構成とパラメータは元ねたを参考にしました。コンパレータ2の出力はオープンドレインなので、プルアップ。C2outのモードをTRISAレジスタ出力/入力設定へと切り替えることでカウンタTMR0への入力がON/OFF制御されます。

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

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

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

全体回路図とコンパレータの内部接続がわかる回路図を次に示します。

 

 

  バグ情報:回路図中SC1602のピン番に誤りがあります。#7〜#10を#11〜#14へ読み替えて配線お願いします。RB2のポートには10kオームのプルアップ抵抗が必要です。またTQ2リレーの定格駆動電流が30mAのためにPICポート直接駆動はできず、デジトラを入れて論理反転する必要があります。

 

 回路図は水魚堂さんの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として記憶する

F1が1064.kHz,F2が765.6kHzで計算結果がCは1073pF(表記は1000pFのF級),Lは20.8μH(表記は赤々黒)という値です。

3 リレーをONして参照コンデンサCref1000pFを並列に付加する。そして周波数をはかり、F2として記憶する
Crefを基準にしてF1,F2からC,Lを導出する
4 測定 キャリブレーションが終わるとスイッチの状態が一旦L測定になるのを見極め、その後L測定かC測定かのスイッチ状態により計算処理(LかCか)を選択する

縦型で100と書かれたインダクタ(10μH)が9.1μHとでました。

5 周波数を測定しF3とし、F1,F3,C,Lの値から、スイッチ設定に応じLtestあるいはCtestかを計算し、Ltest値あるいはCtest値として表示する
6 周波数が低いとき(2kHz以下)はエラーにする。またL測定時周波数が低いとmH単位に切り替える。  
 

8.  次はどうなる 

  これによりPIC16F88でLCメータを作るという実験が終わりました。フランクリン型発振回路はTC4069から始まり、LM311や74HCU04Aなどを使ってLTSPICEも経験しました。次にPICでは簡易周波数カウンタを手がけ、8ピンのPIC12F629からPIC16F88までTC4040B経由のLCD表示でまとめました。それらを複合して、更にフランクリン型発振回路をPIC内蔵のコンパレータで構成することで実用性が期待できる回路までまとまりました。

 次にこの延長で手がけるならばパターン設計ではないかと思っています。でもスタートアップにちょっと時間が掛かりそうです。→その後、LCDの4ビット並列接続にも対応し、基板化しました。追試される場合はそちらを参考にされる方がよいと思います。

 

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

PIC16FのTOPへ       WEB目次へ 戻る 

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

inserted by FC2 system