From 79f69333a5ec787775444c58622337b9843ad174 Mon Sep 17 00:00:00 2001 From: Kilian Bracher Date: Thu, 4 Jul 2024 20:01:30 +0200 Subject: [PATCH] cleanup, some error handling --- Core/Inc/state_machine.h | 8 ++++---- Core/Src/PWM_control.c | 2 +- Core/Src/can.c | 2 +- Core/Src/state_machine.c | 14 +++++++++----- 4 files changed, 15 insertions(+), 11 deletions(-) diff --git a/Core/Inc/state_machine.h b/Core/Inc/state_machine.h index b08e0ce..c5d5e3f 100644 --- a/Core/Inc/state_machine.h +++ b/Core/Inc/state_machine.h @@ -37,7 +37,6 @@ typedef enum { // states -> 3 bit. valid transitions: (all could t } State; typedef struct { - uint16_t bms_timeout : 1; uint16_t bms_fault : 1; uint16_t temperature_error : 1; @@ -46,7 +45,8 @@ typedef struct { uint16_t voltage_error : 1; uint16_t voltage_missing : 1; uint16_t state_transition_fail : 1; - + uint16_t eeprom_error : 1; + uint16_t : 7; // padding } ErrorKind; //typedef enum {} WarningKind; @@ -59,8 +59,8 @@ typedef struct { } StateHandle; extern StateHandle state; -static bool relay_closed = 0; -static bool precharge_closed = 0; +static bool relay_closed = 0; //NOTE: unused? +static bool precharge_closed = 0; //NOTE: unused? extern int16_t RELAY_BAT_SIDE_VOLTAGE; extern int16_t RELAY_ESC_SIDE_VOLTAGE; extern int16_t CURRENT_MEASUREMENT; diff --git a/Core/Src/PWM_control.c b/Core/Src/PWM_control.c index 472657f..5a2a34f 100644 --- a/Core/Src/PWM_control.c +++ b/Core/Src/PWM_control.c @@ -13,7 +13,7 @@ TIM_HandleTypeDef *powerground, *battery_cooling, *esc_cooling; void PWM_control_init(TIM_HandleTypeDef* pg, TIM_HandleTypeDef* bat_cool, TIM_HandleTypeDef* esc_cool){ powerground_status = 0; - battery_cooling_status = 0; + //battery_cooling_status = 0; powerground = pg; battery_cooling = bat_cool; diff --git a/Core/Src/can.c b/Core/Src/can.c index 0e4aebe..9800342 100644 --- a/Core/Src/can.c +++ b/Core/Src/can.c @@ -8,7 +8,7 @@ //#define CAN_ID_IN 0x501 //#define CAN_ID_OUT 0x502 -int can_delay_manager = 0; +static uint32_t can_delay_manager = 0; void can_init(CAN_HandleTypeDef* hcan) { ftcan_init(hcan); ftcan_add_filter(CAN_ID_IN, 0xFFF); diff --git a/Core/Src/state_machine.c b/Core/Src/state_machine.c index 4dffdfc..89227f9 100644 --- a/Core/Src/state_machine.c +++ b/Core/Src/state_machine.c @@ -5,7 +5,6 @@ #include "main.h" #include "stm32f3xx_hal.h" #include -#include StateHandle state; int16_t RELAY_BAT_SIDE_VOLTAGE; @@ -13,7 +12,7 @@ int16_t RELAY_ESC_SIDE_VOLTAGE; int16_t CURRENT_MEASUREMENT; uint8_t powerground_status; -uint32_t timestamp; +static uint32_t timestamp; void sm_init(){ state.current_state = STATE_INACTIVE; @@ -79,7 +78,7 @@ State sm_update_precharge(){ PWM_set_throttle(); return STATE_READY; } - break; + return STATE_PRECHARGE; case STATE_DISCHARGE: return STATE_DISCHARGE; default: @@ -112,8 +111,7 @@ State sm_update_active(){ State sm_update_discharge(){ switch (state.target_state) { case STATE_DISCHARGE: - if (RELAY_ESC_SIDE_VOLTAGE < 5000) - return STATE_INACTIVE; + return (RELAY_ESC_SIDE_VOLTAGE < 5000) ? STATE_INACTIVE : STATE_DISCHARGE; case STATE_PRECHARGE: // if CAN Signal 1000 0000 then get ready return STATE_PRECHARGE; default: @@ -259,12 +257,18 @@ void sm_check_errors(){ case SEK_UNDERTEMP: case SEK_TOO_FEW_TEMPS: state.error_type.temperature_error = 1; + break; case SEK_OVERVOLT: case SEK_UNDERVOLT: case SEK_OPENWIRE: + state.error_type.voltage_error = 1; + break; case SEK_EEPROM_ERR: + state.error_type.eeprom_error = 1; + break; case SEK_INTERNAL_BMS_TIMEOUT: state.error_type.bms_timeout = 1; + break; case SEK_INTERNAL_BMS_CHECKSUM_FAIL: case SEK_INTERNAL_BMS_OVERTEMP: case SEK_INTERNAL_BMS_FAULT: