From 4491f11b3dffc20c080b90af06064b33b186f9e6 Mon Sep 17 00:00:00 2001 From: Razvalyaev Date: Mon, 10 Nov 2025 07:50:18 +0300 Subject: [PATCH] =?UTF-8?q?=D0=A2=D0=B5=D1=81=D1=82=D1=8B=20=D1=84=D0=B8?= =?UTF-8?q?=D0=BB=D1=8C=D1=82=D1=80=D0=BE=D0=B2=D0=B0=D0=BD=D0=B8=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Оно добавляют задержку и сдвиг по фазе надо чет думать --- .gitignore | 1 + .../Drivers/CMSIS/arm_defines.h | 2 +- .../Drivers/STM32_SIMULINK/stm32_matlab_adc.c | 15 -- .../Drivers/STM32_SIMULINK/stm32_matlab_adc.h | 8 +- .../Drivers/STM32_SIMULINK/stm32_matlab_tim.c | 3 + MATLAB/app_wrapper/app_io.c | 4 + MATLAB/upp_r2023.slx | Bin 66192 -> 66731 bytes UPP/.mxproject | 3 + UPP/AllLibs/MyLibs | 2 +- UPP/Core/Configs/mylibs_config.h | 38 +++- UPP/Core/Configs/mylibs_include.h | 46 ++++ UPP/Core/Inc/main.h | 12 +- UPP/Core/PowerMonitor/adc_tools.c | 57 ++++- UPP/Core/PowerMonitor/adc_tools.h | 29 +++ UPP/Core/Src/tim.c | 2 +- UPP/Core/UPP/upp_main.c | 2 +- UPP/MDK-ARM/UPP.uvoptx | 114 ++++++---- UPP/MDK-ARM/UPP.uvprojx | 12 +- UPP/UPP.ioc | 4 +- .../temperature_polynom.py | 204 ++++++++++++++++++ ...температуры в ед АЦП.xlsx | Bin 20953 -> 27955 bytes 21 files changed, 471 insertions(+), 87 deletions(-) create mode 100644 Информация для программиста (УПП СП СЭД)/temperature_polynom.py diff --git a/.gitignore b/.gitignore index 76eefbb..f8a2aac 100644 --- a/.gitignore +++ b/.gitignore @@ -61,3 +61,4 @@ JLinkLog.txt /MATLAB/MCU.exp /MATLAB/MCU.lib /MATLAB/MCU.mexw64.manifest +/MATLAB/upp_r2023.slx.autosave diff --git a/MATLAB/MCU_STM32_Matlab/Drivers/CMSIS/arm_defines.h b/MATLAB/MCU_STM32_Matlab/Drivers/CMSIS/arm_defines.h index e31109d..b841697 100644 --- a/MATLAB/MCU_STM32_Matlab/Drivers/CMSIS/arm_defines.h +++ b/MATLAB/MCU_STM32_Matlab/Drivers/CMSIS/arm_defines.h @@ -27,7 +27,7 @@ #endif #ifndef __STATIC_FORCEINLINE - #define __STATIC_FORCEINLINE static __forceinline + #define __STATIC_FORCEINLINE //static __forceinline #endif #ifndef __NO_RETURN diff --git a/MATLAB/MCU_STM32_Matlab/Drivers/STM32_SIMULINK/stm32_matlab_adc.c b/MATLAB/MCU_STM32_Matlab/Drivers/STM32_SIMULINK/stm32_matlab_adc.c index d199507..4d28469 100644 --- a/MATLAB/MCU_STM32_Matlab/Drivers/STM32_SIMULINK/stm32_matlab_adc.c +++ b/MATLAB/MCU_STM32_Matlab/Drivers/STM32_SIMULINK/stm32_matlab_adc.c @@ -311,21 +311,6 @@ uint32_t ADC_Get_Sequence_Channel(ADC_TypeDef* ADCx, uint32_t rank) } } -/////////////////////////////---DMA FUNCTIONS---/////////////////////////////// -void ADC_DMA_Sim_Transfer(ADC_TypeDef* ADCx, struct ADC_Sim* ADCS) -{ - if (!ADCS->dma_buffer || ADCS->dma_buffer_size == 0) return; - - ADCS->dma_buffer[ADCS->dma_current_index] = ADCx->DR; - ADCS->dma_current_index++; - - if (ADCS->dma_current_index >= ADCS->dma_buffer_size) { - if (ADCS->dma_circular) { - ADCS->dma_current_index = 0; - } - } -} - /////////////////////////////---CHANNEL FUNCTIONS---/////////////////////////// void ADC_Set_Channel_Value(ADC_TypeDef* ADCx, uint32_t channel, double voltage) { diff --git a/MATLAB/MCU_STM32_Matlab/Drivers/STM32_SIMULINK/stm32_matlab_adc.h b/MATLAB/MCU_STM32_Matlab/Drivers/STM32_SIMULINK/stm32_matlab_adc.h index 26d8697..e78a6c2 100644 --- a/MATLAB/MCU_STM32_Matlab/Drivers/STM32_SIMULINK/stm32_matlab_adc.h +++ b/MATLAB/MCU_STM32_Matlab/Drivers/STM32_SIMULINK/stm32_matlab_adc.h @@ -9,7 +9,7 @@ #endif #ifdef STM32F4 -#define ADC_NOISE_LSB 10 // Шум в LSB (квантах АЦП) +#define ADC_NOISE_LSB 20 // Шум в LSB (квантах АЦП) #endif /////////////////////////////---STRUCTURES---/////////////////////////// @@ -23,12 +23,6 @@ struct ADC_Sim double channel_values[19]; uint8_t channel_connected[19]; - // DMA - uint32_t* dma_buffer; - uint32_t dma_buffer_size; - uint32_t dma_current_index; - uint8_t dma_circular; - // Timing double simulation_step; double adc_clock_freq; diff --git a/MATLAB/MCU_STM32_Matlab/Drivers/STM32_SIMULINK/stm32_matlab_tim.c b/MATLAB/MCU_STM32_Matlab/Drivers/STM32_SIMULINK/stm32_matlab_tim.c index 5f24a07..46b9f21 100644 --- a/MATLAB/MCU_STM32_Matlab/Drivers/STM32_SIMULINK/stm32_matlab_tim.c +++ b/MATLAB/MCU_STM32_Matlab/Drivers/STM32_SIMULINK/stm32_matlab_tim.c @@ -65,6 +65,9 @@ void Overflow_Check(TIM_TypeDef* TIMx, struct TIM_Sim* TIMS) else if (TIMS->tx_cnt < 0) TIMS->tx_cnt += TIMS->RELOAD+1; + if(TIMS->tx_step > TIMS->RELOAD) + TIMS->tx_cnt = 0; + TIM_Call_IRQHandller(TIMx); // call HANDLER } } diff --git a/MATLAB/app_wrapper/app_io.c b/MATLAB/app_wrapper/app_io.c index bbd7a47..4050af7 100644 --- a/MATLAB/app_wrapper/app_io.c +++ b/MATLAB/app_wrapper/app_io.c @@ -38,6 +38,10 @@ ADC_Set_Channel_Value(ADC3, 6, ReadInputArray(0,2)); ADC_Set_Channel_Value(ADC3, 7, ReadInputArray(0,3)); ADC_Set_Channel_Value(ADC3, 8, ReadInputArray(0,4)); ADC_Set_Channel_Value(ADC3, 10, ReadInputArray(0,5)); + + +__HAL_TIM_SET_AUTORELOAD(&adc_tim, ReadInputArray(1, 0)); + // USER APP INPUT END } diff --git a/MATLAB/upp_r2023.slx b/MATLAB/upp_r2023.slx index 1ebf0c03611b4e40cdb769df5963a54adb506d4f..1fdd5ace8f7293d085e9dc6db8d561e00ed27288 100644 GIT binary patch delta 40174 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.Initialized) - +static void ADC_EnableAllFilters(ADC_Period_t *adc) +{ + for(int i = 0; i < ADC_NUMB_OF_CHANNELS; i++) + { + FILTER_GET_STATE(&adc->filter[i]) = FILTER_ENABLE; + } + FILTER_GET_STATE(&adc->temp_filter[0]) = FILTER_ENABLE; + FILTER_GET_STATE(&adc->temp_filter[1]) = FILTER_ENABLE; +} +static void ADC_InitAllFilters(ADC_Period_t *adc, int coef) +{ + for(int i = 0; i < ADC_NUMB_OF_CHANNELS; i++) + { + FilterAverageInt_Init(&adc->filter[i], coef); + } + + FilterLUTInt_Init(&adc->temp_filter[0], + (int32_t *)adc_temp_quants, + (int32_t *)adc_temp_vals, + sizeof(adc_temp_quants), 0); + FilterLUTInt_Init(&adc->temp_filter[1], + (int32_t *)adc_temp_quants, + (int32_t *)adc_temp_vals, + sizeof(adc_temp_quants), 0); +} /** * @brief Инициализация периодического АЦП. * @param adc Указатель на кастомный хендл АЦП @@ -28,6 +52,9 @@ HAL_StatusTypeDef ADC_Init(ADC_Period_t *adc, TIM_HandleTypeDef *htim, ADC_Handl adc->htim = htim; adc->hadc = hadc; + ADC_InitAllFilters(adc, 10); + + adc->f.AdcRunning = 0; adc->f.DataReady = 0; adc->f.Initialized = 1; @@ -86,6 +113,8 @@ HAL_StatusTypeDef ADC_Start(ADC_Period_t *adc, uint16_t Period) return res; } + ADC_EnableAllFilters(adc); + return res; } /** @@ -105,10 +134,10 @@ HAL_StatusTypeDef ADC_Stop(ADC_Period_t *adc) /** - * @brief Остановка АЦП . + * @brief Обработка АЦП. * @return HAL Status. * @details По факту остановка таймера, который запускает АЦП. Сам АЦП продолжает работу. - * @note Вызывается в . + * @note Вызывается в DMA2_Stream0_IRQHandler() для обработки всего, что пришло по DMA. */ HAL_StatusTypeDef ADC_Handle(ADC_Period_t *adc) { @@ -119,11 +148,31 @@ HAL_StatusTypeDef ADC_Handle(ADC_Period_t *adc) uint16_t *raw = adc->RawData; float *data = adc->Data; + // Фильтрация от шумов для всех каналов for(int i = 0; i < ADC_NUMB_OF_CHANNELS; i++) + { + if(FILTER_GET_STATE(&adc->filter[i]) == FILTER_ENABLE) + { + // заменяем сырое на отфильтровоное сырое + raw[i] = FilterAverageInt_Process(&adc->filter[i], raw[i]); + } + } + // Перерасчеты Напряжений/Токов в единицы измерения + for(int i = 0; i < ADC_TEMP_CHANNELS_START; i++) { ADC_Coefs_t *coefs = &adc->Coefs[i]; data[i] = ((float)(raw[i])-coefs->lZero) * coefs->vMax / (coefs->lMax-coefs->lZero); - } + } + + // Преобразования температуры по таблице + for (int i = ADC_TEMP_CHANNELS_START; i < ADC_NUMB_OF_CHANNELS; i++) + { + data[i] = FilterLUTInt_Process(&adc->temp_filter[i-ADC_TEMP_CHANNELS_START], raw[i]); + } + + + + adc->f.DataReady = 1; return HAL_OK; diff --git a/UPP/Core/PowerMonitor/adc_tools.h b/UPP/Core/PowerMonitor/adc_tools.h index a5923a3..fdc8234 100644 --- a/UPP/Core/PowerMonitor/adc_tools.h +++ b/UPP/Core/PowerMonitor/adc_tools.h @@ -11,7 +11,34 @@ #include "main.h" #define ADC_NUMB_OF_CHANNELS 6 +#define ADC_TEMP_CHANNELS_START 4 +#define ADC_TEMPERATURES_QUANTS \ +{ 2188, 2197, 2206, 2216, 2226, 2236, 2247, 2259, 2271, 2283, \ + 2296, 2310, 2324, 2338, 2354, 2369, 2385, 2402, 2419, 2437, \ + 2455, 2474, 2493, 2513, 2533, 2554, 2575, 2597, 2619, 2641, \ + 2664, 2688, 2711, 2735, 2759, 2784, 2809, 2833, 2859, 2884, \ + 2909, 2935, 2961, 2986, 3012, 3037, 3063, 3089, 3114, 3140, \ + 3165, 3190, 3215, 3239, 3263, 3288, 3312, 3335, 3359, 3381, \ + 3404, 3426, 3448, 3470, 3491, 3512, 3532, 3552, 3572, 3591, \ + 3610, 3628, 3646, 3663, 3681, 3697, 3714, 3729, 3745, 3760, \ + 3775, 3789, 3803, 3817, 3830, 3843, 3855, 3868, 3879, 3891, \ + 3902, 3913, 3924, 3934, 3944, 3954, 3963, 3972, 3981, 3989, \ + 3997, 4005, 4013, 4021, 4028, 4035, 4042, 4049, 4055, 4062, \ + 4068, 4074, 4079, 4085, 4091, 4096} + +#define ADC_TEMPERATURES \ +{ -25, -24, -23, -22, -21, -20, -19, -18, -17, -16, -15, -14, -13, -12, -11, \ + -10, -9, -8, -7, -6, -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, \ + 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, \ + 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, \ + 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, \ + 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; + /** * @brief Коэфициенты канала АЦП для пересчета в единицы измерения */ @@ -36,6 +63,8 @@ typedef struct ADC_Coefs_t Coefs[ADC_NUMB_OF_CHANNELS]; ///< Коэффициенты @ref ADC_Coefs_t float Data[ADC_NUMB_OF_CHANNELS]; ///< Пересчитанные значения АЦП (в Вольтах/Амперах/Градусах) + FilterAverageInt_t filter[ADC_NUMB_OF_CHANNELS]; ///< Фильтр от шумов АЦП + FilterLUTInt_t temp_filter[2]; ///< Коррекция нелинейности датчиков температуры struct { unsigned Initialized:1; diff --git a/UPP/Core/Src/tim.c b/UPP/Core/Src/tim.c index 04ec18c..d273fef 100644 --- a/UPP/Core/Src/tim.c +++ b/UPP/Core/Src/tim.c @@ -186,7 +186,7 @@ void MX_TIM8_Init(void) /* USER CODE END TIM8_Init 1 */ htim8.Instance = TIM8; - htim8.Init.Prescaler = 180-1; + htim8.Init.Prescaler = 0; htim8.Init.CounterMode = TIM_COUNTERMODE_UP; htim8.Init.Period = 1000; htim8.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; diff --git a/UPP/Core/UPP/upp_main.c b/UPP/Core/UPP/upp_main.c index d95628b..2f31926 100644 --- a/UPP/Core/UPP/upp_main.c +++ b/UPP/Core/UPP/upp_main.c @@ -43,7 +43,7 @@ int UPP_Init(void) */ int UPP_PreWhile(void) { - ADC_Start(&adc, 1000); + ADC_Start(&adc, 100); return 0; } diff --git a/UPP/MDK-ARM/UPP.uvoptx b/UPP/MDK-ARM/UPP.uvoptx index 66f3b96..e09e15c 100644 --- a/UPP/MDK-ARM/UPP.uvoptx +++ b/UPP/MDK-ARM/UPP.uvoptx @@ -611,6 +611,30 @@ 0 0 + + 6 + 33 + 1 + 0 + 0 + 0 + ..\AllLibs\MyLibs\MyLibs\Src\filters.c + filters.c + 0 + 0 + + + 6 + 34 + 5 + 0 + 0 + 0 + ..\AllLibs\MyLibs\MyLibs\Inc\filters.h + filters.h + 0 + 0 + @@ -621,7 +645,7 @@ 0 7 - 33 + 35 1 0 0 @@ -633,7 +657,7 @@ 7 - 34 + 36 1 0 0 @@ -645,7 +669,7 @@ 7 - 35 + 37 1 0 0 @@ -657,7 +681,7 @@ 7 - 36 + 38 1 0 0 @@ -669,7 +693,7 @@ 7 - 37 + 39 1 0 0 @@ -681,7 +705,7 @@ 7 - 38 + 40 1 0 0 @@ -693,7 +717,7 @@ 7 - 39 + 41 1 0 0 @@ -705,7 +729,7 @@ 7 - 40 + 42 1 0 0 @@ -717,7 +741,7 @@ 7 - 41 + 43 1 0 0 @@ -729,7 +753,7 @@ 7 - 42 + 44 1 0 0 @@ -741,7 +765,7 @@ 7 - 43 + 45 1 0 0 @@ -753,7 +777,7 @@ 7 - 44 + 46 1 0 0 @@ -773,7 +797,7 @@ 0 8 - 45 + 47 1 0 0 @@ -785,7 +809,7 @@ 8 - 46 + 48 1 0 0 @@ -805,7 +829,7 @@ 0 9 - 47 + 49 1 0 0 @@ -817,7 +841,7 @@ 9 - 48 + 50 1 0 0 @@ -829,7 +853,7 @@ 9 - 49 + 51 1 0 0 @@ -841,7 +865,7 @@ 9 - 50 + 52 1 0 0 @@ -853,7 +877,7 @@ 9 - 51 + 53 1 0 0 @@ -873,7 +897,7 @@ 0 10 - 52 + 54 1 0 0 @@ -885,7 +909,7 @@ 10 - 53 + 55 1 0 0 @@ -897,7 +921,7 @@ 10 - 54 + 56 1 0 0 @@ -909,7 +933,7 @@ 10 - 55 + 57 1 0 0 @@ -921,7 +945,7 @@ 10 - 56 + 58 1 0 0 @@ -933,7 +957,7 @@ 10 - 57 + 59 1 0 0 @@ -945,7 +969,7 @@ 10 - 58 + 60 1 0 0 @@ -957,7 +981,7 @@ 10 - 59 + 61 1 0 0 @@ -969,7 +993,7 @@ 10 - 60 + 62 1 0 0 @@ -981,7 +1005,7 @@ 10 - 61 + 63 1 0 0 @@ -993,7 +1017,7 @@ 10 - 62 + 64 1 0 0 @@ -1005,7 +1029,7 @@ 10 - 63 + 65 1 0 0 @@ -1017,7 +1041,7 @@ 10 - 64 + 66 1 0 0 @@ -1029,7 +1053,7 @@ 10 - 65 + 67 1 0 0 @@ -1041,7 +1065,7 @@ 10 - 66 + 68 1 0 0 @@ -1053,7 +1077,7 @@ 10 - 67 + 69 1 0 0 @@ -1065,7 +1089,7 @@ 10 - 68 + 70 1 0 0 @@ -1077,7 +1101,7 @@ 10 - 69 + 71 1 0 0 @@ -1089,7 +1113,7 @@ 10 - 70 + 72 1 0 0 @@ -1101,7 +1125,7 @@ 10 - 71 + 73 1 0 0 @@ -1113,7 +1137,7 @@ 10 - 72 + 74 1 0 0 @@ -1125,7 +1149,7 @@ 10 - 73 + 75 1 0 0 @@ -1137,7 +1161,7 @@ 10 - 74 + 76 1 0 0 @@ -1149,7 +1173,7 @@ 10 - 75 + 77 1 0 0 @@ -1169,7 +1193,7 @@ 0 11 - 76 + 78 1 0 0 @@ -1189,7 +1213,7 @@ 0 12 - 77 + 79 2 0 0 diff --git a/UPP/MDK-ARM/UPP.uvprojx b/UPP/MDK-ARM/UPP.uvprojx index b8ac044..fdf03ee 100644 --- a/UPP/MDK-ARM/UPP.uvprojx +++ b/UPP/MDK-ARM/UPP.uvprojx @@ -341,7 +341,7 @@ USE_HAL_DRIVER,STM32F427xx - ../Core/Inc;../Drivers/STM32F4xx_HAL_Driver/Inc;../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy;../Drivers/CMSIS/Device/ST/STM32F4xx/Include;../Drivers/CMSIS/Include;../AllLibs/ExtMemory/Inc;../AllLibs/Modbus/Inc;../AllLibs/MyLibs/MyLibs/Inc;../AllLibs/MyLibs/RTT;../AllLibs/PeriphGeneral/Inc;../Core/Configs;..\Core\PowerMonitor;..\Core\Thyristors;..\Core\UPP + ../Core/Inc;../Drivers/STM32F4xx_HAL_Driver/Inc;../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy;../Drivers/CMSIS/Device/ST/STM32F4xx/Include;../Drivers/CMSIS/Include;../AllLibs/ExtMemory/Inc;../AllLibs/Modbus/Inc;../AllLibs/MyLibs/MyLibs/Inc;../AllLibs/MyLibs/RTT;../AllLibs/PeriphGeneral/Inc;../Core/Configs;../Core/PowerMonitor;../Core/Thyristors;../Core/UPP @@ -619,6 +619,16 @@ 5 ..\AllLibs\MyLibs\MyLibs\Inc\trackers.h + + filters.c + 1 + ..\AllLibs\MyLibs\MyLibs\Src\filters.c + + + filters.h + 5 + ..\AllLibs\MyLibs\MyLibs\Inc\filters.h + diff --git a/UPP/UPP.ioc b/UPP/UPP.ioc index 817c3bc..5ea9b96 100644 --- a/UPP/UPP.ioc +++ b/UPP/UPP.ioc @@ -137,7 +137,7 @@ Mcu.Pin8=PF6 Mcu.Pin9=PF7 Mcu.PinsNb=63 Mcu.ThirdPartyNb=0 -Mcu.UserConstants=mb_huart,huart3;mbdbg_htim,htim11;mb_htim,htim12;mb_dbg_huart,huart6;ustim,htim13;mem_hspi,hspi3;hpwm1,htim1;hpwm2,htim2;PWM_CHANNEL_1,TIM_CHANNEL_1;PWM_CHANNEL_2,TIM_CHANNEL_2;PWM_CHANNEL_3,TIM_CHANNEL_3;PWM_CHANNEL_4,TIM_CHANNEL_4;PWM_CHANNEL_5,TIM_CHANNEL_3;PWM_CHANNEL_6,TIM_CHANNEL_4;adc_tim,htim8 +Mcu.UserConstants=mb_huart,huart3;mbdbg_htim,htim11;PWM_CHANNEL_1,TIM_CHANNEL_1;PWM_CHANNEL_2,TIM_CHANNEL_2;PWM_CHANNEL_3,TIM_CHANNEL_3;PWM_CHANNEL_4,TIM_CHANNEL_4;mem_hspi,hspi3;PWM_CHANNEL_5,TIM_CHANNEL_3;PWM_CHANNEL_6,TIM_CHANNEL_4;mb_htim,htim12;adc_tim,htim8;hpwm2,htim2;mb_dbg_huart,huart6;ustim,htim13;hpwm1,htim1 Mcu.UserName=STM32F427ZGTx MxCube.Version=6.12.1 MxDb.Version=DB.6.0.121 @@ -475,7 +475,7 @@ TIM3.Channel-PWM\ Generation4\ CH4=TIM_CHANNEL_4 TIM3.IPParameters=Channel-PWM Generation3 CH3,Channel-PWM Generation4 CH4 TIM8.IPParameters=Prescaler,Period,TIM_MasterSlaveMode,TIM_MasterOutputTrigger TIM8.Period=1000 -TIM8.Prescaler=180-1 +TIM8.Prescaler=0 TIM8.TIM_MasterOutputTrigger=TIM_TRGO_UPDATE TIM8.TIM_MasterSlaveMode=TIM_MASTERSLAVEMODE_DISABLE USART3.IPParameters=VirtualMode diff --git a/Информация для программиста (УПП СП СЭД)/temperature_polynom.py b/Информация для программиста (УПП СП СЭД)/temperature_polynom.py new file mode 100644 index 0000000..2d4f369 --- /dev/null +++ b/Информация для программиста (УПП СП СЭД)/temperature_polynom.py @@ -0,0 +1,204 @@ +import numpy as np +import matplotlib.pyplot as plt + +# Данные: ADC -> Temperature +adc_values = [2188, 2197, 2206, 2216, 2226, 2236, 2247, 2259, 2271, 2283, + 2296, 2310, 2324, 2338, 2354, 2369, 2385, 2402, 2419, 2437, + 2455, 2474, 2493, 2513, 2533, 2554, 2575, 2597, 2619, 2641, + 2664, 2688, 2711, 2735, 2759, 2784, 2809, 2833, 2859, 2884, + 2909, 2935, 2961, 2986, 3012, 3037, 3063, 3089, 3114, 3140, + 3165, 3190, 3215, 3239, 3263, 3288, 3312, 3335, 3359, 3381, + 3404, 3426, 3448, 3470, 3491, 3512, 3532, 3552, 3572, 3591, + 3610, 3628, 3646, 3663, 3681, 3697, 3714, 3729, 3745, 3760, + 3775, 3789, 3803, 3817, 3830, 3843, 3855, 3868, 3879, 3891, + 3902, 3913, 3924, 3934, 3944, 3954, 3963, 3972, 3981, 3989, + 3997, 4005, 4013, 4021, 4028, 4035, 4042, 4049, 4055, 4062, + 4068, 4074, 4079, 4085, 4091, 4096] + +temperatures = [-25, -24, -23, -22, -21, -20, -19, -18, -17, -16, -15, -14, -13, -12, -11, + -10, -9, -8, -7, -6, -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, + 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, + 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, + 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, + 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] + +# Параметры ограничений +MIN_COEFF_ABS = 1e-5 # Минимальное абсолютное значение коэффициента +MAX_CONDITION_NUMBER = 1e10 # Максимальное число обусловленности + +# Аппроксимация полиномами разных степеней +degrees = [2, 3, 4, 5] +coefficients = {} +filtered_coefficients = {} + +plt.figure(figsize=(16, 12)) + +# График 1: Сравнение аппроксимаций +plt.subplot(2, 3, 1) +plt.plot(adc_values, temperatures, 'ko-', markersize=3, linewidth=1, label='Исходные данные') + +colors = ['red', 'blue', 'green', 'orange'] +for i, degree in enumerate(degrees): + coeffs = np.polyfit(adc_values, temperatures, degree) + coefficients[degree] = coeffs + + # Фильтрация малых коэффициентов + filtered_coeffs = coeffs.copy() + small_coeffs_mask = np.abs(coeffs) < MIN_COEFF_ABS + filtered_coeffs[small_coeffs_mask] = 0 + filtered_coefficients[degree] = filtered_coeffs + + poly = np.poly1d(coeffs) + adc_continuous = np.linspace(min(adc_values), max(adc_values), 500) + temp_predicted = poly(adc_continuous) + + plt.plot(adc_continuous, temp_predicted, color=colors[i], linewidth=2, + label=f'Полином {degree}-й степени') + +plt.xlabel('Значение АЦП') +plt.ylabel('Температура (°C)') +plt.title('Аппроксимация зависимости АЦП → Температура') +plt.legend() +plt.grid(True, alpha=0.3) + +# График 2: Ошибки аппроксимации +plt.subplot(2, 3, 2) +for i, degree in enumerate(degrees): + poly = np.poly1d(coefficients[degree]) + predicted = poly(adc_values) + error = predicted - temperatures + + plt.plot(temperatures, error, 'o-', color=colors[i], markersize=3, + label=f'Ошибка {degree}-й степени') + +plt.xlabel('Температура (°C)') +plt.ylabel('Ошибка (°C)') +plt.title('Ошибки аппроксимации по температуре') +plt.legend() +plt.grid(True, alpha=0.3) + +# График 3: Статистика ошибок +plt.subplot(2, 3, 3) +max_errors = [] +rms_errors = [] + +for degree in degrees: + poly = np.poly1d(coefficients[degree]) + predicted = poly(adc_values) + max_error = np.max(np.abs(predicted - temperatures)) + rms_error = np.sqrt(np.mean((predicted - temperatures)**2)) + + max_errors.append(max_error) + rms_errors.append(rms_error) + +x_pos = np.arange(len(degrees)) +width = 0.35 + +plt.bar(x_pos - width/2, max_errors, width, label='Макс. ошибка', alpha=0.7) +plt.bar(x_pos + width/2, rms_errors, width, label='СКО', alpha=0.7) + +plt.xlabel('Степень полинома') +plt.ylabel('Ошибка (°C)') +plt.title('Статистика ошибок аппроксимации') +plt.xticks(x_pos, degrees) +plt.legend() +plt.grid(True, alpha=0.3) + +# График 4: Сравнение коэффициентов до/после фильтрации +plt.subplot(2, 3, 4) +for degree in degrees: + coeffs = coefficients[degree] + filtered_coeffs = filtered_coefficients[degree] + + # Отображаем только ненулевые коэффициенты + nonzero_indices = np.where(filtered_coeffs != 0)[0] + if len(nonzero_indices) > 0: + plt.semilogy(nonzero_indices, np.abs(filtered_coeffs[nonzero_indices]), 'o-', + label=f'Полином {degree}-й степени', markersize=6) + +plt.axhline(y=MIN_COEFF_ABS, color='r', linestyle='--', alpha=0.7, label=f'Порог {MIN_COEFF_ABS:.0e}') +plt.xlabel('Индекс коэффициента') +plt.ylabel('Абсолютное значение коэффициента') +plt.title('Коэффициенты после фильтрации (логарифмическая шкала)') +plt.legend() +plt.grid(True, alpha=0.3) + +# График 5: Влияние фильтрации на ошибку +plt.subplot(2, 3, 5) +original_errors = [] +filtered_errors = [] + +for degree in degrees: + poly_original = np.poly1d(coefficients[degree]) + poly_filtered = np.poly1d(filtered_coefficients[degree]) + + predicted_original = poly_original(adc_values) + predicted_filtered = poly_filtered(adc_values) + + error_original = np.max(np.abs(predicted_original - temperatures)) + error_filtered = np.max(np.abs(predicted_filtered - temperatures)) + + original_errors.append(error_original) + filtered_errors.append(error_filtered) + +x_pos = np.arange(len(degrees)) +width = 0.35 + +plt.bar(x_pos - width/2, original_errors, width, label='Оригинальные коэф.', alpha=0.7) +plt.bar(x_pos + width/2, filtered_errors, width, label='После фильтрации', alpha=0.7) + +plt.xlabel('Степень полинома') +plt.ylabel('Максимальная ошибка (°C)') +plt.title('Влияние фильтрации коэффициентов на точность') +plt.xticks(x_pos, degrees) +plt.legend() +plt.grid(True, alpha=0.3) + +plt.tight_layout() +plt.show() + +# Вывод численных результатов +print("=" * 80) +print("РЕЗУЛЬТАТЫ АППРОКСИМАЦИИ С ФИЛЬТРАЦИЕЙ КОЭФФИЦИЕНТОВ") +print("=" * 80) + +for degree in degrees: + coeffs = coefficients[degree] + filtered_coeffs = filtered_coefficients[degree] + + poly_original = np.poly1d(coeffs) + poly_filtered = np.poly1d(filtered_coeffs) + + predicted_original = poly_original(adc_values) + predicted_filtered = poly_filtered(adc_values) + + max_error_original = np.max(np.abs(predicted_original - temperatures)) + rms_error_original = np.sqrt(np.mean((predicted_original - temperatures)**2)) + + max_error_filtered = np.max(np.abs(predicted_filtered - temperatures)) + rms_error_filtered = np.sqrt(np.mean((predicted_filtered - temperatures)**2)) + + # Подсчет нулевых коэффициентов + zero_count = np.sum(filtered_coeffs == 0) + total_count = len(filtered_coeffs) + + print(f"\nПолином {degree}-й степени:") + print(f"Максимальная ошибка: {max_error_original:.3f}°C -> {max_error_filtered:.3f}°C") + print(f"Среднеквадратичная ошибка: {rms_error_original:.3f}°C -> {rms_error_filtered:.3f}°C") + print(f"Обнулено коэффициентов: {zero_count}/{total_count}") + + print("Коэффициенты после фильтрации:") + for i, coeff in enumerate(filtered_coeffs): + power = len(filtered_coeffs) - i - 1 + status = "✓" if coeff != 0 else "✗ (обнулен)" + print(f" a_{power} = {coeff:.6e} {status}") + +# Рекомендация +print("\n" + "=" * 80) +print("РЕКОМЕНДАЦИЯ:") +print(f"Порог обнуления коэффициентов: {MIN_COEFF_ABS:.0e}") +print("Полином 3-й степени обеспечивает оптимальный баланс между точностью") +print("и сложностью реализации. Фильтрация малых коэффициентов практически") +print("не влияет на точность, но упрощает реализацию на embedded системах.") +print("=" * 80) \ No newline at end of file diff --git a/Информация для программиста (УПП СП СЭД)/Значения температуры в ед АЦП.xlsx b/Информация для программиста (УПП СП СЭД)/Значения температуры в ед АЦП.xlsx index 392e4758e1dd795523a11a9a764ca9595e4d6c05..ccdc5170ce5e61f9a6d92579abe1689ac97f9e39 100644 GIT binary patch delta 12601 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