CUER
/
charger_code
Code to run on the charger board (used to charge the car from the mains).
Diff: charger.cpp
- 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)