使用Arduino和LM317制作一个低电阻表

如果您是像我这样的制造商并在网上寻找一些有趣的项目,那么毫欧表是您可以制作的一件简单而有用的东西。该电路的基本原理是基于恒流源,我们在之前的一篇文章中已经介绍过。毫欧表是一种设备,可用于确定小电阻的值、pcb 走线的电阻,如果您了解专有技术,则可以使用它来找出 pcb 中的短路。
互联网上有很多毫欧表和低电阻表电路,但今天我们将使用 arduino 和流行的 lm317 线性稳压器 ic 制作一个非常简单的低电阻表,它不仅可靠而且提供了一个准确的测量。w 还将在 oled 显示屏上显示信息,最后,我们将对我们的电路进行性能测试。在我们的测试中,该电路不仅准确,而且范围也不错。我们能够非常准确地测量 0.05r 到 22r。所以事不宜迟,让我们开始吧。
什么是毫欧表,它是如何工作的?
正如我们之前所讨论的,毫欧表是一种用于测量低电阻的设备,如果您问为什么测量低电阻很重要,让我告诉您它可以用于许多不同类型的应用,而不是测量反抗。一个例子可能是;假设您的电路板显示电源部分短路,大多数情况下,问题可能是电容器损坏。如果您可以使用低电阻表,您可以检查电路板的不同部分,以查明电阻最低的特定区域,然后您可以从那里开始调试。这是一个简单的例子,如果你想你可以做的不仅仅是这个。
电阻可以定义为阻碍电子流动的成分;电阻的单位是欧姆。毫欧表是一种非常简单的仪器,用于测量未知/低值电阻。市场上有许多欧姆表,它们可以测量各种电阻,但这些仪表有一个共同点,一开始它们非常昂贵。
我们的毫欧表根据欧姆定律工作。工作原理和电路很简单,从标题就知道了,我们要用一个arduino来处理电流信息,但是arduino不知道如何测量电流,它只知道如何测量电压,要将电流值转换为电压值,我们将结合欧姆定律使用恒流源,并且我们将使用流行的lm317 稳压器作为恒流源。
构建基于 arduino 的低电阻表所需的组件
您需要一些组件来构建这个项目,因为它们非常通用,您可以在当地的爱好商店中找到所有这些组件。下面给出了具有值的组件列表。
arduino 纳米 - 1
lm317t - 1
128 x 64 oled - 1
10 r 电阻 - 1
测试电阻器
基于 arduino 的低电阻表示意图
基于 arduino 的低电阻表的完整电路图如下所示。
该电路的连接图和工作原理非常简单,如上图所示,我们有一个arduino nano负责数据采集、计算和处理。我们有一个 oled 显示屏,可以显示计算出的电阻值。最后,我们使用的是恒流源 lm317t。通过恒流源和一点欧姆定律,我们可以很容易地计算出电阻值。
在原理图中,您可以看到用于计算 lm317 稳压器 ic 的电流限制的公式。您还可以在原理图中看到,我们在电路中使用了一个 10r 电阻器来计算 0.125a 或 125ma 的恒定电流。现在,由于我们有电流值,我们只需将其除以电压即可得到电阻 v=ir,因此 r =v/i,我们将得到电阻。
代码:基于 arduino 的低电阻表
此项目中使用的完整代码可在此页面底部找到。添加所需的头文件和源文件后,应该可以直接编译arduino代码了。您可以从下面给出的链接下载库,或者您可以使用板管理器方法安装库。
下载 adafruit 的 ssd1306 oled 库
代码非常简单,如下所示。我们首先包含所有必需的库。由于我们使用的是 oled 显示器,所以我们必须包含 ssd1306 库和 wire 库,ssd1306 库使用 wire 库。
#include #include // oled 线库  
接下来,我们将定义显示器的屏幕宽度和屏幕高度。此外,我们将定义 lm317 稳压器 ic 的电阻值和参考值。这是必需的,因为我们将使用这些值计算恒定电流。一旦我们这样做,我们将定义平均 adc 值所需的所有必要变量。此外,我们将声明引脚号和其他变量。
常量 int numreadings = 50; // 用于平均/我们将取 50 个样本并平均得到 adc 值整数读数[numreadings];// 存储来自模拟输入的读数int readindex = 0; // 当前读数的索引整数 = 0; // 运行总和int adc平均值 = 0; // 平均值浮动r;// 存储电阻值整数输入引脚 = a0;// a0 被选为输入  
接下来,我们为 ssd1306 显示器创建一个实例并传入线对象。
adafruit_ssd1306 显示(screen_widata_pinh,screen_height,&wire,-1);  
接下来,在 setup() 部分,我们将初始化显示并检查显示是否可用。我们在 if 语句的帮助下做到这一点。如果显示可用,我们继续执行我们的代码,否则我们打印一个错误语句。
if (!display.begin(ssd1306_switchcapvcc, 0x3c)) { // 地址 0x3d 为 128x64 serial.println(f(ssd1306 分配失败)); 为了 (;;); }  
接下来,我们设置 oled 显示屏的文本颜色,如果不设置,则显示屏可能会显示黑色段。然后我们在display.setrotation(2)方法的帮助下旋转显示,因为这是这个项目的要求。 完成后,我们定义 for 循环。在 for 循环中,我们将数组的所有元素初始化为零。这很重要,因为数组中可能存在垃圾值,这可能会在我们的计算中引入错误。
display.settextcolor(白色);//设置液晶颜色 display.setrotation(2); // 它有模式 1,2,3,4 // for (int thisreading = 0; thisreading = numreadings) { // 如果我们在数组的末尾... // ...绕到开头: 读取索引 = 0; }  
一旦 adc 值被平均,我们打印平均值仅用于调试。接下来,我们将 adc 值转换为电压值,因为这是计算所需的。此后,我们打印电压值进行调试。一旦我们有了电压,我们就知道我们的电流值是固定的。现在,在欧姆定律的帮助下,我们计算电阻值并将其打印在串行监视器窗口中。此外,我们在 oled 显示屏上打印这些值。
adcaverage = 总数 / numreadings;// 计算平均值: serial.print(avg:); serial.print(adcaverage); 浮动电压 = adcaverage * (5.0 / 1024.0);// 将 adcaverage 转换为电压 序列号.print(\t\t); // 给我一点tab好吗 serial.print(电压,3);// 将电压打印到串行监视器 serial.print( \t \t);// 再给我一个小tab好吗 r = 电压 / (lm317_ref / lm317_resistance); serial.print(阻力:); 序列号.println(r); display.cleardisplay(); display.settextsize(2); display.setcursor(10, 10); 显示.打印(r,3); display.print(r); 显示.显示(); 延迟(50);  
这标志着我们编码过程的结束,现在我们可以开始测试我们的仪表了。
基于 arduino 的低电阻表的测试
为了测试该电路,使用了以下设置。该设置是在面包板上进行的,仅用于测试目的,强烈建议将此电路制作在合适的 pcb 板上。
正如您在图片中看到的那样,我们在面包板上制作了电路,因为它是一个测试电路,结果证明这是一个坏主意,因为接触电阻和阻抗对电路造成了很大的影响。这就是为什么在最后一刻,我们决定直接在电路板上焊接一些电线,我们还将10r电阻和鳄鱼夹的电线直接焊接到lm317 ic本身上。
完成后,我们用这个仪表测量了一些电阻并观察了结果,结果非常好。正如您在上图中所看到的,该值非常准确。
为了验证结果,我们决定在 mecho 450b+ 万用表的帮助下再次测试电路,结果非常糟糕。万用表给了我们非常奇怪的值,可能是一个错误。为了验证,我们再次测试了不同的电阻值,结果几乎相同。在这一点上,我们确信 meco 万用表无法测量如此低的电阻值。您可以查看描述中的视频以获取更多详细信息。
进一步增强
这个电路并不完美,还有很大的改进空间。首先,电路需要在穿孔板或一块pcb板上,否则我们会遇到各种各样的问题。我们使用 lm317 ic 制作了恒流源,可以升级为专门为此目的设计的特定恒流源。我们使用公差为 5% 的电阻,但使用公差为 1% 或更低的电阻会大大改善结果。
#include
#include // oled 线库
#define screen_widata_pinh 128 // oled 显示宽度,以像素为单位
#define screen_height 64 // oled 显示高度,以像素为单位
#define lm317_ref 1.25
#define lm317_resistance 10.1
常量 int numreadings = 50; // 用于平均/我们将取 50 个样本并平均得到 adc 值
整数读数[numreadings];//来自模拟输入的读数
int readindex = 0; // 当前读数的索引
整数 = 0; // 运行总和
int adc平均值 = 0; // 平均值
浮动r;
整数输入引脚 = a0;
adafruit_ssd1306 显示(screen_widata_pinh,screen_height,&wire,-1);
无效设置(){
// 把你的设置代码放在这里,运行一次:
序列号.开始(9600);
if (!display.begin(ssd1306_switchcapvcc, 0x3c)) { // 地址 0x3d 为 128x64
serial.println(f(ssd1306 分配失败));
为了 (;;);
}
display.settextcolor(白色);//设置液晶颜色
display.setrotation(2); // 它有模式 1,2,3,4
//
for (int thisreading = 0; thisreading = numreadings) {
// 如果我们在数组的末尾...
// ...绕到开头:
读取索引 = 0;
}
adcaverage = 总数 / numreadings;// 计算平均值:
serial.print(avg:);
serial.print(adcaverage);
浮动电压 = adcaverage * (5.0 / 1024.0);// 转换 adcaverage t0 电压
序列号.print(\t\t); // 给我一点tab好吗
serial.print(电压,3);// 将电压打印到串行监视器
serial.print( \t \t);// 再给我一个小tab好吗
r = 电压 / (lm317_ref / lm317_resistance);
serial.print(阻力:);
序列号.println(r);
display.cleardisplay();
display.settextsize(2);
display.setcursor(10, 10);
显示.打印(r,3);
display.print(r);
显示.显示();
延迟(50);
}

ADL5317+AD8305典型应用电路
单片机矩阵键盘的原理以及代码编写
台积电计划2021年危险生产3nm Apple Silicon芯片
2023年度新能源汽车销量成绩单公布:谁的掌控力会更强?
等离子显示器知识问答
使用Arduino和LM317制作一个低电阻表
日本和荷兰签署半导体合作备忘录 共同推进2nm***合作
「经验分享」风机叶轮积灰严重只能停机拆卸清理吗?其实还有更好的选择
揭秘RFID如何助力汽车行业工业4.0
射频测试线缆的性能指标有哪些?
关于倒装COB显示屏与LED小间距的比较
推荐!适用于路由器的晶振
高压线路的作用_高压线路的优缺点
电池要“实修”几点要点不能不知道
声发射技术在立式储罐罐底检验与评价中的应用
CSP及无铅技术是怎么一回事
DS96F174MJ-QMLV高速四路差分线路驱动器的中文资料
一文浅析正交上下变频
华硕:2025年AI PC发展迅猛,应用丰富
能耗管理系统在宜昌综合保税区及海关监管大楼的应用