风筝
发表于: 2021-2-1 14:20:34 | 显示全部楼层

如果您是像我这样的创客,并且正在网上寻找一些有趣的项目,那么毫欧表是您可以轻松而有用的事情。该电路的基本原理基于恒流源。毫欧表是一种可用于确定小电阻器的值、​​PCB走线的电阻的设备,并且如果您知道专有技术,则可以用于找出PCB中的短路情况。


互联网上有很多毫欧表和低电阻表电路,但是今天我们将使用Arduino和LM317线性稳压器IC来制作非常简单的低电阻表,它不仅可靠而且还提供了准确的测量。 我们还将在OLED显示屏上显示信息,最后,我们将对电路进行性能测试。在我们的测试中,该电路不仅准确,而且范围还不错。我们能够非常准确地测量0.05R至22R。因此,事不宜迟,让我们开始吧。


什么是毫欧表,它如何工作?

正如我们之前所讨论的,毫欧表是一种用于测量低电阻的设备,如果您问为什么测量低电阻很重要,让我告诉您它可以用于测量电阻以外的许多不同类型的应用中。一个例子可能像;假设您有一块电路板在大多数情况下在电源部分出现短路,则问题可能出在电容器上。如果您要使用毫欧表,则可以检查电路板的不同部分以查明电阻最低的特定区域,然后可以从那里开始调试。


电阻可以定义为与电子流动相反的成分。电阻的单位是欧姆。毫欧表是一种非常简单的仪器,用于测量未知/低值电阻。市场上有很多欧姆表,它们可以测量各种各样的电阻,但是这些表有一个共同点,那就是价格昂贵。


我们的毫欧表按照欧姆定律原理工作。工作原理和电路非常简单,正如您从标题中已经知道的那样,我们将使用Arduino处理当前信息,但是Arduino不知道如何测量电流,只知道如何测量电压,要将电流值转换为电压值,我们将结合欧姆定律使用恒流源,而恒流源将使用LM317稳压器。


构建基于Arduino的毫欧表所需的组件

●    Arduino Nano开发板

●    LM317T

●    128 X 64 OLED

●    10 R电阻

●    测试电阻

Low-Resistance-Meter-Components.jpg


基于Arduino的毫欧表的示意图

Arduino毫欧表的完整电路图如下所示。

Arduino-Based-Low-Resistance-Meter-Circuit.png


如上图所示,该电路的连接图和工作原理非常简单,我们使用一个Arduino Nano开发板,负责数据收集、计算和处理。我们有一个OLED显示屏,可以显示计算出的电阻值。最后,我们使用的是恒流源LM317T。使用恒定电流源和欧姆定律,我们可以很容易地计算出电阻值。


在原理图中,您可以看到一个公式,该公式用于计算LM317稳压器IC的电流极限。您也可以在原理图中看到,我们在电路中使用了10R电阻来计算0.125A或125mA的恒定电流。现在,由于有了电流值,我们只需要将其除以电压即可得到电阻V = IR,因此R = V / I,就可以得到电阻。


代码

该项目中使用的完整代码可以在页面底部找到。添加所需的头文件和源文件后,您应该能够直接编译Arduino代码。您可以从下面给出的链接下载库,也可以使用板管理器方法安装库。

下载Adafruit的SSD1306 OLED库


代码很简单,如下所示。我们首先包括所有必需的库。当我们使用OLED显示屏时,我们必须包括SSD1306库和Wire库,SSD1306库使用wire库。

  1. https://github.com/adafruit/Adafruit_SSD1306
复制代码

接下来,我们将定义显示器的屏幕宽度和屏幕高度。此外,我们将定义LM317稳压器IC的电阻值和参考值。这是必需的,因为我们将使用这些值来计算恒定电流。完成此操作后,我们将定义平均ADC值所需的所有必需变量。同样,我们将声明引脚号和其他变量。

  1. const int numReadings = 50; // used for averaging / we will take 50 samples and average it to get ADC value
  2. int readings[numReadings]; // Store the readings from the analog input
  3. int readIndex = 0; // the index of the current reading
  4. int total = 0; // the running total
  5. int ADCaverage = 0; // the average
  6. float R; // Stores the Resistance Value
  7. int inputPin = A0; // A0 is selected as input
复制代码

接下来,我们为SSD1306显示器创建一个实例,并传入线对象。

  1. Adafruit_SSD1306 display(SCREEN_WIDATA_PINH, SCREEN_HEIGHT, &Wire, -1);
复制代码

