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 @@