// // Created by cfif on 04.12.2025. // #ifndef MDF_ADC_TEMP_KST45_14_2_H #define MDF_ADC_TEMP_KST45_14_2_H #include // Константы #define ADC_MAX 4095.0f // 12-битный АЦП #define R1 3000.0f // Сопротивление делителя напряжения #define TABLE_START_TEMP (-40) #define TABLE_END_TEMP 85 #define TABLE_SIZE 38 // Параметры Steinhart-Hart для термистора #define koef_A 0.001741624168166423 #define koef_B 0.00017003940268680147 #define koef_C 0.0000004890545443703666 #define TABLE_SIZE_LOOKUP 512 // Структура для хранения табличных данных typedef struct { int temp_c; // Температура (°C) float r_nom; // Номинальное сопротивление (Ω) } ntc_table_entry; typedef enum { ALG_STEINHART = 0, ALG_STEINHART_FULL = 1, ALG_LINEAR = 2 } eAlg; // Предварительно вычисленная таблица для быстрого доступа typedef struct { uint16_t adc_value; // Значение АЦП int16_t temp_c; // Температура в °C * 10 (для фиксированной точки) } adc_temp_lookup; void init_fast_lookup_table(eAlg use_alg); float get_temperature_from_adc(uint16_t adc_value, eAlg alg); int16_t get_temperature_fast(uint16_t adc_value, adc_temp_lookup *fast_temp_lookup, uint16_t size_fast_temp_lookup); #endif //MDF_ADC_TEMP_KST45_14_2_H