Code to run on the charger board (used to charge the car from the mains).

Dependencies:   mbed CUER_CAN

Revision:
4:f6459580c312
Parent:
3:a7626dffb64a
Child:
5:756fae795d37
--- a/charger.cpp	Thu Jul 27 21:00:52 2017 +0000
+++ b/charger.cpp	Thu Jul 27 21:21:32 2017 +0000
@@ -55,8 +55,6 @@
         check_timeouts();
         update_LEDS();
         
-        //TODO: add logic here to calculate current and then decide if charging should go ahead
-        
         if (min_cell_voltage > RISING_BALANCE_THRESHOLD || charge_finished) { 
             charge_finished = true;
             printf("Charge Finished\r\n");
@@ -71,18 +69,24 @@
         }
         
         //send CAN data
+        
+        Timer t;
+        t.start();
+        charger_CAN_data_sent = false;
         charger_can.write(generate_charger_control_msg(desired_voltage, desired_current, charger_control)); //control message to charger
-        wait(0.1);
+        while(!charger_CAN_data_sent && t.read_ms() < CAN_TIMEOUT_MS);
+        
+        t.reset();
+        car_CAN_data_sent = false;
         car_can.write(generate_charger_info_msg(charger_voltage, charger_current, charger_status)); //charger info message for rest of car
-        
-        //send charge_finished value to control bit.
+        while(!car_CAN_data_sent && t.read_ms() < CAN_TIMEOUT_MS);
         
         printf("Voltage Error = %f\n", voltage_error);
         printf("Temperature Margin = %f\n", temp_margin);
         printf("Desired Voltage = %f\n", desired_voltage);
         printf("Desired Current = %f\n", desired_current);
-        printf("Voltage = %f\n", charger_voltage);
-        printf("Current = %f\n", charger_current);
+        printf("Charger voltage = %f\n", charger_voltage);
+        printf("Charger current = %f\n", charger_current);
         printf("Min cell voltage = %f\n", min_cell_voltage);
         printf("Max cell voltage = %f\n", max_cell_voltage);
         
@@ -231,7 +235,7 @@
     
     if (timeouts.charger_timeout.read_ms() > CHARGER_MSG_TIMEOUT_MS) 
     {
-        printf("Error: BMS comms timeout");
+        printf("Error: Charger comms timeout");
         comms_timeout = true;
     }
 }
@@ -255,16 +259,13 @@
         red_led = 0;
         yellow_led = 0;
         green_led = 0;
-    }
-        
-        
+    }  
 
 }
 
 void get_CAN_data() {
     
     //Import the data from the buffer into a non-volatile, more usable format
-    CAN_Data car_can_data[CAN_BUFFER_SIZE]; //container for all of the raw data
     CANMessage car_msgArray[CAN_BUFFER_SIZE]; //Same as above but some functions take message as their parameter
     int car_received_CAN_IDs[CAN_BUFFER_SIZE]; //needed to keep track of which IDs we've received so far
     for (int i = 0; i<CAN_BUFFER_SIZE; ++i) 
@@ -299,7 +300,6 @@
     }
     
     //Import the data from the buffer into a non-volatile, more usable format
-    CAN_Data charger_can_data[CAN_BUFFER_SIZE]; //container for all of the raw data
     CANMessage charger_msgArray[CAN_BUFFER_SIZE]; //Same as above but some functions take message as their parameter
     int charger_received_CAN_IDs[CAN_BUFFER_SIZE]; //needed to keep track of which IDs we've received so far
     for (int i = 0; i<CAN_BUFFER_SIZE; ++i)