Merge pull request #235 from dalathegreat/bugfix/i3-current

Bugfix: BMW i3 values
This commit is contained in:
odlg 2024-03-29 20:56:07 +01:00 committed by GitHub
commit a9c04005a9
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -382,11 +382,19 @@ void update_values_battery() { //This function maps all the values fetched via
system_remaining_capacity_Wh = (battery_energy_content_maximum_kWh * 1000); // Convert kWh to Wh
if ((battery_max_charge_amperage * system_battery_voltage_dV) > 65000) {
system_max_charge_power_W = 65000;
} else {
system_max_charge_power_W = (battery_max_charge_amperage * system_battery_voltage_dV);
}
if ((battery_max_discharge_amperage * system_battery_voltage_dV) > 65000) {
system_max_discharge_power_W = 65000;
} else {
system_max_discharge_power_W = (battery_max_discharge_amperage * system_battery_voltage_dV);
}
battery_power = (system_battery_current_dA * (system_battery_voltage_dV / 10));
battery_power = (system_battery_current_dA * (system_battery_voltage_dV / 100));
system_active_power_W = battery_power;
@ -437,7 +445,7 @@ void receive_can_battery(CAN_frame_t rx_frame) {
case 0x112: //BMS [10ms] Status Of High-Voltage Battery - 2
battery_awake = true;
CANstillAlive = 12; //This message is only sent if 30C (Wakeup pin on battery) is energized with 12V
battery_current = ((rx_frame.data.u8[1] << 8 | rx_frame.data.u8[0]) / 10) - 819; //Amps
battery_current = (rx_frame.data.u8[1] << 8 | rx_frame.data.u8[0]) - 8192; //deciAmps (-819.2 to 819.0A)
battery_volts = (rx_frame.data.u8[3] << 8 | rx_frame.data.u8[2]); //500.0 V
battery_HVBatt_SOC = ((rx_frame.data.u8[5] & 0x0F) << 8 | rx_frame.data.u8[4]);
battery_request_open_contactors = (rx_frame.data.u8[5] & 0xC0) >> 6;
@ -471,7 +479,7 @@ void receive_can_battery(CAN_frame_t rx_frame) {
break;
case 0x2BD: //BMS [100ms] Status diagnosis high voltage - 1
battery_awake = true;
if (calculateCRC(rx_frame, 3, 0x15) != rx_frame.data.u8[0]) {
if (calculateCRC(rx_frame, rx_frame.FIR.B.DLC, 0x15) != rx_frame.data.u8[0]) {
//If calculated CRC does not match transmitted CRC, increase CANerror counter
CANerror++;
break;