chottoshitahanashi’s diary

基本的に間違ったことばかり書いてるブログ。検索ひっかかるな

コンデンサ容量測定

こんな感じかな。ギザギザマークは抵抗(ちゃんと書くのが面倒くさかった)。デジタルピンは電流の供給および放電用にする。これは電流の供給。デジタルピンはoutput highにする。

f:id:name-3333:20220324205458p:plain

放電状態。デジタルピンはoutput low

f:id:name-3333:20220324205555p:plain

この抵抗両端電圧をアナログピンで測定する。時系列で測定した数値を積分コンデンサに流れ込んだ電荷を計算する。Arduinoでデジタルとアナログの5V, GNDがそれぞれ存在するとか聞いたことないから大丈夫なはず?デジタル、アナログピンが混在してるのも気持ち悪いけどアナログピンは常に入力状態でハイインピーダンスなので問題ないだろう(Arduinoのハイインピーダンスは100MΩらしい。回路に入れる抵抗値が大きければそれなりにピンへの電流流入の影響が誤差にはなるかも)。

f:id:name-3333:20220324205611p:plain

実際にはデジタルピンとアナログピンを直結するとリセットスイッチ押したときに大電流とか妙なことがおきたり、なんか起きそうで怖いので抵抗は2つ作る。

f:id:name-3333:20220324205630p:plain

抵抗値の異なるものを複数用意し、未知容量のコンデンサ計測に最適なものを選べるようにする。図に書いた100Ω、100kΩは適当。もっとちゃんと考える。マルチプレクサ使ったりいろいろ考えてたけどとりあえずこれでやってみる。

f:id:name-3333:20220324205707p:plain

放電状態。ピンはoutput low。Arduinoのデジタルピンは40mAまでしか流せないので5/0.04=125Ω以下の抵抗をつけてはいけない。

f:id:name-3333:20220324205759p:plain

ピンの一つをハイインピーダンス(pinModeをinput)にする。その後もう一方を5Vにしてコンデンサ充電、計測開始。終わったらデジタルピンを0Vにしてコンデンサを放電する。

f:id:name-3333:20220324205824p:plain

抵抗は値の違なるもの3、4種類用意する。もしデジタル出力がちゃんとVddと一致し、電流を流す1本の抵抗以外に電流は流れていないと確認出来たらアナログピンによる電圧測定はコンデンサ両端でも良い。積分するのと時定数から求めるのとどちらが良いかとかコンデンサ両端電圧のみから計算するとかいろいろ検討する余地あり。0.01uF, 1MΩだと時定数0.01uFx1MΩ=10ミリ秒。こちらの先人によるとデフォルトで117μsなので余裕。抵抗値の大きなものから始め、遅すぎたら一回放電してから抵抗値の小さなもので再度計測する。


追記:時定数で計算するのがいいかな。電圧が元の0.3678794411倍(0.368...x5V)になるまでの時間τ=RCから未知数Cを求める。2τでの電圧とかも計算できそう。
RC直列回路の過渡現象の解き方
時定数


追記:発振回路にして周波数測定したらAD変換に頼らなくてすむかと思ったけどコンデンサ1つだけじゃうまく作れないか、残念。


追記:デジタルピンの(ハイ)インピーダンスを測定して補正するのがいいか。そしたら上の図のアナログ入力2つを省くことができる。


追記:3章:コンデンサ容量測定。こちらの先人はスイッチOFFの時に勝手に閉回路ができて放電するするようにしてた。それも手だなあ。電流があまり流れず放電に適した抵抗値はうまくとれるだろうか。