Обновление платы на V2
This commit is contained in:
parent
6ceacffa4d
commit
4c45c28337
132
ADC_Temp.c
132
ADC_Temp.c
|
|
@ -12,8 +12,8 @@ typedef struct {
|
|||
float r_nom; // Номинальное сопротивление (Ω)
|
||||
} ntc_table_entry;
|
||||
|
||||
// Таблица из документа KST45
|
||||
static const ntc_table_entry ntc_table_kst45[] = {
|
||||
// Таблица из документа KST45 (Duct)
|
||||
static const ntc_table_entry ntc_table_duct[] = {
|
||||
{-40, 100950.0f},
|
||||
{-35, 72777.0f},
|
||||
{-30, 53100.0f},
|
||||
|
|
@ -84,21 +84,66 @@ static const ntc_table_entry ntc_table_incar[] = {
|
|||
{85, 283.0f}
|
||||
};
|
||||
|
||||
// Таблица для NTC 10 кОм (Ambient)
|
||||
static const ntc_table_entry ntc_table_ambient[] = {
|
||||
{-40, 332776.0f},
|
||||
{-35, 240264.0f},
|
||||
{-30, 175427.0f},
|
||||
{-25, 129449.0f},
|
||||
{-20, 96481.0f},
|
||||
{-15, 72592.0f},
|
||||
{-10, 55109.0f},
|
||||
{-5, 42193.0f},
|
||||
{0, 32566.0f},
|
||||
{5, 25338.0f},
|
||||
{10, 19869.0f},
|
||||
{15, 15695.0f},
|
||||
{20, 12486.0f},
|
||||
{25, 10000.0f},
|
||||
{30, 8060.0f},
|
||||
{35, 6536.0f},
|
||||
{40, 5331.0f},
|
||||
{45, 4373.0f},
|
||||
{50, 3606.0f},
|
||||
{55, 2990.0f},
|
||||
{60, 2490.0f},
|
||||
{65, 2085.0f},
|
||||
{70, 1754.0f},
|
||||
{75, 1482.0f},
|
||||
{80, 1257.0f},
|
||||
{85, 1071.0f},
|
||||
{90, 916.4f},
|
||||
{95, 786.9f},
|
||||
{100, 678.1f},
|
||||
{105, 586.5f},
|
||||
{110, 509.1f},
|
||||
{115, 443.3f},
|
||||
{120, 387.3f},
|
||||
{125, 339.5f},
|
||||
{130, 298.4f},
|
||||
{135, 263.1f},
|
||||
{140, 232.6f},
|
||||
{145, 206.1f},
|
||||
{150, 183.2f}
|
||||
};
|
||||
|
||||
// Глобальная структура для хранения таблиц быстрого доступа
|
||||
fast_lookup_tables_t g_fast_tables = {
|
||||
.kst45_initialized = false,
|
||||
.duct_initialized = false,
|
||||
.incar_initialized = false,
|
||||
.kst45_r1 = 3300.0f,
|
||||
.incar_r1 = 3300.0f
|
||||
.ambient_initialized = false,
|
||||
.duct_r1 = 3300.0f,
|
||||
.incar_r1 = 3300.0f,
|
||||
.ambient_r1 = 3300.0f
|
||||
};
|
||||
|
||||
// Активная конфигурация
|
||||
static ntc_config_t active_config = {
|
||||
.table_type = TABLE_KST45,
|
||||
.table_type = TABLE_DUCT,
|
||||
.r1 = 3300.0f,
|
||||
.start_temp = -40,
|
||||
.end_temp = 85,
|
||||
.table_size = TABLE_SIZE_KST45
|
||||
.table_size = TABLE_SIZE_DUCT
|
||||
};
|
||||
|
||||
// Вспомогательная функция для получения таблицы по типу
|
||||
|
|
@ -107,9 +152,9 @@ static const ntc_table_entry* get_table_by_type(eNtcTable table_type, uint16_t*
|
|||
*size = 0;
|
||||
|
||||
switch(table_type) {
|
||||
case TABLE_KST45:
|
||||
table = ntc_table_kst45;
|
||||
*size = TABLE_SIZE_KST45;
|
||||
case TABLE_DUCT:
|
||||
table = ntc_table_duct;
|
||||
*size = TABLE_SIZE_DUCT;
|
||||
*start_temp = -40;
|
||||
*end_temp = 85;
|
||||
break;
|
||||
|
|
@ -119,9 +164,15 @@ static const ntc_table_entry* get_table_by_type(eNtcTable table_type, uint16_t*
|
|||
*start_temp = -40;
|
||||
*end_temp = 85;
|
||||
break;
|
||||
case TABLE_AMBIENT:
|
||||
table = ntc_table_ambient;
|
||||
*size = TABLE_SIZE_AMBIENT;
|
||||
*start_temp = -40;
|
||||
*end_temp = 150;
|
||||
break;
|
||||
default:
|
||||
table = ntc_table_kst45;
|
||||
*size = TABLE_SIZE_KST45;
|
||||
table = ntc_table_duct;
|
||||
*size = TABLE_SIZE_DUCT;
|
||||
*start_temp = -40;
|
||||
*end_temp = 85;
|
||||
break;
|
||||
|
|
@ -132,22 +183,26 @@ static const ntc_table_entry* get_table_by_type(eNtcTable table_type, uint16_t*
|
|||
// Функция для получения указателя на таблицу быстрого доступа по типу
|
||||
static adc_temp_lookup* get_fast_table_by_type(eNtcTable table_type) {
|
||||
switch(table_type) {
|
||||
case TABLE_KST45:
|
||||
return g_fast_tables.kst45;
|
||||
case TABLE_DUCT:
|
||||
return g_fast_tables.duct;
|
||||
case TABLE_INCAR:
|
||||
return g_fast_tables.incar;
|
||||
case TABLE_AMBIENT:
|
||||
return g_fast_tables.ambient;
|
||||
default:
|
||||
return g_fast_tables.kst45;
|
||||
return g_fast_tables.duct;
|
||||
}
|
||||
}
|
||||
|
||||
// Функция для получения статуса инициализации таблицы
|
||||
static bool is_table_initialized(eNtcTable table_type) {
|
||||
switch(table_type) {
|
||||
case TABLE_KST45:
|
||||
return g_fast_tables.kst45_initialized;
|
||||
case TABLE_DUCT:
|
||||
return g_fast_tables.duct_initialized;
|
||||
case TABLE_INCAR:
|
||||
return g_fast_tables.incar_initialized;
|
||||
case TABLE_AMBIENT:
|
||||
return g_fast_tables.ambient_initialized;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
|
|
@ -309,10 +364,12 @@ void init_fast_lookup_table(eNtcTable table_type, float r1, eAlg use_alg) {
|
|||
adc_temp_lookup* fast_table = get_fast_table_by_type(table_type);
|
||||
|
||||
// Сохраняем значение R1 для этой таблицы
|
||||
if (table_type == TABLE_KST45) {
|
||||
g_fast_tables.kst45_r1 = r1;
|
||||
} else {
|
||||
if (table_type == TABLE_DUCT) {
|
||||
g_fast_tables.duct_r1 = r1;
|
||||
} else if (table_type == TABLE_INCAR) {
|
||||
g_fast_tables.incar_r1 = r1;
|
||||
} else {
|
||||
g_fast_tables.ambient_r1 = r1;
|
||||
}
|
||||
|
||||
// Находим рабочий диапазон АЦП
|
||||
|
|
@ -407,17 +464,35 @@ void init_fast_lookup_table(eNtcTable table_type, float r1, eAlg use_alg) {
|
|||
}
|
||||
|
||||
// Устанавливаем флаг инициализации
|
||||
if (table_type == TABLE_KST45) {
|
||||
g_fast_tables.kst45_initialized = true;
|
||||
} else {
|
||||
if (table_type == TABLE_DUCT) {
|
||||
g_fast_tables.duct_initialized = true;
|
||||
} else if (table_type == TABLE_INCAR) {
|
||||
g_fast_tables.incar_initialized = true;
|
||||
} else {
|
||||
g_fast_tables.ambient_initialized = true;
|
||||
}
|
||||
}
|
||||
|
||||
// Инициализация обеих таблиц
|
||||
void init_both_tables(float r1_kst45, float r1_incar, eAlg use_alg) {
|
||||
init_fast_lookup_table(TABLE_KST45, r1_kst45, use_alg);
|
||||
// Инициализация таблицы Duct
|
||||
void init_duct_table(float r1, eAlg use_alg) {
|
||||
init_fast_lookup_table(TABLE_DUCT, r1, use_alg);
|
||||
}
|
||||
|
||||
// Инициализация таблицы Incar
|
||||
void init_incar_table(float r1, eAlg use_alg) {
|
||||
init_fast_lookup_table(TABLE_INCAR, r1, use_alg);
|
||||
}
|
||||
|
||||
// Инициализация таблицы Ambient
|
||||
void init_ambient_table(float r1, eAlg use_alg) {
|
||||
init_fast_lookup_table(TABLE_AMBIENT, r1, use_alg);
|
||||
}
|
||||
|
||||
// Инициализация всех трех таблиц
|
||||
void init_all_tables(float r1_duct, float r1_incar, float r1_ambient, eAlg use_alg) {
|
||||
init_fast_lookup_table(TABLE_DUCT, r1_duct, use_alg);
|
||||
init_fast_lookup_table(TABLE_INCAR, r1_incar, use_alg);
|
||||
init_fast_lookup_table(TABLE_AMBIENT, r1_ambient, use_alg);
|
||||
}
|
||||
|
||||
// Установка активной конфигурации
|
||||
|
|
@ -444,8 +519,9 @@ const fast_lookup_tables_t* get_fast_tables(void) {
|
|||
int16_t get_temperature_log_fast_for_table(uint16_t adc_value, eNtcTable table_type) {
|
||||
if (!is_table_initialized(table_type)) {
|
||||
// Если таблица не инициализирована, используем обычный расчет
|
||||
float temp = get_temperature_from_adc_with_table(adc_value, ALG_STEINHART, table_type,
|
||||
(table_type == TABLE_KST45) ? g_fast_tables.kst45_r1 : g_fast_tables.incar_r1);
|
||||
float r1 = (table_type == TABLE_DUCT) ? g_fast_tables.duct_r1 :
|
||||
((table_type == TABLE_INCAR) ? g_fast_tables.incar_r1 : g_fast_tables.ambient_r1);
|
||||
float temp = get_temperature_from_adc_with_table(adc_value, ALG_STEINHART, table_type, r1);
|
||||
return (int16_t)(temp * 10.0f);
|
||||
}
|
||||
|
||||
|
|
|
|||
25
ADC_Temp.h
25
ADC_Temp.h
|
|
@ -10,8 +10,10 @@
|
|||
|
||||
// Типы таблиц NTC
|
||||
typedef enum {
|
||||
TABLE_KST45 = 0, // Таблица из документа KST45
|
||||
TABLE_INCAR = 1 // Таблица из документа Incar
|
||||
TABLE_DUCT = 0, // Таблица из документа KST45 (Duct)
|
||||
TABLE_INCAR = 1, // Таблица из документа Incar
|
||||
TABLE_AMBIENT = 2, // Таблица для NTC 10 кОм (Ambient)
|
||||
TABLE_NONE = 0xFF // Таблица не задана
|
||||
} eNtcTable;
|
||||
|
||||
// Алгоритмы расчёта температуры
|
||||
|
|
@ -30,9 +32,10 @@ typedef enum {
|
|||
#define koef_C 0.0000004890545443703666
|
||||
|
||||
// Размеры таблиц
|
||||
#define TABLE_SIZE_KST45 26
|
||||
#define TABLE_SIZE_DUCT 26
|
||||
#define TABLE_SIZE_INCAR 38
|
||||
#define TABLE_SIZE_LOOKUP 256
|
||||
#define TABLE_SIZE_AMBIENT 39
|
||||
#define TABLE_SIZE_LOOKUP 1024
|
||||
|
||||
// Предварительно вычисленная таблица для быстрого доступа для каждой таблицы
|
||||
typedef struct {
|
||||
|
|
@ -53,12 +56,15 @@ typedef struct {
|
|||
|
||||
// Структура для хранения таблиц быстрого доступа для каждой конфигурации
|
||||
typedef struct {
|
||||
adc_temp_lookup kst45[TABLE_SIZE_LOOKUP];
|
||||
adc_temp_lookup duct[TABLE_SIZE_LOOKUP];
|
||||
adc_temp_lookup incar[TABLE_SIZE_LOOKUP];
|
||||
bool kst45_initialized;
|
||||
adc_temp_lookup ambient[TABLE_SIZE_LOOKUP];
|
||||
bool duct_initialized;
|
||||
bool incar_initialized;
|
||||
float kst45_r1;
|
||||
bool ambient_initialized;
|
||||
float duct_r1;
|
||||
float incar_r1;
|
||||
float ambient_r1;
|
||||
} fast_lookup_tables_t;
|
||||
|
||||
// Глобальная структура для доступа к таблицам
|
||||
|
|
@ -66,7 +72,10 @@ extern fast_lookup_tables_t g_fast_tables;
|
|||
|
||||
// Функции инициализации и конфигурации
|
||||
void init_fast_lookup_table(eNtcTable table_type, float r1, eAlg use_alg);
|
||||
void init_both_tables(float r1_kst45, float r1_incar, eAlg use_alg);
|
||||
void init_duct_table(float r1, eAlg use_alg);
|
||||
void init_incar_table(float r1, eAlg use_alg);
|
||||
void init_ambient_table(float r1, eAlg use_alg);
|
||||
void init_all_tables(float r1_duct, float r1_incar, float r1_ambient, eAlg use_alg);
|
||||
void set_active_config(eNtcTable table_type, float r1);
|
||||
const ntc_config_t* get_active_config(void);
|
||||
const fast_lookup_tables_t* get_fast_tables(void);
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load Diff
|
|
@ -0,0 +1,23 @@
|
|||
//
|
||||
// Created by cfif on 06.05.2026.
|
||||
//
|
||||
|
||||
#ifndef HVAC_M7_ADC_TEMP_FAST_H
|
||||
#define HVAC_M7_ADC_TEMP_FAST_H
|
||||
|
||||
#include "stdint.h"
|
||||
|
||||
// Структура для точки таблицы
|
||||
typedef struct {
|
||||
uint16_t adc;
|
||||
float temp;
|
||||
float resistance;
|
||||
} TablePoint;
|
||||
|
||||
extern const TablePoint temperature_table_duct_KST45_table_3000[];
|
||||
extern const TablePoint temperature_table_duct_KST45_table_20000[];
|
||||
|
||||
float get_temperature_by_adc(const TablePoint* table, int table_size, int adc_value);
|
||||
float get_resistance_by_temperature_linear(const TablePoint* table, int table_size, float temperature);
|
||||
|
||||
#endif //HVAC_M7_ADC_TEMP_FAST_H
|
||||
Loading…
Reference in New Issue