From 11d5ccb2d3cbd2618a8635f5e173a0740f592d25 Mon Sep 17 00:00:00 2001 From: kbracher Date: Wed, 26 Mar 2025 17:25:23 +0100 Subject: [PATCH] refactor: move NTC calc functions to their own file --- AMS_Master_Code/Core/Inc/NTC.h | 27 +++++++++++++++++++++++++++ AMS_Master_Code/Core/Src/main.c | 26 +------------------------- 2 files changed, 28 insertions(+), 25 deletions(-) create mode 100644 AMS_Master_Code/Core/Inc/NTC.h diff --git a/AMS_Master_Code/Core/Inc/NTC.h b/AMS_Master_Code/Core/Inc/NTC.h new file mode 100644 index 0000000..52d8445 --- /dev/null +++ b/AMS_Master_Code/Core/Inc/NTC.h @@ -0,0 +1,27 @@ +#include + +#define NTC_A1 0.003354016f // see NTC RT csv from Vishay +#define NTC_B1 0.000300131f +#define NTC_C1 5.08516E-06f +#define NTC_D1 2.18765E-07f +#define NTC_R25 10000.0f // 10k ohm at 25C + +#define NTC_R_DIVIDER 10000.0f +#define NTC_V_DIVIDER 3.000f // 3V + +[[gnu::always_inline]] +static inline float ntc_ohms_to_celsius(float ohms) { + float log_ohms = logf(ohms / NTC_R25); + return 1.0f / (NTC_A1 + NTC_B1 * log_ohms + NTC_C1 * log_ohms * log_ohms + NTC_D1 * log_ohms * log_ohms * log_ohms) - 273.15f; +} + +[[gnu::always_inline]] +static inline float ohms_from_ntc_v(float v) { + return (NTC_R_DIVIDER * v) / (NTC_V_DIVIDER - v); +} + +[[maybe_unused]] +static int ntc_mv_to_celsius(int mv) { + float v = (float)mv * 0.001f; + return (int)ntc_ohms_to_celsius(ohms_from_ntc_v(v)); +} \ No newline at end of file diff --git a/AMS_Master_Code/Core/Src/main.c b/AMS_Master_Code/Core/Src/main.c index 5fbd173..59efb1f 100644 --- a/AMS_Master_Code/Core/Src/main.c +++ b/AMS_Master_Code/Core/Src/main.c @@ -25,6 +25,7 @@ #include "config_ADBMS6830.h" #include "swo_log.h" #include +#include "NTC.h" /* USER CODE END Includes */ /* Private typedef -----------------------------------------------------------*/ @@ -62,31 +63,6 @@ static void MX_SPI1_Init(void); /* Private user code ---------------------------------------------------------*/ /* USER CODE BEGIN 0 */ uint32_t volatile logging_mask = 0b11111; // no LOG_LEVEL_NOISY - -#define NTC_A1 0.003354016f // see NTC RT csv from Vishay -#define NTC_B1 0.000300131f -#define NTC_C1 5.08516E-06f -#define NTC_D1 2.18765E-07f -#define NTC_R25 10000.0f // 10k ohm at 25C - -#define NTC_R_DIVIDER 10000.0f -#define NTC_V_DIVIDER 3.000f // 3V - -[[gnu::always_inline]] -static inline float ntc_ohms_to_celsius(float ohms) { - float log_ohms = logf(ohms / NTC_R25); - return 1.0f / (NTC_A1 + NTC_B1 * log_ohms + NTC_C1 * log_ohms * log_ohms + NTC_D1 * log_ohms * log_ohms * log_ohms) - 273.15f; -} - -[[gnu::always_inline]] -static inline float ohms_from_ntc_v(float v) { - return (NTC_R_DIVIDER * v) / (NTC_V_DIVIDER - v); -} - -static inline int ntc_mv_to_celsius(int mv) { - float v = (float)mv * 0.001f; - return (int)ntc_ohms_to_celsius(ohms_from_ntc_v(v)); -} /* USER CODE END 0 */ /**