然后,我们在setup()函数中,我们将初始化显示并检查显示是否可用。我们借助if语句来做到这一点。如果显示可用,我们将前进到代码,否则将打印错误语句。

  1. if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { // Address 0x3D for 128x64
  2.     Serial.println(F("SSD1306 allocation failed"));
  3.     for (;;);
  4.   }
复制代码

接下来,我们设置OLED显示器的文本颜色,如果不设置,则显示器将显示黑色段。然后,display.setRotation(2)方法旋转显示,因为这是该项目的要求。完成后,我们定义for循环。在for循环中,我们将数组的所有元素初始化为零。这很重要,因为数组中可能存在垃圾值,这些垃圾值会在我们的计算中引入错误。

  1. display.setTextColor(WHITE); // set LCD Colour
  2.   display.setRotation(2); // it has modes 1,2,3,4
  3.   //
  4.   for (int thisReading = 0; thisReading < numReadings; thisReading++) {
  5.     readings[thisReading] = 0;
  6.   }
  7. delay(500);
  8. }
复制代码

接下来,我们介绍loop()函数部分。在本节中,我们将进行所有必要的计算,以平均ADC值以平滑输出ADC读数。您在下面看到的代码用于平均ADC值。

  1. total = total - readings[readIndex];  // subtract the last reading:
  2. readings[readIndex] = analogRead(inputPin); // read from the sensor:
  3.   total = total + readings[readIndex];  // add the reading to the total:
  4.   readIndex = readIndex + 1; // advance to the next position in the array:
  5.   if (readIndex >= numReadings) {
  6.     // if we're at the end of the array...
  7.     // ...wrap around to the beginning:
  8.     readIndex = 0;
  9.   }
复制代码

ADC值平均后,我们将打印平均值以用于调试。接下来,我们将ADC值转换为电压值,这是计算所需的。之后,我们打印电压值以进行调试。一旦有了电压,我们就知道电流值是固定的。现在,借助欧姆定律法则,我们可以计算电阻值并将其打印在串口监视器中。另外,我们将值打印在OLED显示屏上。

  1. ADCaverage = total / numReadings; // calculate the average:
  2.   Serial.print("AVG: ");
  3.   Serial.print(ADCaverage);
  4.   float voltage = ADCaverage * (5.0 / 1024.0); // Convert ADCaverage to Voltage
  5.   Serial.print(" \t \t"); // give me a little TAb would ya
  6.   Serial.print(voltage, 3); // Print Voltage to Serial Monitor
  7.   Serial.print(" \t \t");// give me another little TAb would ya
  8.   R = voltage / (LM317_REF / LM317_Resistance) ;
  9.   Serial.print("Resistance: ");
  10.   Serial.println(R);
  11.   display.clearDisplay();
  12.   display.setTextSize(2);
  13.   display.setCursor(10, 10);
  14.   display.print(R,3);
  15.   display.print(" R");
  16.   display.display();
  17.   delay(50);
复制代码

这标志着编码过程的结束,现在我们可以继续测试毫欧表了。


测试Arduino毫欧表

要测试该电路,请使用以下设置。该设置是在面包板上进行的,仅供测试之用,强烈建议将该电路安装在适当的PCB板上。

Arduino-Based-Low-Resistance-Meter.jpg

如您在图片中所看到的,我们将该电路作为试验电路制作在试验板上,结果发现这是一个坏主意,因为接触电阻和阻抗给电路造成了沉重的负担。这就是为什么在最后一刻,我们决定将一些导线直接焊接到电路板上,我们还将10R电阻和鳄鱼夹的导线直接焊接到LM317 IC本身。

Low-Resistance-Meter-Working.jpg


完成此操作后,我们用此仪表测量了一些电阻并观察了结果,结果非常好。如上图所示,该值非常准确。

Low-Resistance-Meter-with-Arduino.jpg

为了验证结果,我们决定使用MECHO 450B +万用表再次测试电路。万用表为我们提供了非常奇特的值,可能是一个错误。为了验证,我们再次测试了不同的电阻值,结果几乎相同。此时,我们确定Meco万用表无法测量如此低的电阻值。

跳转到指定楼层
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题 714 | 回复: 1501



手机版|

GMT+8, 2024-12-22 11:15 , Processed in 0.045846 second(s), 8 queries , Gzip On, MemCache On. Powered by Discuz! X3.5

YiBoard一板网 © 2015-2022 地址:河北省石家庄市长安区高营大街 ( 冀ICP备18020117号 )

快速回复 返回顶部 返回列表