ШИМ и контроль угла отлажене на 417 более менее
Оптимизированы конфиг дефайны - в мкс и мс, а не тиках
This commit is contained in:
parent
2b22c5b0eb
commit
d918ffb860
@ -33,7 +33,7 @@
|
|||||||
#define UPP_SIMULATE_I ///< Симулировт токи а не брать с АЦП
|
#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
|
* @ingroup UPP_CONFIG
|
||||||
* @brief Дефолтные параметры для внешней памяти. Они применятся по команде или по ошибке
|
* @brief Дефолтные параметры для внешней памяти. Они применятся по команде или по ошибке
|
||||||
* @details Префиксы
|
* @details Префиксы
|
||||||
@ -41,11 +41,10 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
/* Номинальные параметры */
|
/* Уставки по температурам */
|
||||||
#define SETPOINT_TEMP_WARN 70
|
#define SETPOINT_TEMP_WARN 70
|
||||||
#define SETPOINT_TEMP_ERR 85
|
#define SETPOINT_TEMP_ERR 85
|
||||||
|
|
||||||
|
|
||||||
/* Номинальные параметры */
|
/* Номинальные параметры */
|
||||||
#define NOM_PHASE_NUMB 3
|
#define NOM_PHASE_NUMB 3
|
||||||
#define NOM_U_V_DEFAULT 690
|
#define NOM_U_V_DEFAULT 690
|
||||||
@ -78,7 +77,7 @@
|
|||||||
#define ANGLE_MAX_PERCENT_DEFAULT 0.8
|
#define ANGLE_MAX_PERCENT_DEFAULT 0.8
|
||||||
#define ANGLE_MIN_PERCENT_DEFAULT 0.1
|
#define ANGLE_MIN_PERCENT_DEFAULT 0.1
|
||||||
#define ANGLE_PID_KP_COEF_DEFAULT 1.0
|
#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_PID_KD_COEF_DEFAULT 0
|
||||||
#define ANGLE_REF_ALPHA_COEF_DEFAULT 0.0001
|
#define ANGLE_REF_ALPHA_COEF_DEFAULT 0.0001
|
||||||
|
|
||||||
@ -99,7 +98,7 @@
|
|||||||
#define PWM_THYR_FREQUENCY_HZ_DEFAULT 20000
|
#define PWM_THYR_FREQUENCY_HZ_DEFAULT 20000
|
||||||
#define PWM_THYR_PULSE_NUMBER_DEFAULT 20
|
#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_ADC_PERIOD_US 30 ///< Период опроса АЦП в мкс
|
||||||
#define PM_SLOW_PERIOD_CNT 20 ///< Период обновления медленных расчетов тиках @ref PM_ADC_PERIOD_US
|
#define PM_SLOW_PERIOD_US 500 ///< Период обновления медленных расчетов в мкс (чтобы делилось на @ref PM_ADC_PERIOD_US)
|
||||||
#define PM_TEMP_SLOW_PERIOD_CNT 200 ///< Период обновления датчиков температуры в тиках @ref PM_SLOW_PERIOD_CNT
|
#define PM_TEMP_SLOW_PERIOD_MS 1000 ///< Период опроса АЦП в мс
|
||||||
#define PM_F_SLOW_PERIOD_CNT 2000 ///< Период обновления частоты в тиках @ref PM_SLOW_PERIOD_CNT
|
#define PM_F_SLOW_PERIOD_MS 40 ///< Период обновления частоты в мс
|
||||||
|
#define UPP_INIT_BEFORE_READY_MS 2000 ///< Сколько сканировать сеть, перед выставлением состояния готовности
|
||||||
#define UPP_SLOW_TICKS_FOR_INIT 20000 ///< Сколько тиков ждать медленных измерений ждать перед переходом в готовность
|
|
||||||
|
|
||||||
/* Частоты таймеров в МГц*/
|
/* Частоты таймеров в МГц*/
|
||||||
#define US_TIM5_FREQ_MHZ 90 ///< Частота тиков таймера ШИМ (1-4 каналы)
|
|
||||||
#define ADC_TIM8_FREQ_MZH 180 ///< Частота тиков таймера АЦП
|
|
||||||
#define PWM_TIM1_FREQ_MHZ 180 ///< Частота тиков таймера ШИМ (1-4 каналы)
|
#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 ///< Частота тиков таймера отсчета угла открытия тиристоров
|
#define ANGLE_TIM2_FREQ_MHZ 90 ///< Частота тиков таймера отсчета угла открытия тиристоров
|
||||||
|
|
||||||
|
|
||||||
@ -132,17 +130,17 @@
|
|||||||
|
|
||||||
// ===== ОТЛАДОЧНЫЕ ШТУКИ ДЛЯ 417 ======
|
// ===== ОТЛАДОЧНЫЕ ШТУКИ ДЛЯ 417 ======
|
||||||
#if defined(STM32F417xx)
|
#if defined(STM32F417xx)
|
||||||
#undef US_TIM5_FREQ_MHZ
|
|
||||||
#undef ADC_TIM8_FREQ_MZH
|
|
||||||
#undef PWM_TIM1_FREQ_MHZ
|
#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
|
#undef ANGLE_TIM2_FREQ_MHZ
|
||||||
|
|
||||||
// У 417 меньше частота поэтому меняем прескалер
|
// У 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_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 ANGLE_TIM2_FREQ_MHZ 84 ///< Частота тиков таймера отсчета угла открытия тиристоров
|
||||||
|
|
||||||
#define HAL_PWREx_EnableOverDrive() HAL_ERROR
|
#define HAL_PWREx_EnableOverDrive() HAL_ERROR
|
||||||
|
|||||||
@ -27,7 +27,7 @@
|
|||||||
* @brief Список аварий УПП
|
* @brief Список аварий УПП
|
||||||
*/
|
*/
|
||||||
typedef enum {
|
typedef enum {
|
||||||
UPP_Not_Init = 0, ///< УПП не инициализирован
|
UPP_Init = 0, ///< УПП не инициализирован
|
||||||
UPP_Ready = 1, ///< УПП в готовности
|
UPP_Ready = 1, ///< УПП в готовности
|
||||||
UPP_Work = 2, ///< УПП в работе, управляет тиристорами
|
UPP_Work = 2, ///< УПП в работе, управляет тиристорами
|
||||||
UPP_Error = 3, ///< УПП в аварии
|
UPP_Error = 3, ///< УПП в аварии
|
||||||
@ -96,7 +96,7 @@ typedef struct {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Структура параметров УПП от ПУИ
|
* @brief Структура параметров УПП от ПУИ
|
||||||
* @details Параметры по умолчанию приведены в @ref UPP_DEFAULT_PARAMS
|
* @details Параметры по умолчанию приведены в @ref UPP_PARAMS_DEFAULT
|
||||||
* @note Защиты №X приведены в @ref UPP_ErrorType_t
|
* @note Защиты №X приведены в @ref UPP_ErrorType_t
|
||||||
*/
|
*/
|
||||||
typedef struct {
|
typedef struct {
|
||||||
@ -149,20 +149,26 @@ typedef struct {
|
|||||||
* @brief Дефайны УПП которые используютяс исключительно внутри программы
|
* @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 US_TO_SLOW_TICKS(_us_) ((_us_)/PM_SLOW_PERIOD_US)
|
||||||
#define MS_TO_SLOW_TICKS(_ms_) US_TO_SLOW_TICKS((_ms_)*1000)
|
#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_INTERNAL MB_INTERNAL.param
|
||||||
#define PARAM_PUI MB_DATA.HoldRegs.pui_params
|
#define PARAM_PUI MB_DATA.HoldRegs.pui_params
|
||||||
#define ERR_PUI errors.pui.err
|
#define ERR_PUI errors.pui.err
|
||||||
#define ERR_PRIVATE errors.prvt.f.err
|
#define ERR_PRIVATE errors.prvt.f.err
|
||||||
#define ERR_PRIVATE_CNT errors.prvt.cnt
|
#define ERR_PRIVATE_CNT errors.prvt.cnt
|
||||||
|
|
||||||
|
/* Enum'ы УПП */
|
||||||
/**
|
/**
|
||||||
* @brief Состояния полуволны
|
* @brief Состояния полуволны
|
||||||
*/
|
*/
|
||||||
|
|||||||
@ -62,6 +62,7 @@ void Error_Handler(void);
|
|||||||
/* USER CODE END EFP */
|
/* USER CODE END EFP */
|
||||||
|
|
||||||
/* Private defines -----------------------------------------------------------*/
|
/* Private defines -----------------------------------------------------------*/
|
||||||
|
#define angletim htim2
|
||||||
#define mb_huart huart3
|
#define mb_huart huart3
|
||||||
#define mbdbg_htim htim11
|
#define mbdbg_htim htim11
|
||||||
#define PWM_CHANNEL_1 TIM_CHANNEL_1
|
#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_3 TIM_CHANNEL_3
|
||||||
#define PWM_CHANNEL_4 TIM_CHANNEL_4
|
#define PWM_CHANNEL_4 TIM_CHANNEL_4
|
||||||
#define mem_hspi hspi3
|
#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_5 TIM_CHANNEL_3
|
||||||
#define PWM_CHANNEL_6 TIM_CHANNEL_4
|
#define PWM_CHANNEL_6 TIM_CHANNEL_4
|
||||||
#define mb_htim htim12
|
#define mb_htim htim12
|
||||||
#define adc_tim htim8
|
#define adc_tim htim3
|
||||||
#define usTick ustim.Instance->CNT
|
#define usTick ustim.Instance->CNT
|
||||||
#define hpwm2 htim3
|
#define hpwm2 htim8
|
||||||
#define mb_dbg_huart huart6
|
#define mb_dbg_huart huart6
|
||||||
#define ustim htim5
|
#define ustim htim5
|
||||||
#define hpwm1 htim1
|
#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_Pin GPIO_PIN_2
|
||||||
#define UM_LED_GREEN2_GPIO_Port GPIOE
|
#define UM_LED_GREEN2_GPIO_Port GPIOE
|
||||||
#define CEN_Pin GPIO_PIN_3
|
#define CEN_Pin GPIO_PIN_3
|
||||||
|
|||||||
@ -104,7 +104,7 @@ HAL_StatusTypeDef ADC_Start(ADC_Periodic_t *adc, float PeriodUs)
|
|||||||
HAL_TIM_Base_Stop(adc->htim);
|
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);
|
res = HAL_TIM_Base_Start(adc->htim);
|
||||||
if(res != HAL_OK)
|
if(res != HAL_OK)
|
||||||
|
|||||||
@ -88,7 +88,7 @@ HAL_StatusTypeDef PowerMonitor_Init(PowerMonitor_t *hpm)
|
|||||||
/* Инициализация среднего фильтра для температур */
|
/* Инициализация среднего фильтра для температур */
|
||||||
for(int i = 0; i < ADC_NUMB_OF_T_CHANNELS; i++)
|
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;
|
return HAL_ERROR;
|
||||||
|
|
||||||
Filter_Start(&hpm->avg[ADC_TEMP_CHANNELS_START+i]);
|
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++)
|
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;
|
return HAL_ERROR;
|
||||||
|
|
||||||
Filter_Start(&hpm->avg[ADC_TEMP_CHANNELS_START+i]);
|
Filter_Start(&hpm->avg[ADC_TEMP_CHANNELS_START+i]);
|
||||||
|
|||||||
@ -50,7 +50,7 @@ void MX_ADC3_Init(void)
|
|||||||
hadc3.Init.ContinuousConvMode = DISABLE;
|
hadc3.Init.ContinuousConvMode = DISABLE;
|
||||||
hadc3.Init.DiscontinuousConvMode = DISABLE;
|
hadc3.Init.DiscontinuousConvMode = DISABLE;
|
||||||
hadc3.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_RISING;
|
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.DataAlign = ADC_DATAALIGN_RIGHT;
|
||||||
hadc3.Init.NbrOfConversion = 6;
|
hadc3.Init.NbrOfConversion = 6;
|
||||||
hadc3.Init.DMAContinuousRequests = ENABLE;
|
hadc3.Init.DMAContinuousRequests = ENABLE;
|
||||||
|
|||||||
@ -62,13 +62,13 @@ void MX_GPIO_Init(void)
|
|||||||
HAL_GPIO_WritePin(DO2_GPIO_Port, DO2_Pin, GPIO_PIN_RESET);
|
HAL_GPIO_WritePin(DO2_GPIO_Port, DO2_Pin, GPIO_PIN_RESET);
|
||||||
|
|
||||||
/*Configure GPIO pin Output Level */
|
/*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 */
|
/*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 */
|
/*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 */
|
/*Configure GPIO pin Output Level */
|
||||||
HAL_GPIO_WritePin(GPIOB, DO1_Pin|RDO1_Pin|SCIDE2_Pin|SCIDE1_Pin
|
HAL_GPIO_WritePin(GPIOB, DO1_Pin|RDO1_Pin|SCIDE2_Pin|SCIDE1_Pin
|
||||||
|
|||||||
@ -22,7 +22,6 @@
|
|||||||
#include "can.h"
|
#include "can.h"
|
||||||
#include "dma.h"
|
#include "dma.h"
|
||||||
#include "iwdg.h"
|
#include "iwdg.h"
|
||||||
#include "rtc.h"
|
|
||||||
#include "spi.h"
|
#include "spi.h"
|
||||||
#include "tim.h"
|
#include "tim.h"
|
||||||
#include "usart.h"
|
#include "usart.h"
|
||||||
@ -108,7 +107,6 @@ int main(void)
|
|||||||
MX_USART3_UART_Init();
|
MX_USART3_UART_Init();
|
||||||
MX_CAN1_Init();
|
MX_CAN1_Init();
|
||||||
MX_IWDG_Init();
|
MX_IWDG_Init();
|
||||||
//MX_RTC_Init();
|
|
||||||
MX_TIM1_Init();
|
MX_TIM1_Init();
|
||||||
MX_TIM3_Init();
|
MX_TIM3_Init();
|
||||||
MX_USART6_UART_Init();
|
MX_USART6_UART_Init();
|
||||||
@ -123,11 +121,11 @@ int main(void)
|
|||||||
__HAL_TIM_SET_PRESCALER_FORCE(&ustim, US_TIM5_FREQ_MHZ-1);
|
__HAL_TIM_SET_PRESCALER_FORCE(&ustim, US_TIM5_FREQ_MHZ-1);
|
||||||
#if defined(STM32F417xx)
|
#if defined(STM32F417xx)
|
||||||
// т.к. нет епромки выставляем дефолтные
|
// т.к. нет епромки выставляем дефолтные
|
||||||
UPP_SetDefault(1, 1);
|
UPP_Params_SetDefault(1, 1);
|
||||||
#endif
|
#endif
|
||||||
#else //MATLAB
|
#else //MATLAB
|
||||||
#endif //MATLAB
|
#endif //MATLAB
|
||||||
UPP_Init();
|
UPP_App_Init();
|
||||||
/* USER CODE END 2 */
|
/* USER CODE END 2 */
|
||||||
|
|
||||||
/* Infinite loop */
|
/* Infinite loop */
|
||||||
|
|||||||
@ -53,7 +53,7 @@ void MX_TIM1_Init(void)
|
|||||||
htim1.Init.CounterMode = TIM_COUNTERMODE_UP;
|
htim1.Init.CounterMode = TIM_COUNTERMODE_UP;
|
||||||
htim1.Init.Period = 65535;
|
htim1.Init.Period = 65535;
|
||||||
htim1.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
|
htim1.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
|
||||||
htim1.Init.RepetitionCounter = 0;
|
htim1.Init.RepetitionCounter = 20;
|
||||||
htim1.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
|
htim1.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
|
||||||
if (HAL_TIM_Base_Init(&htim1) != HAL_OK)
|
if (HAL_TIM_Base_Init(&htim1) != HAL_OK)
|
||||||
{
|
{
|
||||||
@ -68,6 +68,10 @@ void MX_TIM1_Init(void)
|
|||||||
{
|
{
|
||||||
Error_Handler();
|
Error_Handler();
|
||||||
}
|
}
|
||||||
|
if (HAL_TIM_OnePulse_Init(&htim1, TIM_OPMODE_SINGLE) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
sMasterConfig.MasterOutputTrigger = TIM_TRGO_UPDATE;
|
sMasterConfig.MasterOutputTrigger = TIM_TRGO_UPDATE;
|
||||||
sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
|
sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
|
||||||
if (HAL_TIMEx_MasterConfigSynchronization(&htim1, &sMasterConfig) != HAL_OK)
|
if (HAL_TIMEx_MasterConfigSynchronization(&htim1, &sMasterConfig) != HAL_OK)
|
||||||
@ -184,9 +188,7 @@ void MX_TIM3_Init(void)
|
|||||||
/* USER CODE END TIM3_Init 0 */
|
/* USER CODE END TIM3_Init 0 */
|
||||||
|
|
||||||
TIM_ClockConfigTypeDef sClockSourceConfig = {0};
|
TIM_ClockConfigTypeDef sClockSourceConfig = {0};
|
||||||
TIM_SlaveConfigTypeDef sSlaveConfig = {0};
|
|
||||||
TIM_MasterConfigTypeDef sMasterConfig = {0};
|
TIM_MasterConfigTypeDef sMasterConfig = {0};
|
||||||
TIM_OC_InitTypeDef sConfigOC = {0};
|
|
||||||
|
|
||||||
/* USER CODE BEGIN TIM3_Init 1 */
|
/* USER CODE BEGIN TIM3_Init 1 */
|
||||||
|
|
||||||
@ -206,42 +208,15 @@ void MX_TIM3_Init(void)
|
|||||||
{
|
{
|
||||||
Error_Handler();
|
Error_Handler();
|
||||||
}
|
}
|
||||||
if (HAL_TIM_PWM_Init(&htim3) != HAL_OK)
|
sMasterConfig.MasterOutputTrigger = TIM_TRGO_UPDATE;
|
||||||
{
|
|
||||||
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.MasterSlaveMode = TIM_MASTERSLAVEMODE_ENABLE;
|
sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_ENABLE;
|
||||||
if (HAL_TIMEx_MasterConfigSynchronization(&htim3, &sMasterConfig) != HAL_OK)
|
if (HAL_TIMEx_MasterConfigSynchronization(&htim3, &sMasterConfig) != HAL_OK)
|
||||||
{
|
{
|
||||||
Error_Handler();
|
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 BEGIN TIM3_Init 2 */
|
||||||
|
|
||||||
/* USER CODE END TIM3_Init 2 */
|
/* USER CODE END TIM3_Init 2 */
|
||||||
HAL_TIM_MspPostInit(&htim3);
|
|
||||||
|
|
||||||
}
|
}
|
||||||
/* TIM5 init function */
|
/* TIM5 init function */
|
||||||
@ -294,6 +269,8 @@ void MX_TIM8_Init(void)
|
|||||||
|
|
||||||
TIM_ClockConfigTypeDef sClockSourceConfig = {0};
|
TIM_ClockConfigTypeDef sClockSourceConfig = {0};
|
||||||
TIM_MasterConfigTypeDef sMasterConfig = {0};
|
TIM_MasterConfigTypeDef sMasterConfig = {0};
|
||||||
|
TIM_OC_InitTypeDef sConfigOC = {0};
|
||||||
|
TIM_BreakDeadTimeConfigTypeDef sBreakDeadTimeConfig = {0};
|
||||||
|
|
||||||
/* USER CODE BEGIN TIM8_Init 1 */
|
/* USER CODE BEGIN TIM8_Init 1 */
|
||||||
|
|
||||||
@ -301,9 +278,9 @@ void MX_TIM8_Init(void)
|
|||||||
htim8.Instance = TIM8;
|
htim8.Instance = TIM8;
|
||||||
htim8.Init.Prescaler = 0;
|
htim8.Init.Prescaler = 0;
|
||||||
htim8.Init.CounterMode = TIM_COUNTERMODE_UP;
|
htim8.Init.CounterMode = TIM_COUNTERMODE_UP;
|
||||||
htim8.Init.Period = 1800-1;
|
htim8.Init.Period = 65535;
|
||||||
htim8.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
|
htim8.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
|
||||||
htim8.Init.RepetitionCounter = 0;
|
htim8.Init.RepetitionCounter = 20;
|
||||||
htim8.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
|
htim8.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
|
||||||
if (HAL_TIM_Base_Init(&htim8) != HAL_OK)
|
if (HAL_TIM_Base_Init(&htim8) != HAL_OK)
|
||||||
{
|
{
|
||||||
@ -314,15 +291,50 @@ void MX_TIM8_Init(void)
|
|||||||
{
|
{
|
||||||
Error_Handler();
|
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;
|
sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
|
||||||
if (HAL_TIMEx_MasterConfigSynchronization(&htim8, &sMasterConfig) != HAL_OK)
|
if (HAL_TIMEx_MasterConfigSynchronization(&htim8, &sMasterConfig) != HAL_OK)
|
||||||
{
|
{
|
||||||
Error_Handler();
|
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 BEGIN TIM8_Init 2 */
|
||||||
|
|
||||||
/* USER CODE END TIM8_Init 2 */
|
/* USER CODE END TIM8_Init 2 */
|
||||||
|
HAL_TIM_MspPostInit(&htim8);
|
||||||
|
|
||||||
}
|
}
|
||||||
/* TIM11 init function */
|
/* TIM11 init function */
|
||||||
@ -505,27 +517,27 @@ void HAL_TIM_MspPostInit(TIM_HandleTypeDef* timHandle)
|
|||||||
|
|
||||||
/* USER CODE END TIM1_MspPostInit 1 */
|
/* 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();
|
__HAL_RCC_GPIOC_CLK_ENABLE();
|
||||||
/**TIM3 GPIO Configuration
|
/**TIM8 GPIO Configuration
|
||||||
PC8 ------> TIM3_CH3
|
PC8 ------> TIM8_CH3
|
||||||
PC9 ------> TIM3_CH4
|
PC9 ------> TIM8_CH4
|
||||||
*/
|
*/
|
||||||
GPIO_InitStruct.Pin = PWM5_Pin|PWM6_Pin;
|
GPIO_InitStruct.Pin = PWM5_Pin|PWM6_Pin;
|
||||||
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
|
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
|
||||||
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||||
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
|
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);
|
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 */
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -38,12 +38,10 @@ HAL_StatusTypeDef Angle_Init(Angle_Handle_t *hangle)
|
|||||||
Angle_Reset(hangle, UPP_PHASE_B);
|
Angle_Reset(hangle, UPP_PHASE_B);
|
||||||
Angle_Reset(hangle, UPP_PHASE_C);
|
Angle_Reset(hangle, UPP_PHASE_C);
|
||||||
|
|
||||||
|
|
||||||
// Инициализация углов
|
// Инициализация углов
|
||||||
float angle_max = to_float(PARAM_INTERNAL.angle.Angle_Max, 65535);
|
float angle_max = to_float(PARAM_INTERNAL.angle.Angle_Max, 65535);
|
||||||
float angle_min = to_float(PARAM_INTERNAL.angle.Angle_Min, 65535);
|
float angle_min = to_float(PARAM_INTERNAL.angle.Angle_Min, 65535);
|
||||||
|
|
||||||
|
|
||||||
hangle->f.Initialized = 1;
|
hangle->f.Initialized = 1;
|
||||||
return HAL_OK;
|
return HAL_OK;
|
||||||
}
|
}
|
||||||
@ -121,8 +119,8 @@ void Angle_PID_Reset(Angle_Handle_t *hangle)
|
|||||||
* @brief Выставление степени открытия тиристоров.
|
* @brief Выставление степени открытия тиристоров.
|
||||||
* @param hangle Указатель на таймер
|
* @param hangle Указатель на таймер
|
||||||
* @param OpenLevel Насколько открыть тиристор:
|
* @param OpenLevel Насколько открыть тиристор:
|
||||||
- 0 - полностбю закрыт,
|
- 0 - максимально закрыт,
|
||||||
- 1 - полностью открыт
|
- 1 - максимально открыт
|
||||||
* @return HAL Status.
|
* @return HAL Status.
|
||||||
*/
|
*/
|
||||||
HAL_StatusTypeDef Angle_SetAngle(Angle_Handle_t *hangle, float OpenLevel)
|
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)
|
switch(Phase)
|
||||||
{
|
{
|
||||||
case UPP_PHASE_A:
|
case UPP_PHASE_A:
|
||||||
|
__HAL_TIM_CLEAR_IT(hangle->htim, TIM_IT_CC1); // очищаем флаг навсякий
|
||||||
__HAL_TIM_SET_COMPARE(hangle->htim, ANGLE_CHANNEL_1, ccr_ticks);
|
__HAL_TIM_SET_COMPARE(hangle->htim, ANGLE_CHANNEL_1, ccr_ticks);
|
||||||
// Если слишком маленький timer_tick и счетчик уже перевалил за ccr, но не сгенерил прервыание:
|
// Если слишком маленький timer_tick и счетчик уже перевалил за ccr, но не сгенерил прервыание:
|
||||||
if (__HAL_TIM_GET_COMPARE(hangle->htim, ANGLE_CHANNEL_1) <= __HAL_TIM_GET_COUNTER(hangle->htim))
|
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;
|
break;
|
||||||
|
|
||||||
case UPP_PHASE_B:
|
case UPP_PHASE_B:
|
||||||
|
__HAL_TIM_CLEAR_IT(hangle->htim, TIM_IT_CC2); // очищаем флаг навсякий
|
||||||
__HAL_TIM_SET_COMPARE(hangle->htim, ANGLE_CHANNEL_2, ccr_ticks);
|
__HAL_TIM_SET_COMPARE(hangle->htim, ANGLE_CHANNEL_2, ccr_ticks);
|
||||||
// Если слишком маленький timer_tick и счетчик уже перевалил за ccr, но не сгенерил прервыание:
|
// Если слишком маленький timer_tick и счетчик уже перевалил за ccr, но не сгенерил прервыание:
|
||||||
if (__HAL_TIM_GET_COMPARE(hangle->htim, ANGLE_CHANNEL_2) <= __HAL_TIM_GET_COUNTER(hangle->htim))
|
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;
|
break;
|
||||||
|
|
||||||
case UPP_PHASE_C:
|
case UPP_PHASE_C:
|
||||||
|
__HAL_TIM_CLEAR_IT(hangle->htim, TIM_IT_CC3); // очищаем флаг навсякий
|
||||||
__HAL_TIM_SET_COMPARE(hangle->htim, ANGLE_CHANNEL_3, ccr_ticks);
|
__HAL_TIM_SET_COMPARE(hangle->htim, ANGLE_CHANNEL_3, ccr_ticks);
|
||||||
// Если слишком маленький timer_tick и счетчик уже перевалил за ccr, но не сгенерил прервыание:
|
// Если слишком маленький timer_tick и счетчик уже перевалил за ccr, но не сгенерил прервыание:
|
||||||
if (__HAL_TIM_GET_COMPARE(hangle->htim, ANGLE_CHANNEL_3) <= __HAL_TIM_GET_COUNTER(hangle->htim))
|
if (__HAL_TIM_GET_COMPARE(hangle->htim, ANGLE_CHANNEL_3) <= __HAL_TIM_GET_COUNTER(hangle->htim))
|
||||||
|
|||||||
@ -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_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_1);
|
||||||
HAL_TIM_PWM_Start(&hpwm1, PWM_CHANNEL_2);
|
HAL_TIM_PWM_Start(&hpwm1, PWM_CHANNEL_2);
|
||||||
HAL_TIM_PWM_Start(&hpwm1, PWM_CHANNEL_3);
|
HAL_TIM_PWM_Start(&hpwm1, PWM_CHANNEL_3);
|
||||||
HAL_TIM_PWM_Start(&hpwm1, PWM_CHANNEL_4);
|
HAL_TIM_PWM_Start(&hpwm1, PWM_CHANNEL_4);
|
||||||
HAL_TIM_PWM_Start(&hpwm2, PWM_CHANNEL_5);
|
HAL_TIM_PWM_Start(&hpwm2, PWM_CHANNEL_5);
|
||||||
HAL_TIM_PWM_Start(&hpwm2, PWM_CHANNEL_6);
|
HAL_TIM_PWM_Start(&hpwm2, PWM_CHANNEL_6);
|
||||||
|
PWM_Stop(hpwm, 0, 1);
|
||||||
|
|
||||||
|
#ifndef PWM_HARDWARE_IMPULSES_CONTROL
|
||||||
HAL_TIM_Base_Start_IT(&hpwm1);
|
HAL_TIM_Base_Start_IT(&hpwm1);
|
||||||
|
#endif
|
||||||
|
|
||||||
return HAL_OK;
|
return HAL_OK;
|
||||||
}
|
}
|
||||||
@ -103,13 +106,26 @@ HAL_StatusTypeDef PWM_Start(PWM_Handle_t *hpwm, UPP_Phase_t Phase)
|
|||||||
|
|
||||||
// Запуск только если таймер в режиме ожидания
|
// Запуск только если таймер в режиме ожидания
|
||||||
case PWM_THYR_TIM_WAIT:
|
case PWM_THYR_TIM_WAIT:
|
||||||
|
#ifndef PWM_HARDWARE_IMPULSES_CONTROL
|
||||||
hpwm->Phase[Phase]->State = PWM_THYR_TIM_START;
|
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:
|
default:
|
||||||
return HAL_ERROR;
|
return HAL_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
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))
|
if(assert_upp(hpwm))
|
||||||
return HAL_ERROR;
|
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 - сбрасываем ВСЕ КАНАЛЫ
|
// Если 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++)
|
for(int ch = 0; ch < 6; ch++)
|
||||||
{
|
{
|
||||||
__PWM_SetOutputState(&hpwm->AllPhases[ch], PWM_DISABLE);
|
__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;
|
||||||
|
|
||||||
return HAL_OK;
|
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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
* @brief Хендл ШИМ тиристоров.
|
* @brief Хендл ШИМ тиристоров.
|
||||||
@ -172,6 +202,7 @@ HAL_StatusTypeDef PWM_Handle(PWM_Handle_t *hpwm)
|
|||||||
if (hPhase->htim == NULL)
|
if (hPhase->htim == NULL)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
#ifndef PWM_HARDWARE_IMPULSES_CONTROL
|
||||||
switch (hPhase->State)
|
switch (hPhase->State)
|
||||||
{
|
{
|
||||||
case PWM_THYR_DISABLED: // канал отключен
|
case PWM_THYR_DISABLED: // канал отключен
|
||||||
@ -208,6 +239,14 @@ HAL_StatusTypeDef PWM_Handle(PWM_Handle_t *hpwm)
|
|||||||
__PWM_SetOutputState(hPhase, PWM_DISABLE);
|
__PWM_SetOutputState(hPhase, PWM_DISABLE);
|
||||||
break;
|
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;
|
return HAL_OK;
|
||||||
}
|
}
|
||||||
@ -233,7 +272,7 @@ HAL_StatusTypeDef PWM_SetConfig(PWM_Handle_t *hpwm, uint8_t PhaseMask, uint16_t
|
|||||||
hpwm->Config.Frequency = Frequency;
|
hpwm->Config.Frequency = Frequency;
|
||||||
// Высставление периодов
|
// Высставление периодов
|
||||||
__HAL_TIM_SET_AUTORELOAD(&hpwm1, TIM_FreqToTick(Frequency, PWM_TIM1_FREQ_MHZ-1));
|
__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
|
// Скважности 50/50
|
||||||
__HAL_TIM_SET_COMPARE(&hpwm1, PWM_CHANNEL_1, __HAL_TIM_GET_AUTORELOAD(&hpwm1)/2);
|
__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);
|
__HAL_TIM_SET_COMPARE(&hpwm1, PWM_CHANNEL_2, __HAL_TIM_GET_AUTORELOAD(&hpwm1)/2);
|
||||||
@ -249,7 +288,11 @@ HAL_StatusTypeDef PWM_SetConfig(PWM_Handle_t *hpwm, uint8_t PhaseMask, uint16_t
|
|||||||
|
|
||||||
PWM_Stop(hpwm, 0, 1);
|
PWM_Stop(hpwm, 0, 1);
|
||||||
|
|
||||||
|
#ifndef PWM_HARDWARE_IMPULSES_CONTROL
|
||||||
return HAL_TIM_Base_Start_IT(&hpwm1);
|
return HAL_TIM_Base_Start_IT(&hpwm1);
|
||||||
|
#else
|
||||||
|
return HAL_OK;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -317,6 +360,7 @@ HAL_StatusTypeDef PWM_SetPolarity(PWM_Handle_t *hpwm, int polarity)
|
|||||||
}
|
}
|
||||||
return HAL_OK;
|
return HAL_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Установка режима для канала ШИМ.
|
* @brief Установка режима для канала ШИМ.
|
||||||
* @param hpwm Указатель на хендл ШИМ тиристоров
|
* @param hpwm Указатель на хендл ШИМ тиристоров
|
||||||
@ -331,9 +375,9 @@ static HAL_StatusTypeDef __PWM_SetOutputState(PWM_Channel_t *hCh, uint32_t state
|
|||||||
if (hCh->htim == NULL)
|
if (hCh->htim == NULL)
|
||||||
return HAL_ERROR;
|
return HAL_ERROR;
|
||||||
|
|
||||||
|
|
||||||
uint32_t ch_mode = state;
|
uint32_t ch_mode = state;
|
||||||
|
|
||||||
|
// выставляем режим каналов
|
||||||
switch(hCh->ChMask)
|
switch(hCh->ChMask)
|
||||||
{
|
{
|
||||||
case TIM_CHANNEL_1:
|
case TIM_CHANNEL_1:
|
||||||
@ -355,5 +399,12 @@ static HAL_StatusTypeDef __PWM_SetOutputState(PWM_Channel_t *hCh, uint32_t state
|
|||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// в последнюю очередь включаем выход. Перед этим настраиваем каналы на ШИМ
|
||||||
|
if(state == PWM_ENABLE)
|
||||||
|
{
|
||||||
|
__HAL_TIM_MOE_ENABLE(hCh->htim);
|
||||||
|
}
|
||||||
|
|
||||||
return HAL_OK;
|
return HAL_OK;
|
||||||
}
|
}
|
||||||
@ -10,11 +10,11 @@
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#define PWM_HARDWARE_IMPULSES_CONTROL
|
||||||
|
|
||||||
|
|
||||||
#define PWM_ENABLE TIM_OCMODE_PWM2
|
#define PWM_ENABLE TIM_OCMODE_PWM2
|
||||||
#define PWM_DISABLE TIM_OCMODE_FORCED_ACTIVE
|
#define PWM_DISABLE TIM_OCMODE_FORCED_INACTIVE
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -11,15 +11,15 @@
|
|||||||
|
|
||||||
UPP_t upp;
|
UPP_t upp;
|
||||||
float dbg_iref = 1;
|
float dbg_iref = 1;
|
||||||
int dbg_polarity = 1;
|
int dbg_polarity = 0;
|
||||||
// ОСНОВНОЙ ЦИКЛ main.c
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Инициализация УПП.
|
* @brief Инициализация УПП.
|
||||||
* @return 0 - если ОК, >1 если ошибка.
|
* @return 0 - если ОК, >1 если ошибка.
|
||||||
*/
|
*/
|
||||||
int UPP_Init(void)
|
int UPP_App_Init(void)
|
||||||
{
|
{
|
||||||
|
upp.workmode = UPP_Init;
|
||||||
/* Очищаем входы */
|
/* Очищаем входы */
|
||||||
UPP_IO_Init();
|
UPP_IO_Init();
|
||||||
|
|
||||||
@ -46,8 +46,6 @@ int UPP_Init(void)
|
|||||||
{
|
{
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
upp.workmode = UPP_Ready;
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -57,7 +55,7 @@ int UPP_Init(void)
|
|||||||
*/
|
*/
|
||||||
int UPP_PreWhile(void)
|
int UPP_PreWhile(void)
|
||||||
{
|
{
|
||||||
UPP_Params_InternalControl();
|
UPP_Params_ControlInternal();
|
||||||
|
|
||||||
if(Angle_SetRange(&upp.hangle, 0.0, 0.8) != HAL_OK)
|
if(Angle_SetRange(&upp.hangle, 0.0, 0.8) != HAL_OK)
|
||||||
return 1;
|
return 1;
|
||||||
@ -102,7 +100,7 @@ int UPP_While(void)
|
|||||||
// Сброс на дефолтные по запросу
|
// Сброс на дефолтные по запросу
|
||||||
if(upp.call->set_default_pui || upp.call->set_default_internal)
|
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)
|
switch(upp.workmode)
|
||||||
{
|
{
|
||||||
/* Состояние инициализации */
|
/* Состояние инициализации */
|
||||||
case UPP_Not_Init:
|
case UPP_Init:
|
||||||
if(slow_cnt > UPP_SLOW_TICKS_FOR_INIT)
|
if(slow_cnt > MS_TO_SLOW_TICKS(UPP_INIT_BEFORE_READY_MS))
|
||||||
{
|
{
|
||||||
|
slow_cnt = 0; // сбрасываем чтобы потом еще раз инициализироватся
|
||||||
upp.workmode = UPP_Ready;
|
upp.workmode = UPP_Ready;
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
slow_cnt++;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
/* Состояние готовности */
|
/* Состояние готовности */
|
||||||
@ -147,7 +150,7 @@ int UPP_While(void)
|
|||||||
UPP_DO.Error(DISABLE);
|
UPP_DO.Error(DISABLE);
|
||||||
// если пришла команда на остановку
|
// если пришла команда на остановку
|
||||||
if (!upp.call->go)
|
if (!upp.call->go)
|
||||||
upp.workmode = UPP_Ready;
|
upp.workmode = UPP_Init;
|
||||||
|
|
||||||
// Регулирование тиристоров
|
// Регулирование тиристоров
|
||||||
#ifndef UPP_SIMULATE_I // берем с АЦП
|
#ifndef UPP_SIMULATE_I // берем с АЦП
|
||||||
@ -181,7 +184,7 @@ int UPP_While(void)
|
|||||||
UPP_DO.Error(ENABLE);
|
UPP_DO.Error(ENABLE);
|
||||||
// Находимся до тех пор пока ошибки не будет устранена
|
// Находимся до тех пор пока ошибки не будет устранена
|
||||||
if(errors.common == Err_None)
|
if(errors.common == Err_None)
|
||||||
upp.workmode = UPP_Not_Init;
|
upp.workmode = UPP_Init;
|
||||||
|
|
||||||
retval = 1;
|
retval = 1;
|
||||||
break;
|
break;
|
||||||
@ -189,7 +192,7 @@ int UPP_While(void)
|
|||||||
|
|
||||||
|
|
||||||
UPP_Errors_Handle();
|
UPP_Errors_Handle();
|
||||||
UPP_Params_InternalControl();
|
UPP_Params_ControlInternal();
|
||||||
|
|
||||||
|
|
||||||
upp.pm.f.runSlow = 0;
|
upp.pm.f.runSlow = 0;
|
||||||
@ -209,7 +212,7 @@ int UPP_While(void)
|
|||||||
*/
|
*/
|
||||||
void UPP_Tick(void)
|
void UPP_Tick(void)
|
||||||
{
|
{
|
||||||
if(upp.workmode == UPP_Not_Init)
|
if(upp.workmode == UPP_Init)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -49,7 +49,7 @@ extern UPP_t upp;
|
|||||||
|
|
||||||
|
|
||||||
/* Инициализация УПП */
|
/* Инициализация УПП */
|
||||||
int UPP_Init(void);
|
int UPP_App_Init(void);
|
||||||
/* Инициализация основного цикла УПП. */
|
/* Инициализация основного цикла УПП. */
|
||||||
int UPP_PreWhile(void);
|
int UPP_PreWhile(void);
|
||||||
/* Основной цикл УПП. */
|
/* Основной цикл УПП. */
|
||||||
|
|||||||
@ -18,7 +18,7 @@ static void __AngleSetLimit(void);
|
|||||||
* @brief Контроль внутренних параметров УПП.
|
* @brief Контроль внутренних параметров УПП.
|
||||||
* @return HAL Status.
|
* @return HAL Status.
|
||||||
*/
|
*/
|
||||||
void UPP_Params_InternalControl(void)
|
void UPP_Params_ControlInternal(void)
|
||||||
{
|
{
|
||||||
__AngleSetLimit();
|
__AngleSetLimit();
|
||||||
if(upp.call->go) // при запущеном УПП ничего не меняем
|
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 pui_default Сбросить параметры ПУИ
|
||||||
* @param internal_default Сбросить внутренние параметры
|
* @param internal_default Сбросить внутренние параметры
|
||||||
* @return HAL Status.
|
* @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)
|
if(pui_default)
|
||||||
{
|
{
|
||||||
|
|||||||
@ -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
|
#endif //_UPP_PARAMS_H
|
||||||
@ -331,7 +331,7 @@
|
|||||||
<Type>0</Type>
|
<Type>0</Type>
|
||||||
<LineNumber>407</LineNumber>
|
<LineNumber>407</LineNumber>
|
||||||
<EnabledFlag>1</EnabledFlag>
|
<EnabledFlag>1</EnabledFlag>
|
||||||
<Address>134233366</Address>
|
<Address>134233418</Address>
|
||||||
<ByteObject>0</ByteObject>
|
<ByteObject>0</ByteObject>
|
||||||
<HtxType>0</HtxType>
|
<HtxType>0</HtxType>
|
||||||
<ManyObjects>0</ManyObjects>
|
<ManyObjects>0</ManyObjects>
|
||||||
@ -368,12 +368,12 @@
|
|||||||
<Ww>
|
<Ww>
|
||||||
<count>1</count>
|
<count>1</count>
|
||||||
<WinNumber>1</WinNumber>
|
<WinNumber>1</WinNumber>
|
||||||
<ItemText>upp</ItemText>
|
<ItemText>upp,0x0A</ItemText>
|
||||||
</Ww>
|
</Ww>
|
||||||
<Ww>
|
<Ww>
|
||||||
<count>2</count>
|
<count>2</count>
|
||||||
<WinNumber>1</WinNumber>
|
<WinNumber>1</WinNumber>
|
||||||
<ItemText>uwTick</ItemText>
|
<ItemText>uwTick,0x0A</ItemText>
|
||||||
</Ww>
|
</Ww>
|
||||||
<Ww>
|
<Ww>
|
||||||
<count>3</count>
|
<count>3</count>
|
||||||
@ -388,7 +388,7 @@
|
|||||||
<Ww>
|
<Ww>
|
||||||
<count>5</count>
|
<count>5</count>
|
||||||
<WinNumber>1</WinNumber>
|
<WinNumber>1</WinNumber>
|
||||||
<ItemText>hbt</ItemText>
|
<ItemText>hbt,0x0A</ItemText>
|
||||||
</Ww>
|
</Ww>
|
||||||
<Ww>
|
<Ww>
|
||||||
<count>6</count>
|
<count>6</count>
|
||||||
@ -410,6 +410,31 @@
|
|||||||
<WinNumber>1</WinNumber>
|
<WinNumber>1</WinNumber>
|
||||||
<ItemText>dbg_iref</ItemText>
|
<ItemText>dbg_iref</ItemText>
|
||||||
</Ww>
|
</Ww>
|
||||||
|
<Ww>
|
||||||
|
<count>10</count>
|
||||||
|
<WinNumber>1</WinNumber>
|
||||||
|
<ItemText>upp.call->reset_mcu</ItemText>
|
||||||
|
</Ww>
|
||||||
|
<Ww>
|
||||||
|
<count>11</count>
|
||||||
|
<WinNumber>1</WinNumber>
|
||||||
|
<ItemText>upp.pm.zc.Channel[0].HalfWave</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>
|
||||||
</WatchWindow1>
|
</WatchWindow1>
|
||||||
<WatchWindow2>
|
<WatchWindow2>
|
||||||
<Ww>
|
<Ww>
|
||||||
@ -518,18 +543,8 @@
|
|||||||
<LogicAnalyzers>
|
<LogicAnalyzers>
|
||||||
<Wi>
|
<Wi>
|
||||||
<IntNumber>0</IntNumber>
|
<IntNumber>0</IntNumber>
|
||||||
<FirstString>`upp.pm.measured.real.U[0]</FirstString>
|
<FirstString>`upp.pm.zc.Channel[0].HalfWave</FirstString>
|
||||||
<SecondString>0000000000000000007097C00000000000709740000000000000000000000000000000007570702E706D2E6D656173757265642E7265616C2E555B305D000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000700000001000000731CC7711CC7D13F1400000000000000000000000000000000000000A49F0008</SecondString>
|
<SecondString>0000000000000000000000000000000000000040000000000000000000000000000000007570702E706D2E7A632E4368616E6E656C5B305D2E48616C66576176650000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000500000001000000000000000000F03F1400000000000000000000000000000000000000FC9E0008</SecondString>
|
||||||
</Wi>
|
|
||||||
<Wi>
|
|
||||||
<IntNumber>1</IntNumber>
|
|
||||||
<FirstString>`upp.pm.measured.real.U[1]</FirstString>
|
|
||||||
<SecondString>0080000000000000007097C00000000000709740000000000000000000000000000000007570702E706D2E6D656173757265642E7265616C2E555B315D000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000700000002000000398EE3388EE3D83F1400000000000000000000000000000000000000A49F0008</SecondString>
|
|
||||||
</Wi>
|
|
||||||
<Wi>
|
|
||||||
<IntNumber>2</IntNumber>
|
|
||||||
<FirstString>`upp.pm.measured.final.F[0]</FirstString>
|
|
||||||
<SecondString>0000800000000000000000000000000000805140000000000000000000000000000000007570702E706D2E6D656173757265642E66696E616C2E465B305D0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000700000003000000555555555555D53F140000000000000000000000000000000000000028020008</SecondString>
|
|
||||||
</Wi>
|
</Wi>
|
||||||
</LogicAnalyzers>
|
</LogicAnalyzers>
|
||||||
<SystemViewers>
|
<SystemViewers>
|
||||||
@ -545,6 +560,10 @@
|
|||||||
<Name>System Viewer\TIM14</Name>
|
<Name>System Viewer\TIM14</Name>
|
||||||
<WinId>35903</WinId>
|
<WinId>35903</WinId>
|
||||||
</Entry>
|
</Entry>
|
||||||
|
<Entry>
|
||||||
|
<Name>System Viewer\TIM2</Name>
|
||||||
|
<WinId>35900</WinId>
|
||||||
|
</Entry>
|
||||||
<Entry>
|
<Entry>
|
||||||
<Name>System Viewer\TIM5</Name>
|
<Name>System Viewer\TIM5</Name>
|
||||||
<WinId>35905</WinId>
|
<WinId>35905</WinId>
|
||||||
|
|||||||
83
UPP/UPP.ioc
83
UPP/UPP.ioc
@ -94,25 +94,25 @@ Mcu.Pin23=PB11
|
|||||||
Mcu.Pin24=PB13
|
Mcu.Pin24=PB13
|
||||||
Mcu.Pin25=PG6
|
Mcu.Pin25=PG6
|
||||||
Mcu.Pin26=PC6
|
Mcu.Pin26=PC6
|
||||||
Mcu.Pin27=PC8
|
Mcu.Pin27=PC7
|
||||||
Mcu.Pin28=PC9
|
Mcu.Pin28=PC8
|
||||||
Mcu.Pin29=PA8
|
Mcu.Pin29=PC9
|
||||||
Mcu.Pin3=PE5
|
Mcu.Pin3=PE5
|
||||||
Mcu.Pin30=PA9
|
Mcu.Pin30=PA8
|
||||||
Mcu.Pin31=PA10
|
Mcu.Pin31=PA9
|
||||||
Mcu.Pin32=PA11
|
Mcu.Pin32=PA10
|
||||||
Mcu.Pin33=PA12
|
Mcu.Pin33=PA11
|
||||||
Mcu.Pin34=PA13
|
Mcu.Pin34=PA12
|
||||||
Mcu.Pin35=PA14
|
Mcu.Pin35=PA13
|
||||||
Mcu.Pin36=PA15
|
Mcu.Pin36=PA14
|
||||||
Mcu.Pin37=PC10
|
Mcu.Pin37=PA15
|
||||||
Mcu.Pin38=PC11
|
Mcu.Pin38=PC10
|
||||||
Mcu.Pin39=PC12
|
Mcu.Pin39=PC11
|
||||||
Mcu.Pin4=PE6
|
Mcu.Pin4=PE6
|
||||||
Mcu.Pin40=PD2
|
Mcu.Pin40=PC12
|
||||||
Mcu.Pin41=PD3
|
Mcu.Pin41=PD2
|
||||||
Mcu.Pin42=PD6
|
Mcu.Pin42=PD3
|
||||||
Mcu.Pin43=PG9
|
Mcu.Pin43=PD6
|
||||||
Mcu.Pin44=PG12
|
Mcu.Pin44=PG12
|
||||||
Mcu.Pin45=PG15
|
Mcu.Pin45=PG15
|
||||||
Mcu.Pin46=PB3
|
Mcu.Pin46=PB3
|
||||||
@ -128,16 +128,16 @@ Mcu.Pin54=VP_RTC_VS_RTC_Activate
|
|||||||
Mcu.Pin55=VP_RTC_VS_RTC_Calendar
|
Mcu.Pin55=VP_RTC_VS_RTC_Calendar
|
||||||
Mcu.Pin56=VP_SYS_VS_tim14
|
Mcu.Pin56=VP_SYS_VS_tim14
|
||||||
Mcu.Pin57=VP_TIM1_VS_ClockSourceINT
|
Mcu.Pin57=VP_TIM1_VS_ClockSourceINT
|
||||||
Mcu.Pin58=VP_TIM2_VS_ClockSourceINT
|
Mcu.Pin58=VP_TIM1_VS_OPM
|
||||||
Mcu.Pin59=VP_TIM2_VS_no_output1
|
Mcu.Pin59=VP_TIM2_VS_ClockSourceINT
|
||||||
Mcu.Pin6=PC14/OSC32_IN
|
Mcu.Pin6=PC14/OSC32_IN
|
||||||
Mcu.Pin60=VP_TIM2_VS_no_output2
|
Mcu.Pin60=VP_TIM2_VS_no_output1
|
||||||
Mcu.Pin61=VP_TIM2_VS_no_output3
|
Mcu.Pin61=VP_TIM2_VS_no_output2
|
||||||
Mcu.Pin62=VP_TIM3_VS_ClockSourceINT
|
Mcu.Pin62=VP_TIM2_VS_no_output3
|
||||||
Mcu.Pin63=VP_TIM5_VS_ClockSourceINT
|
Mcu.Pin63=VP_TIM3_VS_ClockSourceINT
|
||||||
Mcu.Pin64=VP_TIM8_VS_ControllerModeTrigger
|
Mcu.Pin64=VP_TIM5_VS_ClockSourceINT
|
||||||
Mcu.Pin65=VP_TIM8_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.Pin67=VP_TIM11_VS_ClockSourceINT
|
||||||
Mcu.Pin68=VP_TIM12_VS_ClockSourceINT
|
Mcu.Pin68=VP_TIM12_VS_ClockSourceINT
|
||||||
Mcu.Pin7=PC15/OSC32_OUT
|
Mcu.Pin7=PC15/OSC32_OUT
|
||||||
@ -145,7 +145,7 @@ Mcu.Pin8=PF6
|
|||||||
Mcu.Pin9=PF7
|
Mcu.Pin9=PF7
|
||||||
Mcu.PinsNb=69
|
Mcu.PinsNb=69
|
||||||
Mcu.ThirdPartyNb=0
|
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
|
Mcu.UserName=STM32F427ZGTx
|
||||||
MxCube.Version=6.12.1
|
MxCube.Version=6.12.1
|
||||||
MxDb.Version=DB.6.0.121
|
MxDb.Version=DB.6.0.121
|
||||||
@ -191,7 +191,7 @@ PA4.Signal=GPIO_Output
|
|||||||
PA5.GPIOParameters=PinState,GPIO_Label
|
PA5.GPIOParameters=PinState,GPIO_Label
|
||||||
PA5.GPIO_Label=DO4
|
PA5.GPIO_Label=DO4
|
||||||
PA5.Locked=true
|
PA5.Locked=true
|
||||||
PA5.PinState=GPIO_PIN_SET
|
PA5.PinState=GPIO_PIN_RESET
|
||||||
PA5.Signal=GPIO_Output
|
PA5.Signal=GPIO_Output
|
||||||
PA6.GPIOParameters=PinState,GPIO_Label
|
PA6.GPIOParameters=PinState,GPIO_Label
|
||||||
PA6.GPIO_Label=RDO4
|
PA6.GPIO_Label=RDO4
|
||||||
@ -261,6 +261,8 @@ PC12.GPIOParameters=GPIO_Label
|
|||||||
PC12.GPIO_Label=UM_SPI_MOSI
|
PC12.GPIO_Label=UM_SPI_MOSI
|
||||||
PC12.Mode=Full_Duplex_Master
|
PC12.Mode=Full_Duplex_Master
|
||||||
PC12.Signal=SPI3_MOSI
|
PC12.Signal=SPI3_MOSI
|
||||||
|
PC13.GPIOParameters=GPIO_Label
|
||||||
|
PC13.GPIO_Label=DO3
|
||||||
PC13.Locked=true
|
PC13.Locked=true
|
||||||
PC13.Signal=GPIO_Output
|
PC13.Signal=GPIO_Output
|
||||||
PC14/OSC32_IN.Mode=LSE-External-Oscillator
|
PC14/OSC32_IN.Mode=LSE-External-Oscillator
|
||||||
@ -271,6 +273,11 @@ PC6.GPIOParameters=GPIO_Label
|
|||||||
PC6.GPIO_Label=SCIT1
|
PC6.GPIO_Label=SCIT1
|
||||||
PC6.Mode=Asynchronous
|
PC6.Mode=Asynchronous
|
||||||
PC6.Signal=USART6_TX
|
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.GPIOParameters=GPIO_Label
|
||||||
PC8.GPIO_Label=PWM5
|
PC8.GPIO_Label=PWM5
|
||||||
PC8.Signal=S_TIM8_CH3
|
PC8.Signal=S_TIM8_CH3
|
||||||
@ -347,6 +354,8 @@ PF9.GPIOParameters=GPIO_Label
|
|||||||
PF9.GPIO_Label=AI_Ia
|
PF9.GPIO_Label=AI_Ia
|
||||||
PF9.Mode=IN7
|
PF9.Mode=IN7
|
||||||
PF9.Signal=ADC3_IN7
|
PF9.Signal=ADC3_IN7
|
||||||
|
PG12.GPIOParameters=GPIO_Label
|
||||||
|
PG12.GPIO_Label=ERR_24V
|
||||||
PG12.Locked=true
|
PG12.Locked=true
|
||||||
PG12.Signal=GPIO_Input
|
PG12.Signal=GPIO_Input
|
||||||
PG15.GPIOParameters=GPIO_Label
|
PG15.GPIOParameters=GPIO_Label
|
||||||
@ -358,10 +367,6 @@ PG6.GPIO_Label=UM_SPI_CS
|
|||||||
PG6.GPIO_PuPd=GPIO_PULLDOWN
|
PG6.GPIO_PuPd=GPIO_PULLDOWN
|
||||||
PG6.Locked=true
|
PG6.Locked=true
|
||||||
PG6.Signal=GPIO_Output
|
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.Mode=HSE-External-Oscillator
|
||||||
PH0/OSC_IN.Signal=RCC_OSC_IN
|
PH0/OSC_IN.Signal=RCC_OSC_IN
|
||||||
PH1/OSC_OUT.Mode=HSE-External-Oscillator
|
PH1/OSC_OUT.Mode=HSE-External-Oscillator
|
||||||
@ -397,7 +402,7 @@ ProjectManager.ToolChainLocation=
|
|||||||
ProjectManager.UAScriptAfterPath=
|
ProjectManager.UAScriptAfterPath=
|
||||||
ProjectManager.UAScriptBeforePath=
|
ProjectManager.UAScriptBeforePath=
|
||||||
ProjectManager.UnderRoot=false
|
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.48MHZClocksFreq_Value=90000000
|
||||||
RCC.AHBFreq_Value=180000000
|
RCC.AHBFreq_Value=180000000
|
||||||
RCC.APB1CLKDivider=RCC_HCLK_DIV4
|
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\ Generation2\ CH2=TIM_CHANNEL_2
|
||||||
TIM1.Channel-PWM\ Generation3\ CH3=TIM_CHANNEL_3
|
TIM1.Channel-PWM\ Generation3\ CH3=TIM_CHANNEL_3
|
||||||
TIM1.Channel-PWM\ Generation4\ CH4=TIM_CHANNEL_4
|
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.Prescaler=0
|
||||||
|
TIM1.RepetitionCounter=20
|
||||||
TIM1.TIM_MasterOutputTrigger=TIM_TRGO_UPDATE
|
TIM1.TIM_MasterOutputTrigger=TIM_TRGO_UPDATE
|
||||||
TIM11.IPParameters=Prescaler
|
TIM11.IPParameters=Prescaler
|
||||||
TIM11.Prescaler=180-1
|
TIM11.Prescaler=180-1
|
||||||
@ -486,10 +492,11 @@ TIM5.IPParameters=Prescaler
|
|||||||
TIM5.Prescaler=90-1
|
TIM5.Prescaler=90-1
|
||||||
TIM8.Channel-PWM\ Generation3\ CH3=TIM_CHANNEL_3
|
TIM8.Channel-PWM\ Generation3\ CH3=TIM_CHANNEL_3
|
||||||
TIM8.Channel-PWM\ Generation4\ CH4=TIM_CHANNEL_4
|
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.OC4Preload_PWM=ENABLE
|
||||||
TIM8.Period=65535
|
TIM8.Period=65535
|
||||||
TIM8.Prescaler=0
|
TIM8.Prescaler=0
|
||||||
|
TIM8.RepetitionCounter=20
|
||||||
TIM8.TIM_MasterOutputTrigger=TIM_TRGO_RESET
|
TIM8.TIM_MasterOutputTrigger=TIM_TRGO_RESET
|
||||||
TIM8.TIM_MasterSlaveMode=TIM_MASTERSLAVEMODE_DISABLE
|
TIM8.TIM_MasterSlaveMode=TIM_MASTERSLAVEMODE_DISABLE
|
||||||
USART3.IPParameters=VirtualMode
|
USART3.IPParameters=VirtualMode
|
||||||
@ -510,6 +517,8 @@ VP_TIM12_VS_ClockSourceINT.Mode=Internal
|
|||||||
VP_TIM12_VS_ClockSourceINT.Signal=TIM12_VS_ClockSourceINT
|
VP_TIM12_VS_ClockSourceINT.Signal=TIM12_VS_ClockSourceINT
|
||||||
VP_TIM1_VS_ClockSourceINT.Mode=Internal
|
VP_TIM1_VS_ClockSourceINT.Mode=Internal
|
||||||
VP_TIM1_VS_ClockSourceINT.Signal=TIM1_VS_ClockSourceINT
|
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.Mode=Internal
|
||||||
VP_TIM2_VS_ClockSourceINT.Signal=TIM2_VS_ClockSourceINT
|
VP_TIM2_VS_ClockSourceINT.Signal=TIM2_VS_ClockSourceINT
|
||||||
VP_TIM2_VS_no_output1.Mode=Output Compare1 No Output
|
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_TIM5_VS_ClockSourceINT.Signal=TIM5_VS_ClockSourceINT
|
||||||
VP_TIM8_VS_ClockSourceINT.Mode=Internal
|
VP_TIM8_VS_ClockSourceINT.Mode=Internal
|
||||||
VP_TIM8_VS_ClockSourceINT.Signal=TIM8_VS_ClockSourceINT
|
VP_TIM8_VS_ClockSourceINT.Signal=TIM8_VS_ClockSourceINT
|
||||||
VP_TIM8_VS_ClockSourceITR.Mode=TriggerSource_ITR0
|
VP_TIM8_VS_OPM.Mode=OPM_bit
|
||||||
VP_TIM8_VS_ClockSourceITR.Signal=TIM8_VS_ClockSourceITR
|
VP_TIM8_VS_OPM.Signal=TIM8_VS_OPM
|
||||||
VP_TIM8_VS_ControllerModeTrigger.Mode=Trigger Mode
|
|
||||||
VP_TIM8_VS_ControllerModeTrigger.Signal=TIM8_VS_ControllerModeTrigger
|
|
||||||
board=custom
|
board=custom
|
||||||
|
|||||||
Binary file not shown.
Loading…
Reference in New Issue
Block a user