{{category 電子工作/AVR}} {{category 電子工作/一般}} {{category 電子工作/測定器}} {{tag AVR,LCメーター,PIC,mikroC,74HCU04,ATmega168,容量計,測定器}} >>origin 2007-09-30 >>last fix 2008-08-30 ----  {{font color=red,AVRのプログラムの公開を依頼されましたが、ソースプログラムをロストしているので不可能です。バイナリ(HEX)ファイルであれば、使用中のAVRから取り出すことが出来るのでおわけすることは可能です。新規に製作するのであれば、}}「PIC18Fを使ったLCメーターの製作」{{font color=red,をお勧めします。}} %%%このLCメーターでは、0.2μF以上のコンデンサや極性をもつ電解コンデンサの容量測定が出来ない欠点があります。この欠点を補うコンデンサの容量計を「コンデンサ容量計の実験」で実験しています。(2008-01-12追記)%%% %%%「AVRを使ったコンデンサー容量計の製作」で0.2μF以上のコンデンサや電解コンデンサの容量を測定する容量計を製作しました。(2008-08-30)%%% %%%ほぼ同じ構成・機能のLCメーターを「PIC18Fを使ったLCメーターの製作」で作り直しました。絶対精度は不明ですが、測定安定度は良くなっています。(2009-04-16)%%% !!構想 最近、ゲルマニウムラジオやトランジスタをつかったストレートラジオの製作にはまっています。ラジオとしての回路は、インターネットで検索したものを、ほぼそのまま利用しているのですが、アンテナや同調回路に利用するインダクタなんかはいろいろと自作して実験しています。そうすると、購入したバーアンテナやジャンクラジオから入手したバーアンテナやバリコンのインダクタンスやキャパシタンスが気になります。 特にラジオの聞こえが悪い場合は、回路が単純なだけに余計、バーアンテナやバリコンをうたがったりして・・・ ということで、インダクタンスやキャパシタンスを測定するLCメーターを作ることにしました。 インターネットで"LCメータ" "LC Meter"というキーワード検索するとたくさんヒットします。そのなかで、[このサイト|http://www.ne.jp/asahi/jh1htq/machida/kousaku/lc_meter/lc_meter.html]にあるものを基本に考えます。海外でもほぼ同じ回路でたくさんの方が作成されていることがわかります。 回路の基本構成としては、コンパレータを利用したLC発振回路とPIC16F84を利用した周波数カウンタから構成されているようです。また、動作原理は以下のようになっているようです。 *基本となるLC発振回路の周波数を測定 *キャリブレーション用Cを並列接続し、周波数偏差からCとLを求める。 *測定するL(回路のLと直列接続)やC(並列接続)を接続して、周波数偏差と回路のLとCの値から計算する !!基本設計 手持ちの部品の関係上、作成事例の部品構成を多少変更しました。 LC発信用コンデンサ 1000pF →  1000pF(1%誤差) LC発振用インダクタ 82uH →  56uH コンパレータIC LM311 →  LM339 PIC PIC16F84 → PIC16F88 なお、発振回路に使用するコンデンサは、誤差の少ないものが要求されます。 参考にした回路では、500〜600KHzを発振させています。しかし、テストした回路では、発振周波数は700KHz付近となります。また、コンパレータICの特性か、ブレットボードでのテストのためか、発振周波数がまともに安定しません。きちんと作成(といってもユニバーサル基板での作成)すれば安定すると思うのですが、今ひとつ踏み切れません。 以前に、ロジックICのインバータを利用した発振回路をなんかで作成した記憶があったので、手持ちの74HC04を利用して発振回路を作成しなおしました。 {{image DSC00797.jpg,,,size:50%}} インターネットでインバータを利用した発振回路を調べてみると、バッファタイプのインバータの利用はよろしくないとの情報もありますので、アンバッファタイプのインバータ74HCU04に変更しました。 {{image DSC00799.jpg,,,size:50%}} 30pFのセラミックコンデンサを測定。 !!設計変更 PICのプログラミングは、Cコンパイラ統合環境のある[mikroC|http://www.mikroe.com/en/compilers/mikroc/pic/]のデモバージョンを利用しています。がしかし、標準で用意されたLCDライブラリや浮動小数点計算を豪勢に利用すると、すぐにデモ版の制限であるHEX出力の2Kワード制限に引っかかります。 本来は、ここで製品購入しなければなりませんが、249ドルという値段に躊躇します。PICのCコンパイラはシェアからして[CCS-C|http://www.ccsinfo.com/]が一番だとは思うのですが、あちらは購入後、1月でバージョンアップができないので(基本的に売りっぱなし)、mikroCがよさそうなのですが・・・・ ということで、一晩、どうするか悩むことにしました。 ・・・で、利用することにしたのは、[AVR Studio 4|http://www.atmel.com/dyn/products/tools_card.asp?tool_id=2725]と[WinAVR|http://winavr.sourceforge.net/]に決定しました。 つまりmicrochip社のPICをすててATMEL社のAVRに乗り換えることにしました。AVRならば、統合環境とgccによる開発が制限なくフリーで利用できることが魅力です。マイコンチップそのもののは、PICに魅力を感じますが、C言語による開発環境はAVRに軍配が上がりますね。 AVRは、インターネットで調べたところ、28pinDIPのmega8シリーズが使いやすそうです。機能的にはPIC16F88と同程度で、プログラムを収容するフラッシュメモリは、4K,8K,16Kと選択できます。今回は、余裕をみて16KのATmega168を使用することにしました。 !!回路設計 最終的に以下の回路に決定しました。発振回路は、コンパレータを利用したものよりも部品点数が少なくすみます。AVRは28ピンもあるので、入出力ポートに余裕があります。 {{image lc_meter.PNG,,,size:98%}} !!プログラム構成 プログラムは、周波数カウンタ、キャリブレーション処理、周波数測定処理、L/C計算処理となっています。AVRではじめて作成したプログラムでここでさらすほどのものではありません。 mathライブラリなどを自由に使っても、プログラムサイズは8K以内に収まったので、フラッシュメモリサイズ8KのATmega88でも十分だったようです。 周波数測定からLCを計算する方法は[ここを|http://hw.cz/constrc/lc_metr/](何語かわかんないけど計算式は理解できます。)参考にしました。 はじめは、LCDにprintfで実数表示させることができなくてしばらくはまりましたが、関連ライブラリを明示的にリンクする必要があるようです。→詳細は[こちら|https://www.henteko.org/fswiki/wiki.cgi?page=WinAVR%A4%CEprintf%A4%C7%C9%E2%C6%B0%BE%AE%BF%F4%C5%C0%A4%CE%BD%D0%CE%CF] !!製作 ユニバーサル基板で作成します。いきなり作っていくとあとあと苦しくなる(いつものことだが)のでpcbeをつかって実装図をテキトーに作成します。 {{image lc_meter_pcb.PNG,,,size:98%}} やたらとジャンパー箇所が多いのですが、しかたないですね。 半田面と部品の実装状態です。半田面はちょっと見苦しいです。(ハズカシイ) 部品の配置には余裕があります。 {{image DSC00803.jpg,,,size:50%}}{{image DSC00807.jpg,,,size:50%}} リレーとインダクタって影響あるのかな?。よくわからないのでテキトーです。 !!テスト AVRをソケットにさして==ICSP=='''ISP'''でプログラミングを行います。PICも今はISP(ICSP)書き込みできるので、同じようなものですが、以前のようにライターのソケットに挿して書き込み、はずしてターゲットに実装して実行、という一連の作業が無いだけ楽になりました。 {{image DSC00808.jpg,,,size:50%}} テストランさせてチェックします。 !!完成 ケースに組み込みます。ケースはタカチのプラスティックケースを利用しました。測定端子への配線が長いのと束ねて処理していることがチョッと心配です。 {{image DSC00809.jpg,,,size:50%}} キャリブレーション後に、LとCの値を表示させています。コンデンサは1%誤差のものなので、20pF程度の浮遊容量があることになります。結構大きいです。 {{image DSC00848.jpg,,,size:50%}} 測定端子は、ワンタッチスピーカ端子としています。でも測定しにくいので、短いワニ口クリップをつけています。電源投入時の自動キャリブレーションや測定中に手動でキャリブレーションをしてやれば誤差が少ないと思います。 赤いボタンを押すことにより1秒程度で測定されます。はじめはソフトウェア制御で、ボタン入力1回につき、3回測定して、平均表示するようにしていましたが、今は1回測定として人間が数回ボタン入力しています。 {{image DSC00815.jpg,,,size:50%}} 手持ちの、コンデンサやインダクタを片っ端から測定してみます。 コンデンサは1pF〜==3μF==0.47μF程度まで測定できるようです。ただ、==1μF==0.2μF以上は数回測定ボタンを押さないと安定した値にはなりません。 インダクタは、数μH〜10mHまで測定できましたが、発振周波数範囲から考えて、もっと大きなインダクタンスも測定できると思います。 校正はできていませんが、趣味で利用するには十分な性能があると思います。