PIC18Fを使ったLCメーターの製作

※スミマセン。長文です。画像も多いです。
※コイルのインダクタンスが1.0~999.9uHの時に小数点以下が正しく表示されないプログラムミスがありました。ご指摘ありがとうございます。→西山さま(2009-07-11)・・・1.0以下の表示も直しました。(2009-07-27)


開発
 PIC18Fは、MPLAB IDEとMPLAB C18 student editionでフリー(無料)な開発環境が構築できます。秋月電子でお手ごろ価格でPIC18F1320とPIC18F2550を調達してあるのでせっかくだから何か作ろうと考えて思いついたのがLCメーターです。
 「LCメーターの製作」ですでに製作しています。・・が、製作当時、PICで作り始めたのですが、開発環境のmikroC試供版の制限を回避するために途中でワンチップマイコンをAVRに変更したという経緯がありました。今回のPIC18Fは、ほぼ一部(ある期間を過ぎると最適化が無効となるらしい)を除いて制限なしに開発できるので初志貫徹でPICを使って作ってみようと思います。

 LCメーターとしての原理は以前のものと同じです。アンバッファインバーター74HCU04を使用したフランクリン発振回路の発振周波数変化から未知のコンデンサ容量やコイルのインダクタンスを測定します。

 まず最初に、発振回路の周波数を測定するために周波数カウンタを作成します。PIC18F2550で周波数カウンタを実験していますが、前回のLCメーターの仕様から18ピンのPIC18F1320でも十分だと気づいて途中でPIC18F1320に変更しています。どちらもMPLAB C18で開発でき、デバイス独自のコンフィグレーションが異なるだけで同じソースプログラムで動作しました。

 ところが・・・・・・・、コーディングテクニックがないので、どうやってもPIC18F1320のフラッシュメモリ容量の8Kを超えてしまいます。・・・ということで、再びPIC18F2550に戻します。^^;

 今回は、発振回路に使用するインダクタを色々とテストしてみましたが、これといって選択の決め手が見つかりませんでした。言い換えればどの種類を使用しても大きな問題はなさそうです。ただ、値(インダクタンス)は、発振する周波数に直接影響があるので、測定対象のコンデンサやインダクタを接続しても安定して発振する値を選択する必要があります。例えば、電源用パワーインダクタの100uHを使用したときには、1uFを超える容量まで測定できましたが、100pF以下の値で大きな誤差が出ました。大きな容量は「AVRを使ったコンデンサー容量計の製作」で作成したもので測定できるので、今回は、測定最大容量を0.47uFを目標にしてインダクタを選択しました。

 フランクリン発振回路の発振波形です。LC回路からは、きれいな正弦波を確認できました。今回は、アンバッファインバーター74HUC04の出力信号をさらにバッファアンプで整形してPICのTimer0でカウントすることにしました。

 消費電流は、キャリブレーションリレーが動作した時の最大値で60mA程度です。測定時は30mA弱となります。電池とDC-DCコンバーターでも問題なさそうですが、今回は外部電源とします。

 回路図です。前回のLCメーターを大きく異なるところはありません。部品数も少なく簡単です。ただ、PIC18Fは、十分なI/Oポートがありそうですが、入力専用だったり(たとえばRC4やRC5など)、ディジタル入出力に切り替えるのに手間がかかったりと変な仕様になっています。あと、内蔵プルアップがPORTBのみしか出来なかったりと、AVRを一度でも使うと使いづらいと感じてしまいます。

※単に私が使い方を知らないだけ・・・ということも考えられますが・・・

 基板の部品実装図です。上にも書きましたが、PIC18Fのポートに変な制限があるので、単純な回路なのに配線の取り回しが難しかったです。

