CapacitanceMeter

Genel Bakış: Bir direnç TC saniyesinde bir kapasitörü şarj edecektir;

  • TC = R * C

  • TC = saniye cinsinden zaman sabiti
  • R = ohm cinsinden direnç
  • C = faradlarda kapasitans (1 mikrofarad [ufd] = .0000001 farad = 10 ^ -6 farads)

1 Zaman Sabiti'ndeki voltaj, şarj voltajının% 63.2'sine eşittir.

Örnek: 1 megohm * 1 mikrofarad = 1 saniye
Örnek: 10k ohm * 100 mikrofarad = 1 saniye

Deneysel kurulum

Bu çizim işe yarıyor çünkü Arduino pinleri elektriksel olarak çok farklı olan iki durumdan birinde olabilir.

  • Giriş Durumu (pinMode ile ayarlanır (pin, INPUT);)
    • Yüksek Empedans (direnç) - Örnekleme yaptığı devrede çok az talep yapar
    • Sensörleri okumak için iyi ama LED'leri aydınlatmak için değil

  • Çıkış Durumu (pinMode ile ayarlanır (pin, OUTPUT);)
    • Düşük Empedans - 40 mA kaynağı (pozitif voltaj) veya lavabo (negatif voltaj) sağlayabilir
    • LED'leri aydınlatmak, diğer devreleri kullanmak için iyi - sensörleri okumak için işe yaramaz.

Ek olarak pimler kapasitörü şarj etmek için YÜKSEK (+5 volt) olabilir; veya kapasitörü boşaltmak için DÜŞÜK (toprak)

Kapasite ölçer çizimi için alogrithm

  • Basma pimini INPUT olarak ayarlayın (böylece kapasitörü deşarj edemez)
  • Milis () ile başlangıç zamanını kaydedin
  • Şarj pimini OUTPUT olarak ayarlayın ve HIGH yapın
  • Toplam gerilimin% 63.2'sine ulaşıncaya kadar gerilimi bir döngü içinde tekrar tekrar kontrol edin.
  • Kapak şarj edildikten sonra, kapasitörün ne kadar süre şarj olduğunu öğrenmek için geçerli saati başlangıç zamanından çıkarın.
  • Kapasitansı bulmak için Süreyi ohm cinsinden şarj Direnci ile saniye cinsinden bölün.
  • Serial.print ile değeri bildirin
  • Kondansatörü boşaltın. Bunu yapmak için:
    • Şarj pimini Giriş olarak ayarlayın
    • Basma pimini ÇIKIŞ konumuna getirin ve DÜŞÜK hale getirin
    • Kondansatörün tamamen deşarj olduğundan emin olmak için voltajı okuyun
  • Dön ve tekrar yap

Arduino Kroki

/*  RCTiming_capacitance_meter
 *   Paul Badger 2008
 *  Demonstrates use of RC time constants to measure the value of a capacitor
 *
 * Theory   A capcitor will charge, through a resistor, in one time constant, defined as T seconds where
 *    TC = R * C
 *
 *    TC = time constant period in seconds
 *    R = resistance in ohms
 *    C = capacitance in farads (1 microfarad (ufd) = .0000001 farad = 10^-6 farads )
 *
 *    The capacitor's voltage at one time constant is defined as 63.2% of the charging voltage.
 *
 *  Hardware setup:
 *  Test Capacitor between common point and ground (positive side of an electrolytic capacitor  to common)
 *  Test Resistor between chargePin and common point
 *  220 ohm resistor between dischargePin and common point
 *  Wire between common point and analogPin (A/D input)
 */


#define analogPin      0          // analog pin for measuring capacitor voltage
#define chargePin      13         // pin to charge the capacitor - connected to one end of the charging resistor
#define dischargePin   11         // pin to discharge the capacitor
#define resistorValue  10000.0F   // change this to whatever resistor value you are using
                                  // F formatter tells compliler it's a floating point value

unsigned long startTime;
unsigned long elapsedTime;
float microFarads;                // floating point variable to preserve precision, make calculations
float nanoFarads;

void setup(){
  pinMode(chargePin, OUTPUT);     // set chargePin to output
  digitalWrite(chargePin, LOW);  

  Serial.begin(9600);             // initialize serial transmission for debugging
}

void loop(){
  digitalWrite(chargePin, HIGH);  // set chargePin HIGH and capacitor charging
  startTime = millis();

  while(analogRead(analogPin) < 648){       // 647 is 63.2% of 1023, which corresponds to full-scale voltage
  }

  elapsedTime= millis() - startTime;
 // convert milliseconds to seconds ( 10^-3 ) and Farads to microFarads ( 10^6 ),  net 10^3 (1000)  
  microFarads = ((float)elapsedTime / resistorValue) * 1000;  
  Serial.print(elapsedTime);       // print the value to serial port
  Serial.print(" mS    ");         // print units and carriage return


  if (microFarads > 1){
    Serial.print((long)microFarads);       // print the value to serial port
    Serial.println(" microFarads");         // print units and carriage return
  }
  else
  {
    // if value is smaller than one microFarad, convert to nanoFarads (10^-9 Farad).
    // This is  a workaround because Serial.print will not print floats

    nanoFarads = microFarads * 1000.0;      // multiply by 1000 to convert to nanoFarads (10^-9 Farads)
    Serial.print((long)nanoFarads);         // print the value to serial port
    Serial.println(" nanoFarads");          // print units and carriage return
  }

  /* dicharge the capacitor  */
  digitalWrite(chargePin, LOW);             // set charge pin to  LOW
  pinMode(dischargePin, OUTPUT);            // set discharge pin to output
  digitalWrite(dischargePin, LOW);          // set discharge pin LOW
  while(analogRead(analogPin) > 0){         // wait until capacitor is completely discharged
  }

  pinMode(dischargePin, INPUT);            // set discharge pin back to input
}
[Kodu Al]

Denenecek başka şeyler

  • Şarj süresi çok kısa ise büyük dirençlerde, şarj süresi çok uzunsa küçük dirençlerde değişiklik yapın.

  • Kapasitörleri paralel ve seri olarak ölçün, gözlemlerinizin elektronik teoriye uygun olup olmadığını kontrol edin
  • Daha fazla doğruluk için bir grup okumayı birlikte ortalama
  • "Otomatik aralıklı" kapasite ölçer yapmak için farklı pimlerdeki birkaç şarj direncini değiştirin
  • Şarj direncinin aynı zamanda kapasitörü deşarj etmesi için çizimi değiştirin. Bildirilen değerin, yalnızca bu kapasitörü şarj ettiğinde bildirilen değerin iki katı olmadığını unutmayın. Bunu açıkla. İpucu - grafikteki değişen eğriyi inceleyin.