{{publish any}} {{category 電子工作/実験}} {{category 電子工作/AVR}} {{tag AVR,容量計,LCメーター,ATmega88}} ---- 「AVRを使ったコンデンサー容量計の製作」で実際に容量計を製作しました。(2008-08-30) ---- このコンテンツは、henteko雑記を転記・編集したものです。 !まえおき 「LCメーターの製作」で作ったLCメーターでは、電解コンデンサ等の極性のあるコンデンサが測定できません。また、1μF以上の容量の大きなコンデンサを測定することもできないので、AVRを使って容量計をテスト作成してみます。 !実験 以前、作ったLCメーターは、フランクリン発振回路の発振周波数の変化からインダクタンスやキャパシタンスを測定しています。コンデンサの静電容量(キャパシタンス)は、実測から1μF程度までは測定できますが、それ以上はうまく測定できません。(発振周波数が低くなりすぎるためだと思われる。) また、極性を持つコンデンサの測定は出来ないため、電解コンデンサの測定にも使えません。 コレまでのところ、特別、必要というわけではありませんが、CR回路の過渡現象を使った容量計の製作記事をインターネットでいくつか目にしたので、AVRのATmega88のアナログコンパレータ機能とタイマー機能を使って実験してみました。 コンデンサ容量の測定原理は、コンデンサの充電時間(ある電圧からある電圧に達するまでの時間)を測定し、その時間を容量に換算する方式とします。 今回は、あらかじめ容量誤差の小さなコンデンサ1μFが抵抗を介して0.96Vから2.5Vに達するまでの時間を基準として、測定コンデンサの充電時間を基準時間で除算することにより容量を求めています。 実験回路は、以下です。 {{image c_meter.PNG,,,size:95%}} 作成したプロクラムの動作シーケンスは以下のとおり。 *スタート時はTr1がONとなった状態で測定するコンデンサは両端がGNDでショートされた状態(つまり、完全に放電された状態)。Tr2もONとなり、抵抗によって分圧された電圧0.96VがAVRのコンパレータの反転入力AIN1に入力される。 *プッシュSWを押すとTr1がOFFとなり、測定コンデンサへの充電を開始すると同時にタイマー1をスタート。 *測定コンデンサの電圧が上昇し、0.96Vに達するとコンパレータの比較出力に連動したタイマー1の値がキャプチャ(補足)され割り込みがかかる。 *タイマー1の値を記録し、Tr2をOFFとしてコンパレータの反転入力AIN1に2.5Vをセットする。 *測定コンデンサの電圧がさらに上昇し、2.5Vに達すると、再びコンパレータの比較出力に連動したタイマー1の値がキャプチャされて割り込みがかかる。 *タイマー1の値から先ほど記録したタイマー1の値を減算して充電時間を求める。 *充電時間を基準コンデンサの充電時間で除算し、容量を求める。 基準コンデンサの測定。 {{image DSC01216.jpg,,,size:45%}} 10μFの測定。→結果:10μF {{image DSC01217.jpg,,,size:45%}} 47μFの測定。→結果:56μF {{image DSC01218.jpg,,,size:45%}} 100μFの測定。→結果:102μF {{image DSC01219.jpg,,,size:45%}} 470μFの測定。→結果:533μF {{image DSC01220.jpg,,,size:45%}} 1000μFの測定。→結果:1075μF {{image DSC01221.jpg,,,size:45%}} ・・という具合で、なんとか使えそうです。 問題は、CR回路の抵抗値が固定されている現状では、大きな容量のコンデンサの充電に時間がかかることです。1000μFの場合は15秒程度かかります。 コンデンサの容量に応じて抵抗値をスイッチで手動切替にするか、プログラムで自動切換えにするなどの工夫が必要です。 !つづき 1μF以下のコンデンサも測定してみます。 小容量コンデンサは、短時間で充電されるため、AVRのタイマーで計るためにゆっくりと充電したほうが良いだろうと充電抵抗を1MΩとして実験してみましたが、0.1μF以下は正常な計算値が得られませんでした。 下のオシロスコープの波形は、測定端子開放時の電圧変化ですが、0Vから2.5Vに達するのに約7.4msもかかっています。このため、容量の小さなコンデンサを十分な速度で充電するだけの電圧の立ち上がりがないことになります。 {{image DSC01224.jpg,,,size:45%}} ということで、充電抵抗は高速な電圧立ち上がりを得るためにある程度小さなものがいいと思われます。いろいろ試した結果、4.7kΩの抵抗で基準となるコンデンサ1000pF(誤差1%)の充電波形よりも短い時間の立ち上がり時間が得られました。 {{image DSC01240.jpg,,,size:45%}}{{image DSC01241.jpg,,,size:45%}} 上の画像は、4.7kΩの抵抗を使ったもので左が測定端子開放時、右が1000pFを測定したものです。開放時3.5μs、測定時で7.8μsとなりました。 4.7kΩより小さな抵抗値ではさらに高速な電圧立ち上がり時間が得られますが、AVRのタイマーで十分な解像度が得られないためこのぐらいの値が良いと思われます。 また、充電時間の除算に使う基準時間は、基準コンデンサの充電時間より端子開放時の立ち上がり時間を引いたものを使用します。 なお、AVRは、前日までは内蔵RC発信器による8MHzクロックで動作させていましたが、高速なタイマーが必要となりますので、20MHzのセラミック発振器を追加して外部クロック動作としています。 0.01μF(誤差5%)を測定。→0.01016μF 右は以前作成したLCメーターによる測定値。→0.01001μF {{image DSC01230.jpg,,,size:45%}}{{image DSC01238.jpg,,,size:45%}} 0.1μF(誤差5%)を測定。→0.09724μF 右はLCメーターによる測定値。→0.09723μF {{image DSC01231.jpg,,,size:45%}}{{image DSC01237.jpg,,,size:45%}} %%%小数点以下、4桁までピッタリですが、ここまでの精度は当然ありません。単なる偶然ですね。%%% 絶対的な精度はありませんが、以前作成したLCメーターとほぼ同じ値が測定できます。 参考までに、今回基準とした1000pF(誤差1%)をLCメーターで測定した結果です。 {{image DSC01239.jpg,,,size:45%}} 以下は、今回のものでコンデンサを測定した結果です。 ポリプロピレン 100pF → 0.00009μF    〃      680pF → 0.00067μF 積層セラミック 1μF → 0.93157μF    〃      1.5μF → 1.59932μF 積層チップ    10μF → 11.21165μF 電解コンデンサ  10μF → 10.04543μF    〃       47μF → 53.19040μF    〃      100μF → 96.50710μF    〃      470μF → 510.08731μF    〃     1000μF → 981.19354μF 通常、新しい未使用の電解コンデンサは、誤差範囲から想定すると、定格(表示)よりも大きな容量を持っているのが多いと思われます。・・・ということは、47μF以上の測定値は、チョット怪しいと思われます。 基準となる正確な容量のコンデンサが得られれば十分な実用性はあると思われます。