PIC18F LCメーター基板パターン
PIC18F LCメーター基板パターン

 さっそく作成しました。下の画像は鏡面画像ではありません。間違い探しでもありません。ひさびさにやってしまいました。・・・・PICの1番ピンを間違えて作ってしまいました。つまり、左のものはPICを基板の裏に実装しなければ動作しないものです。最初に実装図を間違えて作ったことが原因です。PCBEで28ピンのICソケットを貼り付けるときに「回転」させようとして「反転」させたようです。
 電源つないでもまったく動作しないので、まる1日以上、はまってしまいました。いくら実装図と比較しても間違いは無いし、回路図と実装図のチェックでも見逃しました。

 あらたに作り直して電源をつなぐと一発で動作しました。 

 今回は8文字2行の小型LCDの手持ちが少ないので、秋月電子で最近発売された白抜き文字の8文字2行のキャラクタ液晶モジュールを調達して見ました。ところが、思っていたより大きくて厚みも倍ほどあります。ケースは、同じく秋月電子のポリカーボネートケース中サイズを使用しますが、場合によっては、この液晶モジュールのサイズでは収容が難しいかもしれません。
 実際に使用してみましたが、文字サイズも多少大きくて見やすい液晶です。ただ、バックライトを点灯しないと見にくいのでバックライトを点灯すると消費電流が==60mA程度==20mA程度も流れます。今回の3端子レギュレータは、定格100mA出力までなのでちょっと無理があります。・・・ということで、今回はこの液晶モジュールの使用を見送ることにしました。

 完成しました。電源を入れると自動的にキャリブレーションを実施し、標準コンデンサとインダクタの値を表示して測定待ちになります。赤いLEDのボタンは、手動キャリブレーションボタンで、赤いLED は通電表示です。青いLEDのボタンは、測定実行ボタンで青いLEDがキャリブレーション完了表示となっています。キャリブレーションが完了して青いLEDが点灯していないと測定が実行できないようになっています。
 測定端子は、「AVRを使ったコンデンサー容量計の製作」と同じようにICソケットを使用しました。
 
 コンデンサの容量は、最小0.1pFから最大で0.47uF程度まで測定できます。

PIC18F LCメーター

 コイルやインダクタのインダクタンスは、最小0.01uHから手持ちの最大の5.6mHまでは問題なく測定できました。手作りの空芯コイルのインダクタンスも測定できます。

 FCZコイルなど測定端子にささらないものは、ワニ口クリップやICクリップをつけた短いケーブルを使用します。インダクタンス測定側にスイッチを切り替えて、測定用の短いケーブルをつけた状態でキャリブレーションします。その後、FCZコイル等を測定すればおおよその値を測定することが出来ます。(この画像のケーブルは明らかに長すぎます。短いものを作っておけばいいでしょう。ただ、この状態で測定してもFCZコイルのインダクタンスは、ほぼスペックとおりの値が測定できました。)

 「AVRを使ったコンデンサー容量計の製作」で作った容量計と比較してみました。測定方法はまったく異なるのですが、大体同じような値を示します。特に誤差1%のフィルムコンデンサは、どちらも誤差範囲内の値で測定できました。

 以前作ったLCメーターと比較してみました。キャパシタンスもインダクタンスも多少、値はバラツキますが、大きな差は無いようです。古いLCメーターは、測定ごとに細かな値の変動があるのですが、今回、作成したものは、何回測定しても安定して同じ値を測定します。古いLCメーターは、内部の配線の取り回し等の影響が出ているのかもしれません。

 回路図を見てもらえればわかると思いますが、インダクタンスの測定側にトグルスイッチを切り替えた状態で測定端子を開放してキャリブレーションすると正常な発振が得られなくてエラーとなります。インダクタンス測定側でキャリブレーションするには、測定端子をショートしておく必要があります。ただ、測定端を延長しない限りは、どちらでキャリブレーションしても大きな差はないので、キャリブレーション時はキャパシタンス測定側に切り替えて測定端をオープンした状態で実施します。


ソースプログラム
 PIC18Fのプログラムは、MPLAB IDE v8.30とMPLAB C18 Student Editionで新たに作成しました。実は古いLCメーターのソースプログラム(AVR用)は、開発用PCのディスククラッシュでロストしてしまいました。印刷もしていなかったのでまったく新たに作り直すことになりました。ただ、そんなにややこしい処理はないので大して手間もかかりませんが、PIC18Fのクセ?(ちょっと変な仕様)にとまどいました。ほぼ前回と同じ機能のプログラムとなっています。参考になるかどうかわかりませんが、ロストしないように今回は貼り付けておきます。^^;
 LCD表示回りのソースプログラムは、もともとが趣味関係のメモ帳さんの公開されたAVR用のコードを趣味の電子工作の部屋byすんさんがPIC24用に改造したものをさらにテキトーに改造して使用させていただきました。この場を借りてお礼申し上げます。

アイコン

lc_meter_main.c 6.83 KB 237 downloads

...

9件のピンバック

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