LCメーター

LCメーターを作りました。PICを使ったデジタルLCメーターです。

電源はDC5V、消費電流 測定時17mA、キャリブレーション時 27mA。
コンデンサーの測定範囲は 1pF~2µF、最小分解能 0.001pF、精度±2%。
コイルの測定範囲は 0.1µH~100mH、最小分解能 0.001µH、精度±2% です。

メインの構成部品には周波数カウンタ―とLC計算にPIC16F1827を、LC発振回路にコンパレータLM-311P、表示にI2CLCDを使用し、プログラムはMPASMで作成しました。

回路図です。自作LCメーターで良く採用される回路ですが、コンパレータLM-311Pの負荷抵抗が330Ωと一般的に使われる1kΩよりかなり小さくなっています。ブレッドボードでの事前テストで、測定コンデンサーの容量が大きくなり発振周波数が低くなるとコンパレータ出力波形の立下りが振動するような傾向がみられ、周波数カウンタ―の読取り値が安定せず1µFを安定して測定出来ませんでした。色々試した結果、コンパレータの負荷抵抗を小さくすると立下りの振動を抑制出来、2.2µFを安定して測定できるようになりました。
コンパレータ+入力と発振用LC、コンパレータ-入力とグランド間に入る10μFのコンデンサーにはタンタルや電解が使われますが、今回は積層セラミックコンデンサーを使って設置スペースを小さくしました。積層セラミックコンデンサーはDC電圧に依り容量が小さくなる特性があります。今回の場合、約1.7Vの電圧が掛かりMurataのデータでは容量は約60%に低下しますが、影響は無いようです。

PIC16F1827を使用した周波数カウンタ―は単独で100MHzを超える周波数を測定できます。8ビットタイマーTMR2で測定時間1秒を作り、周波数のカウントに16ビットタイマーTMR1を使っています。測定開始命令でTMR2が1秒カウントを開始し、またTMR1が周波数カウントを開始します。1秒経過するとTMR2から停止命令出てTMR1がカウントを停止します。TMR1は16ビットなので約65kHz以上の周波数ではオーバーフローが発生し、同時にカウントが0にリセットされます。TMR1のオーバーフロー回数を2バイト(16ビット)の変数に保存することで、合計32ビット分 約4GHz がカウント可能になりますが、実際にはタイマー1のゲートT1CKIにそこまでの能力はありません。どこまでカウント可能なのかあれこれトライしながら調べている途中ですが、凡そ160MHz位ではないでしょうか。

LCメーターの測定原理はウェブで調べると多くの方が式を交えて詳しく説明されているのでこのブログでは取り上げませが、発振回路に使用するキャリブレーション用コンデンサーの容量精度が概ねLCメーターの測定精度となります。他に測定精度に影響する要因は、計算式から実際の発振周波数がズレることや発振周波数が安定しないことなどがあります。C測定では測定周波数の比率を使用するのでXtalの発振周波数(測定時間)が安定であれば測定精度への影響は有りませんが、L測定では算出式に周波数の絶対値が入るので、Xtalの発振周波数の仕様値からのズレが影響します。

今回のLCメーターではキャリブレーション用コンデンサーとしてルビコンのポリフェニレンスルフィドフィルムコンデンサー 1000pF ±2%、を使っていますので、測定精度は ±2%となります。Xtalは秋月電子から購入した12.8MHzで、発振周波数許容値2.5ppm、周波数変化3.0ppmと通常のXtalの1/10の素晴らしいスペックですが、測定器が無いので実力は確認出来ていません。
発振周波数が変動する要因は使用部品のコンデンサーやコイルの温度変化による容量、インダクタンスの変化、浮遊容量や浮遊インダクタンスの変化などがあります。ポリフェニレンスルフィドフィルムコンデンサーの温度係数は負で温度が上がると容量が少なくなり -100ppm/℃位、コイルはアミドンのトロイダルコアT-68-2に0.4mmφのウレタン線をぎっしり1層手巻きした43µHのもので、コアの温度係数は190ppm/℃位です。発振周波数の変動は最小測定範囲で測定値のふらつきとして顕著に現れます。最小分解能1桁目は不安定ですが、2桁目(0.01pF, 0.01µH)はまあまあ安定して読み取る事ができます。
ここをクリックすると部品リストを表示出来ます。

