58 lines
1.9 KiB
C
58 lines
1.9 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-битный АЦП
|
||
|
||
// Типы термисторов
|
||
typedef enum {
|
||
NTC_TYPE_1 = 0, // Первая таблица (100950 Ом при -40°C)
|
||
NTC_TYPE_2 = 1 // Вторая таблица (101000 Ом при -40°C)
|
||
} eNTC_Type;
|
||
|
||
// Параметры Steinhart-Hart для термисторов
|
||
typedef struct {
|
||
float A;
|
||
float B;
|
||
float C;
|
||
} SteinhartParams;
|
||
|
||
// Структура для хранения табличных данных
|
||
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_ntc(eNTC_Type ntc_type);
|
||
void set_r1(float r1_value); // Функция для установки сопротивления делителя
|
||
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);
|
||
|
||
// Функция для получения информации о текущем термисторе
|
||
const char* get_ntc_name(void);
|
||
uint16_t get_table_size(void);
|
||
float get_r1_value(void); // Функция для получения текущего R1
|
||
|
||
#endif //MDF_ADC_TEMP_KST45_14_2_H
|