如何使用Arduino制作电感LC表

描述

所有嵌入式爱好者都熟悉万用表,它是测量电压、电流、电阻等的绝佳工具。万用表可以轻松测量它们。但有时我们需要测量电感和电容,这是普通万用表无法做到的。有一些特殊的万用表可以测量电感和电容,但它们很昂贵。所以今天我们将使用Arduino制作电感LC表。在本项目中,我们将显示电感和电容值以及16x2 LCD显示器的频率。电路中有一个按钮,用于在电容和电感显示之间切换。

所需组件

Arduino Uno

741运算放大器IC

3V电池

100欧姆电阻器

电容器

电感

1N4007 二极管

10k 电阻器

10k锅

电源

按钮

面包板或印刷电路板

连接线

Arduino

计算频率和电感

在本项目中,我们将通过使用并联的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负极连接到电池负极,电池的正极连接到剩余电路的接地。有关更多说明,请参见下面的电路图。

Arduino

在这里,我们有一个按钮来更改工作模式,无论我们是测量电感还是电容。16x2 LCD用于显示电感或电容与LC电路的频率。10k电位器用于控制LCD的亮度。电路在Arduino 5v电源的帮助下供电,我们可以使用USB或12v适配器为Arduino供电5v。

Arduino

 

Arduino

编程说明

该液相色谱仪项目的编程部分非常简单。本文末尾给出了完整的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.setCursor(0, 1);

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

 


 

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分