LCメーターは 47x72mmのユニバーサル基板 に組上げ、液晶は取り外し可能で、その下にPIC、Xtal、Trなどを配置してあります。中央左の細長い 黒色の 部品はリードリレーで、右隣にキャリブレーション用と参照用コンデンサー、中央がコンパレータです。左下に参照用トロイダルコイル、LC測定切替用トグルスイッチ、赤と黄色タクトスイッチは各々キャリブレーション用と表示メニュー切替用です。右側中央の赤色LEDはRUN表示用、青色LEDは測定中に点灯します。
一番下の緑色の部品はノンプレッシャーソケットで、ここにコンデンサーやコイルを挟んで容量やインダクタンスを測定します。始めはワニ口クリップで測定物を咥える方法でしたが、ワニ口クリップの置き方、部品の咥え方で測定値がコロコロと変わり安定しませんでした。どうも測定端の浮遊容量が悪さをしているようです。そこで測定物を固定出来る様にノンプレッシャーソケットを追加しところ測定値が安定するようになりました。

PIC16F1827のソフトはMPASMで作成しました。Cコンパイラーを使ったソフトを眺めるとなんとも簡単に出来ています。何を今更苦労してアセンプラーでやるんでしょうか。でも毎日が日曜日の人間の暇つぶしにはもってこいです。
LCを求める計算では発振周波数の掛け算や割り算を使います。32ビット浮動小数の乗算、除算や2進数を2進化10進数へ変換する参考プログラム等をウェブを検索して調べて作成しました。とこらが、2進整数を10進整数(BCD)に変換するプログラムは沢山あるのですが、2進少数を10進少数に変換するアセンブラプログラムは色々探したのですが見つかりません。この変換プログラムが必要な人は大勢いるはずだし、Cコンパイラーではいとも簡単に皆さん小数計算しています。Cコンパイラーの大元はアセンブラーなので、きっと何処かにあるはずなのですが。

仕方ないので自分でコーディングしました。2進数を右に1ビットシフトするとその値は1/2になります。2進数の右側に8ビットのゼロクリアした10進変換用の変数を繋げます。この変数は上位4ビット、下位4ビットで各々10を表現するようにします。さて、繋げた全体を右に1ビットシフトすると、2進数の最下位ビットの1は繋げた10進変換用変数の最上位ビットに移動します。変数の上位4ビットが表す10進数の値は8になります。ここは1/2にしたのだから5にしなければならないので、3を引かなくてはなりません。10進変換用変数も4ビット毎に区切り、右シフトで最上位が現れたら3を引きます。これで10進変換用変数の値も正確に1/2になるはずです。右シフトを繰り返して2進数の桁数が0になれば変換が完了です。10進変換用変数は1バイトで2桁変換出来るので必要な桁数分用意します。小数点以下4桁なら2バイト、6桁なら3バイトを用意します。結果には桁数打ち切りによる変換誤差が含まれ、大きさは多分最大で 1/2の(10進数の桁数)乗)ではないかと思います??

ここをクリックするとプログラムファイルを表示出来ます。WPのセキュリティの関係でファイルの拡張子が.txtになっています。MPLAB XIDEで使用される時は拡張子を.asmに変更して下さい。
プログラムではPIC16F1xxxx用の拡張ASMを使っています。又、bank2の変数をbank切替なしで使用したかったので間接アドレスを多用しています。それなりにコメントが入っていますので何をしているのかそれなりにお分かり戴けると思います。何回も書き直しているので、コメントが修正されていない箇所が散見されますが、ご容赦お願いします。、

LCメーターで測定している様子の写真を何枚かアップします。
下の写真はC測定時のもので左から小容量、中容量、大容量の順です。
 2pF±0.25pFのセラミックコンデンサー            測定値は2.184pF
 1000pF±2%のポリフェニレンスルフィドフィルムコンデンサー 測定値は1005.8pF
 2.2µF±5%のメタライズドポリプロピレンフィルムコンデンサー 測定値は2.233μF
どれも許容値内で、2番目のポリフェニレンスルフィドフィルムコンデンサー はキャリブレーション用に使用したコンデンサーと同時に購入したものです。

続いてL測定時のもので左から小容量、中容量、大容量の順です。
 手巻きのトロイダルコイル                測定値は0.064μH
 100μH±10%のラジアルインダクター          測定値は101.3μHF
 100mH±5%のラジアルインダクター         測定値は101.7mH
一番目は手巻きで値不明のものを測定、2番目、3番目は購入したものですが誤差2%以内で優秀です。

実際に使ってみるとC測定では手を近づけたり、置き場所を変えただけで指示が変化します。かなり敏感な測定器なので、温度特性の良いコンデンサーでは測定値が安定していますが、温度特性が悪いコンデンサーでは測定値がみるみる変わっていきます。
L測定では測定端が接地状態になるので小さなインダクターでもかなり安定して測定できます。総じて自作測定器としては優秀な部類にはいるのではないでしょうか。


おまけの写真です。


履歴 1. 2020/10/05 プログラム修正。LCDのコントラスト変更サブルーチンの間違いを修正。