CUER
/
charger_code
Code to run on the charger board (used to charge the car from the mains).
CANParserCharger.cpp
- Committer:
- DasSidG
- Date:
- 2017-07-06
- Revision:
- 1:0c77e20b4d4c
- Child:
- 3:a7626dffb64a
File content as of revision 1:0c77e20b4d4c:
// Here are the functions to generate the CAN messages #include "CANParserCharger.h" #include "mbed.h" #include "CAN_IDs.h" using namespace CAN_IDs; void get_charger_control_info(CANMessage msg, float &_voltage_error, float &_temp_margin, float &_discharge_error, float &_pack_capacity) { CAN_Data data; data.importCANData(msg); _voltage_error = data.get_u16(0)*1.0; _temp_margin = data.get_u16(1) /10.0; _discharge_error = data.get_u16(2)*1.0; _pack_capacity = data.get_u16(3)*1.0; } void get_max_min_voltage(CANMessage msg, float &_min_cell_voltage, float &_max_cell_voltage) { CAN_Data data; data.importCANData(msg); _min_cell_voltage = data.get_u16(0)*1.0; _max_cell_voltage = data.get_u16(1)*1.0; } void get_battery_status(CANMessage msg, bool &error) { //note using extended battery pack status CAN_Data data; data.importCANData(msg); error = data.getLower_uLong() > 0; //ignore the rest of the status as we don't care } void get_charger_VI_info(CANMessage msg, float &_charger_voltage, float &_charger_current, uint8_t &_charger_status) { CAN_Data data; data.importCANData(msg); _charger_voltage = data.get_u16(0)*100.0; _charger_current = data.get_u16(1)*100.0; _charger_status = data.get_u8(4); } CANMessage generate_charger_control_msg(float _desired_voltage, float _desired_current, uint8_t _charger_control) { CANMessage msg; msg.format = CANExtended; //the charger uses the extended CAN frame format msg.len = 8; msg.id = CHARGER_VI_CONTROL_ID; CAN_Data data; data.set_u16(0, (uint16_t) (_desired_voltage/100)); data.set_u16(1, (uint16_t) (_desired_current/100)); data.set_u8(4, _charger_control); data.set_u8(5,0); data.set_u8(6,0); data.set_u8(7,0); for(int i=0; i<8; i++) { msg.data[i] = data.get_u8(i); } return msg; } CANMessage generate_charger_info_msg(float _charger_voltage, float _charger_current, uint8_t _charger_status) { CANMessage msg; msg.len = 8; msg.id = CHARGER_ID; CAN_Data data; data.set_u16(0, (uint16_t) (_charger_voltage/100)); data.set_u16(1, (uint16_t) (_charger_current/100)); data.set_u8(4, _charger_status); data.set_u8(5,0); data.set_u8(6,0); data.set_u8(7,0); for(int i=0; i<8; i++) { msg.data[i] = data.get_u8(i); } return msg; }