所有嵌入式愛好者都熟悉萬用表,它是測量電壓、電流、電阻等的絕佳工具。萬用表可以輕松測量它們。但有時我們需要測量電感和電容,這是普通萬用表無法做到的。有一些特殊的萬用表可以測量電感和電容,但它們很昂貴。所以今天我們將使用Arduino制作電感LC表。在本項目中,我們將顯示電感和電容值以及16x2 LCD顯示器的頻率。電路中有一個按鈕,用于在電容和電感顯示之間切換。
所需組件
Arduino Uno
3V電池
100歐姆電阻器
電感
1N4007 二極管
10k 電阻器
10k鍋
按鈕
面包板或印刷電路板
連接線
計算頻率和電感
在本項目中,我們將通過使用并聯的LC電路來測量電感和電容。這個電路就像一個鈴聲或鈴鐺,以一定的頻率開始共振。每當我們施加脈沖時,該LC電路將開始諧振,并且該諧振頻率以模擬(正弦波)的形式出現,因此我們需要將其轉換為流紳波。為此,我們將這個模擬諧振頻率應用于運算放大器(在我們的例子中為741),運算放大器將在占空比的50%將其轉換為流紳波(頻率)。現在我們使用Arduino測量頻率,并通過一些數學計算,我們可以找到電感或電容。我們使用了給定的LC電路頻率響應公式。
f=1/(2*time)
其中 pulseIn() 函數輸出時間
現在我們有LC電路頻率:
f=1/2*Pi* square root of (LC)
我們可以解決它以獲得電感:
f2 = 1/ (4Pi2LC)
L= 1/ (4Pi2 f2C)
L = 1/(4* Pi * Pi * f * f * C)
正如我們已經提到的,我們的波是正弦波,因此它在正負振幅上具有相同的時間段。這意味著比較器將其轉換為占空比為50%的方波。這樣我們就可以使用 Arduino 的 pulseIn() 函數來測量它。這個函數會給我們一個時間段,可以通過反轉時間段輕松轉換為頻率。由于 pulseIn 函數只測量一個脈沖,所以現在要獲得正確的頻率,我們必須將其乘以 2。現在我們有一個頻率,可以使用上述公式將其轉換為電感。
注意:測量電感(L1)時,電容器(C1)值應為0.1uF,測量電容(C1)時,電感(L1)值應為10mH。
電路圖及說明
在此LC儀表電路圖中,我們使用Arduino來控制項目操作。在此,我們使用了LC電路。該LC電路由電感器和電容器組成。為了將正弦諧振頻率轉換為數字或方波,我們使用了運算放大器,即741。這里我們需要對運算放大器施加負電源以獲得準確的輸出頻率。所以我們用一個反極性的3v電池連接,意味著741負極連接到電池負極,電池的正極連接到剩余電路的接地。有關更多說明,請參見下面的電路圖。
在這里,我們有一個按鈕來更改工作模式,無論我們是測量電感還是電容。16x2 LCD用于顯示電感或電容與LC電路的頻率。10k電位器用于控制LCD的亮度。電路在Arduino 5v電源的幫助下供電,我們可以使用USB或12v適配器為Arduino供電5v。
編程說明
該液相色譜儀項目的編程部分非常簡單。本文末尾給出了完整的Arduino代碼。
首先,我們必須包含LCD庫并聲明一些引腳和宏。
#include
LiquidCrystal lcd(A5, A4, A3, A2, A1, A0);
#define serial
#define charge 3
#define freqIn 2
#define mode 10
#define Delay 15
double frequency, capacitance, inductance;
typedef struct
{
int flag: 1;
}Flag;
Flag Bit;
之后,在設置功能中,我們初始化了LCD和串行通信,以在LCD和串行監視器上顯示測量值。
void setup()
{
#ifdef serial
Serial.begin(9600);
#endif
lcd.begin(16, 2);
pinMode(freqIn, INPUT);
pinMode(charge, OUTPUT);
pinMode(mode, INPUT_PULLUP);
lcd.print(" LC Meter Using ");
lcd.print(" Arduino ");
delay(2000);
lcd.clear();
lcd.print("Circuit Digest");
delay(2000);
}
然后在環路功能中,將固定時間段的脈沖施加到LC電路,該脈沖將為LC電路充電。去除脈沖后,LC電路開始諧振。然后,我們使用pulseIn()函數讀取來自運算放大器的方波轉換,并通過乘以2進行轉換。在這里,我們也對此進行了一些采樣。這就是頻率的計算方式:
void loop()
{
for(int i=0;i
{
digitalWrite(charge, HIGH);
delayMicroseconds(100);
digitalWrite(charge, LOW);
delayMicroseconds(50);
double Pulse = pulseIn(freqIn, HIGH, 10000);
if (Pulse > 0.1)
frequency+= 1.E6 / (2 * Pulse);
delay(20);
}
frequency/=Delay;
#ifdef serial
Serial.print("frequency:");
Serial.print( frequency );
Serial.print(" Hz ");
#endif
lcd.setCursor(0, 0);
lcd.print("freq:");
lcd.print( frequency );
lcd.print(" Hz ");
獲得頻率值后,我們使用給定的代碼段將它們轉換為電感
capacitance = 0.1E-6;
inductance = (1. / (capacitance * frequency * frequency * 4.*3.14159 * 3.14159)) * 1.E6;
#ifdef serial
Serial.print("Ind:");
if(inductance>=1000)
{
Serial.print( inductance/1000 );
Serial.println(" mH");
}
else
{
Serial.print( inductance );
Serial.println(" uH");
}
#endif
lcd.setCursor(0, 1);
lcd.print("Ind:");
if(inductance>=1000)
{
lcd.print( inductance/1000 );
lcd.print(" mH ");
}
else
{
lcd.print( inductance );
lcd.print(" uH ");
}
}
And by using given code we calculatedcapacitance.
if (Bit.flag)
{
inductance = 1.E-3;
capacitance = ((1. / (inductance * frequency * frequency * 4.*3.14159 * 3.14159)) * 1.E9);
if((int)capacitance < 0)
capacitance=0;
#ifdef serial
Serial.print("Capacitance:");
Serial.print( capacitance,6);
Serial.println(" uF ");
#endif
lcd.setCursor(0, 1);
lcd.print("Cap: ");
if(capacitance > 47)
{
lcd.print( (capacitance/1000));
lcd.print(" uF ");
}
else
{
lcd.print(capacitance);
lcd.print(" nF ");
}
}
這就是我們使用Arduino計算頻率,電容和電感并將其顯示在16x2 LCD上的方式。
#include
LiquidCrystal lcd(A5, A4, A3, A2, A1, A0);
#define serial
#define charge 3
#define freqIn 2
#define mode 10
#define Delay 15
double frequency, capacitance, inductance;
typedef struct
{
int flag: 1;
}Flag;
Flag Bit;
void setup()
{
#ifdef serial
Serial.begin(9600);
#endif
lcd.begin(16, 2);
pinMode(freqIn, INPUT);
pinMode(charge, OUTPUT);
pinMode(mode, INPUT_PULLUP);
lcd.print(" LC Meter Using ");
lcd.setCursor(0, 1);
lcd.print(" Arduino ");
delay(2000);
lcd.clear();
lcd.print("Circuit Digest");
delay(2000);
}
void loop()
{
for(int i=0;i
-
電感
+關注
關注
54文章
6114瀏覽量
102179 -
Arduino
+關注
關注
187文章
6464瀏覽量
186684
發布評論請先 登錄
相關推薦
評論