Eğitimler
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
}
* 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.