在这篇文章中,我们将构建一个电池消除器/直流可变电源,如果流过负载的电流超过预设的阈值水平,它将自动切断电源。
主要技术特点
所提出的使用Arduino的过流切断电源电路具有16 X 2 LCD显示屏,用于实时显示电压,电流,功耗和预设阈值电流限制。
作为电子爱好者,我们在可变电压电源上测试我们的原型。我们大多数人都拥有一个便宜的可变电源,它可能既没有电压测量/电流测量功能,也没有短路或内置过流保护。
这是因为具有这些上述功能的电源可能会轰炸您的钱包,并且对于爱好使用来说会过度杀伤。
短路和过电流对于初学者到专业人士来说都是一个问题,初学者由于缺乏经验而更容易出现这种情况,他们可能会反转电源的极性或以错误的方式连接组件等。
这些东西会导致流过电路的电流异常高,导致半导体和无源元件的热失控,从而导致有价值的电子元件的破坏。在这些情况下,欧姆定律变成了敌人。
如果您从未短路或油炸电路,那么恭喜您!您是少数几个在电子产品方面完美的人之一,或者您从不尝试电子产品中的新事物。
拟议的电源项目可以保护电子元件免受这种油炸破坏,这对于普通的电子爱好者来说足够便宜,并且对于略高于初学者水平的人来说也足够容易建造一个。
设计
电源有 3 个电位计:一个用于调节 LCD 显示屏对比度,一个用于调节 1.2 V 至 15V 的输出电压,最后一个电位计用于设置 0 至 2000
mA 或 2 安培的电流限制。
LCD显示屏将每秒更新四个参数:电压,电流消耗,预设电流限制和负载功耗。
负载电流消耗将以毫安为单位显示;预设的电流限制将以毫安为单位显示,功耗将以毫瓦为单位显示。
该电路分为3部分:电力电子,LCD显示器连接和功率测量电路。
这3个阶段可以帮助读者更好地了解电路。现在让我们看看控制输出电压的电力电子部分。
示意图:
12v-0-12v / 3A变压器将用于降压,6A4二极管将交流电转换为直流电压,2000uF电容器将平滑二极管的不稳定直流电源。
LM 7809 固定 9V 稳压器可将非稳压直流转换为稳压 9V 直流电源。9V 电源将为 Arduino 和继电器供电。尝试使用 DC 插孔作为
arduino 的输入电源。
不要跳过那些为输出电压提供良好稳定性的0.1uF陶瓷电容器。
LM 317 为要连接的负载提供可变输出电压。
您可以通过旋转 4.7K 欧姆电位器来调节输出电压。
权力部分到此结束。
现在让我们看看显示连接:
连接详细信息
这里没有什么可解释的,只需按照电路图连接Arduino和LCD显示屏即可。调整 10K 电位计以获得更好的观看对比度。
上图显示了上述四个参数的样本读数。
功率测量台
现在,让我们详细看看功率测量电路。
功率测量电路由电压表和电流表组成。Arduino 可以根据电路图通过连接电阻网络同时测量电压和电流。
上述设计的继电器连接细节:
四个并联的 10 欧姆电阻器形成 2.5 欧姆分流电阻器,用于测量流过负载的电流。每个电阻应至少为 2 瓦。
10k 欧姆和 100k 欧姆电阻器可帮助 Arduino 测量负载电压。这些电阻器可以是具有正常额定功率的电阻器。
提供 10K 欧姆电位计,用于调节输出端的最大电流电平。如果流过负载的电流超过预设电流,则输出电源将断开。
您可以在显示屏中看到预设级别,它将被称为“LT”(限制)。
例如:如果将限制设置为200,它将提供电流直到199mA。如果电流消耗等于200 mA或更高,输出将立即切断。
输出由 Arduino 引脚 #7 打开和关闭。当该引脚为高电平时,晶体管激励继电器,继电器连接公共引脚和常开引脚,为负载传导正电源。
二极管IN4007吸收继电器线圈的高压反电动势,同时打开和关闭继电器。
程序代码:
//------------------Program Developed by R.GIRISH------------------//
#include 《LiquidCrystal.h》
#define input_1 A0
#define input_2 A1
#define input_3 A2
#define pot A3
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
int Pout = 7;
int AnalogValue = 0;
int potValue = 0;
int PeakVoltage = 0;
int value = 0;
int power = 0;
float AverageVoltage = 0;
float input_A0 = 0;
float input_A1 = 0;
float output = 0;
float Resolution = 0.00488;
float vout = 0.0;
float vin = 0.0;
float R1 = 100000;
float R2 = 10000;
unsigned long sample = 0;
int threshold = 0;
void setup()
{
lcd.begin(16,2);
Serial.begin(9600);
pinMode(input_3, INPUT);
pinMode(Pout, OUTPUT);
pinMode(pot, INPUT);
digitalWrite(Pout, HIGH);
}
void loop()
{
PeakVoltage = 0;
value = analogRead(input_3);
vout = (value * 5.0) / 1024;
vin = vout / (R2/(R1+R2));
if (vin 《 0.10)
{
vin = 0.0;
}
for(sample = 0; sample 《 5000; sample ++)
{
AnalogValue = analogRead(input_1);
if(PeakVoltage 《 AnalogValue)
{
PeakVoltage = AnalogValue;
}
else
{
delayMicroseconds(10);
}
}
input_A0 = PeakVoltage * Resolution;
PeakVoltage = 0;
for(sample = 0; sample 《 5000; sample ++)
{
AnalogValue = analogRead(input_2);
if(PeakVoltage 《 AnalogValue)
{
PeakVoltage = AnalogValue;
}
else
{
delayMicroseconds(10);
}
}
potValue = analogRead(pot);
threshold = map(potValue, 0, 1023, 0, 2000);
input_A1 = PeakVoltage * Resolution;
output = (input_A0 - input_A1) * 100;
output = output * 4;
power = output * vin;
while(output 》= threshold || analogRead(input_1) 》= 1010)
{
digitalWrite(Pout, LOW);
while(true)
{
lcd.clear();
lcd.setCursor(0,0);
lcd.print(“Power Supply is”);
lcd.setCursor(0,1);
lcd.print(“Disconnected.”);
delay(1500);
lcd.clear();
lcd.setCursor(0,0);
lcd.print(“Press Reset the”);
lcd.setCursor(0,1);
lcd.print(“Button.”);
delay(1500);
}
}
while(output 》= threshold || analogRead(input_2) 》= 1010)
{
digitalWrite(Pout, LOW);
while(true)
{
lcd.clear();
lcd.setCursor(0,0);
lcd.print(“Power Supply is”);
lcd.setCursor(0,1);
lcd.print(“Disconnected.”);
delay(1500);
lcd.clear();
lcd.setCursor(0,0);
lcd.print(“Press Reset the”);
lcd.setCursor(0,1);
lcd.print(“Button.”);
delay(1500);
}
}
lcd.clear();
lcd.setCursor(0,0);
lcd.print(“V=”);
lcd.print(vin);
lcd.setCursor(9,0);
lcd.print(“LT=”);
lcd.print(threshold);
lcd.setCursor(0,1);
lcd.print(“I=”);
lcd.print(output);
lcd.setCursor(9,1);
lcd.print(“P=”);
lcd.print(power);
Serial.print(“Volatge Level at A0 = ”);
Serial.println(analogRead(input_1));
Serial.print(“Volatge Level at A1 = ”);
Serial.println(analogRead(input_2));
Serial.print(“Voltage Level at A2 = ”);
Serial.println(analogRead(input_3));
Serial.println(“------------------------------”);
}
全部0条评论
快来发表一下你的评论吧 !