在這篇文章中,我們將使用Arduino構建一個數字電容表電路,該電路可以以合理的精度測量從1微法拉到4000微法拉的電容器的電容。
當寫入電容器主體的值難以辨認時,我們測量電容器的值,或者在我們的電路中找到老化電容器的值,這些電容器遲早需要更換,并且還有其他幾個原因需要測量電容。
為了找到電容,我們可以使用數字萬用表輕松測量,但并非所有萬用表都具有電容測量功能,只有昂貴的萬用表才具有此功能。
所以這是一個可以輕松構建和使用的電路。
我們專注于從1微法拉到4000微法拉的較大值的電容器,這些電容器容易因老化而失去電容,特別是由液體電解質組成的電解電容器。
在討論電路細節之前,讓我們看看如何使用Arduino測量電容。
大多數Arduino電容計依賴于RC時間常數屬性。那么什么是RC時間常數?
RC電路的時間常數可以定義為電容器達到充滿電的63.2%所需的時間。零伏是 0% 充電,100% 是電容器的全電壓充電。
電阻值(歐姆)與電容器值(法拉)的乘積給出了時間常數。
T = R x C
T 是時間常數
通過重新排列上述等式,我們得到:
C = T/R
C是未知電容值。
T是RC電路的時間常數,為滿電荷電容器的63.2%。
R 是已知的電阻。
Arduino可以通過模擬引腳檢測電壓,并且可以在程序中手動輸入已知的電阻值。
通過在程序中應用公式C = T / R,我們可以找到未知電容值。
到現在為止,您已經知道我們如何找到未知電容的值了。
在這篇文章中,我提出了兩種電容計,一種帶有LCD顯示屏,另一種使用串行監視器。
如果您是此電容計的常客,最好采用LCD顯示屏設計,如果您不經常使用,最好使用串行顯示器設計,因為它可以在LCD顯示屏上節省一些費用。
現在讓我們繼續看電路圖。
基于串行監視器的電容計:
如您所見,電路非常簡單,只需幾個電阻即可找到未知電容。1K歐姆是已知的電阻值,220歐姆電阻用于在測量過程中對電容器放電。Arduino 感測引腳
A0 上的上升和減少電壓,該引腳連接在 1K 歐姆和 220 歐姆電阻器之間。如果您使用電解電容器等極化電容器,請注意極性。程序:
//-----------------Program developed by R.Girish------------------//
const int chargePin = 7 ;
const int dischargePin = 6;
float resistorValue = 1000 // Value of known resistor in ohm
unsigned long startTime;
unsigned long elapsedTime;
float microFarads;
void setup()
{
Serial.begin(9600);
pinMode(chargePin, OUTPUT);
digitalWrite(chargePin, LOW);
}
void loop()
{
digitalWrite(chargePin, HIGH);
startTime = millis();
while(analogRead(analogPin) 《 648){}
elapsedTime = millis() - startTime;
microFarads = ((float)elapsedTime / resistorValue) * 1000;
if (microFarads 》 1)
{
Serial.print(“Value = ”);
Serial.print((long)microFarads);
Serial.println(“ microFarads”);
Serial.print(“Elapsed Time = ”);
Serial.print(elapsedTime);
Serial.println(“mS”);
Serial.println(“--------------------------------”);
}
else
{
Serial.println(“Please connect Capacitor!”);
delay(1000);
}
digitalWrite(chargePin, LOW);
pinMode(dischargePin, OUTPUT);
digitalWrite(dischargePin, LOW);
while(analogRead(analogPin) 》 0) {}
pinMode(dischargePin, INPUT);
}
//-----------------Program developed by R.Girish------------------//
將上面的代碼上傳到Arduino,完成硬件設置,最初不要連接電容器。打開串行監視器;它說“請連接電容器”。
現在連接一個電容器,其電容將顯示如下圖所示。
它還顯示了達到電容器完全充電電壓的63.2%所需的時間,該時間顯示為經過的時間。
基于LCD的電容計的電路圖:
上面的示意圖是LCD顯示器和Arduino之間的連接。提供10K電位器,用于調整顯示器的對比度。其余的連接是不言自明的。
上述電路與基于串行監視器的設計完全相同;您只需要連接LCD顯示器。
LCD電容計程序:
//-----------------Program developed by R.Girish------------------//
#include《LiquidCrystal.h》
LiquidCrystal lcd(12,11,5,4,3,2);
const int analogPin = A0;
const int chargePin = 7 ;
const int dischargePin = 6;
float resistorValue = 1000; // Value of known resistor in ohm
unsigned long startTime;
unsigned long elapsedTime;
float microFarads;
void setup()
{
Serial.begin(9600);
lcd.begin(16,2);
pinMode(chargePin, OUTPUT);
digitalWrite(chargePin, LOW);
lcd.clear();
lcd.setCursor(0,0);
lcd.print(“ CAPACITANCE”);
lcd.setCursor(0,1);
lcd.print(“ METER”);
delay(1000);
}
void loop()
{
digitalWrite(chargePin, HIGH);
startTime = millis();
while(analogRead(analogPin) 《 648){}
elapsedTime = millis() - startTime;
microFarads = ((float)elapsedTime / resistorValue) * 1000;
if (microFarads 》 1)
{
lcd.clear();
lcd.setCursor(0,0);
lcd.print(“Value = ”);
lcd.print((long)microFarads);
lcd.print(“ uF”);
lcd.setCursor(0,1);
lcd.print(“Elapsed:”);
lcd.print(elapsedTime);
lcd.print(“ mS”);
delay(100);
}
else
{
lcd.clear();
lcd.setCursor(0,0);
lcd.print(“Please connect”);
lcd.setCursor(0,1);
lcd.print(“capacitor !!!”);
delay(500);
}
digitalWrite(chargePin, LOW);
pinMode(dischargePin, OUTPUT);
digitalWrite(dischargePin, LOW);
while(analogRead(analogPin) 》 0) {}
pinMode(dischargePin, INPUT);
}
//-----------------Program developed by R.Girish------------------//
完成硬件設置后,上傳上述代碼。最初不要連接電容器。顯示屏顯示“請連接電容器!!”現在您連接電容器。顯示屏將顯示電容器的值和達到充滿電電容器的
63.2% 所花費的時間。
-
電容
+關注
關注
99文章
5874瀏覽量
149056 -
Arduino
+關注
關注
187文章
6453瀏覽量
185948 -
數字電容表
+關注
關注
1文章
9瀏覽量
9508 -
電容電路
+關注
關注
1文章
11瀏覽量
3094
發布評論請先 登錄
相關推薦
評論