LiPo зарядка с балансиром 3S на ардуине
это код
// include the library code:
#include ‹Wire.h›
#include ‹LiquidCrystal_I2C.h›
LiquidCrystal_I2C lcd(0x38 );
int sensorPin = 0;
int sensor1Pin = 1;
int sensor2Pin = 2;
int sensorCurrent = 3;
int PinON = 12;
int ledPinON = 13;
int startPin = 2;
int sensorValue = 0;
int sensor1Value = 0;
int sensor2Value = 0;
int sensorCurrentVal = 0;
//float LiMinThreshold = 2700;
float LiMaxThreshold = 4230;
int i;
int BatVoltage = 5000;
int Bat1Voltage = 5000;
int Bat2Voltage = 5000;
int val = 0;
int FetVoltage = 5000;
int TotalCurrent = 0;
unsigned int TC = 0;
boolean done = false;
void CL1(){
lcd.setCursor(0, 1);
lcd.print(" ");
lcd.setCursor(0, 1);
}
void CL2(){
lcd.setCursor(0, 0);
lcd.print(" ");
lcd.setCursor(0, 0);
}
void setup() {
pinMode(PinON, OUTPUT);
pinMode(ledPinON, OUTPUT);
pinMode(startPin, INPUT);
digitalWrite(startPin, HIGH);
lcd.begin(16, 2);
lcd.setCursor(0, 0);
lcd.print(" LiPo Charger");
lcd.setCursor(0, 1);
lcd.print(" Press to Start");
while (digitalRead (startPin))
{}
}
void loop() {
sensorValue = analogRead(sensorPin); // read the value from the sensor:
BatVoltage = (sensorValue*4.894);
sensor1Value = analogRead(sensor1Pin); // read the value from the sensor:
Bat1Voltage = (sensor1Value*4.894);
sensor2Value = analogRead(sensor2Pin); // read the value from the sensor:
Bat2Voltage = (sensor2Value*4.894);
sensorCurrentVal = analogRead(sensorCurrent); // read the value from the sensor:
FetVoltage = (sensorCurrentVal*4.894);
CL2();
CL1();
lcd.setCursor(0, 0);
lcd.print("1=");
TC=BatVoltage/10;
lcd.print(TC/100); // print voltage value
lcd.print(".");
lcd.print (TC-(TC/100)*100); // print voltage value
lcd.print("V");
lcd.setCursor(8, 0);
lcd.print("2=");
TC=Bat1Voltage/10;
lcd.print(TC/100); // print voltage value
lcd.print(".");
lcd.print(TC-(TC/100)*100); // print voltage value
lcd.print("V");
lcd.setCursor(0, 1);
lcd.print("3=");
TC=Bat2Voltage/10;
lcd.print(TC/100); // print voltage value
lcd.print(".");
lcd.print(TC-(TC/100)*100); // print voltage value
lcd.print("V");
TotalCurrent=((FetVoltage*3)-(BatVoltage+Bat1Voltage+Bat2Voltage))/20;
lcd.setCursor(8, 1);
lcd.print("I=");
if (TotalCurrent‹0) { lcd.print("0");
} else if (TotalCurrent‹10) {
lcd.print("0.0");
lcd.print(TotalCurrent); // print Current value
} else {
lcd.print(TotalCurrent/100);// print Current value
lcd.print(".");
lcd.print(TotalCurrent-(TotalCurrent/100)*100);// print Current value
}
lcd.print("A");
if ((BatVoltage+Bat1Voltage+Bat2Voltage) › (LiMaxThreshold*3)) {
digitalWrite(ledPinON, HIGH); // set the LED on
digitalWrite(PinON, LOW); // set the Relay,led charger on
}
else
{
done=true;
digitalWrite(ledPinON, LOW); // set the LED off - stop loading
digitalWrite(PinON, HIGH); // set the Relay,led charger off
}
delay(1000);
}
а это схема выходы сенсоров к соответствующим выводам контроллера (указаны в коде)
к контроллеру прицепить LCD 16x2 I2C,два светодиода,реле и 2 кнопки (HVReset и Start)
напряжение питания схемы 15в 3А контроллера 5в
произвести настройку потенциометров по приборам вольтметру и аперметру
__________________
Последний раз редактировалось kayot; 16.04.2014 в 13:07.
|