MODEL_ADC_EX/APP/inc/ADC_Temp.h

58 lines
1.9 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//
// 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