From e4cf649f3c31057a2013361f46b16ff16c85fd5e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20=C3=96ster?= Date: Sat, 3 May 2025 11:55:40 +0300 Subject: [PATCH] Add high temperature fault event --- Software/src/devboard/safety/safety.cpp | 14 +++++++++++--- Software/src/devboard/utils/events.cpp | 7 +++++-- Software/src/devboard/utils/events.h | 3 ++- 3 files changed, 18 insertions(+), 6 deletions(-) diff --git a/Software/src/devboard/safety/safety.cpp b/Software/src/devboard/safety/safety.cpp index dc135c6a..7cac486a 100644 --- a/Software/src/devboard/safety/safety.cpp +++ b/Software/src/devboard/safety/safety.cpp @@ -19,11 +19,19 @@ battery_pause_status emulator_pause_status = NORMAL; //battery pause status end void update_machineryprotection() { - // Check if the CPU is too hot + /* Check if the ESP32 CPU running the Battery-Emulator is too hot. + We start with a warning, you can start to see Wifi issues if ut becomes too hot + If the chip starts to approach the design limit, we perform a graceful shutdown */ if (datalayer.system.info.CPU_temperature > 80.0f) { - set_event(EVENT_CPU_OVERHEAT, 0); + set_event(EVENT_CPU_OVERHEATING, 0); } else { - clear_event(EVENT_CPU_OVERHEAT); + clear_event(EVENT_CPU_OVERHEATING); + } + if (datalayer.system.info.CPU_temperature > 110.0f) { + set_event(EVENT_CPU_OVERHEATED, 0); + } + if (datalayer.system.info.CPU_temperature < 105.0f) { + clear_event(EVENT_CPU_OVERHEATED); //Hysteresis on the clearing } // Check health status of CAN interfaces diff --git a/Software/src/devboard/utils/events.cpp b/Software/src/devboard/utils/events.cpp index bc351f03..60fc0804 100644 --- a/Software/src/devboard/utils/events.cpp +++ b/Software/src/devboard/utils/events.cpp @@ -47,7 +47,8 @@ void init_events(void) { events.entries[EVENT_CAN_CHARGER_MISSING].level = EVENT_LEVEL_INFO; events.entries[EVENT_CAN_INVERTER_MISSING].level = EVENT_LEVEL_WARNING; events.entries[EVENT_CONTACTOR_WELDED].level = EVENT_LEVEL_WARNING; - events.entries[EVENT_CPU_OVERHEAT].level = EVENT_LEVEL_WARNING; + events.entries[EVENT_CPU_OVERHEATING].level = EVENT_LEVEL_WARNING; + events.entries[EVENT_CPU_OVERHEATED].level = EVENT_LEVEL_ERROR; events.entries[EVENT_WATER_INGRESS].level = EVENT_LEVEL_ERROR; events.entries[EVENT_CHARGE_LIMIT_EXCEEDED].level = EVENT_LEVEL_INFO; events.entries[EVENT_DISCHARGE_LIMIT_EXCEEDED].level = EVENT_LEVEL_INFO; @@ -193,8 +194,10 @@ const char* get_event_message_string(EVENTS_ENUM_TYPE event) { return "Inverter not sending messages via CAN for the last 60 seconds. Check wiring!"; case EVENT_CONTACTOR_WELDED: return "Contactors sticking/welded. Inspect battery with caution!"; - case EVENT_CPU_OVERHEAT: + case EVENT_CPU_OVERHEATING: return "Battery-Emulator CPU overheating! Increase airflow/cooling to increase hardware lifespan!"; + case EVENT_CPU_OVERHEATED: + return "Battery-Emulator CPU melting! Performing controlled shutdown until temperature drops!"; case EVENT_CHARGE_LIMIT_EXCEEDED: return "Inverter is charging faster than battery is allowing."; case EVENT_DISCHARGE_LIMIT_EXCEEDED: diff --git a/Software/src/devboard/utils/events.h b/Software/src/devboard/utils/events.h index 581cea59..6992f956 100644 --- a/Software/src/devboard/utils/events.h +++ b/Software/src/devboard/utils/events.h @@ -21,7 +21,8 @@ XX(EVENT_CAN_NATIVE_TX_FAILURE) \ XX(EVENT_CHARGE_LIMIT_EXCEEDED) \ XX(EVENT_CONTACTOR_WELDED) \ - XX(EVENT_CPU_OVERHEAT) \ + XX(EVENT_CPU_OVERHEATING) \ + XX(EVENT_CPU_OVERHEATED) \ XX(EVENT_DISCHARGE_LIMIT_EXCEEDED) \ XX(EVENT_WATER_INGRESS) \ XX(EVENT_12V_LOW) \