Mạch đo điện cảm và điện dung sử dụng arduino

0
382

Mạch đo điện cảm và điện dung sử dụng arduino : Tất cả những người yêu thích nhúng đều quen thuộc với đồng hồ vạn năng, một công cụ tuyệt vời để đo điện áp, dòng điện, điện trở, v.v. Đồng hồ vạn năng có thể đo chúng dễ dàng. Nhưng đôi khi chúng ta cần đo độ tự cảm và điện dung mà không thể thực hiện được bằng đồng hồ vạn năng thông thường. Có một số đồng hồ vạn năng đặc biệt có thể đo điện cảm và điện dung nhưng chúng rất tốn kém. Vì vậy, hôm nay chúng ta sẽ tạo ra một đồng hồ đo LC điện cảm sử dụng Arduino . Trong dự án này, chúng tôi sẽ hiển thị các giá trị điện cảm và điện dung cùng với tần số trên màn hình LCD 16×2. Một nút nhấn được đưa ra trong mạch để chuyển đổi giữa màn hình điện dung và độ tự cảm.

Linh kiện cần có trong Mạch đo điện cảm và điện dung sử dụng arduino

  1. Arduino una
  2. IC opamp 741
  3. Pin 3v
  4. Điện trở 100 ohm
  5. Tụ điện
  6. Cuộn cảm
  7. 1n4007 diode
  8. Điện trở 10k
  9. Hủ 10k
  10. Nguồn cấp
  11. Nút ấn
  12. Breadboard hoặc PCB
  13. Kết nối dây

 Mạch đo điện cảm và điện dung sử dụng arduino

Tính toán tần số và điện cảm

Trong dự án này, chúng ta sẽ đo độ tự cảm và điện dung bằng cách sử dụng một mạch LC song song . Mạch này giống như một chiếc chuông hoặc chuông bắt đầu cộng hưởng ở một tần số nhất định. Bất cứ khi nào chúng ta áp dụng một xung, mạch LC này sẽ bắt đầu cộng hưởng và tần số cộng hưởng này ở dạng tương tự (sóng hình sin) vì vậy chúng ta cần chuyển đổi nó thành sóng squire. Để làm điều này, chúng tôi áp dụng tần số cộng hưởng tương tự này cho opamp (trong trường hợp của chúng tôi là 741) sẽ chuyển đổi nó ở dạng sóng squire (tần số) ở 50% chu kỳ nhiệm vụ. Bây giờ chúng tôi đo tần số bằng cách sử dụng Arduino và bằng cách sử dụng một số phép tính toán học, chúng tôi có thể tìm thấy độ tự cảm hoặc điện dung. Chúng tôi đã sử dụng công thức đáp ứng tần số mạch LC đã cho .

f=1/(2*time)

mà thời gian là đầu ra của pulseIn () chức năng

bây giờ chúng ta có mạch LC Tần số:

f=1/2*Pi* square root of (LC)

chúng ta có thể giải quyết nó để có được điện cảm:

f2 = 1/ (4Pi2LC)
L= 1/ (4Pi2 f2C)
L = 1/(4* Pi * Pi * f * f * C)

Như chúng ta đã đề cập rằng sóng của chúng ta là sóng hình sin nên nó có cùng khoảng thời gian với cả biên độ dương và âm. Nó có nghĩa là bộ so sánh sẽ chuyển nó thành sóng vuông có chu kỳ nhiệm vụ 50%. Vì vậy, chúng ta có thể đo lường nó bằng cách sử dụng hàm xungIn () của Arduino. Hàm này sẽ cung cấp cho chúng ta một khoảng thời gian có thể dễ dàng chuyển đổi thành tần số bằng cách đảo ngược khoảng thời gian. Vì hàm xungIn chỉ đo một xung, vì vậy bây giờ để có được tần số chính xác, chúng ta phải nhân nó với 2. Bây giờ chúng ta có một tần số có thể được chuyển đổi thành điện cảm bằng cách sử dụng công thức trên.

