所有嵌入式愛好者都熟悉萬用表,它是測(cè)量電壓、電流、電阻等的絕佳工具。萬用表可以輕松測(cè)量它們。但有時(shí)我們需要測(cè)量電感和電容,這是普通萬用表無法做到的。有一些特殊的萬用表可以測(cè)量電感和電容,但它們很昂貴。所以今天我們將使用Arduino制作電感LC表。在本項(xiàng)目中,我們將顯示電感和電容值以及16x2 LCD顯示器的頻率。電路中有一個(gè)按鈕,用于在電容和電感顯示之間切換。
所需組件
Arduino Uno
741運(yùn)算放大器IC
3V電池
100歐姆電阻器
電感
1N4007 二極管
10k 電阻器
10k鍋
按鈕
面包板或印刷電路板
連接線
計(jì)算頻率和電感
在本項(xiàng)目中,我們將通過使用并聯(lián)的LC電路來測(cè)量電感和電容。這個(gè)電路就像一個(gè)鈴聲或鈴鐺,以一定的頻率開始共振。每當(dāng)我們施加脈沖時(shí),該LC電路將開始諧振,并且該諧振頻率以模擬(正弦波)的形式出現(xiàn),因此我們需要將其轉(zhuǎn)換為流紳波。為此,我們將這個(gè)模擬諧振頻率應(yīng)用于運(yùn)算放大器(在我們的例子中為741),運(yùn)算放大器將在占空比的50%將其轉(zhuǎn)換為流紳波(頻率)。現(xiàn)在我們使用Arduino測(cè)量頻率,并通過一些數(shù)學(xué)計(jì)算,我們可以找到電感或電容。我們使用了給定的LC電路頻率響應(yīng)公式。
f=1/(2*time)
其中 pulseIn() 函數(shù)輸出時(shí)間
現(xiàn)在我們有LC電路頻率:
f=1/2*Pi* square root of (LC)
我們可以解決它以獲得電感:
f2 = 1/ (4Pi2LC)
L= 1/ (4Pi2 f2C)
L = 1/(4* Pi * Pi * f * f * C)
正如我們已經(jīng)提到的,我們的波是正弦波,因此它在正負(fù)振幅上具有相同的時(shí)間段。這意味著比較器將其轉(zhuǎn)換為占空比為50%的方波。這樣我們就可以使用 Arduino 的 pulseIn() 函數(shù)來測(cè)量它。這個(gè)函數(shù)會(huì)給我們一個(gè)時(shí)間段,可以通過反轉(zhuǎn)時(shí)間段輕松轉(zhuǎn)換為頻率。由于 pulseIn 函數(shù)只測(cè)量一個(gè)脈沖,所以現(xiàn)在要獲得正確的頻率,我們必須將其乘以 2?,F(xiàn)在我們有一個(gè)頻率,可以使用上述公式將其轉(zhuǎn)換為電感。
注意:測(cè)量電感(L1)時(shí),電容器(C1)值應(yīng)為0.1uF,測(cè)量電容(C1)時(shí),電感(L1)值應(yīng)為10mH。
電路圖及說明
在此LC儀表電路圖中,我們使用Arduino來控制項(xiàng)目操作。在此,我們使用了LC電路。該LC電路由電感器和電容器組成。為了將正弦諧振頻率轉(zhuǎn)換為數(shù)字或方波,我們使用了運(yùn)算放大器,即741。這里我們需要對(duì)運(yùn)算放大器施加負(fù)電源以獲得準(zhǔn)確的輸出頻率。所以我們用一個(gè)反極性的3v電池連接,意味著741負(fù)極連接到電池負(fù)極,電池的正極連接到剩余電路的接地。有關(guān)更多說明,請(qǐng)參見下面的電路圖。
在這里,我們有一個(gè)按鈕來更改工作模式,無論我們是測(cè)量電感還是電容。16x2 LCD用于顯示電感或電容與LC電路的頻率。10k電位器用于控制LCD的亮度。電路在Arduino 5v電源的幫助下供電,我們可以使用USB或12v適配器為Arduino供電5v。
編程說明
該液相色譜儀項(xiàng)目的編程部分非常簡單。本文末尾給出了完整的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;
之后,在設(shè)置功能中,我們初始化了LCD和串行通信,以在LCD和串行監(jiān)視器上顯示測(cè)量值。
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);
}
然后在環(huán)路功能中,將固定時(shí)間段的脈沖施加到LC電路,該脈沖將為LC電路充電。去除脈沖后,LC電路開始諧振。然后,我們使用pulseIn()函數(shù)讀取來自運(yùn)算放大器的方波轉(zhuǎn)換,并通過乘以2進(jìn)行轉(zhuǎn)換。在這里,我們也對(duì)此進(jìn)行了一些采樣。這就是頻率的計(jì)算方式:
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 ");
獲得頻率值后,我們使用給定的代碼段將它們轉(zhuǎn)換為電感
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計(jì)算頻率,電容和電感并將其顯示在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
-
電感
+關(guān)注
關(guān)注
53文章
6091瀏覽量
102066 -
Arduino
+關(guān)注
關(guān)注
187文章
6457瀏覽量
186503
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論