Add event for blown fuse

This commit is contained in:
Daniel Öster 2025-01-15 12:11:39 +02:00
parent cad8fe617a
commit 035831f2bf
3 changed files with 10 additions and 1 deletions

View file

@ -454,6 +454,11 @@ void handle_incoming_can_frame_battery(CAN_frame rx_frame) {
case 0x2E: case 0x2E:
if (requested_poll == GROUP1_CELLVOLTAGES_1_POLL) { if (requested_poll == GROUP1_CELLVOLTAGES_1_POLL) {
cellvoltages[47] = (highbyte_cell_next_frame << 8) | rx_frame.data.u8[1]; cellvoltages[47] = (highbyte_cell_next_frame << 8) | rx_frame.data.u8[1];
if (cellvoltages[47] < 100) { //This cell measurement is inbetween pack halves. If low, fuse blown
set_event(EVENT_BATTERY_FUSE, cellvoltages[47]);
} else {
clear_event(EVENT_BATTERY_FUSE);
}
cellvoltages[48] = (rx_frame.data.u8[2] << 8) | rx_frame.data.u8[3]; cellvoltages[48] = (rx_frame.data.u8[2] << 8) | rx_frame.data.u8[3];
cellvoltages[49] = (rx_frame.data.u8[4] << 8) | rx_frame.data.u8[5]; cellvoltages[49] = (rx_frame.data.u8[4] << 8) | rx_frame.data.u8[5];
cellvoltages[50] = (rx_frame.data.u8[6] << 8) | rx_frame.data.u8[7]; cellvoltages[50] = (rx_frame.data.u8[6] << 8) | rx_frame.data.u8[7];

View file

@ -153,6 +153,7 @@ void init_events(void) {
events.entries[EVENT_BALANCING_END].level = EVENT_LEVEL_INFO; events.entries[EVENT_BALANCING_END].level = EVENT_LEVEL_INFO;
events.entries[EVENT_BATTERY_EMPTY].level = EVENT_LEVEL_INFO; events.entries[EVENT_BATTERY_EMPTY].level = EVENT_LEVEL_INFO;
events.entries[EVENT_BATTERY_FULL].level = EVENT_LEVEL_INFO; events.entries[EVENT_BATTERY_FULL].level = EVENT_LEVEL_INFO;
events.entries[EVENT_BATTERY_FUSE].level = EVENT_LEVEL_WARNING;
events.entries[EVENT_BATTERY_FROZEN].level = EVENT_LEVEL_INFO; events.entries[EVENT_BATTERY_FROZEN].level = EVENT_LEVEL_INFO;
events.entries[EVENT_BATTERY_CAUTION].level = EVENT_LEVEL_INFO; events.entries[EVENT_BATTERY_CAUTION].level = EVENT_LEVEL_INFO;
events.entries[EVENT_BATTERY_CHG_STOP_REQ].level = EVENT_LEVEL_ERROR; events.entries[EVENT_BATTERY_CHG_STOP_REQ].level = EVENT_LEVEL_ERROR;
@ -304,6 +305,8 @@ const char* get_event_message_string(EVENTS_ENUM_TYPE event) {
return "Battery is completely discharged"; return "Battery is completely discharged";
case EVENT_BATTERY_FULL: case EVENT_BATTERY_FULL:
return "Battery is fully charged"; return "Battery is fully charged";
case EVENT_BATTERY_FUSE:
return "Battery internal fuse blown. Inspect battery";
case EVENT_BATTERY_FROZEN: case EVENT_BATTERY_FROZEN:
return "Battery is too cold to operate optimally. Consider warming it up!"; return "Battery is too cold to operate optimally. Consider warming it up!";
case EVENT_BATTERY_CAUTION: case EVENT_BATTERY_CAUTION:

View file

@ -6,7 +6,7 @@
// #define INCLUDE_EVENTS_TEST // Enable to run an event test loop, see events_test_on_target.cpp // #define INCLUDE_EVENTS_TEST // Enable to run an event test loop, see events_test_on_target.cpp
#define EE_MAGIC_HEADER_VALUE 0x0020 // 0x0000 to 0xFFFF #define EE_MAGIC_HEADER_VALUE 0x0021 // 0x0000 to 0xFFFF
#define GENERATE_ENUM(ENUM) ENUM, #define GENERATE_ENUM(ENUM) ENUM,
#define GENERATE_STRING(STRING) #STRING, #define GENERATE_STRING(STRING) #STRING,
@ -49,6 +49,7 @@
XX(EVENT_BALANCING_END) \ XX(EVENT_BALANCING_END) \
XX(EVENT_BATTERY_EMPTY) \ XX(EVENT_BATTERY_EMPTY) \
XX(EVENT_BATTERY_FULL) \ XX(EVENT_BATTERY_FULL) \
XX(EVENT_BATTERY_FUSE) \
XX(EVENT_BATTERY_FROZEN) \ XX(EVENT_BATTERY_FROZEN) \
XX(EVENT_BATTERY_CAUTION) \ XX(EVENT_BATTERY_CAUTION) \
XX(EVENT_BATTERY_CHG_STOP_REQ) \ XX(EVENT_BATTERY_CHG_STOP_REQ) \