Add notes and last mappings

This commit is contained in:
Daniel Öster 2024-06-17 18:23:47 +03:00
parent 390c4f9bce
commit bf63c3c26a

View file

@ -10,7 +10,7 @@
- Get contactor closing working - Get contactor closing working
- NOTE: Some packs can be locked hard? after a crash has occured. Bypassing contactors manually might be required - NOTE: Some packs can be locked hard? after a crash has occured. Bypassing contactors manually might be required
- Figure out which CAN messages need to be sent towards the battery to keep it alive - Figure out which CAN messages need to be sent towards the battery to keep it alive
-Maybe already enough with 0x12D and 0x411? -Maybe already enough with 0x12D and 0x411? Plus the PID polls might keep it alive.
- Map all values from battery CAN messages - Map all values from battery CAN messages
-SOC% still not found (Lets take it from PID poll, not working right yet) -SOC% still not found (Lets take it from PID poll, not working right yet)
*/ */
@ -38,6 +38,7 @@ static int16_t BMS_highest_cell_temperature = 0;
static int16_t BMS_average_cell_temperature = 0; static int16_t BMS_average_cell_temperature = 0;
static uint16_t BMS_lowest_cell_voltage_mV = 3300; static uint16_t BMS_lowest_cell_voltage_mV = 3300;
static uint16_t BMS_highest_cell_voltage_mV = 3300; static uint16_t BMS_highest_cell_voltage_mV = 3300;
static uint16_t BMS_deviation_cell_voltage_mV = 0;
#define POLL_FOR_BATTERY_SOC 0x05 #define POLL_FOR_BATTERY_SOC 0x05
#define POLL_FOR_BATTERY_VOLTAGE 0x08 #define POLL_FOR_BATTERY_VOLTAGE 0x08
@ -46,7 +47,7 @@ static uint16_t BMS_highest_cell_voltage_mV = 3300;
#define POLL_FOR_HIGHEST_TEMP_CELL 0x31 #define POLL_FOR_HIGHEST_TEMP_CELL 0x31
#define POLL_FOR_BATTERY_PACK_AVG_TEMP 0x32 #define POLL_FOR_BATTERY_PACK_AVG_TEMP 0x32
#define POLL_FOR_BATTERY_CELL_MV_MAX 0x2D #define POLL_FOR_BATTERY_CELL_MV_MAX 0x2D
#define POLL_FOR_BATTERY_CELL_MV_MAX 0x2B #define POLL_FOR_BATTERY_CELL_MV_MIN 0x2B
#define UNKNOWN_POLL_1 0xFC #define UNKNOWN_POLL_1 0xFC
CAN_frame_t ATTO_3_12D = {.FIR = {.B = CAN_frame_t ATTO_3_12D = {.FIR = {.B =
@ -84,11 +85,12 @@ void update_values_battery() { //This function maps all the values fetched via
datalayer.battery.status.remaining_capacity_Wh = static_cast<uint32_t>( datalayer.battery.status.remaining_capacity_Wh = static_cast<uint32_t>(
(static_cast<double>(datalayer.battery.status.real_soc) / 10000) * datalayer.battery.info.total_capacity_Wh); (static_cast<double>(datalayer.battery.status.real_soc) / 10000) * datalayer.battery.info.total_capacity_Wh);
datalayer.battery.status.max_discharge_power_W = 5000; datalayer.battery.status.max_discharge_power_W = 5000; //TODO: Map from CAN later on
datalayer.battery.status.max_charge_power_W = 5000; datalayer.battery.status.max_charge_power_W = 5000; //TODO: Map from CAN later on
datalayer.battery.status.active_power_W = (datalayer.battery.status.current_dA * (datalayer.battery.status.voltage_dV / 100)); datalayer.battery.status.active_power_W =
(datalayer.battery.status.current_dA * (datalayer.battery.status.voltage_dV / 100));
datalayer.battery.status.cell_max_voltage_mV = BMS_highest_cell_voltage_mV; datalayer.battery.status.cell_max_voltage_mV = BMS_highest_cell_voltage_mV;
@ -211,10 +213,10 @@ void receive_can_battery(CAN_frame_t rx_frame) {
ESP32Can.CANWriteFrame(&ATTO_3_7E7_POLL); ESP32Can.CANWriteFrame(&ATTO_3_7E7_POLL);
switch (ATTO_3_7E7_POLL.data.u8[3]) { switch (ATTO_3_7E7_POLL.data.u8[3]) {
case POLL_FOR_BATTERY_VOLTAGE:
ATTO_3_7E7_POLL.data.u8[3] = POLL_FOR_BATTERY_SOC;
break;
case POLL_FOR_BATTERY_SOC: case POLL_FOR_BATTERY_SOC:
ATTO_3_7E7_POLL.data.u8[3] = POLL_FOR_BATTERY_VOLTAGE;
break;
case POLL_FOR_BATTERY_VOLTAGE:
ATTO_3_7E7_POLL.data.u8[3] = POLL_FOR_BATTERY_CURRENT; ATTO_3_7E7_POLL.data.u8[3] = POLL_FOR_BATTERY_CURRENT;
break; break;
case POLL_FOR_BATTERY_CURRENT: case POLL_FOR_BATTERY_CURRENT:
@ -243,12 +245,12 @@ void receive_can_battery(CAN_frame_t rx_frame) {
break; break;
case 0x7EF: //OBD2 PID reply from battery case 0x7EF: //OBD2 PID reply from battery
switch (rx_frame.data.u8[3]) { switch (rx_frame.data.u8[3]) {
case POLL_FOR_BATTERY_VOLTAGE:
BMS_voltage = (rx_frame.data.u8[5] << 8) | rx_frame.data.u8[4];
break;
case POLL_FOR_BATTERY_SOC: case POLL_FOR_BATTERY_SOC:
BMS_SOC = rx_frame.data.u8[4]; BMS_SOC = rx_frame.data.u8[4];
break; break;
case POLL_FOR_BATTERY_VOLTAGE:
BMS_voltage = (rx_frame.data.u8[5] << 8) | rx_frame.data.u8[4];
break;
case POLL_FOR_BATTERY_CURRENT: case POLL_FOR_BATTERY_CURRENT:
BMS_current = ((rx_frame.data.u8[5] << 8) | rx_frame.data.u8[4]) - 5000; BMS_current = ((rx_frame.data.u8[5] << 8) | rx_frame.data.u8[4]) - 5000;
break; break;