diff --git a/UPP/Core/Configs/upp_config.h b/UPP/Core/Configs/upp_config.h index 866bb04..65fc927 100644 --- a/UPP/Core/Configs/upp_config.h +++ b/UPP/Core/Configs/upp_config.h @@ -33,7 +33,7 @@ #define UPP_SIMULATE_I ///< Симулировт токи а не брать с АЦП /** - * @addtogroup UPP_DEFAULT_PARAMS Default params for external flash + * @addtogroup UPP_PARAMS_DEFAULT Default params for external flash * @ingroup UPP_CONFIG * @brief Дефолтные параметры для внешней памяти. Они применятся по команде или по ошибке * @details Префиксы @@ -41,11 +41,10 @@ */ -/* Номинальные параметры */ +/* Уставки по температурам */ #define SETPOINT_TEMP_WARN 70 #define SETPOINT_TEMP_ERR 85 - /* Номинальные параметры */ #define NOM_PHASE_NUMB 3 #define NOM_U_V_DEFAULT 690 @@ -78,7 +77,7 @@ #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.1 +#define ANGLE_PID_KI_COEF_DEFAULT 0.01 #define ANGLE_PID_KD_COEF_DEFAULT 0 #define ANGLE_REF_ALPHA_COEF_DEFAULT 0.0001 @@ -99,7 +98,7 @@ #define PWM_THYR_FREQUENCY_HZ_DEFAULT 20000 #define PWM_THYR_PULSE_NUMBER_DEFAULT 20 -/** //UPP_DEFAULT_PARAMS +/** //UPP_PARAMS_DEFAULT * @} */ @@ -111,19 +110,18 @@ * @{ */ -/* Периоды вызова всякого */ -#define PM_ADC_PERIOD_US 30 ///< Период опроса АЦП в мкс -#define PM_SLOW_PERIOD_CNT 20 ///< Период обновления медленных расчетов тиках @ref PM_ADC_PERIOD_US -#define PM_TEMP_SLOW_PERIOD_CNT 200 ///< Период обновления датчиков температуры в тиках @ref PM_SLOW_PERIOD_CNT -#define PM_F_SLOW_PERIOD_CNT 2000 ///< Период обновления частоты в тиках @ref PM_SLOW_PERIOD_CNT - -#define UPP_SLOW_TICKS_FOR_INIT 20000 ///< Сколько тиков ждать медленных измерений ждать перед переходом в готовность +/* Периоды обновления всякого */ +#define PM_ADC_PERIOD_US 30 ///< Период опроса АЦП в мкс +#define PM_SLOW_PERIOD_US 500 ///< Период обновления медленных расчетов в мкс (чтобы делилось на @ref PM_ADC_PERIOD_US) +#define PM_TEMP_SLOW_PERIOD_MS 1000 ///< Период опроса АЦП в мс +#define PM_F_SLOW_PERIOD_MS 40 ///< Период обновления частоты в мс +#define UPP_INIT_BEFORE_READY_MS 2000 ///< Сколько сканировать сеть, перед выставлением состояния готовности /* Частоты таймеров в МГц*/ -#define US_TIM5_FREQ_MHZ 90 ///< Частота тиков таймера ШИМ (1-4 каналы) -#define ADC_TIM8_FREQ_MZH 180 ///< Частота тиков таймера АЦП #define PWM_TIM1_FREQ_MHZ 180 ///< Частота тиков таймера ШИМ (1-4 каналы) -#define PWM_TIM3_FREQ_MHZ 90 ///< Частота тиков таймера ШИМ (5-6 каналы) +#define PWM_TIM8_FREQ_MHZ 180 ///< Частота тиков таймера ШИМ (5-6 каналы) +#define US_TIM5_FREQ_MHZ 90 ///< Частота тиков микросекундного таймера +#define ADC_TIM3_FREQ_MZH 90 ///< Частота тиков таймера АЦП #define ANGLE_TIM2_FREQ_MHZ 90 ///< Частота тиков таймера отсчета угла открытия тиристоров @@ -132,17 +130,17 @@ // ===== ОТЛАДОЧНЫЕ ШТУКИ ДЛЯ 417 ====== #if defined(STM32F417xx) -#undef US_TIM5_FREQ_MHZ -#undef ADC_TIM8_FREQ_MZH #undef PWM_TIM1_FREQ_MHZ -#undef PWM_TIM3_FREQ_MHZ +#undef PWM_TIM8_FREQ_MHZ +#undef US_TIM5_FREQ_MHZ +#undef ADC_TIM3_FREQ_MZH #undef ANGLE_TIM2_FREQ_MHZ // У 417 меньше частота поэтому меняем прескалер -#define US_TIM5_FREQ_MHZ 84 ///< Частота тиков таймера ШИМ (1-4 каналы) -#define ADC_TIM8_FREQ_MZH 168 ///< Частота тиков таймера АЦП #define PWM_TIM1_FREQ_MHZ 168 ///< Частота тиков таймера ШИМ (1-4 каналы) -#define PWM_TIM3_FREQ_MHZ 84 ///< Частота тиков таймера ШИМ (5-6 каналы) +#define PWM_TIM8_FREQ_MHZ 168 ///< Частота тиков таймера ШИМ (5-6 каналы) +#define US_TIM5_FREQ_MHZ 84 ///< Частота тиков микросекундного таймера +#define ADC_TIM3_FREQ_MZH 84 ///< Частота тиков таймера АЦП #define ANGLE_TIM2_FREQ_MHZ 84 ///< Частота тиков таймера отсчета угла открытия тиристоров #define HAL_PWREx_EnableOverDrive() HAL_ERROR diff --git a/UPP/Core/Configs/upp_defs.h b/UPP/Core/Configs/upp_defs.h index db8fcda..6520ea4 100644 --- a/UPP/Core/Configs/upp_defs.h +++ b/UPP/Core/Configs/upp_defs.h @@ -27,7 +27,7 @@ * @brief Список аварий УПП */ typedef enum { - UPP_Not_Init = 0, ///< УПП не инициализирован + UPP_Init = 0, ///< УПП не инициализирован UPP_Ready = 1, ///< УПП в готовности UPP_Work = 2, ///< УПП в работе, управляет тиристорами UPP_Error = 3, ///< УПП в аварии @@ -96,7 +96,7 @@ typedef struct { /** * @brief Структура параметров УПП от ПУИ - * @details Параметры по умолчанию приведены в @ref UPP_DEFAULT_PARAMS + * @details Параметры по умолчанию приведены в @ref UPP_PARAMS_DEFAULT * @note Защиты №X приведены в @ref UPP_ErrorType_t */ typedef struct { @@ -149,20 +149,26 @@ typedef struct { * @brief Дефайны УПП которые используютяс исключительно внутри программы * @{ */ -#define PM_SLOW_PERIOD_US (PM_ADC_PERIOD_US*PM_SLOW_PERIOD_CNT) -#define ANGLE_PERIOD_MS(_freq_) (((float)1/(_freq_*2))*1000) - +/* Перерасчеты в тики */ +#define PM_SLOW_PERIOD_CNT (PM_SLOW_PERIOD_US/PM_ADC_PERIOD_US) ///< Период обновления медленных расчетов тиках @ref PM_ADC_PERIOD_US #define US_TO_SLOW_TICKS(_us_) ((_us_)/PM_SLOW_PERIOD_US) #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 PARAM_INTERNAL MB_INTERNAL.param #define PARAM_PUI MB_DATA.HoldRegs.pui_params #define ERR_PUI errors.pui.err #define ERR_PRIVATE errors.prvt.f.err #define ERR_PRIVATE_CNT errors.prvt.cnt +/* Enum'ы УПП */ /** * @brief Состояния полуволны */ diff --git a/UPP/Core/Inc/main.h b/UPP/Core/Inc/main.h index 2fa1fad..dc1f029 100644 --- a/UPP/Core/Inc/main.h +++ b/UPP/Core/Inc/main.h @@ -62,6 +62,7 @@ void Error_Handler(void); /* USER CODE END EFP */ /* Private defines -----------------------------------------------------------*/ +#define angletim htim2 #define mb_huart huart3 #define mbdbg_htim htim11 #define PWM_CHANNEL_1 TIM_CHANNEL_1 @@ -69,19 +70,18 @@ void Error_Handler(void); #define PWM_CHANNEL_3 TIM_CHANNEL_3 #define PWM_CHANNEL_4 TIM_CHANNEL_4 #define mem_hspi hspi3 +#define ANGLE_CHANNEL_2 TIM_CHANNEL_2 +#define ANGLE_CHANNEL_3 TIM_CHANNEL_3 +#define ANGLE_CHANNEL_1 TIM_CHANNEL_1 #define PWM_CHANNEL_5 TIM_CHANNEL_3 #define PWM_CHANNEL_6 TIM_CHANNEL_4 #define mb_htim htim12 -#define adc_tim htim8 +#define adc_tim htim3 #define usTick ustim.Instance->CNT -#define hpwm2 htim3 +#define hpwm2 htim8 #define mb_dbg_huart huart6 #define ustim htim5 #define hpwm1 htim1 -#define ANGLE_CHANNEL_1 TIM_CHANNEL_1 -#define ANGLE_CHANNEL_2 TIM_CHANNEL_2 -#define ANGLE_CHANNEL_3 TIM_CHANNEL_3 -#define angletim htim2 #define UM_LED_GREEN2_Pin GPIO_PIN_2 #define UM_LED_GREEN2_GPIO_Port GPIOE #define CEN_Pin GPIO_PIN_3 diff --git a/UPP/Core/PowerMonitor/adc_tools.c b/UPP/Core/PowerMonitor/adc_tools.c index 7e3841d..f959c46 100644 --- a/UPP/Core/PowerMonitor/adc_tools.c +++ b/UPP/Core/PowerMonitor/adc_tools.c @@ -104,7 +104,7 @@ HAL_StatusTypeDef ADC_Start(ADC_Periodic_t *adc, float PeriodUs) HAL_TIM_Base_Stop(adc->htim); // Запускаем таймер который будет запускать опрос АЦП с заданным периодом - __HAL_TIM_SET_AUTORELOAD_FORCE(adc->htim, TIM_MicrosToTick(PeriodUs, ADC_TIM4_FREQ_MZH-1)); + __HAL_TIM_SET_AUTORELOAD_FORCE(adc->htim, TIM_MicrosToTick(PeriodUs, ADC_TIM3_FREQ_MZH-1)); res = HAL_TIM_Base_Start(adc->htim); if(res != HAL_OK) diff --git a/UPP/Core/PowerMonitor/power_monitor.c b/UPP/Core/PowerMonitor/power_monitor.c index e0184f0..78cd965 100644 --- a/UPP/Core/PowerMonitor/power_monitor.c +++ b/UPP/Core/PowerMonitor/power_monitor.c @@ -88,7 +88,7 @@ HAL_StatusTypeDef PowerMonitor_Init(PowerMonitor_t *hpm) /* Инициализация среднего фильтра для температур */ for(int i = 0; i < ADC_NUMB_OF_T_CHANNELS; i++) { - if(FilterAverage_Init(&hpm->avg[AVG_TEMP1+i], PM_TEMP_SLOW_PERIOD_CNT, FILTER_MODE_DEFAULT)) + if(FilterAverage_Init(&hpm->avg[AVG_TEMP1+i], MS_TO_SLOW_TICKS(PM_TEMP_SLOW_PERIOD_MS), FILTER_MODE_DEFAULT)) return HAL_ERROR; Filter_Start(&hpm->avg[ADC_TEMP_CHANNELS_START+i]); @@ -96,7 +96,7 @@ HAL_StatusTypeDef PowerMonitor_Init(PowerMonitor_t *hpm) /* Инициализация среднего фильтра для частот */ for(int i = 0; i < 3; i++) { - if(FilterAverage_Init(&hpm->avg[AVG_FBA+i], PM_F_SLOW_PERIOD_CNT, FILTER_MODE_DEFAULT)) + if(FilterAverage_Init(&hpm->avg[AVG_FBA+i], MS_TO_SLOW_TICKS(PM_F_SLOW_PERIOD_MS), FILTER_MODE_DEFAULT)) return HAL_ERROR; Filter_Start(&hpm->avg[ADC_TEMP_CHANNELS_START+i]); diff --git a/UPP/Core/Src/adc.c b/UPP/Core/Src/adc.c index 1e47c8a..0da022a 100644 --- a/UPP/Core/Src/adc.c +++ b/UPP/Core/Src/adc.c @@ -50,7 +50,7 @@ void MX_ADC3_Init(void) hadc3.Init.ContinuousConvMode = DISABLE; hadc3.Init.DiscontinuousConvMode = DISABLE; hadc3.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_RISING; - hadc3.Init.ExternalTrigConv = ADC_EXTERNALTRIGCONV_T8_TRGO; + hadc3.Init.ExternalTrigConv = ADC_EXTERNALTRIGCONV_T3_TRGO; hadc3.Init.DataAlign = ADC_DATAALIGN_RIGHT; hadc3.Init.NbrOfConversion = 6; hadc3.Init.DMAContinuousRequests = ENABLE; diff --git a/UPP/Core/Src/gpio.c b/UPP/Core/Src/gpio.c index 6746ace..8d3dd37 100644 --- a/UPP/Core/Src/gpio.c +++ b/UPP/Core/Src/gpio.c @@ -62,13 +62,13 @@ void MX_GPIO_Init(void) HAL_GPIO_WritePin(DO2_GPIO_Port, DO2_Pin, GPIO_PIN_RESET); /*Configure GPIO pin Output Level */ - HAL_GPIO_WritePin(DO3_GPIO_Port, DO3_Pin, GPIO_PIN_SET); + HAL_GPIO_WritePin(DO3_GPIO_Port, DO3_Pin, GPIO_PIN_RESET); /*Configure GPIO pin Output Level */ - HAL_GPIO_WritePin(DO5_GPIO_Port, DO5_Pin, GPIO_PIN_RESET); + HAL_GPIO_WritePin(GPIOA, DO5_Pin|DO4_Pin, GPIO_PIN_RESET); /*Configure GPIO pin Output Level */ - HAL_GPIO_WritePin(GPIOA, DO4_Pin|RDO4_Pin, GPIO_PIN_SET); + HAL_GPIO_WritePin(RDO4_GPIO_Port, RDO4_Pin, GPIO_PIN_SET); /*Configure GPIO pin Output Level */ HAL_GPIO_WritePin(GPIOB, DO1_Pin|RDO1_Pin|SCIDE2_Pin|SCIDE1_Pin diff --git a/UPP/Core/Src/main.c b/UPP/Core/Src/main.c index 3b44545..89df5ce 100644 --- a/UPP/Core/Src/main.c +++ b/UPP/Core/Src/main.c @@ -22,7 +22,6 @@ #include "can.h" #include "dma.h" #include "iwdg.h" -#include "rtc.h" #include "spi.h" #include "tim.h" #include "usart.h" @@ -108,7 +107,6 @@ int main(void) MX_USART3_UART_Init(); MX_CAN1_Init(); MX_IWDG_Init(); - //MX_RTC_Init(); MX_TIM1_Init(); MX_TIM3_Init(); MX_USART6_UART_Init(); @@ -123,11 +121,11 @@ int main(void) __HAL_TIM_SET_PRESCALER_FORCE(&ustim, US_TIM5_FREQ_MHZ-1); #if defined(STM32F417xx) // т.к. нет епромки выставляем дефолтные - UPP_SetDefault(1, 1); + UPP_Params_SetDefault(1, 1); #endif #else //MATLAB #endif //MATLAB - UPP_Init(); + UPP_App_Init(); /* USER CODE END 2 */ /* Infinite loop */ diff --git a/UPP/Core/Src/tim.c b/UPP/Core/Src/tim.c index 9d46689..97a009e 100644 --- a/UPP/Core/Src/tim.c +++ b/UPP/Core/Src/tim.c @@ -53,7 +53,7 @@ void MX_TIM1_Init(void) htim1.Init.CounterMode = TIM_COUNTERMODE_UP; htim1.Init.Period = 65535; htim1.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; - htim1.Init.RepetitionCounter = 0; + htim1.Init.RepetitionCounter = 20; htim1.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; if (HAL_TIM_Base_Init(&htim1) != HAL_OK) { @@ -68,6 +68,10 @@ void MX_TIM1_Init(void) { Error_Handler(); } + if (HAL_TIM_OnePulse_Init(&htim1, TIM_OPMODE_SINGLE) != HAL_OK) + { + Error_Handler(); + } sMasterConfig.MasterOutputTrigger = TIM_TRGO_UPDATE; sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; if (HAL_TIMEx_MasterConfigSynchronization(&htim1, &sMasterConfig) != HAL_OK) @@ -184,9 +188,7 @@ void MX_TIM3_Init(void) /* USER CODE END TIM3_Init 0 */ TIM_ClockConfigTypeDef sClockSourceConfig = {0}; - TIM_SlaveConfigTypeDef sSlaveConfig = {0}; TIM_MasterConfigTypeDef sMasterConfig = {0}; - TIM_OC_InitTypeDef sConfigOC = {0}; /* USER CODE BEGIN TIM3_Init 1 */ @@ -206,42 +208,15 @@ void MX_TIM3_Init(void) { Error_Handler(); } - if (HAL_TIM_PWM_Init(&htim3) != HAL_OK) - { - Error_Handler(); - } - if (HAL_TIM_OnePulse_Init(&htim3, TIM_OPMODE_SINGLE) != HAL_OK) - { - Error_Handler(); - } - sSlaveConfig.SlaveMode = TIM_SLAVEMODE_TRIGGER; - sSlaveConfig.InputTrigger = TIM_TS_ITR0; - if (HAL_TIM_SlaveConfigSynchro(&htim3, &sSlaveConfig) != HAL_OK) - { - Error_Handler(); - } - sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; + sMasterConfig.MasterOutputTrigger = TIM_TRGO_UPDATE; sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_ENABLE; if (HAL_TIMEx_MasterConfigSynchronization(&htim3, &sMasterConfig) != HAL_OK) { Error_Handler(); } - sConfigOC.OCMode = TIM_OCMODE_PWM1; - sConfigOC.Pulse = 0; - sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH; - sConfigOC.OCFastMode = TIM_OCFAST_DISABLE; - if (HAL_TIM_PWM_ConfigChannel(&htim3, &sConfigOC, TIM_CHANNEL_3) != HAL_OK) - { - Error_Handler(); - } - if (HAL_TIM_PWM_ConfigChannel(&htim3, &sConfigOC, TIM_CHANNEL_4) != HAL_OK) - { - Error_Handler(); - } /* USER CODE BEGIN TIM3_Init 2 */ /* USER CODE END TIM3_Init 2 */ - HAL_TIM_MspPostInit(&htim3); } /* TIM5 init function */ @@ -294,6 +269,8 @@ void MX_TIM8_Init(void) TIM_ClockConfigTypeDef sClockSourceConfig = {0}; TIM_MasterConfigTypeDef sMasterConfig = {0}; + TIM_OC_InitTypeDef sConfigOC = {0}; + TIM_BreakDeadTimeConfigTypeDef sBreakDeadTimeConfig = {0}; /* USER CODE BEGIN TIM8_Init 1 */ @@ -301,9 +278,9 @@ void MX_TIM8_Init(void) htim8.Instance = TIM8; htim8.Init.Prescaler = 0; htim8.Init.CounterMode = TIM_COUNTERMODE_UP; - htim8.Init.Period = 1800-1; + htim8.Init.Period = 65535; htim8.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; - htim8.Init.RepetitionCounter = 0; + htim8.Init.RepetitionCounter = 20; htim8.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; if (HAL_TIM_Base_Init(&htim8) != HAL_OK) { @@ -314,15 +291,50 @@ void MX_TIM8_Init(void) { Error_Handler(); } - sMasterConfig.MasterOutputTrigger = TIM_TRGO_UPDATE; + if (HAL_TIM_PWM_Init(&htim8) != HAL_OK) + { + Error_Handler(); + } + if (HAL_TIM_OnePulse_Init(&htim8, TIM_OPMODE_SINGLE) != HAL_OK) + { + Error_Handler(); + } + sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; if (HAL_TIMEx_MasterConfigSynchronization(&htim8, &sMasterConfig) != HAL_OK) { Error_Handler(); } + sConfigOC.OCMode = TIM_OCMODE_PWM1; + sConfigOC.Pulse = 0; + sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH; + sConfigOC.OCNPolarity = TIM_OCNPOLARITY_HIGH; + sConfigOC.OCFastMode = TIM_OCFAST_DISABLE; + sConfigOC.OCIdleState = TIM_OCIDLESTATE_RESET; + sConfigOC.OCNIdleState = TIM_OCNIDLESTATE_RESET; + if (HAL_TIM_PWM_ConfigChannel(&htim8, &sConfigOC, TIM_CHANNEL_3) != HAL_OK) + { + Error_Handler(); + } + if (HAL_TIM_PWM_ConfigChannel(&htim8, &sConfigOC, TIM_CHANNEL_4) != HAL_OK) + { + Error_Handler(); + } + sBreakDeadTimeConfig.OffStateRunMode = TIM_OSSR_DISABLE; + sBreakDeadTimeConfig.OffStateIDLEMode = TIM_OSSI_DISABLE; + sBreakDeadTimeConfig.LockLevel = TIM_LOCKLEVEL_OFF; + sBreakDeadTimeConfig.DeadTime = 0; + sBreakDeadTimeConfig.BreakState = TIM_BREAK_DISABLE; + sBreakDeadTimeConfig.BreakPolarity = TIM_BREAKPOLARITY_HIGH; + sBreakDeadTimeConfig.AutomaticOutput = TIM_AUTOMATICOUTPUT_DISABLE; + if (HAL_TIMEx_ConfigBreakDeadTime(&htim8, &sBreakDeadTimeConfig) != HAL_OK) + { + Error_Handler(); + } /* USER CODE BEGIN TIM8_Init 2 */ /* USER CODE END TIM8_Init 2 */ + HAL_TIM_MspPostInit(&htim8); } /* TIM11 init function */ @@ -505,27 +517,27 @@ void HAL_TIM_MspPostInit(TIM_HandleTypeDef* timHandle) /* USER CODE END TIM1_MspPostInit 1 */ } - else if(timHandle->Instance==TIM3) + else if(timHandle->Instance==TIM8) { - /* USER CODE BEGIN TIM3_MspPostInit 0 */ + /* USER CODE BEGIN TIM8_MspPostInit 0 */ - /* USER CODE END TIM3_MspPostInit 0 */ + /* USER CODE END TIM8_MspPostInit 0 */ __HAL_RCC_GPIOC_CLK_ENABLE(); - /**TIM3 GPIO Configuration - PC8 ------> TIM3_CH3 - PC9 ------> TIM3_CH4 + /**TIM8 GPIO Configuration + PC8 ------> TIM8_CH3 + PC9 ------> TIM8_CH4 */ GPIO_InitStruct.Pin = PWM5_Pin|PWM6_Pin; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; - GPIO_InitStruct.Alternate = GPIO_AF2_TIM3; + GPIO_InitStruct.Alternate = GPIO_AF3_TIM8; HAL_GPIO_Init(GPIOC, &GPIO_InitStruct); - /* USER CODE BEGIN TIM3_MspPostInit 1 */ + /* USER CODE BEGIN TIM8_MspPostInit 1 */ - /* USER CODE END TIM3_MspPostInit 1 */ + /* USER CODE END TIM8_MspPostInit 1 */ } } diff --git a/UPP/Core/UPP/angle_control.c b/UPP/Core/UPP/angle_control.c index 76357a1..d97c748 100644 --- a/UPP/Core/UPP/angle_control.c +++ b/UPP/Core/UPP/angle_control.c @@ -38,12 +38,10 @@ HAL_StatusTypeDef Angle_Init(Angle_Handle_t *hangle) Angle_Reset(hangle, UPP_PHASE_B); Angle_Reset(hangle, UPP_PHASE_C); - // Инициализация углов float angle_max = to_float(PARAM_INTERNAL.angle.Angle_Max, 65535); float angle_min = to_float(PARAM_INTERNAL.angle.Angle_Min, 65535); - hangle->f.Initialized = 1; return HAL_OK; } @@ -121,8 +119,8 @@ void Angle_PID_Reset(Angle_Handle_t *hangle) * @brief Выставление степени открытия тиристоров. * @param hangle Указатель на таймер * @param OpenLevel Насколько открыть тиристор: - - 0 - полностбю закрыт, - - 1 - полностью открыт + - 0 - максимально закрыт, + - 1 - максимально открыт * @return HAL Status. */ HAL_StatusTypeDef Angle_SetAngle(Angle_Handle_t *hangle, float OpenLevel) @@ -190,6 +188,7 @@ HAL_StatusTypeDef Angle_Start(Angle_Handle_t *hangle, UPP_Phase_t Phase, float P switch(Phase) { case UPP_PHASE_A: + __HAL_TIM_CLEAR_IT(hangle->htim, TIM_IT_CC1); // очищаем флаг навсякий __HAL_TIM_SET_COMPARE(hangle->htim, ANGLE_CHANNEL_1, ccr_ticks); // Если слишком маленький timer_tick и счетчик уже перевалил за ccr, но не сгенерил прервыание: if (__HAL_TIM_GET_COMPARE(hangle->htim, ANGLE_CHANNEL_1) <= __HAL_TIM_GET_COUNTER(hangle->htim)) @@ -203,6 +202,7 @@ HAL_StatusTypeDef Angle_Start(Angle_Handle_t *hangle, UPP_Phase_t Phase, float P break; case UPP_PHASE_B: + __HAL_TIM_CLEAR_IT(hangle->htim, TIM_IT_CC2); // очищаем флаг навсякий __HAL_TIM_SET_COMPARE(hangle->htim, ANGLE_CHANNEL_2, ccr_ticks); // Если слишком маленький timer_tick и счетчик уже перевалил за ccr, но не сгенерил прервыание: if (__HAL_TIM_GET_COMPARE(hangle->htim, ANGLE_CHANNEL_2) <= __HAL_TIM_GET_COUNTER(hangle->htim)) @@ -215,6 +215,7 @@ HAL_StatusTypeDef Angle_Start(Angle_Handle_t *hangle, UPP_Phase_t Phase, float P break; case UPP_PHASE_C: + __HAL_TIM_CLEAR_IT(hangle->htim, TIM_IT_CC3); // очищаем флаг навсякий __HAL_TIM_SET_COMPARE(hangle->htim, ANGLE_CHANNEL_3, ccr_ticks); // Если слишком маленький timer_tick и счетчик уже перевалил за ccr, но не сгенерил прервыание: if (__HAL_TIM_GET_COMPARE(hangle->htim, ANGLE_CHANNEL_3) <= __HAL_TIM_GET_COUNTER(hangle->htim)) diff --git a/UPP/Core/UPP/pwm_thyristors.c b/UPP/Core/UPP/pwm_thyristors.c index 0aafba6..02ee9eb 100644 --- a/UPP/Core/UPP/pwm_thyristors.c +++ b/UPP/Core/UPP/pwm_thyristors.c @@ -60,14 +60,17 @@ HAL_StatusTypeDef PWM_Init(PWM_Handle_t *hpwm) PWM_SetConfig(hpwm, PARAM_INTERNAL.pwm.PhaseMask, PARAM_INTERNAL.pwm.Frequency, PARAM_INTERNAL.pwm.PulseNumber); - PWM_Stop(hpwm, 0, 1); HAL_TIM_PWM_Start(&hpwm1, PWM_CHANNEL_1); HAL_TIM_PWM_Start(&hpwm1, PWM_CHANNEL_2); HAL_TIM_PWM_Start(&hpwm1, PWM_CHANNEL_3); HAL_TIM_PWM_Start(&hpwm1, PWM_CHANNEL_4); HAL_TIM_PWM_Start(&hpwm2, PWM_CHANNEL_5); HAL_TIM_PWM_Start(&hpwm2, PWM_CHANNEL_6); + PWM_Stop(hpwm, 0, 1); + +#ifndef PWM_HARDWARE_IMPULSES_CONTROL HAL_TIM_Base_Start_IT(&hpwm1); +#endif return HAL_OK; } @@ -103,13 +106,26 @@ HAL_StatusTypeDef PWM_Start(PWM_Handle_t *hpwm, UPP_Phase_t Phase) // Запуск только если таймер в режиме ожидания case PWM_THYR_TIM_WAIT: +#ifndef PWM_HARDWARE_IMPULSES_CONTROL hpwm->Phase[Phase]->State = PWM_THYR_TIM_START; - return HAL_OK; + return HAL_OK; +#else + hpwm->Phase[Phase]->State = PWM_THYR_TIM_ACTIVE; + + if(hpwm->Config.PulseNumber) + hpwm->Phase[Phase]->htim->Instance->RCR = hpwm->Config.PulseNumber-1; + else + return HAL_ERROR; + + __PWM_SetOutputState(hpwm->Phase[Phase], PWM_ENABLE); + + hpwm->f.Running++; + return HAL_TIM_Base_Start_IT(hpwm->Phase[Phase]->htim); +#endif default: return HAL_ERROR; } - return HAL_ERROR; } @@ -127,30 +143,44 @@ HAL_StatusTypeDef PWM_Stop(PWM_Handle_t *hpwm, UPP_Phase_t Phase, uint8_t force_ { if(assert_upp(hpwm)) return HAL_ERROR; - // Если канал дурацкий - возвращаем ошибку - if(Phase >= 3) - { - return HAL_ERROR; - } - if (hpwm->Phase[Phase] == NULL || hpwm->Phase[Phase] == &hpwm->AllPhases[PHASE_UNKNOWN]) - return HAL_ERROR; - hpwm->Phase[Phase]->State = PWM_THYR_DISABLED; - - // Если не force_stop_all - сбрасываем только текущий канал - if (!force_stop_all) - { - __PWM_SetOutputState(hpwm->Phase[Phase], PWM_DISABLE); - } // Если force_stop_all - сбрасываем ВСЕ КАНАЛЫ - else { + if(force_stop_all) + { + // в первую очередь выключаем канал, потом выставим режим каналов + __HAL_TIM_MOE_DISABLE(&hpwm1); + // в первую очередь выключаем канал, потом выставим режим каналов + __HAL_TIM_MOE_DISABLE(&hpwm2); + + for(int ch = 0; ch < 6; ch++) { __PWM_SetOutputState(&hpwm->AllPhases[ch], PWM_DISABLE); } + return HAL_OK; + } + // Если НЕ force_stop_all - сбрасываем ТОЛЬКО заданный канал + else + { + // Если канал дурацкий - возвращаем ошибку + if(Phase >= 3) + { + return HAL_ERROR; + } + if (hpwm->Phase[Phase] == NULL || hpwm->Phase[Phase] == &hpwm->AllPhases[PHASE_UNKNOWN]) + return HAL_ERROR; + + hpwm->Phase[Phase]->State = PWM_THYR_DISABLED; + // Если не force_stop_all - сбрасываем только текущий канал + __PWM_SetOutputState(hpwm->Phase[Phase], PWM_DISABLE); +#ifdef PWM_HARDWARE_IMPULSES_CONTROL + if(hpwm->f.Running) + hpwm->f.Running--; + + HAL_TIM_Base_Stop(hpwm->Phase[Phase]->htim); +#endif + return HAL_OK; } - - return HAL_OK; } /** * @brief Хендл ШИМ тиристоров. @@ -172,6 +202,7 @@ HAL_StatusTypeDef PWM_Handle(PWM_Handle_t *hpwm) if (hPhase->htim == NULL) continue; +#ifndef PWM_HARDWARE_IMPULSES_CONTROL switch (hPhase->State) { case PWM_THYR_DISABLED: // канал отключен @@ -208,6 +239,14 @@ HAL_StatusTypeDef PWM_Handle(PWM_Handle_t *hpwm) __PWM_SetOutputState(hPhase, PWM_DISABLE); break; } +#else //PWM_HARDWARE_IMPULSES_CONTROL + // после того как пачка импульсов прошла отключаем активный канал + if (hPhase->State == PWM_THYR_TIM_ACTIVE) + { + __PWM_SetOutputState(hPhase, PWM_DISABLE); + HAL_TIM_Base_Stop(hPhase->htim); + } +#endif } return HAL_OK; } @@ -233,7 +272,7 @@ HAL_StatusTypeDef PWM_SetConfig(PWM_Handle_t *hpwm, uint8_t PhaseMask, uint16_t hpwm->Config.Frequency = Frequency; // Высставление периодов __HAL_TIM_SET_AUTORELOAD(&hpwm1, TIM_FreqToTick(Frequency, PWM_TIM1_FREQ_MHZ-1)); - __HAL_TIM_SET_AUTORELOAD(&hpwm2, TIM_FreqToTick(Frequency, PWM_TIM3_FREQ_MHZ-1)); + __HAL_TIM_SET_AUTORELOAD(&hpwm2, TIM_FreqToTick(Frequency, PWM_TIM8_FREQ_MHZ-1)); // Скважности 50/50 __HAL_TIM_SET_COMPARE(&hpwm1, PWM_CHANNEL_1, __HAL_TIM_GET_AUTORELOAD(&hpwm1)/2); __HAL_TIM_SET_COMPARE(&hpwm1, PWM_CHANNEL_2, __HAL_TIM_GET_AUTORELOAD(&hpwm1)/2); @@ -248,8 +287,12 @@ HAL_StatusTypeDef PWM_SetConfig(PWM_Handle_t *hpwm, uint8_t PhaseMask, uint16_t __HAL_TIM_SET_COUNTER(&hpwm2, 0); PWM_Stop(hpwm, 0, 1); - + +#ifndef PWM_HARDWARE_IMPULSES_CONTROL return HAL_TIM_Base_Start_IT(&hpwm1); +#else + return HAL_OK; +#endif } @@ -317,7 +360,8 @@ HAL_StatusTypeDef PWM_SetPolarity(PWM_Handle_t *hpwm, int polarity) } return HAL_OK; } -/** + +/** * @brief Установка режима для канала ШИМ. * @param hpwm Указатель на хендл ШИМ тиристоров * @param Phase Для какой фазы надо установить состояние @@ -331,9 +375,9 @@ static HAL_StatusTypeDef __PWM_SetOutputState(PWM_Channel_t *hCh, uint32_t state if (hCh->htim == NULL) return HAL_ERROR; - uint32_t ch_mode = state; + // выставляем режим каналов switch(hCh->ChMask) { case TIM_CHANNEL_1: @@ -355,5 +399,12 @@ static HAL_StatusTypeDef __PWM_SetOutputState(PWM_Channel_t *hCh, uint32_t state default: break; } + + // в последнюю очередь включаем выход. Перед этим настраиваем каналы на ШИМ + if(state == PWM_ENABLE) + { + __HAL_TIM_MOE_ENABLE(hCh->htim); + } + return HAL_OK; -} +} \ No newline at end of file diff --git a/UPP/Core/UPP/pwm_thyristors.h b/UPP/Core/UPP/pwm_thyristors.h index 85fc1d3..6516a6e 100644 --- a/UPP/Core/UPP/pwm_thyristors.h +++ b/UPP/Core/UPP/pwm_thyristors.h @@ -10,11 +10,11 @@ - +#define PWM_HARDWARE_IMPULSES_CONTROL #define PWM_ENABLE TIM_OCMODE_PWM2 -#define PWM_DISABLE TIM_OCMODE_FORCED_ACTIVE +#define PWM_DISABLE TIM_OCMODE_FORCED_INACTIVE diff --git a/UPP/Core/UPP/upp_main.c b/UPP/Core/UPP/upp_main.c index c2a2396..b32b125 100644 --- a/UPP/Core/UPP/upp_main.c +++ b/UPP/Core/UPP/upp_main.c @@ -11,15 +11,15 @@ UPP_t upp; float dbg_iref = 1; -int dbg_polarity = 1; -// ОСНОВНОЙ ЦИКЛ main.c +int dbg_polarity = 0; /** * @brief Инициализация УПП. * @return 0 - если ОК, >1 если ошибка. */ -int UPP_Init(void) +int UPP_App_Init(void) { + upp.workmode = UPP_Init; /* Очищаем входы */ UPP_IO_Init(); @@ -45,9 +45,7 @@ int UPP_Init(void) if(Angle_Init(&upp.hangle) != HAL_OK) { return 1; - } - - upp.workmode = UPP_Ready; + } return 0; } @@ -57,7 +55,7 @@ int UPP_Init(void) */ int UPP_PreWhile(void) { - UPP_Params_InternalControl(); + UPP_Params_ControlInternal(); if(Angle_SetRange(&upp.hangle, 0.0, 0.8) != HAL_OK) return 1; @@ -102,7 +100,7 @@ int UPP_While(void) // Сброс на дефолтные по запросу if(upp.call->set_default_pui || upp.call->set_default_internal) { - UPP_SetDefault(upp.call->set_default_pui, upp.call->set_default_internal); + UPP_Params_SetDefault(upp.call->set_default_pui, upp.call->set_default_internal); } // Медленные расчеты @@ -115,11 +113,16 @@ int UPP_While(void) switch(upp.workmode) { /* Состояние инициализации */ - case UPP_Not_Init: - if(slow_cnt > UPP_SLOW_TICKS_FOR_INIT) + case UPP_Init: + if(slow_cnt > MS_TO_SLOW_TICKS(UPP_INIT_BEFORE_READY_MS)) { + slow_cnt = 0; // сбрасываем чтобы потом еще раз инициализироватся upp.workmode = UPP_Ready; } + else + { + slow_cnt++; + } break; /* Состояние готовности */ @@ -147,7 +150,7 @@ int UPP_While(void) UPP_DO.Error(DISABLE); // если пришла команда на остановку if (!upp.call->go) - upp.workmode = UPP_Ready; + upp.workmode = UPP_Init; // Регулирование тиристоров #ifndef UPP_SIMULATE_I // берем с АЦП @@ -181,7 +184,7 @@ int UPP_While(void) UPP_DO.Error(ENABLE); // Находимся до тех пор пока ошибки не будет устранена if(errors.common == Err_None) - upp.workmode = UPP_Not_Init; + upp.workmode = UPP_Init; retval = 1; break; @@ -189,7 +192,7 @@ int UPP_While(void) UPP_Errors_Handle(); - UPP_Params_InternalControl(); + UPP_Params_ControlInternal(); upp.pm.f.runSlow = 0; @@ -209,7 +212,7 @@ int UPP_While(void) */ void UPP_Tick(void) { - if(upp.workmode == UPP_Not_Init) + if(upp.workmode == UPP_Init) return; } diff --git a/UPP/Core/UPP/upp_main.h b/UPP/Core/UPP/upp_main.h index 9d45809..4d07896 100644 --- a/UPP/Core/UPP/upp_main.h +++ b/UPP/Core/UPP/upp_main.h @@ -49,7 +49,7 @@ extern UPP_t upp; /* Инициализация УПП */ -int UPP_Init(void); +int UPP_App_Init(void); /* Инициализация основного цикла УПП. */ int UPP_PreWhile(void); /* Основной цикл УПП. */ diff --git a/UPP/Core/UPP/upp_params.c b/UPP/Core/UPP/upp_params.c index 5474851..66314c7 100644 --- a/UPP/Core/UPP/upp_params.c +++ b/UPP/Core/UPP/upp_params.c @@ -18,7 +18,7 @@ static void __AngleSetLimit(void); * @brief Контроль внутренних параметров УПП. * @return HAL Status. */ -void UPP_Params_InternalControl(void) +void UPP_Params_ControlInternal(void) { __AngleSetLimit(); if(upp.call->go) // при запущеном УПП ничего не меняем @@ -171,13 +171,22 @@ void UPP_Params_InternalControl(void) } + /** - * @brief Установка параметров на дефолтные значения @ref UPP_DEFAULT_PARAMS. + * @brief Контроль внутренних параметров УПП. + * @return HAL Status. + */ +void UPP_Params_Saturate(void) +{ +} + +/** + * @brief Установка параметров на дефолтные значения @ref UPP_PARAMS_DEFAULT. * @param pui_default Сбросить параметры ПУИ * @param internal_default Сбросить внутренние параметры * @return HAL Status. */ -void UPP_SetDefault(int pui_default, int internal_default) +void UPP_Params_SetDefault(int pui_default, int internal_default) { if(pui_default) { diff --git a/UPP/Core/UPP/upp_params.h b/UPP/Core/UPP/upp_params.h index 9f80af0..22a3db6 100644 --- a/UPP/Core/UPP/upp_params.h +++ b/UPP/Core/UPP/upp_params.h @@ -96,8 +96,8 @@ typedef struct /* Контроль внутренних параметров УПП. */ -void UPP_Params_InternalControl(void); +void UPP_Params_ControlInternal(void); /* Установка параметров на дефолтные значения */ -void UPP_SetDefault(int pui_default, int internal_default); +void UPP_Params_SetDefault(int pui_default, int internal_default); #endif //_UPP_PARAMS_H \ No newline at end of file diff --git a/UPP/MDK-ARM/UPP.uvoptx b/UPP/MDK-ARM/UPP.uvoptx index 511f869..5c7eb76 100644 --- a/UPP/MDK-ARM/UPP.uvoptx +++ b/UPP/MDK-ARM/UPP.uvoptx @@ -331,7 +331,7 @@ 0 407 1 -
134233366
+
134233418
0 0 0 @@ -368,12 +368,12 @@ 1 1 - upp + upp,0x0A 2 1 - uwTick + uwTick,0x0A 3 @@ -388,7 +388,7 @@ 5 1 - hbt + hbt,0x0A 6 @@ -410,6 +410,31 @@ 1 dbg_iref + + 10 + 1 + upp.call->reset_mcu + + + 11 + 1 + upp.pm.zc.Channel[0].HalfWave + + + 12 + 1 + upp.call->reserved + + + 13 + 1 + \\Debug_F417\../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c\uwTick + + + 14 + 1 + htim1 + @@ -518,18 +543,8 @@ 0 - `upp.pm.measured.real.U[0] - 0000000000000000007097C00000000000709740000000000000000000000000000000007570702E706D2E6D656173757265642E7265616C2E555B305D000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000700000001000000731CC7711CC7D13F1400000000000000000000000000000000000000A49F0008 - - - 1 - `upp.pm.measured.real.U[1] - 0080000000000000007097C00000000000709740000000000000000000000000000000007570702E706D2E6D656173757265642E7265616C2E555B315D000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000700000002000000398EE3388EE3D83F1400000000000000000000000000000000000000A49F0008 - - - 2 - `upp.pm.measured.final.F[0] - 0000800000000000000000000000000000805140000000000000000000000000000000007570702E706D2E6D656173757265642E66696E616C2E465B305D0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000700000003000000555555555555D53F140000000000000000000000000000000000000028020008 + `upp.pm.zc.Channel[0].HalfWave + 0000000000000000000000000000000000000040000000000000000000000000000000007570702E706D2E7A632E4368616E6E656C5B305D2E48616C66576176650000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000500000001000000000000000000F03F1400000000000000000000000000000000000000FC9E0008 @@ -545,6 +560,10 @@ System Viewer\TIM14 35903 + + System Viewer\TIM2 + 35900 + System Viewer\TIM5 35905 diff --git a/UPP/UPP.ioc b/UPP/UPP.ioc index 458edce..9245df5 100644 --- a/UPP/UPP.ioc +++ b/UPP/UPP.ioc @@ -94,25 +94,25 @@ Mcu.Pin23=PB11 Mcu.Pin24=PB13 Mcu.Pin25=PG6 Mcu.Pin26=PC6 -Mcu.Pin27=PC8 -Mcu.Pin28=PC9 -Mcu.Pin29=PA8 +Mcu.Pin27=PC7 +Mcu.Pin28=PC8 +Mcu.Pin29=PC9 Mcu.Pin3=PE5 -Mcu.Pin30=PA9 -Mcu.Pin31=PA10 -Mcu.Pin32=PA11 -Mcu.Pin33=PA12 -Mcu.Pin34=PA13 -Mcu.Pin35=PA14 -Mcu.Pin36=PA15 -Mcu.Pin37=PC10 -Mcu.Pin38=PC11 -Mcu.Pin39=PC12 +Mcu.Pin30=PA8 +Mcu.Pin31=PA9 +Mcu.Pin32=PA10 +Mcu.Pin33=PA11 +Mcu.Pin34=PA12 +Mcu.Pin35=PA13 +Mcu.Pin36=PA14 +Mcu.Pin37=PA15 +Mcu.Pin38=PC10 +Mcu.Pin39=PC11 Mcu.Pin4=PE6 -Mcu.Pin40=PD2 -Mcu.Pin41=PD3 -Mcu.Pin42=PD6 -Mcu.Pin43=PG9 +Mcu.Pin40=PC12 +Mcu.Pin41=PD2 +Mcu.Pin42=PD3 +Mcu.Pin43=PD6 Mcu.Pin44=PG12 Mcu.Pin45=PG15 Mcu.Pin46=PB3 @@ -128,16 +128,16 @@ Mcu.Pin54=VP_RTC_VS_RTC_Activate Mcu.Pin55=VP_RTC_VS_RTC_Calendar Mcu.Pin56=VP_SYS_VS_tim14 Mcu.Pin57=VP_TIM1_VS_ClockSourceINT -Mcu.Pin58=VP_TIM2_VS_ClockSourceINT -Mcu.Pin59=VP_TIM2_VS_no_output1 +Mcu.Pin58=VP_TIM1_VS_OPM +Mcu.Pin59=VP_TIM2_VS_ClockSourceINT Mcu.Pin6=PC14/OSC32_IN -Mcu.Pin60=VP_TIM2_VS_no_output2 -Mcu.Pin61=VP_TIM2_VS_no_output3 -Mcu.Pin62=VP_TIM3_VS_ClockSourceINT -Mcu.Pin63=VP_TIM5_VS_ClockSourceINT -Mcu.Pin64=VP_TIM8_VS_ControllerModeTrigger +Mcu.Pin60=VP_TIM2_VS_no_output1 +Mcu.Pin61=VP_TIM2_VS_no_output2 +Mcu.Pin62=VP_TIM2_VS_no_output3 +Mcu.Pin63=VP_TIM3_VS_ClockSourceINT +Mcu.Pin64=VP_TIM5_VS_ClockSourceINT Mcu.Pin65=VP_TIM8_VS_ClockSourceINT -Mcu.Pin66=VP_TIM8_VS_ClockSourceITR +Mcu.Pin66=VP_TIM8_VS_OPM Mcu.Pin67=VP_TIM11_VS_ClockSourceINT Mcu.Pin68=VP_TIM12_VS_ClockSourceINT Mcu.Pin7=PC15/OSC32_OUT @@ -145,7 +145,7 @@ Mcu.Pin8=PF6 Mcu.Pin9=PF7 Mcu.PinsNb=69 Mcu.ThirdPartyNb=0 -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;usTick,ustim.Instance->CNT;hpwm2,htim3;mb_dbg_huart,huart6;ustim,htim5;hpwm1,htim1;ANGLE_CHANNEL_1,TIM_CHANNEL_1;ANGLE_CHANNEL_2,TIM_CHANNEL_2;ANGLE_CHANNEL_3,TIM_CHANNEL_3;angletim,htim2 +Mcu.UserConstants=angletim,htim2;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;ANGLE_CHANNEL_2,TIM_CHANNEL_2;ANGLE_CHANNEL_3,TIM_CHANNEL_3;ANGLE_CHANNEL_1,TIM_CHANNEL_1;PWM_CHANNEL_5,TIM_CHANNEL_3;PWM_CHANNEL_6,TIM_CHANNEL_4;mb_htim,htim12;adc_tim,htim3;usTick,ustim.Instance->CNT;hpwm2,htim8;mb_dbg_huart,huart6;ustim,htim5;hpwm1,htim1 Mcu.UserName=STM32F427ZGTx MxCube.Version=6.12.1 MxDb.Version=DB.6.0.121 @@ -191,7 +191,7 @@ PA4.Signal=GPIO_Output PA5.GPIOParameters=PinState,GPIO_Label PA5.GPIO_Label=DO4 PA5.Locked=true -PA5.PinState=GPIO_PIN_SET +PA5.PinState=GPIO_PIN_RESET PA5.Signal=GPIO_Output PA6.GPIOParameters=PinState,GPIO_Label PA6.GPIO_Label=RDO4 @@ -261,6 +261,8 @@ PC12.GPIOParameters=GPIO_Label PC12.GPIO_Label=UM_SPI_MOSI PC12.Mode=Full_Duplex_Master PC12.Signal=SPI3_MOSI +PC13.GPIOParameters=GPIO_Label +PC13.GPIO_Label=DO3 PC13.Locked=true PC13.Signal=GPIO_Output PC14/OSC32_IN.Mode=LSE-External-Oscillator @@ -271,6 +273,11 @@ PC6.GPIOParameters=GPIO_Label PC6.GPIO_Label=SCIT1 PC6.Mode=Asynchronous PC6.Signal=USART6_TX +PC7.GPIOParameters=GPIO_Label +PC7.GPIO_Label=SCIR2 +PC7.Locked=true +PC7.Mode=Asynchronous +PC7.Signal=USART6_RX PC8.GPIOParameters=GPIO_Label PC8.GPIO_Label=PWM5 PC8.Signal=S_TIM8_CH3 @@ -347,6 +354,8 @@ PF9.GPIOParameters=GPIO_Label PF9.GPIO_Label=AI_Ia PF9.Mode=IN7 PF9.Signal=ADC3_IN7 +PG12.GPIOParameters=GPIO_Label +PG12.GPIO_Label=ERR_24V PG12.Locked=true PG12.Signal=GPIO_Input PG15.GPIOParameters=GPIO_Label @@ -358,10 +367,6 @@ PG6.GPIO_Label=UM_SPI_CS PG6.GPIO_PuPd=GPIO_PULLDOWN PG6.Locked=true PG6.Signal=GPIO_Output -PG9.GPIOParameters=GPIO_Label -PG9.GPIO_Label=SCIR2 -PG9.Mode=Asynchronous -PG9.Signal=USART6_RX PH0/OSC_IN.Mode=HSE-External-Oscillator PH0/OSC_IN.Signal=RCC_OSC_IN PH1/OSC_OUT.Mode=HSE-External-Oscillator @@ -397,7 +402,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-false-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-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 RCC.48MHZClocksFreq_Value=90000000 RCC.AHBFreq_Value=180000000 RCC.APB1CLKDivider=RCC_HCLK_DIV4 @@ -465,8 +470,9 @@ TIM1.Channel-PWM\ Generation1\ CH1=TIM_CHANNEL_1 TIM1.Channel-PWM\ Generation2\ CH2=TIM_CHANNEL_2 TIM1.Channel-PWM\ Generation3\ CH3=TIM_CHANNEL_3 TIM1.Channel-PWM\ Generation4\ CH4=TIM_CHANNEL_4 -TIM1.IPParameters=Prescaler,Channel-PWM Generation1 CH1,Channel-PWM Generation2 CH2,Channel-PWM Generation4 CH4,Channel-PWM Generation3 CH3,TIM_MasterOutputTrigger +TIM1.IPParameters=Prescaler,Channel-PWM Generation1 CH1,Channel-PWM Generation2 CH2,Channel-PWM Generation4 CH4,Channel-PWM Generation3 CH3,TIM_MasterOutputTrigger,RepetitionCounter TIM1.Prescaler=0 +TIM1.RepetitionCounter=20 TIM1.TIM_MasterOutputTrigger=TIM_TRGO_UPDATE TIM11.IPParameters=Prescaler TIM11.Prescaler=180-1 @@ -486,10 +492,11 @@ TIM5.IPParameters=Prescaler TIM5.Prescaler=90-1 TIM8.Channel-PWM\ Generation3\ CH3=TIM_CHANNEL_3 TIM8.Channel-PWM\ Generation4\ CH4=TIM_CHANNEL_4 -TIM8.IPParameters=Prescaler,Period,TIM_MasterSlaveMode,TIM_MasterOutputTrigger,Channel-PWM Generation3 CH3,Channel-PWM Generation4 CH4,OC4Preload_PWM +TIM8.IPParameters=Prescaler,Period,TIM_MasterSlaveMode,TIM_MasterOutputTrigger,Channel-PWM Generation3 CH3,Channel-PWM Generation4 CH4,OC4Preload_PWM,RepetitionCounter TIM8.OC4Preload_PWM=ENABLE TIM8.Period=65535 TIM8.Prescaler=0 +TIM8.RepetitionCounter=20 TIM8.TIM_MasterOutputTrigger=TIM_TRGO_RESET TIM8.TIM_MasterSlaveMode=TIM_MASTERSLAVEMODE_DISABLE USART3.IPParameters=VirtualMode @@ -510,6 +517,8 @@ VP_TIM12_VS_ClockSourceINT.Mode=Internal VP_TIM12_VS_ClockSourceINT.Signal=TIM12_VS_ClockSourceINT VP_TIM1_VS_ClockSourceINT.Mode=Internal VP_TIM1_VS_ClockSourceINT.Signal=TIM1_VS_ClockSourceINT +VP_TIM1_VS_OPM.Mode=OPM_bit +VP_TIM1_VS_OPM.Signal=TIM1_VS_OPM VP_TIM2_VS_ClockSourceINT.Mode=Internal VP_TIM2_VS_ClockSourceINT.Signal=TIM2_VS_ClockSourceINT VP_TIM2_VS_no_output1.Mode=Output Compare1 No Output @@ -524,8 +533,6 @@ VP_TIM5_VS_ClockSourceINT.Mode=Internal VP_TIM5_VS_ClockSourceINT.Signal=TIM5_VS_ClockSourceINT VP_TIM8_VS_ClockSourceINT.Mode=Internal VP_TIM8_VS_ClockSourceINT.Signal=TIM8_VS_ClockSourceINT -VP_TIM8_VS_ClockSourceITR.Mode=TriggerSource_ITR0 -VP_TIM8_VS_ClockSourceITR.Signal=TIM8_VS_ClockSourceITR -VP_TIM8_VS_ControllerModeTrigger.Mode=Trigger Mode -VP_TIM8_VS_ControllerModeTrigger.Signal=TIM8_VS_ControllerModeTrigger +VP_TIM8_VS_OPM.Mode=OPM_bit +VP_TIM8_VS_OPM.Signal=TIM8_VS_OPM board=custom diff --git a/Информация для программиста (УПП СП СЭД)/Описание работы с платой управления УПП.docx b/Информация для программиста (УПП СП СЭД)/Описание работы с платой управления УПП.docx index 897126a..e8a97e2 100644 Binary files a/Информация для программиста (УПП СП СЭД)/Описание работы с платой управления УПП.docx and b/Информация для программиста (УПП СП СЭД)/Описание работы с платой управления УПП.docx differ