基于数字实验室套件NR05的四通道0-50V电压表

通常,需要同时控制多个电压,例如计算机电源的输出电压,多个电池等。在上一版中,我们研究了密码锁的原理,现在,基于数字实验室套件NR05的扩展套件,我们组装了四通道数字电压表,在板子内置的显示屏上显示结果。可以使用外部分压器来更改测量电压的范围,并且测量步骤由Arduino板中使用的Atmega 328微控制器的模数转换器(ADC)的分辨率确定,值为1024。然后,在0-50V的电压范围内,电压测量步长约为50 mV,这对于家庭使用来说已经足够了。



我们将测得的电压连接到电路板的免费模拟输入。这些是位于板右下方的输入A0,A4,A5和A7。要使用输入A0,请暂时放下电路板右下部XP3连接器附近的电阻R4。



我们将使用LUT方法(所谓的“激光熨烫技术”)制作一个带有用于连接测量电压的连接器的外部分压器和一块扩展板,然后在氯化铁溶液中蚀刻该板。我们使用了SMD电阻器,但是如果您没有激光打印机,则可以使用防水毡尖笔画导体来制作分压器。在这种情况下,最好使用输出电阻,因为最终导体的尺寸精度会降低。详细地讲,可以通过购买一套由Master Kit生产的NN201来研究通过用氯化铁蚀刻来制造印刷电路板的技术

完成的分隔板如下图所示。



扩展板具有2行液晶显示器,每行16个字符。在这样的指示器上,从0到50伏的四个读数(带小数点后一位)和通道标识符非常适合放置。

建议测量本身在短时间内进行几次,取其平均值。这将减少随机测量误差。
当您单击开发板中内置的按钮之一(例如中间的按钮)时,我们还可以在程序中“冻结”结果。第二次按下将恢复连续测量。

我们使用连接到Arduino的第13个数字输出的LED指示测量过程。

基于上述内容,我们将为Arduino开发一个程序:

扰流板
/*--------------------------------------------------------------
0-50, ,
, LCD-
16 , 2 ,


NR05 « »; 4 10
1, 100, A0,A4,A5,A7


5 V_REF
.
-
.

(
)
Vin
.
Vout .
DIV_* Vin/Vout.

startingelectronics.com
--------------------------------------------------------------*/
#include <LiquidCrystal.h>

// ( )
#define LED 13
//
#define NUM_SAMPLES 20
//
#define DIV_1 11.186
#define DIV_2 11.186
#define DIV_3 11.186
#define DIV_4 11.186
//
#define V_REF 4.575
//
#define NUM_KEYS 5
// ( )
int adcKeyVal[NUM_KEYS] = {30, 150, 360, 535, 760};

LiquidCrystal lcd(A1, A2, A3, 2, 4, 7);
unsigned long sum[4] = {0}; //
unsigned char sample_count = 0; //
float voltage[4] = {0.0}; //
int cnt = 0; //
int keyIsPressed = 0; // «»

void setup()
{
lcd.begin(16, 2);
pinMode(LED, OUTPUT);
digitalWrite(LED, LOW);
}

void loop()
{
// 3 , «»
if (get_key() == 3){
keyIsPressed = !keyIsPressed;
delay(500);
}
// (1),
if (keyIsPressed == 0){
digitalWrite(LED, LOW);
//
while (sample_count < NUM_SAMPLES) {
// sample channel A0, A4, A5, A7
sum[0] += analogRead(A0);
sum[1] += analogRead(A4);
sum[2] += analogRead(A5);
sum[3] += analogRead(A7);
sample_count++;
delay(10);
}
digitalWrite(LED, HIGH);
//
for (cnt = 0; cnt < 4; cnt++) {
voltage[cnt] = ((float)sum[cnt] / (float)NUM_SAMPLES * V_REF) / 1024.0;
}
//
lcd.setCursor(0, 0);
lcd.print(«A „);
lcd.print(voltage[0] * DIV_1, 1);
lcd.print(“V „);
// voltage 2 — B (pin A4)
lcd.setCursor(8, 0);
lcd.print(“B „);
lcd.print(voltage[1] * DIV_2, 1);
lcd.print(“V „);
// voltge 3 — C (pin A5)
lcd.setCursor(0, 1);
lcd.print(“C „);
lcd.print(voltage[2] * DIV_3, 1);
lcd.print(“V „);
// voltage 4 — D (pin A7)
lcd.setCursor(8, 1);
lcd.print(“D „);
lcd.print(voltage[3] * DIV_4, 1);
lcd.print(“V „);

//
sample_count = 0;
for (cnt = 0; cnt < 4; cnt++) sum[cnt] = 0;
delay(20);
}
}

//
int get_key()
{
int input = analogRead(A6);
int k;
for (k = 0; k < NUM_KEYS; k++)
if (input < adcKeyVal[k])
return k + 1;
return 0;
}


该程序配有足够详细的注释,解释了算法实现的功能。

也许最重要的功能是校准测量电压计算中涉及的注释中描述的常数的过程。要校准分频器(执行一次),请使用稳定的恒压源。鉴于校准需要很短的时间,您可以成功使用9V“克朗”电池和数字万用表。来自“年轻电子工程师的装备” NR02的万用表非常合适。该套件也非常适合教授焊接和PCB组装。

应该注意的是,当到达Arduino的电源电压发生变化时,必须相应地更改参考电压的校准值,并测量其相对值。

要更改测量范围,必须使用分压比为输入电压的分压比不同的分压器。

Source: https://habr.com/ru/post/zh-CN393225/


All Articles