Коэфы альфа в дефолтах проставлены чтобы были независимыми от частоты дискретизации и всякое другое
This commit is contained in:
parent
21379c6188
commit
925bfbe01e
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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);
|
||||
|
||||
}
|
||||
|
||||
|
||||
@ -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();
|
||||
|
||||
@ -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();
|
||||
|
||||
|
||||
@ -15,7 +15,7 @@
|
||||
|
||||
UPP_t upp;
|
||||
HAL_StatusTypeDef res; // сюда сохраняется результат от выполения всяких функций
|
||||
float dbg_iref = 1;
|
||||
float dbg_iref = 2;
|
||||
int dbg_polarity = 0;
|
||||
|
||||
/**
|
||||
@ -90,11 +90,19 @@ int UPP_While(void)
|
||||
res = HAL_IWDG_Refresh(&hiwdg);
|
||||
// Медленные расчеты
|
||||
PowerMonitor_SlowCalc(&upp.pm);
|
||||
// Защиты // Определенные защиты включаем только в режиме работы
|
||||
PowerMonitor_Protect(&upp.pm, upp.workmode == UPP_Work);
|
||||
|
||||
// если ошибка вызываем СТОП
|
||||
#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
|
||||
|
||||
@ -160,11 +168,8 @@ int UPP_While(void)
|
||||
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))
|
||||
{
|
||||
@ -221,6 +226,15 @@ void UPP_Tick(void)
|
||||
UPP_Errors_Handle();
|
||||
//
|
||||
UPP_Params_ControlInternal();
|
||||
|
||||
if(GPIO_Read_Switch(&UPP_DIN.Pusk))
|
||||
{
|
||||
upp.call->go = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
upp.call->go = 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -347,7 +347,7 @@
|
||||
<Type>0</Type>
|
||||
<LineNumber>136</LineNumber>
|
||||
<EnabledFlag>1</EnabledFlag>
|
||||
<Address>134256008</Address>
|
||||
<Address>134256304</Address>
|
||||
<ByteObject>0</ByteObject>
|
||||
<HtxType>0</HtxType>
|
||||
<ManyObjects>0</ManyObjects>
|
||||
@ -429,30 +429,20 @@
|
||||
<Ww>
|
||||
<count>10</count>
|
||||
<WinNumber>1</WinNumber>
|
||||
<ItemText>upp.call->reset_mcu</ItemText>
|
||||
<ItemText>upp.pm.zc.Channel[0].HalfWave</ItemText>
|
||||
</Ww>
|
||||
<Ww>
|
||||
<count>11</count>
|
||||
<WinNumber>1</WinNumber>
|
||||
<ItemText>upp.pm.zc.Channel[0].HalfWave</ItemText>
|
||||
<ItemText>\\Debug_F417\../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c\uwTick</ItemText>
|
||||
</Ww>
|
||||
<Ww>
|
||||
<count>12</count>
|
||||
<WinNumber>1</WinNumber>
|
||||
<ItemText>upp.call->reserved</ItemText>
|
||||
</Ww>
|
||||
<Ww>
|
||||
<count>13</count>
|
||||
<WinNumber>1</WinNumber>
|
||||
<ItemText>\\Debug_F417\../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c\uwTick</ItemText>
|
||||
</Ww>
|
||||
<Ww>
|
||||
<count>14</count>
|
||||
<WinNumber>1</WinNumber>
|
||||
<ItemText>htim1</ItemText>
|
||||
</Ww>
|
||||
<Ww>
|
||||
<count>15</count>
|
||||
<count>13</count>
|
||||
<WinNumber>1</WinNumber>
|
||||
<ItemText>htim2</ItemText>
|
||||
</Ww>
|
||||
@ -518,6 +508,11 @@
|
||||
<WinNumber>2</WinNumber>
|
||||
<ItemText>iref_dbg</ItemText>
|
||||
</Ww>
|
||||
<Ww>
|
||||
<count>12</count>
|
||||
<WinNumber>2</WinNumber>
|
||||
<ItemText>upp.pm.measured.slow.U[0]</ItemText>
|
||||
</Ww>
|
||||
</WatchWindow2>
|
||||
<Tracepoint>
|
||||
<THDelay>0</THDelay>
|
||||
@ -539,7 +534,7 @@
|
||||
<AscS3>0</AscS3>
|
||||
<aSer3>0</aSer3>
|
||||
<eProf>0</eProf>
|
||||
<aLa>0</aLa>
|
||||
<aLa>1</aLa>
|
||||
<aPa1>0</aPa1>
|
||||
<AscS4>0</AscS4>
|
||||
<aSer4>0</aSer4>
|
||||
@ -573,6 +568,10 @@
|
||||
<Name>System Viewer\DBG</Name>
|
||||
<WinId>35902</WinId>
|
||||
</Entry>
|
||||
<Entry>
|
||||
<Name>System Viewer\GPIOG</Name>
|
||||
<WinId>35899</WinId>
|
||||
</Entry>
|
||||
<Entry>
|
||||
<Name>System Viewer\TIM1</Name>
|
||||
<WinId>35901</WinId>
|
||||
|
||||
@ -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
|
||||
|
||||
@ -0,0 +1,11 @@
|
||||
clc
|
||||
clear all
|
||||
|
||||
|
||||
alpha = 0.01
|
||||
ts = 500;
|
||||
|
||||
tau = (ts/1000000) * (1-alpha)/alpha
|
||||
|
||||
|
||||
alpha2 = ts/1000000 / (ts/1000000 + tau )
|
||||
Loading…
Reference in New Issue
Block a user