Lưu ý: trong khi đo độ tự cảm (L1), giá trị tụ điện (C1) phải là 0,1uF và trong khi đo điện dung (C1), giá trị cuộn cảm (L1) phải là 10mH.

Sơ đồ mạch và giải thích Mạch đo điện cảm và điện dung sử dụng arduino

Trong sơ đồ mạch LC Meter này , chúng tôi đã sử dụng Arduino để điều khiển hoạt động của dự án. Trong điều này, chúng tôi đã sử dụng một mạch LC. Mạch LC này gồm một cuộn cảm và một tụ điện. Để chuyển đổi tần số cộng hưởng hình sin sang sóng kỹ thuật số hoặc sóng vuông, chúng ta đã sử dụng bộ khuếch đại hoạt động cụ thể là 741. Ở đây chúng ta cần áp dụng nguồn cung cấp âm cho op-amp để có được tần số đầu ra chính xác. Vì vậy, chúng tôi đã sử dụng một pin 3v nối ngược cực, nghĩa là chân âm 741 được nối với cực âm của pin và chân dương của pin được nối với đất của mạch còn lại. Để rõ hơn, hãy xem sơ đồ mạch bên dưới.

 Mạch đo điện cảm và điện dung sử dụng arduino

Ở đây chúng ta có một nút nhấn để thay đổi chế độ hoạt động cho dù chúng ta đang đo điện cảm hay điện dung. Một LCD 16×2 được dùng để hiển thị độ tự cảm hoặc điện dung cùng tần số với mạch LC. Một nồi 10k được sử dụng để kiểm soát độ sáng của màn hình LCD. Mạch được cấp nguồn với sự trợ giúp của nguồn cung cấp 5v Arduino và chúng ta có thể cấp nguồn cho Arduino 5v bằng bộ chuyển đổi USB hoặc 12v.

 Mạch đo điện cảm và điện dung sử dụng arduinoĐo tần số và điện dung

 Mạch đo điện cảm và điện dung sử dụng arduinoĐo tần số và điện cảm

Giải thích

Phần lập trình của LC Meter này rất dễ dàng. Code Arduino hoàn chỉnh được đưa ra ở cuối bài viết này.

Đầu tiên chúng ta phải bao gồm thư viện cho LCD và khai báo một số chân và macro.

#include<LiquidCrystal.h>
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;

Sau đó, trong chức năng cài đặt, chúng tôi đã khởi tạo giao tiếp LCD và Serial để hiển thị các giá trị đo được qua LCD và màn hình nối tiếp.

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);
}

Sau đó, trong chức năng vòng lặp , áp dụng một xung của một khoảng thời gian cố định vào mạch LC sẽ sạc mạch LC. Sau khi loại bỏ xung LC mạch bắt đầu cộng hưởng. Sau đó, chúng tôi đọc chuyển đổi sóng vuông của nó, đến từ op-amp, bằng cách sử dụng hàm xungIn () và chuyển đổi bằng cách nhân với 2. Ở đây chúng tôi cũng đã lấy một số mẫu của điều này. Đó là cách tính tần số :

void loop()
{
  for(int i=0;i<Delay;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      ");

Sau khi nhận được giá trị tần số, chúng tôi đã chuyển đổi chúng thành điện cảm bằng cách sử dụng đoạn mã nhất định

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              ");
  }
  }

Và bằng cách sử dụng mã đã cho, chúng tôi đã tính toán điện dung .

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                 ");
    }
  }

Vì vậy, đây là cách chúng tôi tính toán tần số, điện dung và điện cảm bằng Arduino và hiển thị nó trên màn hình LCD 16×2.

CODE

#include<LiquidCrystal.h>
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<Delay;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      “);

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                 “);
}
}

else
{
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              “);
}
}

if (digitalRead(mode) == LOW)
{
Bit.flag = !Bit.flag;
delay(1000);
while (digitalRead(mode) == LOW);
}
delay(50);
}

LEAVE A REPLY

Please enter your comment!
Please enter your name here