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

Dependencies:   mbed CUER_CAN

Committer:
DasSidG
Date:
Thu Jul 06 21:27:26 2017 +0000
Revision:
1:0c77e20b4d4c
Child:
3:a7626dffb64a
Code majorly changed:; ; Structure changed significantly; All of the CAN-related functions, structures etc. added (but not yet tested); Still need to add some of the main program logic in terms of deciding when/when not to charge etc

Who changed what in which revision?

UserRevisionLine numberNew contents of line
DasSidG 1:0c77e20b4d4c 1 // Here are the functions to generate the CAN messages
DasSidG 1:0c77e20b4d4c 2 #include "CANParserCharger.h"
DasSidG 1:0c77e20b4d4c 3 #include "mbed.h"
DasSidG 1:0c77e20b4d4c 4 #include "CAN_IDs.h"
DasSidG 1:0c77e20b4d4c 5
DasSidG 1:0c77e20b4d4c 6
DasSidG 1:0c77e20b4d4c 7 using namespace CAN_IDs;
DasSidG 1:0c77e20b4d4c 8
DasSidG 1:0c77e20b4d4c 9
DasSidG 1:0c77e20b4d4c 10
DasSidG 1:0c77e20b4d4c 11
DasSidG 1:0c77e20b4d4c 12
DasSidG 1:0c77e20b4d4c 13 void get_charger_control_info(CANMessage msg, float &_voltage_error, float &_temp_margin, float &_discharge_error, float &_pack_capacity) {
DasSidG 1:0c77e20b4d4c 14 CAN_Data data;
DasSidG 1:0c77e20b4d4c 15 data.importCANData(msg);
DasSidG 1:0c77e20b4d4c 16
DasSidG 1:0c77e20b4d4c 17 _voltage_error = data.get_u16(0)*1.0;
DasSidG 1:0c77e20b4d4c 18 _temp_margin = data.get_u16(1) /10.0;
DasSidG 1:0c77e20b4d4c 19 _discharge_error = data.get_u16(2)*1.0;
DasSidG 1:0c77e20b4d4c 20 _pack_capacity = data.get_u16(3)*1.0;
DasSidG 1:0c77e20b4d4c 21 }
DasSidG 1:0c77e20b4d4c 22
DasSidG 1:0c77e20b4d4c 23 void get_max_min_voltage(CANMessage msg, float &_min_cell_voltage, float &_max_cell_voltage) {
DasSidG 1:0c77e20b4d4c 24 CAN_Data data;
DasSidG 1:0c77e20b4d4c 25 data.importCANData(msg);
DasSidG 1:0c77e20b4d4c 26
DasSidG 1:0c77e20b4d4c 27 _min_cell_voltage = data.get_u16(0)*1.0;
DasSidG 1:0c77e20b4d4c 28 _max_cell_voltage = data.get_u16(1)*1.0;
DasSidG 1:0c77e20b4d4c 29 }
DasSidG 1:0c77e20b4d4c 30
DasSidG 1:0c77e20b4d4c 31 void get_battery_status(CANMessage msg, bool &error) { //note using extended battery pack status
DasSidG 1:0c77e20b4d4c 32 CAN_Data data;
DasSidG 1:0c77e20b4d4c 33 data.importCANData(msg);
DasSidG 1:0c77e20b4d4c 34
DasSidG 1:0c77e20b4d4c 35 error = data.getLower_uLong() > 0;
DasSidG 1:0c77e20b4d4c 36 //ignore the rest of the status as we don't care
DasSidG 1:0c77e20b4d4c 37 }
DasSidG 1:0c77e20b4d4c 38
DasSidG 1:0c77e20b4d4c 39 void get_charger_VI_info(CANMessage msg, float &_charger_voltage, float &_charger_current, uint8_t &_charger_status) {
DasSidG 1:0c77e20b4d4c 40 CAN_Data data;
DasSidG 1:0c77e20b4d4c 41 data.importCANData(msg);
DasSidG 1:0c77e20b4d4c 42
DasSidG 1:0c77e20b4d4c 43 _charger_voltage = data.get_u16(0)*100.0;
DasSidG 1:0c77e20b4d4c 44 _charger_current = data.get_u16(1)*100.0;
DasSidG 1:0c77e20b4d4c 45 _charger_status = data.get_u8(4);
DasSidG 1:0c77e20b4d4c 46 }
DasSidG 1:0c77e20b4d4c 47
DasSidG 1:0c77e20b4d4c 48 CANMessage generate_charger_control_msg(float _desired_voltage, float _desired_current, uint8_t _charger_control) {
DasSidG 1:0c77e20b4d4c 49 CANMessage msg;
DasSidG 1:0c77e20b4d4c 50 msg.format = CANExtended; //the charger uses the extended CAN frame format
DasSidG 1:0c77e20b4d4c 51 msg.len = 8;
DasSidG 1:0c77e20b4d4c 52 msg.id = CHARGER_VI_CONTROL_ID;
DasSidG 1:0c77e20b4d4c 53 CAN_Data data;
DasSidG 1:0c77e20b4d4c 54 data.set_u16(0, (uint16_t) (_desired_voltage/100));
DasSidG 1:0c77e20b4d4c 55 data.set_u16(1, (uint16_t) (_desired_current/100));
DasSidG 1:0c77e20b4d4c 56 data.set_u8(4, _charger_control);
DasSidG 1:0c77e20b4d4c 57 data.set_u8(5,0);
DasSidG 1:0c77e20b4d4c 58 data.set_u8(6,0);
DasSidG 1:0c77e20b4d4c 59 data.set_u8(7,0);
DasSidG 1:0c77e20b4d4c 60
DasSidG 1:0c77e20b4d4c 61 for(int i=0; i<8; i++) {
DasSidG 1:0c77e20b4d4c 62 msg.data[i] = data.get_u8(i);
DasSidG 1:0c77e20b4d4c 63 }
DasSidG 1:0c77e20b4d4c 64
DasSidG 1:0c77e20b4d4c 65 return msg;
DasSidG 1:0c77e20b4d4c 66 }
DasSidG 1:0c77e20b4d4c 67
DasSidG 1:0c77e20b4d4c 68 CANMessage generate_charger_info_msg(float _charger_voltage, float _charger_current, uint8_t _charger_status) {
DasSidG 1:0c77e20b4d4c 69 CANMessage msg;
DasSidG 1:0c77e20b4d4c 70 msg.len = 8;
DasSidG 1:0c77e20b4d4c 71 msg.id = CHARGER_ID;
DasSidG 1:0c77e20b4d4c 72 CAN_Data data;
DasSidG 1:0c77e20b4d4c 73 data.set_u16(0, (uint16_t) (_charger_voltage/100));
DasSidG 1:0c77e20b4d4c 74 data.set_u16(1, (uint16_t) (_charger_current/100));
DasSidG 1:0c77e20b4d4c 75 data.set_u8(4, _charger_status);
DasSidG 1:0c77e20b4d4c 76 data.set_u8(5,0);
DasSidG 1:0c77e20b4d4c 77 data.set_u8(6,0);
DasSidG 1:0c77e20b4d4c 78 data.set_u8(7,0);
DasSidG 1:0c77e20b4d4c 79
DasSidG 1:0c77e20b4d4c 80 for(int i=0; i<8; i++) {
DasSidG 1:0c77e20b4d4c 81 msg.data[i] = data.get_u8(i);
DasSidG 1:0c77e20b4d4c 82 }
DasSidG 1:0c77e20b4d4c 83
DasSidG 1:0c77e20b4d4c 84 return msg;
DasSidG 1:0c77e20b4d4c 85 }