Куча всего.

Добавлена интерполяция по таблице датчиков
Структурирован проект в матлаб
This commit is contained in:
2025-11-14 18:03:44 +03:00
parent e4f05bdf6a
commit 2cdcebeffa
10 changed files with 172 additions and 60 deletions

View File

@@ -55,14 +55,14 @@ static void ADC_InitAllFilters(ADC_Periodic_t *adc)
{
Filter_Init(&adc->filter[i], Filter_Initializator);
}
FilterLUTInt_Init(&adc->temp_map[0],
(int32_t *)adc_temp_quants,
(int32_t *)adc_temp_vals,
sizeof(adc_temp_quants), 0);
FilterLUTInt_Init(&adc->temp_map[1],
(int32_t *)adc_temp_quants,
(int32_t *)adc_temp_vals,
sizeof(adc_temp_quants), 0);
FilterLUT_Init(&adc->temp_map[0],
(float *)adc_temp_quants,
(float *)adc_temp_vals,
numbof(adc_temp_quants), 1);
FilterLUT_Init(&adc->temp_map[1],
(float *)adc_temp_quants,
(float *)adc_temp_vals,
numbof(adc_temp_quants), 1);
}
/**
* @brief Инициализация периодического АЦП.
@@ -199,7 +199,7 @@ HAL_StatusTypeDef ADC_Handle(ADC_Periodic_t *adc)
// Преобразования температуры по таблице
for (int i = ADC_TEMP_CHANNELS_START; i < ADC_NUMB_OF_CHANNELS; i++)
{
data[i] = FilterLUTInt_Process(&adc->temp_map[i-ADC_TEMP_CHANNELS_START], raw[i]);
data[i] = Filter_Process(&adc->temp_map[i-ADC_TEMP_CHANNELS_START], raw[i]);
ADC_UpdateStatistics(adc, i, ADC_LEVEL_BASE);
}

View File

@@ -48,8 +48,8 @@
64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, \
82, 83, 84, 85, 86, 87, 88, 89, 90}
static const int32_t adc_temp_vals[] = ADC_TEMPERATURES;
static const int32_t adc_temp_quants[] = ADC_TEMPERATURES_QUANTS;
static const float adc_temp_vals[] = ADC_TEMPERATURES;
static const float adc_temp_quants[] = ADC_TEMPERATURES_QUANTS;
#define Filter_t FilterMedian_t
#define Filter_Init FilterMedian_Init
@@ -102,7 +102,7 @@ typedef struct
Filter_t filter[ADC_NUMB_OF_CHANNELS]; ///< Фильтр от шумов АЦП
FilterLUTInt_t temp_map[2]; ///< Коррекция нелинейности датчиков температуры
FilterLUT_t temp_map[2]; ///< Коррекция нелинейности датчиков температуры
float Data[ADC_NUMB_OF_CHANNELS]; ///< Пересчитанные значения АЦП (в Вольтах/Амперах)
ADC_Statistics Stat[ADC_NUMB_OF_REGULAR_CHANNELS]; ///< Статистика для регулярных каналов (не температуры)

View File

@@ -51,6 +51,7 @@ HAL_StatusTypeDef PowerMonitor_Start(PowerMonitor_t *hpm)
void PowerMonitor_Handle(PowerMonitor_t *hpm)
{
static uint32_t last_zc_state[ADC_NUMB_OF_U_CHANNELS] = {0};
ADC_Handle(&hpm->adc);

View File

@@ -19,7 +19,7 @@ typedef struct
float U[3];
float F[3];
float I[3];
float T[3];
float T[2];
}PowerMonitor_t;
extern PowerMonitor_t pm;