« PICで作るキャパシタンス/ESRメータの測定法と(予想される)精度 | トップページ | 相互インダクタンスを測ってみたらヘンなことになった »

2015年4月13日 (月)

PICで作るキャパシタンス/ESRメータ - プログラム設計 - 計算ルーチン

LCRメータの心臓部、ADコンバータの測定電圧からインダクタンスやキャパシタンスを求めるための計算ルーチンの仕様(というか計算式)です。キャパシタンス/ESRを求めるところを中心に書きます。

自分用のメモですがこれからLCRメータを作ろうという方にも少しは参考になるかも。
そのうち少しちゃんと“理屈”を書くつもりです。

======

初期値、測定前の設定値
  Vsin: 通常使用する正弦波入力電圧
  Vcos: 通常使用する余弦波入力電圧
  K: 実測データ(例えば2.608)
     計算は電圧の比として行われるので適当に設定しても結果は変わらない。
     でもそれだとLCRメータの測定電圧値をDMMと比較するときは困る。
  f: 測定周波数/128
  ω: 2πf
  基準電圧: 実測データ(例えば2V)
         計算は電圧の比として行われるので適当に設定しても結果は変わらない。
         でもそれだとLCRメータの測定電圧値をDMMと比較するときは困る。

共通の処理
  出力極性の判別がマイナスのとき
  (今回作るものではMCP3802-ch3の測定値が1V以上のとき)
    測定値 = -測定値
  とする。

ロータリースイッチの位置判別
   今回作るものでは
   INT((MCP3802-ch5の測定値+0.99)/0.66)  X入力の位置(1~6、1:GND、....)
   INT((MCP3802-ch7の測定値+0.99)/0.66)  Y入力の位置(1~6、1:GND、....)

オフセットの一部は調整しなくてもオフセット値を測定しておけば補正が可能ですが、計算はいろいろとややこしい(計算のやり方を勘違いしやすい)のでぜんぶ調整するようにした方が安心でしょう。できるだけオフセットの小さいオペアンプを使いオフセットの出にくい回路設計にしましょう。オフセット調整箇所が多い(8箇所!)ので不安定だとやってられません。

状態のチェックと測定は毎秒1回くらいにするつもりです。測定値が落ち着くのに時間がかかるからです。今回はRTCの1PPSを使った割込みで行います。こういうのは回路設計次第ですが....

状態 機能 表示内容と必要な処理
GND-GND オフセット調整
1. 自動極性判別回路(+)
2. 自動極性判別回路(-)
3. アナログ乗算器出力

測定値実電圧を表示、保存する。

1.,2.,3の切り替えは自分でする
入力トグルスイッチが
Onで閾値が-50mVであれば1.
Onで閾値が+50mVであれば2.
Offであれば3.


測定時は
入力トグルスイッチはOn
閾値トグルスイッチは-50mV
としておく(0、+50mVでも測定は可能)
閾値を-50mVにしておくとキャパシタンス/ESR、抵抗の
測定であれば2.のオフセット調整は不要

