From 10ea3c85a3c247c07107195e2640d12988014921 Mon Sep 17 00:00:00 2001 From: Kilian Bracher Date: Tue, 25 Feb 2025 20:21:26 +0100 Subject: [PATCH] refactor: use BMS' built-in OV/UV detection --- .../Core/Src/ADBMS_Abstraction.c | 4 +++- .../ADBMS6830B_Driver/Core/Src/ADBMS_HighLevel.c | 16 +++++++--------- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/AMS_Master_Code/Core/Lib/ADBMS6830B_Driver/Core/Src/ADBMS_Abstraction.c b/AMS_Master_Code/Core/Lib/ADBMS6830B_Driver/Core/Src/ADBMS_Abstraction.c index 698af91..1440728 100644 --- a/AMS_Master_Code/Core/Lib/ADBMS6830B_Driver/Core/Src/ADBMS_Abstraction.c +++ b/AMS_Master_Code/Core/Lib/ADBMS6830B_Driver/Core/Src/ADBMS_Abstraction.c @@ -280,7 +280,9 @@ HAL_StatusTypeDef amsCheckUnderOverVoltage(Cell_Module (*module)[N_BMS]) { } } - return HAL_OK; + uint8_t buffer[CMD_BUFFER_SIZE(6)] = {[0 ... CMD_BUFFER_SIZE(6) - 1] = 0xFF}; + + return writeCMD(CLOVUV, buffer, STATUS_GROUP_D_SIZE); // flags are latched, so we need to clear them } HAL_StatusTypeDef amsClearFlag() { diff --git a/AMS_Master_Code/Core/Lib/ADBMS6830B_Driver/Core/Src/ADBMS_HighLevel.c b/AMS_Master_Code/Core/Lib/ADBMS6830B_Driver/Core/Src/ADBMS_HighLevel.c index 4a1adb0..670f3ed 100644 --- a/AMS_Master_Code/Core/Lib/ADBMS6830B_Driver/Core/Src/ADBMS_HighLevel.c +++ b/AMS_Master_Code/Core/Lib/ADBMS6830B_Driver/Core/Src/ADBMS_HighLevel.c @@ -101,14 +101,12 @@ ADBMS_DetailedStatus AMS_Idle_Loop() { return (ADBMS_DetailedStatus){ADBMS_INTERNAL_BMS_CHECKSUM_FAIL, -1}; } - for (size_t i = 0; i < numberofCells; i++) { - if ((match = any(module.cellVoltages[i] < 2500))) { - error_data[ADBMS_UNDERVOLT].data[0] = i; - return (ADBMS_DetailedStatus){ADBMS_UNDERVOLT, match}; - } else if ((match = any(module.cellVoltages[i] > 4200))) { - error_data[ADBMS_OVERVOLT].data[0] = i; - return (ADBMS_DetailedStatus){ADBMS_OVERVOLT, match}; - } + if ((match = any(module.overVoltage))) { + return (ADBMS_DetailedStatus){ADBMS_OVERVOLT, match}; + } + + if ((match = any(module.underVoltage))) { + return (ADBMS_DetailedStatus){ADBMS_UNDERVOLT, match}; } // TODO: replace with the correct threshold for the internal die temperature @@ -116,7 +114,7 @@ ADBMS_DetailedStatus AMS_Idle_Loop() { return (ADBMS_DetailedStatus){ADBMS_INTERNAL_BMS_OVERTEMP, match}; } - mcuDelay(10); + // mcuDelay(10); return NO_ERROR; }