所有嵌入式爱好者都熟悉万用表,它是测量电压、电流、电阻等的绝佳工具。万用表可以轻松测量它们。但有时我们需要测量电感和电容,这是普通万用表无法做到的。有一些特殊的万用表可以测量电感和电容,但它们很昂贵。所以今天我们将使用Arduino制作电感LC表。在本项目中,我们将显示电感和电容值以及16x2 LCD显示器的频率。电路中有一个按钮,用于在电容和电感显示之间切换。
所需组件
Arduino Uno
741运算放大器IC
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.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
全部0条评论
快来发表一下你的评论吧 !