GND- +2V オフセット調整
アナログ乗算器X入力
測定値*K/基準電圧
を表示、保存する
+2V - GND オフセット調整
アナログ乗算器Y入力
測定値*K/基準電圧
を表示、保存する。
+2V - +2V アナログ乗算器
定数算出
K=測定値/√基準電圧
Kを表示し既存の値と置き換える。
+2V - sin オフセット調整
正弦波バッファ
測定値*K/基準電圧
を表示、保存する
+2V - cos オフセット調整
余弦波バッファ
測定値*K/基準電圧
を表示、保存する
+2V - ABB オフセット調整
自動平衡ブリッジ出力
測定値*K/基準電圧
を表示、保存する
sin - sin 正弦波入力電圧測定 Vsin=√(測定値*K)
Vsinを表示し既存の値と置き換える。
余弦波位相を再計算し表示・保存する。
ただしVsin<0.1Vのときは
“Reset Oscillator!”を表示、置き換えは行わず
測定禁止モードにする
sin - cos 余弦波位相測定 Vsxc=√(測定値*K)
Vcos=Vsxc + j √(Vcos'^2-Vsxc^2)
θ=Vcosの偏角
θを表示する。
Vcosを既存の値と置き換える。

ただし89<θ<91でないときは
“Reset Oscillator!”を表示、置き換えは行わず
測定禁止モードにする

※ 正弦波と余弦波の位相のずれが正確に90度になるように回路を調整すればこことか下の方でめんどうな計算はしなくていいわけですが、正確に90度ずれていることはないという前提でやった方がトータルで考えるとたぶん楽です。
cos - cos 余弦波入力電圧測定 Vcos'=√(測定値*K)
Vcos'を表示し既存の値と置き換える。
余弦波位相を再計算し表示・保存する。

ただしVcos'<0.1Vのときは
“Reset Oscillator!”を表示、、置き換えは行わず
測定禁止モードにする
sin - cos 余弦波位相測定 Vsxc=√(測定値*K)
Vcos=Vsxc + j √(Vcos'^2-Vsxc^2)
θ=Vcosの偏角
θを表示する。
Vcosを既存の値と置き換える。

ただし
89<θ<91のとき
測定禁止モードを解除する
89<θ<91でないときは
“Reset Oscillator!”を表示し、置き換えは行わず
測定禁止モードにする
sin/cos - ABB 校正

または

測定

測定禁止モードのとき
“Reset Oscillator!”を表示する。

測定禁止モードでないとき
アナログ・スイッチで正弦波、余弦波を交互に切り替える。

プログラムメニュが“Calibration”のとき
“Set 1001B!”を表示し決定(緑)ボタンを待つ。

決定ボタン押下後
正弦波出力時の測定値に対して
VRsin=測定値*K/Vsin
余弦波出力時の測定値に対して
VRcos=-(VRsin*Vcosの実数部-測定値*K)/Vcosの虚数部

正弦波・余弦波両方の測定ができたあと
Rref=Vsin*Rf/(VRsin+jVRcos)
Xin=Rrefの虚数部
Rf=Rf*Rref/1000 (1000は基準抵抗の抵抗値)
RfとXin/ωを表示、保存する
(Xinは誘導性だったためインダクタンスに換算したものを表示している)

プログラムメニュが“LCR meter”のとき

校正のときと同じくVRsin、VRcosを算出する。
Z=Vsin*Rf/(VRsin+jVRcos)-Xin
Zの虚数部がマイナスのときはキャパシタ
Zの実数部と-1/(ω*Zの虚数部)を表示、保存する。
Zの虚数部がプラスのときはインダクタ
Zの実数部とZの虚数部/ωを表示、保存する。

※ 抵抗Rsを直列に入れて測定するときのインターフェースを作っておくと便利。このときは
Z=Vsin*Rf/(VRsin+jVRcos)-Xin-Rs
となる。

※ 上の計算は反転増幅器の増幅率が厳密には -Rf/Z にならなかったということが背景にあります。
私の作ろうとしているものでは増幅率が -(Rf+jXf)/Z であるという考えるやり方はうまく行かず -Rf/(Z+jXin) であると考えるやり方の方がリーズナブルな結果が得られました。ここらあたりは実際に作ろうとしているものでいろんな測定をやってみてどういうやり方がいちばんいいか検討した方がいいと思います。

測定条件にもよりますがじつは上の方法では正しくない結果が得られる可能性が大きいです。なぜなのかは下記の記事に書きました。
コンデンサのキャパシタンスとESR測定の現状と課題 - LCRメータ方式
続・コンデンサのキャパシタンスとESR測定の現状と課題 - LCRメータ方式
このあたりの事情を反映した記事はまたあらたに書きたいと思います。

コントロールパネル
オフセット調整のうちアナログ乗算器用の三つはパネルから操作できるようにしましたが、残り5個は基板上の半固定抵抗で調整します。
Controlpanel2


---------

関連

  「記事一覧(測定、電子工作、天文計算
  「(コンデンサ - ESR(誘電正接、tanδ、DF)とキャパシタンス(静電容量)の測定 - まとめ

  「LCRメータの仕組みと作り方
  「自動平衡ブリッジの原理と回路の作り方
  「コンデンサのESRの周波数特性を測ってみた - PET(ポリエステルフィルム)編


Photo

水晶発振器
  「確度0.0005ppmの周波数測定 - GPSの1PPS出力を使った高精度周波数カウンタ

バイナリカウンタ
  「24ビットバイナリーカウンター(12STAGEリップルキャリー・バイナリー・カウンター TC4040BP+SN74HC4040AP)

周波数カウンタ
  「GPS/RTC(DS3234)の1PPS出力を利用した超高精度周波数カウンター

正弦波発生器
  「PIC16F1705のDAコンバータを使った正弦波発振器(発生器) - 改良版

自動平衡ブリッジ
  「自動平衡ブリッジの原理と回路の作り方

ベクトル電圧計
  「複素数としての電圧・電流を測る方法 - 原理
  「ベクトル電圧計の製作と調整 - 交流電圧計(ミリバル)

16bitADコンバータMCP3425
  「PICでI2C - ADコンバーター・MCP3425の使い方
  分解能については
    「MCP3425の精度を調べてみた - 16bitADコンバータの分解能

SDカード
  「PICでSPI SDカードを読み書きする

PIC18F26K22
  「PIC+SPI+I2C 自記温湿度計+気圧計+8ch電圧計+周波数カウンタ(技術要素一覧)
  「PIC+SPI+I2C 自記温湿度計+気圧計+8ch電圧計のソース - main()

« PICで作るキャパシタンス/ESRメータの測定法と(予想される)精度 | トップページ | 相互インダクタンスを測ってみたらヘンなことになった »

趣味の電子工作」カテゴリの記事

コメント

この記事へのコメントは終了しました。

トラックバック

« PICで作るキャパシタンス/ESRメータの測定法と(予想される)精度 | トップページ | 相互インダクタンスを測ってみたらヘンなことになった »

フォト

サイト内検索

  • 記事を探されるんでしたらこれがいちばん早くて確実です。私も使ってます (^^;; 検索窓が表示されるのにちょっと時間がかかるのはどうにかしてほしいです。

新着記事

リンク元別アクセス数

  • (アクセス元≒リンク元、原則PCのみ・ドメイン別、サイト内等除く)

人気記事ランキング

  • (原則PCのみ、直近2週間)
無料ブログはココログ