41 lines
1.2 KiB
C
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
|