
【Arduino】時定数によるコンデンサの静電容量測定
Arduinoで静電容量の測定する方法 Arduinoなどのマイコンボードでコンデンサの静電容量を測定するには、次の2つの方法が考えられます。 発振回路と組み合わせる コンデンサの時定数を利用する ここでは❷の「コンデンサの時定数を利用する」方法でコンデンサの静電容量を測定します。 時定数とは 時定数とは、コンデンサCに、E[V]の電圧を、抵抗R[Ω]の抵抗を介してかけた時、 コンデンサCの電圧がEの63.2%まで充電される時間 のことです。 つまり、 コンデンサの電圧が、電源電圧の63.2%になるまでの時間 が「時定数」です。 時定数をτとすると、抵抗値Rと静電容量Cは次の関係になることが知られてます。 $$τ = RC$$ 静電容量の算出 アナログ電圧を測れるピンを備えているArduinoでは、時定数を測ることは簡単です。 デジタルピンの5V電圧を、抵抗Rを介してコンデンサCへ充電します。コンデンサの電圧が、5Vの63.2%の電圧3.22Vになるまでの時間を計測すれば時定数が分かりますから、次の計算でコンデンサの静電容量を導き出すことができるはずです。 $$C = \frac{τ}{R}$$ Arduinoとコンデンサの配線図 こちらが、Arduinoでコンデンサを測定する配線図です。静電容量が未知なコンデンサCxと、抵抗RおよびArduinoを図のように配線します。 デジタルピンD2をHIGHにした瞬間、2MΩの抵抗を介して電流がコンデンサへ蓄電されていきます。コンデンサの両端の電圧は徐々に上がっていき、アナログ入力ピンのA5地点が、電源電圧の63.2%Vになるまで監視します。この時間を測定して時定数を導き出します。 ちなみに、デジタルピンD3と1kΩの抵抗は、コンデンサの電荷を放電してリセットさせるためのものです。 コンデンサの静電容量を測定するプログラム コンデンサの静電容量を測定するプログラムがこちらになります。 #include <Arduino.h> const int PULSE_PIN = 2; const int DIGITAL_READ_PIN = 3; const int ANALOG_READ_PIN = 5; const double E = 5.06; // GPIO電圧実測値 const double R = 2000000.0; // 2MΩ const double V = E * 0.632; void setup() { Serial.begin(9600); pinMode(PULSE_PIN, OUTPUT); digitalWrite(PULSE_PIN, LOW); } void discharge() { pinMode(DIGITAL_READ_PIN, OUTPUT); digitalWrite(DIGITAL_READ_PIN, LOW); delay(1000); pinMode(DIGITAL_READ_PIN, INPUT); delay(10); } unsigned long charge() { digitalWrite(PULSE_PIN, HIGH); return micros(); } void loop() { discharge(); unsigned long time_start = charge(); double volts = 0; while (volts < V) { volts = double(analogRead(ANALOG_READ_PIN)) / 1023.0 * E; } double T = micros() - time_start; // T: 時定数 double c; char *farad = "uF"; if (T < 2500) { c = T / R * 1000000; // pFに対応 farad = "pF"; } else if (T < 50000) { c = T / R * 1000; // nFに対応 farad = "nF"; } else { c = T / R; // uF } Serial.print(c); Serial.print(farad); Serial.println(); digitalWrite(PULSE_PIN, LOW); discharge(); } 実験してみた感想 実際、100pF〜10uFまで測定してみました。かなり良い精度でコンデンサの静電容量を測定することができたことに、正直驚きです。 ...



