diff --git a/UPP/Core/Configs/upp_config.h b/UPP/Core/Configs/upp_config.h index a5a39f2..02aa3ec 100644 --- a/UPP/Core/Configs/upp_config.h +++ b/UPP/Core/Configs/upp_config.h @@ -31,8 +31,10 @@ #define TEMP_2 1 -#define UPP_DISABLE_ERROR_BLOCK ///< Отключить блокировку УПП при ошибках +//#define UPP_DISABLE_ERROR_BLOCK ///< Отключить блокировку УПП при ошибках #define UPP_SIMULATE_I ///< Симулировт токи (Iref/2) а не брать с АЦП +#define UPP_DISABLE_PROTECT_BOARDPOWER ///< Отключить проверки питания плат (+24, +5 В) +#define UPP_DISABLE_PROTECT_LOSS_PHASE ///< Отключить проверки на потерянные фазы /** * @addtogroup UPP_PARAMS_DEFAULT Default params for external flash @@ -49,7 +51,7 @@ /* Номинальные параметры */ #define NOM_PHASE_NUMB 3 -#define NOM_U_V_DEFAULT 690 +#define NOM_U_V_DEFAULT 1216 #define NOM_U_DEVIATION_PLUS_PERCENT_DEFAULT 6 #define NOM_U_DEVIATION_MINUS_PERCENT_DEFAULT 10 #define NOM_F_HZ_DEFAULT 50 @@ -78,13 +80,13 @@ #define ANGLE_PULSE_LENGTH_RESERVE_PERCENT_DEFAULT 1.0 #define ANGLE_MAX_PERCENT_DEFAULT 0.8 #define ANGLE_MIN_PERCENT_DEFAULT 0.1 -#define ANGLE_PID_KP_COEF_DEFAULT 1.0 -#define ANGLE_PID_KI_COEF_DEFAULT 0.01 +#define ANGLE_PID_KP_COEF_DEFAULT 0.0001 +#define ANGLE_PID_KI_COEF_DEFAULT 0.0001 #define ANGLE_PID_KD_COEF_DEFAULT 0 -#define ANGLE_REF_ALPHA_COEF_DEFAULT 0.0001 +#define ANGLE_REF_TAU_COEF_DEFAULT 20.0 /* Параметри мониторинга сети */ -#define PM_EXP_ALPHA_COEF_DEFAULT 0.01 +#define PM_EXP_TAU_COEF_DEFAULT 0.05 /* Параметры АЦП */ #define ADC_U_MAX_V_DEFAULT 1216.0 diff --git a/UPP/Core/Configs/upp_defs.h b/UPP/Core/Configs/upp_defs.h index 6520ea4..dd055dc 100644 --- a/UPP/Core/Configs/upp_defs.h +++ b/UPP/Core/Configs/upp_defs.h @@ -155,11 +155,11 @@ typedef struct { #define MS_TO_SLOW_TICKS(_ms_) US_TO_SLOW_TICKS((_ms_)*1000) #define PM_F_SLOW_PERIOD_CNT (MS_TO_SLOW_TICKS(PM_F_SLOW_PERIOD_MS)) ///< Период обновления частоты в тиках @ref PM_SLOW_PERIOD_CNT - /* Перерасчеты в тики */ #define ANGLE_PERIOD_MS(_freq_) (((float)1/(_freq_*2))*1000) ///< Период обновления частоты в тиках @ref PM_SLOW_PERIOD_CNT - +/* Расчет коэффициента альфа для экспоненциального фильтра */ +#define CALC_TAU_COEF(tau, TsUs) (((float)TsUs/1000000) / (((float)TsUs/1000000) + (tau))) /* Дефайны для "удобного" доступа к структурам */ #define PARAM_INTERNAL MB_INTERNAL.param diff --git a/UPP/Core/Inc/main.h b/UPP/Core/Inc/main.h index dc1f029..e801199 100644 --- a/UPP/Core/Inc/main.h +++ b/UPP/Core/Inc/main.h @@ -176,6 +176,18 @@ void Error_Handler(void); /* USER CODE BEGIN Private defines */ extern TIM_HandleTypeDef ustim; void SystemClock_Config_STM32F417(void); +#if defined(STM32F417xx) + +#undef ERR_24V_GPIO_Port +#undef ERR_24V_Pin +#undef DIN1_GPIO_Port +#undef DIN1_Pin +#define ERR_24V_Pin GPIO_PIN_15 +#define ERR_24V_GPIO_Port GPIOG +#define DIN1_Pin GPIO_PIN_12 +#define DIN1_GPIO_Port GPIOG + +#endif /* USER CODE END Private defines */ #ifdef __cplusplus diff --git a/UPP/Core/Src/gpio.c b/UPP/Core/Src/gpio.c index 8d3dd37..510898c 100644 --- a/UPP/Core/Src/gpio.c +++ b/UPP/Core/Src/gpio.c @@ -147,11 +147,17 @@ void MX_GPIO_Init(void) GPIO_InitStruct.Pull = GPIO_NOPULL; HAL_GPIO_Init(GPIOD, &GPIO_InitStruct); - /*Configure GPIO pins : PGPin PGPin */ - GPIO_InitStruct.Pin = ERR_24V_Pin|DIN1_Pin; + /*Configure GPIO pin : PtPin */ + GPIO_InitStruct.Pin = ERR_24V_Pin; GPIO_InitStruct.Mode = GPIO_MODE_INPUT; GPIO_InitStruct.Pull = GPIO_NOPULL; - HAL_GPIO_Init(GPIOG, &GPIO_InitStruct); + HAL_GPIO_Init(ERR_24V_GPIO_Port, &GPIO_InitStruct); + + /*Configure GPIO pin : PtPin */ + GPIO_InitStruct.Pin = DIN1_Pin; + GPIO_InitStruct.Mode = GPIO_MODE_INPUT; + GPIO_InitStruct.Pull = GPIO_PULLUP; + HAL_GPIO_Init(DIN1_GPIO_Port, &GPIO_InitStruct); } diff --git a/UPP/Core/Src/main.c b/UPP/Core/Src/main.c index 89df5ce..3bca677 100644 --- a/UPP/Core/Src/main.c +++ b/UPP/Core/Src/main.c @@ -25,6 +25,7 @@ #include "spi.h" #include "tim.h" #include "usart.h" +#include "gpio.h" /* Private includes ----------------------------------------------------------*/ /* USER CODE BEGIN Includes */ @@ -102,6 +103,7 @@ int main(void) /* USER CODE END SysInit */ /* Initialize all configured peripherals */ + MX_GPIO_Init(); MX_DMA_Init(); MX_ADC3_Init(); MX_USART3_UART_Init(); diff --git a/UPP/Core/UPP/upp_errors.c b/UPP/Core/UPP/upp_errors.c index 7762958..0afb1c0 100644 --- a/UPP/Core/UPP/upp_errors.c +++ b/UPP/Core/UPP/upp_errors.c @@ -33,11 +33,15 @@ void UPP_Errors_Handle(void) /*====== Программные ошибки ======*/ UPP_Errors_Program(); /*====== Ошибки питания плат ======*/ +#ifndef UPP_DISABLE_PROTECT_BOARDPOWER UPP_Errors_Power(); +#endif /*====== Ошибки выхода за допустимые пределы ======*/ UPP_Errors_Ranges(); /*====== Потери фазы ======*/ +#ifndef UPP_DISABLE_PROTECT_LOSS_PHASE UPP_Errors_LossPhase(); +#endif /*====== Остальные ======*/ UPP_Errors_Other(); diff --git a/UPP/Core/UPP/upp_main.c b/UPP/Core/UPP/upp_main.c index 030cf3b..9c1f662 100644 --- a/UPP/Core/UPP/upp_main.c +++ b/UPP/Core/UPP/upp_main.c @@ -15,7 +15,7 @@ UPP_t upp; HAL_StatusTypeDef res; // сюда сохраняется результат от выполения всяких функций -float dbg_iref = 1; +float dbg_iref = 2; int dbg_polarity = 0; /** @@ -89,12 +89,20 @@ int UPP_While(void) BenchTime_Start(BT_SLOWCALC, angletim.Instance->CNT, HAL_MAX_DELAY); res = HAL_IWDG_Refresh(&hiwdg); // Медленные расчеты - PowerMonitor_SlowCalc(&upp.pm); - // Защиты // Определенные защиты включаем только в режиме работы - PowerMonitor_Protect(&upp.pm, upp.workmode == UPP_Work); - - // если ошибка вызываем СТОП + PowerMonitor_SlowCalc(&upp.pm); + +#ifdef UPP_SIMULATE_I // симулируем токи + upp.pm.measured.final.Iamp = upp.hangle.Iref/2; + // Защиты // При симуляции тока не включаем его проверку + PowerMonitor_Protect(&upp.pm, 0); +#else + // Защиты // Определенные защиты по току включаем только в после разгона + PowerMonitor_Protect(&upp.pm, (fabsf(upp.hangle.Iref - dbg_iref) < 0.1)); +#endif + + #ifndef UPP_DISABLE_ERROR_BLOCK + // если ошибка вызываем СТОП upp.call->stop = (errors.common != Err_None); #endif @@ -159,12 +167,9 @@ int UPP_While(void) if (!upp.call->go) upp.workmode = UPP_Init; - // Регулирование тиристоров -#ifndef UPP_SIMULATE_I // берем с АЦП + // Регулирование тиристоров Angle_PID(&upp.hangle, dbg_iref, upp.pm.measured.final.Iamp); -#else // симулируем - Angle_PID(&upp.hangle, dbg_iref, upp.hangle.Iref/2); -#endif + // если слишком долгий запуск if((local_time() - upp.StartTick) > (upp.PUI.params->Tdelay*1000)) { @@ -220,7 +225,16 @@ void UPP_Tick(void) // Обрабока ошибок и выставление итоговой Ошибки UPP_Errors_Handle(); // - UPP_Params_ControlInternal(); + UPP_Params_ControlInternal(); + + if(GPIO_Read_Switch(&UPP_DIN.Pusk)) + { + upp.call->go = 1; + } + else + { + upp.call->go = 0; + } } diff --git a/UPP/Core/UPP/upp_params.c b/UPP/Core/UPP/upp_params.c index cf41e0f..e1530e7 100644 --- a/UPP/Core/UPP/upp_params.c +++ b/UPP/Core/UPP/upp_params.c @@ -215,7 +215,7 @@ void UPP_Params_SetDefault(int pui_default, int internal_default) PARAM_INTERNAL.nominal.F_deviation_minus = NOM_F_DEVIATION_MINUS_PERCENT_DEFAULT*100; PARAM_INTERNAL.nominal.I = NOM_I_A_DEFAULT*10; - PARAM_INTERNAL.pm.mean_alpha = PM_EXP_ALPHA_COEF_DEFAULT*65535; + PARAM_INTERNAL.pm.mean_alpha = CALC_TAU_COEF(PM_EXP_TAU_COEF_DEFAULT,PM_SLOW_PERIOD_US)*65535; PARAM_INTERNAL.adc.ADC_Max[ADC_CHANNEL_UBA] = ADC_U_MAX_V_DEFAULT*10; PARAM_INTERNAL.adc.ADC_Max[ADC_CHANNEL_UAC] = ADC_U_MAX_V_DEFAULT*10; @@ -237,7 +237,7 @@ void UPP_Params_SetDefault(int pui_default, int internal_default) PARAM_INTERNAL.angle.PID_Kp = ANGLE_PID_KP_COEF_DEFAULT*10000; PARAM_INTERNAL.angle.PID_Ki = ANGLE_PID_KI_COEF_DEFAULT*10000; PARAM_INTERNAL.angle.PID_Kd = ANGLE_PID_KD_COEF_DEFAULT*10000; - PARAM_INTERNAL.angle.PID_ExpAlpha = ANGLE_REF_ALPHA_COEF_DEFAULT*65535; + PARAM_INTERNAL.angle.PID_ExpAlpha = CALC_TAU_COEF(ANGLE_REF_TAU_COEF_DEFAULT,PM_SLOW_PERIOD_US)*65535; PARAM_INTERNAL.angle.Angle_Max = ANGLE_MAX_PERCENT_DEFAULT*65535; PARAM_INTERNAL.angle.Angle_Min = ANGLE_MIN_PERCENT_DEFAULT*65535; PARAM_INTERNAL.angle.PulseLengthReserve = ANGLE_PULSE_LENGTH_RESERVE_PERCENT_DEFAULT*100; diff --git a/UPP/MDK-ARM/UPP.uvoptx b/UPP/MDK-ARM/UPP.uvoptx index 3581068..3c683fb 100644 --- a/UPP/MDK-ARM/UPP.uvoptx +++ b/UPP/MDK-ARM/UPP.uvoptx @@ -347,7 +347,7 @@ 0 136 1 -
134256008
+
134256304
0 0 0 @@ -429,30 +429,20 @@ 10 1 - upp.call->reset_mcu + upp.pm.zc.Channel[0].HalfWave 11 1 - upp.pm.zc.Channel[0].HalfWave + \\Debug_F417\../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c\uwTick 12 1 - upp.call->reserved - - - 13 - 1 - \\Debug_F417\../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c\uwTick - - - 14 - 1 htim1 - 15 + 13 1 htim2 @@ -518,6 +508,11 @@ 2 iref_dbg + + 12 + 2 + upp.pm.measured.slow.U[0] + 0 @@ -539,7 +534,7 @@ 0 0 0 - 0 + 1 0 0 0 @@ -573,6 +568,10 @@ System Viewer\DBG 35902 + + System Viewer\GPIOG + 35899 + System Viewer\TIM1 35901 diff --git a/UPP/UPP.ioc b/UPP/UPP.ioc index 9245df5..322dd2f 100644 --- a/UPP/UPP.ioc +++ b/UPP/UPP.ioc @@ -358,8 +358,9 @@ PG12.GPIOParameters=GPIO_Label PG12.GPIO_Label=ERR_24V PG12.Locked=true PG12.Signal=GPIO_Input -PG15.GPIOParameters=GPIO_Label +PG15.GPIOParameters=GPIO_PuPd,GPIO_Label PG15.GPIO_Label=DIN1 +PG15.GPIO_PuPd=GPIO_PULLUP PG15.Locked=true PG15.Signal=GPIO_Input PG6.GPIOParameters=GPIO_PuPd,GPIO_Label @@ -402,7 +403,7 @@ ProjectManager.ToolChainLocation= ProjectManager.UAScriptAfterPath= ProjectManager.UAScriptBeforePath= ProjectManager.UnderRoot=false -ProjectManager.functionlistsort=1-SystemClock_Config-RCC-false-HAL-false,2-MX_GPIO_Init-GPIO-true-HAL-true,3-MX_DMA_Init-DMA-false-HAL-true,4-MX_ADC3_Init-ADC3-false-HAL-true,5-MX_USART3_UART_Init-USART3-false-HAL-true,6-MX_CAN1_Init-CAN1-false-HAL-true,7-MX_IWDG_Init-IWDG-false-HAL-true,8-MX_RTC_Init-RTC-true-HAL-true,9-MX_TIM1_Init-TIM1-false-HAL-true,10-MX_TIM3_Init-TIM3-false-HAL-true,11-MX_USART6_UART_Init-USART6-false-HAL-true,12-MX_SPI3_Init-SPI3-false-HAL-true,13-MX_TIM11_Init-TIM11-false-HAL-true,14-MX_TIM12_Init-TIM12-false-HAL-true,15-MX_TIM8_Init-TIM8-false-HAL-true,16-MX_TIM5_Init-TIM5-false-HAL-true,17-MX_TIM2_Init-TIM2-false-HAL-true +ProjectManager.functionlistsort=1-SystemClock_Config-RCC-false-HAL-false,2-MX_GPIO_Init-GPIO-false-HAL-true,3-MX_DMA_Init-DMA-false-HAL-true,4-MX_ADC3_Init-ADC3-false-HAL-true,5-MX_USART3_UART_Init-USART3-false-HAL-true,6-MX_CAN1_Init-CAN1-false-HAL-true,7-MX_IWDG_Init-IWDG-false-HAL-true,8-MX_RTC_Init-RTC-true-HAL-true,9-MX_TIM1_Init-TIM1-false-HAL-true,10-MX_TIM3_Init-TIM3-false-HAL-true,11-MX_USART6_UART_Init-USART6-false-HAL-true,12-MX_SPI3_Init-SPI3-false-HAL-true,13-MX_TIM11_Init-TIM11-false-HAL-true,14-MX_TIM12_Init-TIM12-false-HAL-true,15-MX_TIM8_Init-TIM8-false-HAL-true,16-MX_TIM5_Init-TIM5-false-HAL-true,17-MX_TIM2_Init-TIM2-false-HAL-true RCC.48MHZClocksFreq_Value=90000000 RCC.AHBFreq_Value=180000000 RCC.APB1CLKDivider=RCC_HCLK_DIV4 diff --git a/Информация для программиста (УПП СП СЭД)/MATLAB_CALC/untitled.m b/Информация для программиста (УПП СП СЭД)/MATLAB_CALC/untitled.m new file mode 100644 index 0000000..8830ba8 --- /dev/null +++ b/Информация для программиста (УПП СП СЭД)/MATLAB_CALC/untitled.m @@ -0,0 +1,11 @@ +clc +clear all + + +alpha = 0.01 +ts = 500; + +tau = (ts/1000000) * (1-alpha)/alpha + + +alpha2 = ts/1000000 / (ts/1000000 + tau ) \ No newline at end of file