From 8e75c38c90abf3625868998d3bd19e51285ce859 Mon Sep 17 00:00:00 2001 From: Razvalyaev Date: Mon, 19 Jan 2026 17:21:37 +0300 Subject: [PATCH] =?UTF-8?q?=D0=A4=D0=B8=D0=BA=D1=81=D1=8B=20=D0=BF=D0=BE?= =?UTF-8?q?=D1=81=D0=BB=D0=B5=20=D1=80=D0=B5=D1=84=D0=B0=D0=BA=D1=82=D0=BE?= =?UTF-8?q?=D1=80=D0=B8=D0=BD=D0=B3=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- UPP/Core/Configs/upp_config.h | 4 ++-- UPP/Core/Configs/upp_defs.h | 30 +++++++++++++-------------- UPP/Core/PowerMonitor/adc_tools.c | 10 +++++---- UPP/Core/PowerMonitor/power_monitor.c | 17 ++++++++------- UPP/Core/UPP/angle_control.c | 5 ++--- UPP/MDK-ARM/UPP.uvoptx | 18 +++++++--------- 6 files changed, 42 insertions(+), 42 deletions(-) diff --git a/UPP/Core/Configs/upp_config.h b/UPP/Core/Configs/upp_config.h index 479352a..7ef6765 100644 --- a/UPP/Core/Configs/upp_config.h +++ b/UPP/Core/Configs/upp_config.h @@ -27,7 +27,7 @@ #define UPP_DISABLE_PROTECT_BOARDPOWER ///< Отключить проверки питания плат (+24, +5 В) #define UPP_DISABLE_PROTECT_LOSS_PHASE ///< Отключить проверки на потерянные фазы -#define ZC_DISABLE_HYSTERESIS_DEBOUNCE ///< Отключить гиситерезис и дребезг на определении перехода через ноль +//#define ZC_DISABLE_HYSTERESIS_DEBOUNCE ///< Отключить гиситерезис и дребезг на определении перехода через ноль /** //UPP_PARAMS_TEST * @} @@ -172,7 +172,7 @@ #undef UPP_INIT_BEFORE_READY_MS -#define UPP_INIT_BEFORE_READY_MS 100 ///< Сколько сканировать сеть, перед выставлением состояния готовности +#define UPP_INIT_BEFORE_READY_MS 300 ///< Сколько сканировать сеть, перед выставлением состояния готовности #endif //defined(MATLAB) diff --git a/UPP/Core/Configs/upp_defs.h b/UPP/Core/Configs/upp_defs.h index a256971..f37f589 100644 --- a/UPP/Core/Configs/upp_defs.h +++ b/UPP/Core/Configs/upp_defs.h @@ -79,19 +79,19 @@ typedef enum { * @brief Структура данных от УПП передаваемых в ПУИ */ typedef struct { - uint16_t Error; /** @brief Текущая авария + uint16_t Error; /** @brief Адрес 0: Текущая авария @details В случае срабатывания защиты */ - uint16_t WorkMode; /** @brief Режим работы + uint16_t WorkMode; /** @brief Адрес 1: Режим работы @details «Готовность» или «Работа» */ - uint16_t Voltage; /** @brief Напряжение на входе УПП, Вольты */ + uint16_t Voltage; /** @brief Адрес 2: Напряжение на входе УПП, Вольты */ - uint16_t Current; /** @brief Ток на входе УПП, Амперы */ + uint16_t Current; /** @brief Адрес 3: Ток на входе УПП, Амперы */ - uint16_t Frequency; /** @brief Частота напряжения на входе УПП */ + uint16_t Frequency; /** @brief Адрес 4: Частота напряжения на входе УПП */ - uint16_t Temperature; /** @brief Температура радиатора тиристоров, Градусы Цельсия */ + uint16_t Temperature; /** @brief Адрес 5: Температура радиатора тиристоров, Градусы Цельсия */ } UPP_PUI_Values_t; /** @@ -100,39 +100,39 @@ typedef struct { * @note Защиты №X приведены в @ref UPP_ErrorType_t */ typedef struct { - uint16_t Iref; /** @brief Уставка ограничения тока УПП + uint16_t Iref; /** @brief Адрес 0: Уставка ограничения тока УПП @details В диапазоне от 100 % до 500 % от Iн = 5 А По умолчанию – @ref PUI_Iref_PERCENT_DEFAULT */ - uint16_t Tnt; /** @brief Уставка времени нарастания заданного тока + uint16_t Tnt; /** @brief Адрес 1: Уставка времени нарастания заданного тока @details В диапазоне от 50 до 5000 мс. По умолчанию – @ref PUI_Tnt_MS_DEFAULT */ - uint16_t Umin; /** @brief Уставка защиты №15 от понижения напряжения входной сети + uint16_t Umin; /** @brief Адрес 2: Уставка защиты №15 от понижения напряжения входной сети @details В диапазоне от 5% до 99 % от Uн = 690 В. По умолчанию – @ref PUI_Umin_PERCENT_DEFAULT */ - uint16_t Umax; /** @brief Уставка защиты №13 от повышения напряжения входной сети + uint16_t Umax; /** @brief Адрес 3: Уставка защиты №13 от повышения напряжения входной сети @details В диапазоне от 100% до 120 % от Uн = 690 В. По умолчанию – @ref PUI_Umax_PERCENT_DEFAULT */ - uint16_t Imax; /** @brief Уставка защиты №12 по току + uint16_t Imax; /** @brief Адрес 4: Уставка защиты №12 по току @details В диапазоне от 5 % до 99 % от 50 А. По умолчанию – @ref PUI_Imax_PERCENT_DEFAULT */ - uint16_t Imin; /** @brief Уставка защит № 16 – №19 от обрыва фаз(ы) + uint16_t Imin; /** @brief Адрес 5: Уставка защит № 16 – №19 от обрыва фаз(ы) @details В диапазоне от 0 % до 40 % от Iн = 5 А. При задании нуля эти защиты отключаются. По умолчанию – @ref PUI_Imin_PERCENT_DEFAULT */ - uint16_t TiMax; /** @brief Выдержка времени на срабатывание защиты № 12 по току + uint16_t TiMax; /** @brief Адрес 6: Выдержка времени на срабатывание защиты № 12 по току @details В диапазоне от 500 до 10000 мкс. По умолчанию – @ref PUI_TiMax_US_DEFAULT */ - uint16_t Tdelay; /** @brief Выдержка времени защиты № 20 от затянутого пуска + uint16_t Tdelay; /** @brief Адрес 7: Выдержка времени защиты № 20 от затянутого пуска @details В диапазоне от 5 до 60 с. По умолчанию – @ref PUI_Tdelay_SECONDS_DEFAULT */ - uint16_t Interlace; /** @brief Разрешение защиты № 21 от обратного порядка чередования фаз; + uint16_t Interlace; /** @brief Адрес 8: Разрешение защиты № 21 от обратного порядка чередования фаз; @details 0 – нет защиты, 1 – есть защита. По умолчанию – @ref PUI_Interlace_EN_DEFAULT */ } UPP_PUI_Params_t; diff --git a/UPP/Core/PowerMonitor/adc_tools.c b/UPP/Core/PowerMonitor/adc_tools.c index d48f3bd..0107ea1 100644 --- a/UPP/Core/PowerMonitor/adc_tools.c +++ b/UPP/Core/PowerMonitor/adc_tools.c @@ -29,13 +29,13 @@ static void ADC_InitAllFilters(ADC_Periodic_t *adc) for(int i = 0; i < 2; i++) { FilterBandPassDerivative_Init(&adc->u_fltr[i], (50.0f*PM_FAST_PERIOD_US/1000000), 0.1); - FilterMedianInt_Init(&adc->i_fltr[I_C], 5, 2048); + FilterMedianInt_Init(&adc->i_fltr[i], 5, 2048); FilterLUT_Init(&adc->temp_map[i], (float *)adc_temp_quants, (float *)adc_temp_vals, numbof(adc_temp_quants), 1); } - + // Запуск фильтров for(int i = 0; i < 2; i++) { @@ -167,8 +167,10 @@ HAL_StatusTypeDef ADC_UpdateRegular(ADC_Periodic_t *adc) int u_ind = ADC_U_CHANNELS_START + i; int i_ind = ADC_I_CHANNELS_START + i; // заменяем сырые данные на отфильтрованные данные - raw[u_ind] = Filter_Process(&adc->u_fltr[i], raw[u_ind]); - raw[i_ind] = Filter_Process(&adc->i_fltr[i], raw[i_ind]); + int raw_u = Filter_Process(&adc->u_fltr[i], (int)raw[u_ind]-2048); + int raw_i = Filter_Process(&adc->i_fltr[i], raw[i_ind]); + raw[u_ind] = raw_u+2048; + raw[i_ind] = raw_i; } // Перерасчеты Напряжений/Токов в единицы измерения diff --git a/UPP/Core/PowerMonitor/power_monitor.c b/UPP/Core/PowerMonitor/power_monitor.c index 7c82bcc..219aa08 100644 --- a/UPP/Core/PowerMonitor/power_monitor.c +++ b/UPP/Core/PowerMonitor/power_monitor.c @@ -71,10 +71,10 @@ HAL_StatusTypeDef PowerMonitor_Init(PowerMonitor_t *hpm) /* Инициализация фильтра для сглаживания синусоиды*/ for(int i = 0; i < 2; i++) { - if(FilterBandPassDerivative_Init(&hpm->ufltr[i], (50.0f*PM_FAST_PERIOD_US/1000000), 0.1)) - return HAL_ERROR; - - Filter_Start(&hpm->ufltr[i]); +// if(FilterBandPassDerivative_Init(&hpm->ufltr[i], (50.0f*PM_FAST_PERIOD_US/1000000), 0.1)) +// return HAL_ERROR; +// +// Filter_Start(&hpm->ufltr[i]); } @@ -142,6 +142,7 @@ void PowerMonitor_SlowCalc(PowerMonitor_t *hpm) /* Средниее напряжение фазы */ uphase_mean = Filter_Process(&hpm->rms[RMS_U+i], meas->slow.U[i]); meas->final.U[i] = Filter_Process(&hpm->rms_exp[RMS_U+i], uphase_mean); + umean += meas->final.U[i]; /* Средний ток фазы */ iphase_mean = Filter_Process(&hpm->rms[RMS_I+i], meas->slow.I[i]); @@ -196,10 +197,10 @@ void PowerMonitor_FastCalc(PowerMonitor_t *hpm) ADC_UpdateRegular(&hpm->adc); /* Заполняем Напряжения/Токи в о.е. */ - float uba_fast = hpm->adc.Data[ADC_CHANNEL_UBA]/u_base; - float uac_fast = hpm->adc.Data[ADC_CHANNEL_UAC]/u_base; - meas->fast.U[U_AB] = Filter_Process(&hpm->ufltr[U_AB], uba_fast); - meas->fast.U[U_CA] = Filter_Process(&hpm->ufltr[U_CA], uac_fast); + meas->fast.U[U_AB] = hpm->adc.Data[ADC_CHANNEL_UBA]/u_base; + meas->fast.U[U_CA] = hpm->adc.Data[ADC_CHANNEL_UAC]/u_base; +// meas->fast.U[U_AB] = Filter_Process(&hpm->ufltr[U_AB], uba_fast); +// meas->fast.U[U_CA] = Filter_Process(&hpm->ufltr[U_CA], uac_fast); meas->fast.U[U_BC] = U_BC_calc(meas->fast.U[U_AB], meas->fast.U[U_CA]); meas->fast.I[I_C] = hpm->adc.Data[ADC_CHANNEL_IC]/i_base; diff --git a/UPP/Core/UPP/angle_control.c b/UPP/Core/UPP/angle_control.c index 83bd375..875ed88 100644 --- a/UPP/Core/UPP/angle_control.c +++ b/UPP/Core/UPP/angle_control.c @@ -146,11 +146,10 @@ HAL_StatusTypeDef Angle_SetAlpha(Angle_Handle_t *hangle, float Alpha, float Corr { if(assert_upp(hangle)) return HAL_ERROR; - - - + if(Alpha > hangle->Config.AngleMax) Alpha = hangle->Config.AngleMax; + if(Alpha < hangle->Config.AngleMin) Alpha = hangle->Config.AngleMin; diff --git a/UPP/MDK-ARM/UPP.uvoptx b/UPP/MDK-ARM/UPP.uvoptx index ad710d7..2b61035 100644 --- a/UPP/MDK-ARM/UPP.uvoptx +++ b/UPP/MDK-ARM/UPP.uvoptx @@ -280,7 +280,7 @@ 1 0 0 - 6 + 4 @@ -291,9 +291,14 @@ - STLink\ST-LINKIII-KEIL_SWO.dll + Segger\JL2CM3.dll + + 0 + JL2CM3 + -U60145553 -O14 -S2 -ZTIFSpeedSel5000 -A0 -C0 -JU1 -JI127.0.0.1 -JP0 -RST0 -N00("ARM CoreSight JTAG-DP") -D00(4BA00477) -L00(4) -N01("Unknown JTAG device") -D01(06413041) -L01(5) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -TB1 -TFE0 -FO7 -FD20000000 -FC1000 -FN1 -FF0STM32F4xx_1024.FLM -FS08000000 -FL0100000 -FP0($$Device:STM32F417ZGTx$CMSIS\Flash\STM32F4xx_1024.FLM) + 0 ARMRTXEVENTFLAGS @@ -312,7 +317,7 @@ 0 DLGUARM - (105=-1,-1,-1,-1,0) + 0 @@ -552,13 +557,6 @@ - - - 0 - `upp.pm.measured.final.U[0] - 008000000000000000000000000000000000F03F000000000000000000000000000000007570702E706D2E6D656173757265642E66696E616C2E555B305D0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000700000001000000000000000000F03F140000000000000000000000000000000000000020B20008 - - System Viewer\ADC3