diff --git a/Core/Inc/shunt_monitoring.h b/Core/Inc/shunt_monitoring.h index 8960fd0..67001c1 100644 --- a/Core/Inc/shunt_monitoring.h +++ b/Core/Inc/shunt_monitoring.h @@ -5,8 +5,9 @@ #include "stm32f3xx_hal.h" -#define THRESH_OVERCURRENT 300000 // mA -#define THRESH_OVERTEMP 1000 // 1/10 °C +#define SHUNT_TIMEOUT 300 // ms +#define SHUNT_THRESH_OVERCURRENT 300000 // mA +#define SHUNT_THRESH_OVERTEMP 1000 // 1/10 °C typedef struct { int32_t current; diff --git a/Core/Src/shunt_monitoring.c b/Core/Src/shunt_monitoring.c index a1fac5c..8a92045 100644 --- a/Core/Src/shunt_monitoring.c +++ b/Core/Src/shunt_monitoring.c @@ -24,10 +24,13 @@ void shunt_init() { void shunt_check() { int is_error = 0; - if (shunt_data.current >= THRESH_OVERCURRENT) { + if (HAL_GetTick() - shunt_data.last_message > SHUNT_TIMEOUT) { + is_error = 1; + can_send_error(TS_ERRORKIND_SHUNT_TIMEOUT, 0); + } else if (shunt_data.current >= SHUNT_THRESH_OVERCURRENT) { is_error = 1; can_send_error(TS_ERRORKIND_SHUNT_OVERTEMP, 0); - } else if (shunt_data.busbartemp >= THRESH_OVERTEMP) { + } else if (shunt_data.busbartemp >= SHUNT_THRESH_OVERTEMP) { is_error = 1; can_send_error(TS_ERRORKIND_SHUNT_OVERTEMP, 0); } @@ -35,6 +38,8 @@ void shunt_check() { } void shunt_handle_can_msg(uint16_t id, const uint8_t *data) { + shunt_data.last_message = HAL_GetTick(); + // All result messages contain a big-endian 6-byte integer uint64_t result = ftcan_unmarshal_unsigned(&data, 6);