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

Dependencies:   mbed CUER_CAN

Revision:
1:0c77e20b4d4c
Child:
3:a7626dffb64a
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/CANParserCharger.cpp	Thu Jul 06 21:27:26 2017 +0000
@@ -0,0 +1,85 @@
+// 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;
+}
\ No newline at end of file