EV - Project
Electric vehicles
Electric vehicles have low running costs as they have fewer moving parts for maintaining and very environmentally friendly as they use little or no fossil fuels (petrol or diesel). While some EVs used lead acid or nickel metal hydride batteries, the standard for modern battery electric vehicles is now considered to be lithium-ion batteries as they have a greater longevity and are excellent at retaining energy, with a self-discharge rate of just 5% per month.
So, in our project the Electric vehicle was already prepared by other students but Previously,
In the Electric vehicle each battery is charged separately, but we will work in this project to install a charger in the car that charges the batteries and establish a station for charging electric cars at the college. we will separate the converters from the circuit, and we will make a test to be sure it is working, and then they will be isolated in an external box, and we will build a BMS (Battery Management System) for manage a charger system. And we will connect a battery balance with battery to balance the Voltage between each 8 batteries.
Charger
First thing we read the Manuel of charger TSM2500 and
Charge Controller “standard.” You will see the product information from www.thunderstruck-ev.com , In the Manuel you will see the first figure.
then we make a test for the charger. we connected an Ac Voltage to the Input of charger. The output should be a DC voltage. As shown in the second figure.
after that we install the charger and the controller in the car.
About the EVCC3.0 controller:
We download and install the Virtual Comm Port (VCP) driver on the host computer. like you will see in this Manuel : DD_SerialPortUtilities_v1.2.pdf (thunderstruck-ev.com)
and Install a telnet client on the host computer. PuTTY is available for download at http://www.putty.org/.
after that we start the programming and set the values like we saw in the Manuel. the charger was not work because we have some commands we miss and some values we did not calculate it correctly because we did not have a user guide for the batteries. So, we try to contact the company. And this is the link for the website: https://omas.com.sa/
After we get the user guide, we set the new values. (fig.3)
the charger still did not work. So, we make a troubleshooting again and we found the Proximity and Pilot wires was connected wrong, and Ground wire was disconnected by the students who previously worked on the project
So we set the wire properly. but didn't work until yet, we contact the customer service at this E-mail (connect@thunderstruck-ev.com) and he told us
"If you don't have a BMS, then temporarily enter in the EVCC: "set charger none"
- this will allow you to charge without a BMS - CAUTION - do not charge for more than a few minutes this way or you could damage cells without a BMS supervising."
we don't have a BMS, We didnt put this command because we will wait to get approved from our supervisor.
EV Station
First thing we bought the Socket.(fig1)
And We mounted it on the wall, After that we make a poster using photoshop and Crello. fig(2,3)
TSM 96v DC-DC
For the TSM 96v DC-DC.
First of all you should make a test to be sure its working good without a problem.(fig1)
the principle of work is, when it is given 96 DC Volt will convert it to 12 DC volt.
The Input wire: Yellow +96V, Blue - 96V, the Green you can connect it same as the yellow.
The Output (Red and black) will be 12V.
After that we insulate the converter from the body of the car by piece of wood. (fig2)
And we connect 60A fuse between the converter and battery for more protection. (fig3)
MCP2515 CAN Bus
the MCP2515 CAN Bus Controller with Arduino and finally how to enable communication between two Arduino board with the help of two MCP2515 CAN Controllers and the CAN Protocol.
we found how to enable communication between two Arduino boards with two MCP2515 .(fig1)
After that we found the code and the code is correct, but we have a problem in call the MCP_CAN library.(fig2)
Then we solve the problem for the code library, and we run the two codes.(fig3)
Finally, we connection the can bus with the car can bus. serial port shown this readings(fig4)
Receiver Code:
#include <br>
void setup() { Serial.begin(9600); while (!Serial);
Serial.println("CAN Receiver");
// start the CAN bus at 500 kbps if (!CAN.begin(500E3)) { Serial.println("Starting CAN failed!"); while (1); } }
void loop() { // try to parse packet int packetSize = CAN.parsePacket();
if (packetSize) { // received a packet Serial.print("Received ");
if (CAN.packetExtended()) { Serial.print("extended "); }
if (CAN.packetRtr()) { // Remote transmission request, packet contains no data Serial.print("RTR "); }
Serial.print("packet with id 0x"); Serial.print(CAN.packetId(), HEX);
if (CAN.packetRtr()) { Serial.print(" and requested length "); Serial.println(CAN.packetDlc()); } else { Serial.print(" and length "); Serial.println(packetSize);
// only print packet data for non-RTR packets while (CAN.available()) { Serial.print((char)CAN.read()); } Serial.println(); }
Serial.println(); } }
Sending code:
<em>#include </em><em><br></em>
<em>void setup() { Serial.begin(9600); while (!Serial);</em>
<em> Serial.println("CAN Sender");</em>
<em> // start the CAN bus at 500 kbps if (!CAN.begin(500E3)) { Serial.println("Starting CAN failed!"); while (1); } }</em>
<em>void loop() { // send packet: id is 11 bits, packet can contain up to 8 bytes of data Serial.print("Sending packet ... ");</em>
<em> CAN.beginPacket(0x12); CAN.write('h'); CAN.write('e'); CAN.write('l'); CAN.write('l'); CAN.write('o'); CAN.endPacket();</em>
<em> Serial.println("done");</em>
<em> delay(1000);</em>
<em> // send extended packet: id is 29 bits, packet can contain up to 8 bytes of data Serial.print("Sending extended packet ... ");</em>
<em> CAN.beginExtendedPacket(0xabcdef); CAN.write('w'); CAN.write('o'); CAN.write('r'); CAN.write('l');
<em> Serial.println("done");</em>
<em> delay(1000); }</em>
BMS (Battery Management System)
First, we experimented with the multiplexer circuit by making a circuit of 2 multiplexers, one for the positive and the other for the negative. And it was tested on power supply and it worked, But when we tested it on the car batteries, we encountered a problem, which is when measuring two or more batteries the wires melt due to the high current.
Then we tried to solve the problem by using the op-amp741, First we simulated the circuit using Multisim software, but the op-amp did not work as inverting.(fig1)
The circuit was modified by adding resistors , but when the circuit was implemented on the test board, the circuit output was equal to the operating voltage of the amplifier (Vcc) because the operating voltage of the amplifier was smaller or equal the input.
After that, we changed the value of the operating voltage of the amplifier to be more than the value of circuit's input and the circuit worked as required.(fig2)
Then it was tested on car batteries and it worked as required without any problem, and serial port shown this reading as shown in the (video).
Multiplexer Code:
#define A 2
#define B 3 #define C 4 float batval; int BatValue; float voltage; float refVolt = 12.0; /*
A B C 0 0 0 = CH0 1 0 0 = CH1 0 1 0 = CH2 1 1 0 = CH3 0 0 1 = CH4 1 0 1 = CH5 0 1 1 = CH6 1 1 1 = CH7
*/ void setup() {
Serial.begin(9600);
pinMode(A, OUTPUT); pinMode(B, OUTPUT); pinMode(C, OUTPUT); pinMode(A0, INPUT); }
void loop() { toggleCH0(); }
void toggleCH0() { digitalWrite(A, 0); digitalWrite(B, 0); digitalWrite(C, 0);
BatValue = analogRead(A0); // Convert the analog reading (which goes from 0 - 1023) to a voltage (0 - 5V): voltage = BatValue * (refVolt / 1023.0); // print out the value you read: Serial.println(); // print an empty line Serial.println("Voltage battery num 1 =");
Serial.println(voltage);
}
void toggleCH1() { digitalWrite(A, 1); digitalWrite(B, 0); digitalWrite(C, 0);
BatValue = analogRead(A0); // Convert the analog reading (which goes from 0 - 1023) to a voltage (0 - 5V): voltage = BatValue * (refVolt / 1023.0); // print out the value you read: Serial.println(); // print an empty line Serial.println("Voltage battery num 2 =");
Serial.println(voltage);
}
void toggleCH2() { digitalWrite(A, 0); digitalWrite(B, 1); digitalWrite(C, 0);
BatValue = analogRead(A0); // Convert the analog reading (which goes from 0 - 1023) to a voltage (0 - 5V): voltage = BatValue * (refVolt / 1023.0); // print out the value you read: Serial.println(); // print an empty line Serial.println("Voltage battery num 3 =");
Serial.println(voltage);
}
void toggleCH3() { digitalWrite(A, 1); digitalWrite(B, 1); digitalWrite(C, 0);
BatValue = analogRead(A0); // Convert the analog reading (which goes from 0 - 1023) to a voltage (0 - 5V): voltage = BatValue * (refVolt / 1023.0); // print out the value you read: Serial.println(); // print an empty line Serial.println("Voltage battery num 4 =");
Serial.println(voltage);
}
void toggleCH4() { digitalWrite(A, 0); digitalWrite(B, 0); digitalWrite(C, 1);
BatValue = analogRead(A0); // Convert the analog reading (which goes from 0 - 1023) to a voltage (0 - 5V): voltage = BatValue * (refVolt / 1023.0); // print out the value you read: Serial.println(); // print an empty line Serial.println("Voltage battery num 5 =");
Serial.println(voltage);
}
void toggleCH5() { digitalWrite(A, 1); digitalWrite(B, 0); digitalWrite(C, 1);
BatValue = analogRead(A0); // Convert the analog reading (which goes from 0 - 1023) to a voltage (0 - 5V): voltage = BatValue * (refVolt / 1023.0); // print out the value you read: Serial.println(); // print an empty line Serial.println("Voltage battery num 6 =");
Serial.println(voltage);
}
void toggleCH6() { digitalWrite(A, 0); digitalWrite(B, 1); digitalWrite(C, 1);
BatValue = analogRead(A0); // Convert the analog reading (which goes from 0 - 1023) to a voltage (0 - 5V): voltage = BatValue * (refVolt / 1023.0); // print out the value you read: Serial.println(); // print an empty line Serial.println("Voltage battery num 7 =");
Serial.println(voltage);
}
void toggleCH7() { digitalWrite(A, 1); digitalWrite(B, 1); digitalWrite(C, 1);
BatValue = analogRead(A0); // Convert the analog reading (which goes from 0 - 1023) to a voltage (0 - 5V): voltage = BatValue * (refVolt / 1023.0); // print out the value you read: Serial.println(); // print an empty line Serial.println("Voltage battery num 8 =");
Serial.println(voltage);
}