所有嵌入式爱好者都熟悉万用表,它是测量电压,电流,电阻等的绝佳工具。万用表可以轻松地对其进行测量。但是有时我们需要测量电感和电容,而这是普通万用表无法实现的。有一些特殊的万用表可以测量电感和电容,但价格昂贵。我们已经使用Arduino构建了频率表,电容表和电阻表。因此,今天我们将使用Arduino制造电感LC仪表。在本项目中,我们将在16x2 LCD显示屏上显示电感和电容值以及频率。电路中有一个按钮,用于在电容和电感显示之间切换。
所需组件
- Arduino Uno
- 741运算放大器IC
- 3v电池
- 100欧姆电阻
- 电容器类
- 电感器
- 1N4007二极管
- 10k电阻
- 1万锅
- 电源供应
- 按钮
- 面包板或PCB
- 连接线
计算频率和电感
在本项目中,我们将通过并联使用LC电路来测量电感和电容。该电路就像一个环或钟,以一定的频率开始谐振。每当我们施加脉冲时,该LC电路就会开始谐振,并且该谐振频率采用模拟(正弦波)形式,因此我们需要将其转换为Squire波。为此,我们将此模拟谐振频率应用于运算放大器(在本例中为741),它将在占空比为50%的情况下将其转换为单倍频率(频率)。现在,我们使用Arduino测量频率,并通过一些数学计算可以找到电感或电容。我们使用了给定的LC电路频率响应公式。
f = 1 /(2 *次)
时间是 pulseIn() 函数的输出
现在我们有了LC电路的频率:
f = 1/2 * Pi *(LC)的平方根
我们可以解决它以获得电感:
f 2 = 1 /(4Pi 2 LC) L = 1 /(4Pi 2 f 2 C) L = 1 /(4 * Pi * Pi * f * f * C)
正如我们已经提到的,我们的波是正弦波,因此它在正振幅和负振幅中具有相同的时间段。这意味着比较器会将其转换为占空比为50%的方波。这样我们就可以使用Arduino的 pulseIn() 函数对其进行测量。此功能将为我们提供一个时间段,可以通过反转时间段轻松地将其转换为频率。由于 pulseIn 功能仅测量一个脉冲,因此现在要获得正确的频率,我们必须将其乘以2。现在我们有了一个可以使用上述公式转换为电感的频率。
注意: 在测量电感(L1)时,电容器(C1)的值应为0.1uF,而在测量电容(C1)时,电感器(L1)的值应为10mH。
电路图和说明
在此LC Meter电路图中,我们使用Arduino来控制项目操作。在此,我们使用了LC电路。该LC电路由一个电感器和一个电容器组成。为了将正弦谐振频率转换为数字或方波,我们使用了运算放大器741。在这里,我们需要对运放施加负电源以获得准确的输出频率。因此,我们使用了极性接反的3v电池,这意味着741的负极引脚连接到电池负极端子,而电池的正极引脚连接到其余电路的接地端。有关更多说明,请参见下面的电路图。
无论测量电感还是电容,这里都有一个按钮可以更改操作模式。16x2 LCD用于显示LC电路频率下的电感或电容。一个10k的电位器用于控制LCD的亮度。使用Arduino 5v电源为Circuit供电,我们可以使用USB或12v适配器通过5v为Arduino供电。
编程说明
该LC Meter项目的编程部分非常简单。本文结尾给出了完整的Arduino代码。
首先,我们必须包括LCD的库,并声明一些引脚和宏。
#包括
之后,在 设置 功能中,我们初始化了LCD和串行通讯,以通过LCD和串行监视器显示测量值。
void setup() { #ifdef serial Serial.begin(9600); #endif lcd.begin(16,2); pinMode(freqIn,INPUT); pinMode(充电,输出); pinMode(模式,INPUT_PULLUP); lcd.print(“ LC计量表使用”); 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
获得频率值后,我们使用给定的代码将其转换为电感
电容= 0.1E-6; 电感=(1 /./(电容*频率*频率* 4. * 3.14159 * 3.14159))* 1.E6; #ifdef serial Serial.print(“ Ind:”); if(inductance> = 1000) { Serial.print(电感/ 1000); Serial.println(“ mH”); } else { Serial.print(电感); Serial.println(“ uH”); } #endif lcd.setCursor(0,1); lcd.print(“ Ind:”); if(inductance> = 1000) { lcd.print(电感/ 1000); lcd.print(“ mH”); } else { lcd.print(电感); lcd.print(“ uH”); } }
通过使用给定的代码,我们计算出电容。
if(Bit.flag) { 电感= 1.E-3; 电容=((1./(电感*频率*频率* 4. * 3.14159 * 3.14159))* 1.E9); if((int)电容<0) 电容= 0; #ifdef serial Serial.print(“ Capacitance:”); Serial.print(电容,6); Serial.println(“ uF”); #endif lcd.setCursor(0,1); lcd.print(“ Cap:”); if(电容> 47) { lcd.print((capacitance / 1000)); lcd.print(“ uF”); } else { lcd.print(capacitance); lcd.print(“ nF”); } }
这就是我们使用Arduino计算频率,电容和电感并将其显示在16x2 LCD上的方式。