MODEL_ADC/APP/inc/ADC_Temp.h

41 lines
1.2 KiB
C

//
// Created by cfif on 04.12.2025.
//
#ifndef MDF_ADC_TEMP_KST45_14_2_H
#define MDF_ADC_TEMP_KST45_14_2_H
#include <stdint.h>
// Константы
#define ADC_MAX 4095.0f // 12-битный АЦП
#define R1 3300.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 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);
#endif //MDF_ADC_TEMP_KST45_14_2_H