Hello everyone, in same circuit i have another issue, for circuit you can see above. The new issue is atmega328 stop working after some time until we press reset button.
and I am using voltage divider circuit for measure 45volt - 85volt. and programmed to control relay on particular voltage sensing by atmega328.
I am sharing my code and hardware schematic please let me know where I am mistaking.
hare the complete code:-
void feedback();
void low_battery();
void full_battery();
float battery_low_limit, battery_high_limit;
int battery;
//-------------------------------------------------------------------------------------------setup fun.--------------------------------------------------------------------------
void setup() {
//-------------------------------------------------I/O PINS INITIALIZATION-------------------------------------------------
pinMode(10,OUTPUT); //feedback relay
pinMode(11,OUTPUT); //feedback relay
pinMode(12,OUTPUT); //feedback relay
// pinMode(3,OUTPUT); // PWM pin
pinMode(2,OUTPUT); // general purpose relays MOTOR ON/OFF +
pinMode(4,OUTPUT); // general purpose relays MOTOR ON/OFF -
pinMode(5,OUTPUT); // general purpose relays CHARGING ON/OFF +
pinMode(6,OUTPUT); // general purpose relays CHARGING ON/OFF -
pinMode(7,OUTPUT); // general purpose relays USED FOR FEEDBACK CONNECTION TO THE CONTROLLER
pinMode(A0,INPUT); // battery voltage sensing
pinMode(A1,INPUT); // 48V battery sensing
pinMode(A2,INPUT); // 60V battery sensing
pinMode(A3,INPUT); // 72V battery sensing
pinMode(A4,INPUT); // thortar sensing
// pinMode(A5,INPUT); // break sensing
//---------------------initial states of system relay-----------------------------------------
digitalWrite(2,LOW); //MOTOR OFF +
digitalWrite(4,LOW); //MOTOR OFF -
digitalWrite(5,LOW); //CHARGING OFF +
digitalWrite(6,LOW); //CHARGING OFF -
digitalWrite(7,LOW); //FEEDBACK ON
digitalWrite(10,LOW); //FEEDBACK OFF PHASE 1
digitalWrite(11,LOW); //FEEDBACK OFF PHASE 2
digitalWrite(12,LOW); //FEEDBACK OFF PHASE 3
//---------------------------------------------------------other parameter initialization ----------------------
if(digitalRead(A1)==HIGH){
battery=48; //48v scooty
}else if(digitalRead(A2)==HIGH){
battery=60; //60v scooty
}else if(digitalRead(A3)==HIGH){
battery=72; //72v scooty
}else{
battery=48; //48v system
}
//----------------------------------------------------switch condition--------------------
switch(battery){
case 48:
battery_low_limit = 291.371; //50v
battery_high_limit =297.198; //51v WRONG
break;
case 60:
battery_low_limit = 478.822; //63v
battery_high_limit =481.477; //64v
break;
case 72:
battery_low_limit = 437.061; //75v
battery_high_limit =442.884; //76v
break;
// case 48:
// battery_low_limit = 337.920; //50v
// battery_high_limit =344.064; //51v
// break;
// case 60:
// battery_low_limit = 426.846; //62v ->63 changes
// battery_high_limit =433.621; //63v ->64 changes
// break;
// case 72:
// battery_low_limit = 507.904; //75v
// battery_high_limit =516.096; //76v
// break;
}
}
//================================================================================main function=====================================================================================
void loop() {
feedback();
delay(30);
int battery_voltage = analogRead(A0); // Sense the current battery voltage.
if(battery_voltage <= battery_low_limit){ //check battery is low or not.
low_battery(); // calling low battery function.
}else if(battery_voltage >= battery_high_limit){ // check the battery is fully charged of not.
full_battery(); // calling full battery function
}
feedback();
delay(25);
}
//============================================================================full battery function ================================================================================
void full_battery(){ // operation performed function if battery fullu charged.
digitalWrite(2,LOW); //MOTOR OFF +
digitalWrite(4,LOW); //MOTOR OFF -
digitalWrite(5,LOW); //CHARGING OFF +
digitalWrite(6,LOW); //CHARGING OFF -
}
//-------------------------------------------------------------------------low battery fucntion ------------------------------------------------------------------------------------
void low_battery(){ //operation performed fucntion if battery is low.
digitalWrite(2,HIGH); //MOTOR ON +
digitalWrite(4,HIGH); //MOTOR ON -
digitalWrite(5,HIGH); //CHARGING ON +
digitalWrite(6,HIGH); //CHARGING ON -
}
//---------------------------------------------------------------------------feedback function---------------------------------------------------------------------------------------
void feedback(){ //cheching the feedback condition and perform operation acco.
float analog_value=analogRead(A4);
float thortar_voltage=(analog_value*5)/1024;
if(thortar_voltage > 1.06){ // A5 is sensing the break and A4 is sensing the thortar.
digitalWrite(10,LOW); //FEEDBACK OFF PHASE 1
digitalWrite(11,LOW); //FEEDBACK OFF PHASE 2
digitalWrite(12,LOW); //FEEDBACK OFF PHASE 3
digitalWrite(7,LOW); //FEEDBACK OFF
}else{
digitalWrite(10,HIGH); //FEEDBACK ON PHASE 1
digitalWrite(11,HIGH); //FEEDBACK ON PHASE 2
digitalWrite(12,HIGH); //FEEDBACK ON PHASE 3
digitalWrite(7,HIGH); //FEEDBACK ON
}
}