From 100e7e6effc942cd22013e7ecd22f2b0779a78ae Mon Sep 17 00:00:00 2001 From: freddanastrom Date: Sat, 23 Aug 2025 14:33:51 +0200 Subject: [PATCH] Using a more robust way to check that voltage is available from BMS --- Software/src/battery/BYD-ATTO-3-BATTERY.cpp | 3 ++- Software/src/battery/BYD-ATTO-3-BATTERY.h | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/Software/src/battery/BYD-ATTO-3-BATTERY.cpp b/Software/src/battery/BYD-ATTO-3-BATTERY.cpp index cf13aa26..57acf348 100644 --- a/Software/src/battery/BYD-ATTO-3-BATTERY.cpp +++ b/Software/src/battery/BYD-ATTO-3-BATTERY.cpp @@ -393,6 +393,7 @@ void BydAttoBattery::handle_incoming_can_frame(CAN_frame rx_frame) { datalayer_battery->status.CAN_battery_still_alive = CAN_STILL_ALIVE; battery_voltage = ((rx_frame.data.u8[1] & 0x0F) << 8) | rx_frame.data.u8[0]; //battery_temperature_something = rx_frame.data.u8[7] - 40; resides in frame 7 + BMS_voltage_available = true; break; case 0x445: datalayer_battery->status.CAN_battery_still_alive = CAN_STILL_ALIVE; @@ -542,7 +543,7 @@ void BydAttoBattery::transmit_can(unsigned long currentMillis) { } if (counter_100ms > 3) { - if (battery_voltage > 0) { + if (BMS_voltage_available) { // Transmit battery voltage back to BMS when confirmed it's available, this closes the contactors ATTO_3_441.data.u8[4] = (uint8_t)(battery_voltage - 1); ATTO_3_441.data.u8[5] = ((battery_voltage - 1) >> 8); ATTO_3_441.data.u8[6] = 0xFF; diff --git a/Software/src/battery/BYD-ATTO-3-BATTERY.h b/Software/src/battery/BYD-ATTO-3-BATTERY.h index 3d409e84..9e8f7497 100644 --- a/Software/src/battery/BYD-ATTO-3-BATTERY.h +++ b/Software/src/battery/BYD-ATTO-3-BATTERY.h @@ -98,6 +98,7 @@ class BydAttoBattery : public CanBattery { unsigned long previousMillis100 = 0; // will store last time a 100ms CAN Message was send unsigned long previousMillis200 = 0; // will store last time a 200ms CAN Message was send bool SOC_method = false; + bool BMS_voltage_available = false; uint8_t counter_50ms = 0; uint8_t counter_100ms = 0; uint8_t frame6_counter = 0xB;