|
所有嵌入式爱好者都熟悉万用表,它是测量电压、电流、电阻等的绝佳工具。万用表可以轻松测量它们。但有时我们需要测量电感和电容,这些是普通万用表无法测量的。有一些特殊的万用表可以测量电感和电容,但它们很昂贵。我们已经使用Arduino开发板制作了频率计、电容表和电阻表。所以今天我们将使用Arduino开发板制作一个电感式LC测量仪。在本篇文章中,我们将在显示屏LCD1602上显示电感、电容值和频率。电路中有一个按钮,用于在电容和电感显示之间切换。
需要的组件 ● Arduino Uno开发板 ● 运算放大器741 ● 3v电池 ● 电容 ● 电感 ● 1n4007二极管 ● 电源 ● 按钮 ● 面包板 ● 连接导线
计算频率和电感 在本篇文章中,我们将通过并联使用LC电路来测量电感和电容。该电路类似于环或钟,它在特定频率下开始谐振。每当我们施加脉冲时,该LC电路将开始谐振,并且该谐振频率是模拟(正弦波)的形式,因此我们需要将其转换为方波。为此,我们将此模拟共振频率应用于运算放大器(在我们的例子中为741),该运算放大器将其转换为占空比为50%的方波(频率)。现在我们可以使用Arduino开发板测量频率,通过一些数学计算,我们可以得出电感或电容。我们使用了以下的LC电路频率响应公式。 其中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负极引脚连接到电池负极端子,电池正极引脚连接到剩余电路的地。有关更多说明,请参见下面的电路图。
无论我们是测量电感还是电容,我们都有一个按钮来改变操作模式。LCD1602用于显示LC电路频率的电感或电容。10k电位器用于控制LCD的亮度。电路使用Arduino的5v电源供电,我们可以使用USB或12v适配器为Arduino供电。
编程说明 这个LC测量仪的编程部分非常简单。完整的Arduino代码在本文末尾给出。
首先,我们需要包含LCD库,并声明一些引脚和宏。 - #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;
复制代码
之后,在setup函数中,我们初始化了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);
- }
复制代码
然后在loop函数中,将固定时间周期的脉冲施加到LC电路,LC电路将为LC电路充电。去除脉冲后,LC电路开始谐振。 然后我们通过使用pulseIn()函数读取运算放大器的方波转换,并通过乘以2进行转换。这里我们也采用了一些这样的样本。 以下是计算频率的方式: - 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 ");
复制代码得到频率值后,我们使用以下的代码片段将它们转换为电感、 - 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 (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开发板计算频率、电容和电感的方法,然后将其显示在LCD液晶显示屏上。
代码 本文使用的完整代码如下所示:
main.rar
(903 Bytes, 下载次数: 170)
|