最終更新時間:2008年01月12日 15時58分49秒
[電子工作/AVR]
[電子工作/一般]
[電子工作/測定器]
[AVR,LCメーター,PIC,mikroC,74HCU04,ATmega168,容量計,測定器]
AVRのプログラムの公開を依頼されましたが、ソースプログラムをロストしているので不可能です。バイナリ(HEX)ファイルであれば、使用中のAVRから取り出すことが出来るのでおわけすることは可能です。新規に製作するのであれば、「PIC18Fを使ったLCメーターの製作」をお勧めします。
このLCメーターでは、0.2μF以上のコンデンサや極性をもつ電解コンデンサの容量測定が出来ない欠点があります。この欠点を補うコンデンサの容量計を「コンデンサ容量計の実験」で実験しています。(2008-01-12追記)
「AVRを使ったコンデンサー容量計の製作」で0.2μF以上のコンデンサや電解コンデンサの容量を測定する容量計を製作しました。(2008-08-30)
ほぼ同じ構成・機能のLCメーターを「PIC18Fを使ったLCメーターの製作」で作り直しました。絶対精度は不明ですが、測定安定度は良くなっています。(2009-04-16)
最近、ゲルマニウムラジオやトランジスタをつかったストレートラジオの製作にはまっています。ラジオとしての回路は、インターネットで検索したものを、ほぼそのまま利用しているのですが、アンテナや同調回路に利用するインダクタなんかはいろいろと自作して実験しています。そうすると、購入したバーアンテナやジャンクラジオから入手したバーアンテナやバリコンのインダクタンスやキャパシタンスが気になります。
特にラジオの聞こえが悪い場合は、回路が単純なだけに余計、バーアンテナやバリコンをうたがったりして・・・
ということで、インダクタンスやキャパシタンスを測定するLCメーターを作ることにしました。
インターネットで"LCメータ" "LC Meter"というキーワード検索するとたくさんヒットします。そのなかで、このサイトにあるものを基本に考えます。海外でもほぼ同じ回路でたくさんの方が作成されていることがわかります。
回路の基本構成としては、コンパレータを利用したLC発振回路とPIC16F84を利用した周波数カウンタから構成されているようです。また、動作原理は以下のようになっているようです。
手持ちの部品の関係上、作成事例の部品構成を多少変更しました。
LC発信用コンデンサ 1000pF → 1000pF(1%誤差) LC発振用インダクタ 82uH → 56uH コンパレータIC LM311 → LM339 PIC PIC16F84 → PIC16F88
なお、発振回路に使用するコンデンサは、誤差の少ないものが要求されます。
参考にした回路では、500〜600KHzを発振させています。しかし、テストした回路では、発振周波数は700KHz付近となります。また、コンパレータICの特性か、ブレットボードでのテストのためか、発振周波数がまともに安定しません。きちんと作成(といってもユニバーサル基板での作成)すれば安定すると思うのですが、今ひとつ踏み切れません。
以前に、ロジックICのインバータを利用した発振回路をなんかで作成した記憶があったので、手持ちの74HC04を利用して発振回路を作成しなおしました。
インターネットでインバータを利用した発振回路を調べてみると、バッファタイプのインバータの利用はよろしくないとの情報もありますので、アンバッファタイプのインバータ74HCU04に変更しました。
PICのプログラミングは、Cコンパイラ統合環境のあるmikroCのデモバージョンを利用しています。がしかし、標準で用意されたLCDライブラリや浮動小数点計算を豪勢に利用すると、すぐにデモ版の制限であるHEX出力の2Kワード制限に引っかかります。
本来は、ここで製品購入しなければなりませんが、249ドルという値段に躊躇します。PICのCコンパイラはシェアからしてCCS-Cが一番だとは思うのですが、あちらは購入後、1月でバージョンアップができないので(基本的に売りっぱなし)、mikroCがよさそうなのですが・・・・
ということで、一晩、どうするか悩むことにしました。
・・・で、利用することにしたのは、AVR Studio 4とWinAVRに決定しました。
つまりmicrochip社のPICをすててATMEL社のAVRに乗り換えることにしました。AVRならば、統合環境とgccによる開発が制限なくフリーで利用できることが魅力です。マイコンチップそのもののは、PICに魅力を感じますが、C言語による開発環境はAVRに軍配が上がりますね。
AVRは、インターネットで調べたところ、28pinDIPのmega8シリーズが使いやすそうです。機能的にはPIC16F88と同程度で、プログラムを収容するフラッシュメモリは、4K,8K,16Kと選択できます。今回は、余裕をみて16KのATmega168を使用することにしました。
最終的に以下の回路に決定しました。発振回路は、コンパレータを利用したものよりも部品点数が少なくすみます。AVRは28ピンもあるので、入出力ポートに余裕があります。
プログラムは、周波数カウンタ、キャリブレーション処理、周波数測定処理、L/C計算処理となっています。AVRではじめて作成したプログラムでここでさらすほどのものではありません。
mathライブラリなどを自由に使っても、プログラムサイズは8K以内に収まったので、フラッシュメモリサイズ8KのATmega88でも十分だったようです。
周波数測定からLCを計算する方法はここを(何語かわかんないけど計算式は理解できます。)参考にしました。
はじめは、LCDにprintfで実数表示させることができなくてしばらくはまりましたが、関連ライブラリを明示的にリンクする必要があるようです。→詳細はこちら
ユニバーサル基板で作成します。いきなり作っていくとあとあと苦しくなる(いつものことだが)のでpcbeをつかって実装図をテキトーに作成します。
やたらとジャンパー箇所が多いのですが、しかたないですね。
半田面と部品の実装状態です。半田面はちょっと見苦しいです。(ハズカシイ)
部品の配置には余裕があります。
リレーとインダクタって影響あるのかな?。よくわからないのでテキトーです。
AVRをソケットにさしてICSPISPでプログラミングを行います。PICも今はISP(ICSP)書き込みできるので、同じようなものですが、以前のようにライターのソケットに挿して書き込み、はずしてターゲットに実装して実行、という一連の作業が無いだけ楽になりました。
テストランさせてチェックします。
ケースに組み込みます。ケースはタカチのプラスティックケースを利用しました。測定端子への配線が長いのと束ねて処理していることがチョッと心配です。
キャリブレーション後に、LとCの値を表示させています。コンデンサは1%誤差のものなので、20pF程度の浮遊容量があることになります。結構大きいです。
測定端子は、ワンタッチスピーカ端子としています。でも測定しにくいので、短いワニ口クリップをつけています。電源投入時の自動キャリブレーションや測定中に手動でキャリブレーションをしてやれば誤差が少ないと思います。
赤いボタンを押すことにより1秒程度で測定されます。はじめはソフトウェア制御で、ボタン入力1回につき、3回測定して、平均表示するようにしていましたが、今は1回測定として人間が数回ボタン入力しています。
手持ちの、コンデンサやインダクタを片っ端から測定してみます。
コンデンサは1pF〜3μF0.47μF程度まで測定できるようです。ただ、1μF0.2μF以上は数回測定ボタンを押さないと安定した値にはなりません。
インダクタは、数μH〜10mHまで測定できましたが、発振周波数範囲から考えて、もっと大きなインダクタンスも測定できると思います。
校正はできていませんが、趣味で利用するには十分な性能があると思います。