diff --git a/MATLAB/MCU_Wrapper/run_mex.bat b/MATLAB/MCU_Wrapper/run_mex.bat index add764a..8f7f456 100644 --- a/MATLAB/MCU_Wrapper/run_mex.bat +++ b/MATLAB/MCU_Wrapper/run_mex.bat @@ -88,6 +88,7 @@ set code_PERIPH=.\MCU_STM32_Matlab\stm32_matlab_conf.c^ .\MCU_STM32_Matlab\Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_dma.c^ .\MCU_STM32_Matlab\Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_exti.c^ .\MCU_STM32_Matlab\Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_gpio.c^ + .\MCU_STM32_Matlab\Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_iwdg.c^ .\MCU_STM32_Matlab\Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_pwr.c^ .\MCU_STM32_Matlab\Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_pwr_ex.c^ .\MCU_STM32_Matlab\Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_rcc.c^ diff --git a/MATLAB/app_wrapper/app_io.c b/MATLAB/app_wrapper/app_io.c index 80d5b11..47b461d 100644 --- a/MATLAB/app_wrapper/app_io.c +++ b/MATLAB/app_wrapper/app_io.c @@ -7,7 +7,7 @@ #include "app_wrapper.h" float dbg[16]; -extern float iref_dbg; +extern float dbg_iref; #define PIN_READ(_verbname_) (_verbname_##_GPIO_Port->ODR & (_verbname_##_Pin)) ? 1 : 0 void Write_UPP_Outputs(real_T* Buffer, int ind_port) @@ -115,7 +115,7 @@ void app_readInputs(const real_T* Buffer) { ADC_Set_Channel_Value(ADC3, 8, ReadInputArray(0,4)); ADC_Set_Channel_Value(ADC3, 10, ReadInputArray(0,5)); - iref_dbg = ReadInputArray(1, 0); + dbg_iref = ReadInputArray(1, 0); upp.call->go = ReadInputArray(1, 1); MB_INTERNAL.param.angle.Angle_Max = ReadInputArray(1, 2)*65535; diff --git a/UPP/Core/Configs/upp_config.h b/UPP/Core/Configs/upp_config.h index cdb6f93..866bb04 100644 --- a/UPP/Core/Configs/upp_config.h +++ b/UPP/Core/Configs/upp_config.h @@ -30,12 +30,13 @@ #define TEMP_1 0 #define TEMP_2 1 - +#define UPP_SIMULATE_I ///< Симулировт токи а не брать с АЦП /** * @addtogroup UPP_DEFAULT_PARAMS Default params for external flash * @ingroup UPP_CONFIG * @brief Дефолтные параметры для внешней памяти. Они применятся по команде или по ошибке + * @details Префиксы * @{ */ @@ -56,12 +57,12 @@ #define NOM_I_A_DEFAULT 5 /* Параметры ПУИ */ -#define PUI_Iref_PERCENT_DEFAULT 150 +#define PUI_Iref_PERCENT_DEFAULT 1.5 #define PUI_Tnt_MS_DEFAULT 300 -#define PUI_Umin_PERCENT_DEFAULT 80 -#define PUI_Umax_PERCENT_DEFAULT 120 -#define PUI_Imax_PERCENT_DEFAULT 99 -#define PUI_Imin_PERCENT_DEFAULT 7 +#define PUI_Umin_PERCENT_DEFAULT 0.8 +#define PUI_Umax_PERCENT_DEFAULT 1.2 +#define PUI_Imax_PERCENT_DEFAULT 0.99 +#define PUI_Imin_PERCENT_DEFAULT 0.07 #define PUI_TiMax_US_DEFAULT 5000 #define PUI_Tdelay_SECONDS_DEFAULT 30 #define PUI_Interlace_EN_DEFAULT 5000 @@ -73,12 +74,13 @@ /* Параметры регулятора угла */ +#define ANGLE_PULSE_LENGTH_RESERVE_PERCENT_DEFAULT 1.0 #define ANGLE_MAX_PERCENT_DEFAULT 0.8 #define ANGLE_MIN_PERCENT_DEFAULT 0.1 #define ANGLE_PID_KP_COEF_DEFAULT 1.0 #define ANGLE_PID_KI_COEF_DEFAULT 0.1 #define ANGLE_PID_KD_COEF_DEFAULT 0 -#define ANGLE_REF_ALPHA_COEF_DEFAULT 0.01 +#define ANGLE_REF_ALPHA_COEF_DEFAULT 0.0001 /* Параметри мониторинга сети */ #define PM_EXP_ALPHA_COEF_DEFAULT 0.01 @@ -115,6 +117,7 @@ #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 US_TIM5_FREQ_MHZ 90 ///< Частота тиков таймера ШИМ (1-4 каналы) diff --git a/UPP/Core/PowerMonitor/adc_tools.c b/UPP/Core/PowerMonitor/adc_tools.c index 7ff342d..7e3841d 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(adc->htim, TIM_MicrosToTick(PeriodUs, ADC_TIM8_FREQ_MZH-1)); + __HAL_TIM_SET_AUTORELOAD_FORCE(adc->htim, TIM_MicrosToTick(PeriodUs, ADC_TIM4_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 52582c4..e0184f0 100644 --- a/UPP/Core/PowerMonitor/power_monitor.c +++ b/UPP/Core/PowerMonitor/power_monitor.c @@ -99,7 +99,7 @@ HAL_StatusTypeDef PowerMonitor_Init(PowerMonitor_t *hpm) if(FilterAverage_Init(&hpm->avg[AVG_FBA+i], PM_F_SLOW_PERIOD_CNT, FILTER_MODE_DEFAULT)) return HAL_ERROR; - Filter_Start(&hpm->avg[AVG_FBA+i]); + Filter_Start(&hpm->avg[ADC_TEMP_CHANNELS_START+i]); } return HAL_OK; diff --git a/UPP/Core/UPP/pwm_thyristors.c b/UPP/Core/UPP/pwm_thyristors.c index 355d226..0aafba6 100644 --- a/UPP/Core/UPP/pwm_thyristors.c +++ b/UPP/Core/UPP/pwm_thyristors.c @@ -294,6 +294,29 @@ HAL_StatusTypeDef PWM_SetHalfWave(PWM_Handle_t *hpwm, UPP_Phase_t Phase, UPP_Hal } } +/** + * @brief Установка полярности шим. + * @param hpwm Указатель на хендл ШИМ тиристоров + * @param polarity Какая полярность: состяоние бита CCxP + * @return HAL Status. + */ +HAL_StatusTypeDef PWM_SetPolarity(PWM_Handle_t *hpwm, int polarity) +{ + if(assert_upp(hpwm)) + return HAL_ERROR; + + if(polarity) + { + hpwm1.Instance->CCER |= TIM_CCER_CC1P | TIM_CCER_CC2P | TIM_CCER_CC3P | TIM_CCER_CC4P; + hpwm2.Instance->CCER |= TIM_CCER_CC1P | TIM_CCER_CC2P | TIM_CCER_CC3P | TIM_CCER_CC4P; + } + else + { + hpwm1.Instance->CCER &= ~(TIM_CCER_CC1P | TIM_CCER_CC2P | TIM_CCER_CC3P | TIM_CCER_CC4P); + hpwm2.Instance->CCER &= ~(TIM_CCER_CC1P | TIM_CCER_CC2P | TIM_CCER_CC3P | TIM_CCER_CC4P); + } + return HAL_OK; +} /** * @brief Установка режима для канала ШИМ. * @param hpwm Указатель на хендл ШИМ тиристоров diff --git a/UPP/Core/UPP/pwm_thyristors.h b/UPP/Core/UPP/pwm_thyristors.h index 5e01dae..85fc1d3 100644 --- a/UPP/Core/UPP/pwm_thyristors.h +++ b/UPP/Core/UPP/pwm_thyristors.h @@ -14,7 +14,7 @@ #define PWM_ENABLE TIM_OCMODE_PWM2 -#define PWM_DISABLE TIM_OCMODE_FORCED_INACTIVE +#define PWM_DISABLE TIM_OCMODE_FORCED_ACTIVE @@ -99,7 +99,8 @@ HAL_StatusTypeDef PWM_Stop(PWM_Handle_t *hpwm, UPP_Phase_t Phase, uint8_t force_ HAL_StatusTypeDef PWM_SetConfig(PWM_Handle_t *hpwm, uint8_t PhaseMask, uint16_t Frequency, uint8_t PulseNumber); /* Установка полуволны для слежения. */ HAL_StatusTypeDef PWM_SetHalfWave(PWM_Handle_t *hpwm, UPP_Phase_t Phase, UPP_HalfWave_t halfwave); - +/* Установка полярности шим. */ +HAL_StatusTypeDef PWM_SetPolarity(PWM_Handle_t *hpwm, int polarity); // ====== СЕРВИС ========== /* Хендл ШИМ тиристоров. */ HAL_StatusTypeDef PWM_Handle(PWM_Handle_t *hpwm); diff --git a/UPP/Core/UPP/upp_main.c b/UPP/Core/UPP/upp_main.c index 466c74b..c2a2396 100644 --- a/UPP/Core/UPP/upp_main.c +++ b/UPP/Core/UPP/upp_main.c @@ -10,7 +10,8 @@ #include "iwdg.h" UPP_t upp; -float iref_dbg = 0; +float dbg_iref = 1; +int dbg_polarity = 1; // ОСНОВНОЙ ЦИКЛ main.c /** @@ -74,9 +75,12 @@ int UPP_PreWhile(void) */ int UPP_While(void) { + PWM_SetPolarity(&upp.hpwm, dbg_polarity); int retval = 0; if(upp.pm.f.runSlow) { + static uint32_t slow_cnt = 0; + HAL_IWDG_Refresh(&hiwdg); BenchTime_Start(BT_SLOWCALC, angletim.Instance->CNT, HAL_MAX_DELAY); @@ -110,6 +114,14 @@ int UPP_While(void) // Автомат состояний УПП switch(upp.workmode) { + /* Состояние инициализации */ + case UPP_Not_Init: + if(slow_cnt > UPP_SLOW_TICKS_FOR_INIT) + { + upp.workmode = UPP_Ready; + } + break; + /* Состояние готовности */ case UPP_Ready: PWM_Stop(&upp.hpwm, 0, 1); // Останавливаем ВЕСЬ ШИМ @@ -137,9 +149,12 @@ int UPP_While(void) if (!upp.call->go) upp.workmode = UPP_Ready; - // Регулирование тиристоров - Angle_PID(&upp.hangle, iref_dbg, upp.pm.measured.final.Iamp); - + // Регулирование тиристоров + #ifndef UPP_SIMULATE_I // берем с АЦП + Angle_PID(&upp.hangle, dbg_iref, upp.pm.measured.final.Iamp); + #else // симулируем + Angle_PID(&upp.hangle, dbg_iref, upp.hangle.Iref/2); + #endif // если слишком долгий запуск if((local_time() - upp.StartTick) > (upp.PUI.params->Tdelay*1000)) { @@ -166,7 +181,7 @@ int UPP_While(void) UPP_DO.Error(ENABLE); // Находимся до тех пор пока ошибки не будет устранена if(errors.common == Err_None) - upp.workmode = UPP_Ready; + upp.workmode = UPP_Not_Init; retval = 1; break; diff --git a/UPP/Core/UPP/upp_params.c b/UPP/Core/UPP/upp_params.c index c87dbe6..5474851 100644 --- a/UPP/Core/UPP/upp_params.c +++ b/UPP/Core/UPP/upp_params.c @@ -20,6 +20,7 @@ static void __AngleSetLimit(void); */ void UPP_Params_InternalControl(void) { + __AngleSetLimit(); if(upp.call->go) // при запущеном УПП ничего не меняем return; @@ -162,15 +163,11 @@ void UPP_Params_InternalControl(void) if(PWM_SetConfig(&upp.hpwm, pwm_phase_mask, pwm_freq, pwm_pulse_num) == HAL_OK) { pwm_update = 0; - __AngleSetLimit(); } else ERR_PRIVATE_CNT.pwm_reinit_err++; } - if ((upp.hangle.Config.PeriodLimit == 0) || (upp.hangle.Config.PeriodLimit >= 0.999)) - { - __AngleSetLimit(); - } + } @@ -184,12 +181,12 @@ void UPP_SetDefault(int pui_default, int internal_default) { if(pui_default) { - PARAM_PUI.Iref = PUI_Iref_PERCENT_DEFAULT; + PARAM_PUI.Iref = PUI_Iref_PERCENT_DEFAULT*100; PARAM_PUI.Tnt = PUI_Tnt_MS_DEFAULT; - PARAM_PUI.Umin = PUI_Umin_PERCENT_DEFAULT; - PARAM_PUI.Umax = PUI_Umax_PERCENT_DEFAULT; - PARAM_PUI.Imax = PUI_Imax_PERCENT_DEFAULT; - PARAM_PUI.Imin = PUI_Imin_PERCENT_DEFAULT; + PARAM_PUI.Umin = PUI_Umin_PERCENT_DEFAULT*100; + PARAM_PUI.Umax = PUI_Umax_PERCENT_DEFAULT*100; + PARAM_PUI.Imax = PUI_Imax_PERCENT_DEFAULT*100; + PARAM_PUI.Imin = PUI_Imin_PERCENT_DEFAULT*100; PARAM_PUI.TiMax = PUI_TiMax_US_DEFAULT; PARAM_PUI.Tdelay = PUI_Tdelay_SECONDS_DEFAULT; PARAM_PUI.Interlace = PUI_Interlace_EN_DEFAULT; @@ -234,6 +231,7 @@ void UPP_SetDefault(int pui_default, int internal_default) PARAM_INTERNAL.angle.PID_ExpAlpha = ANGLE_REF_ALPHA_COEF_DEFAULT*65535; PARAM_INTERNAL.angle.Angle_Max = ANGLE_MAX_PERCENT_DEFAULT*65535; PARAM_INTERNAL.angle.Angle_Min = ANGLE_MIN_PERCENT_DEFAULT*65535; + PARAM_INTERNAL.angle.PulseLengthReserve = ANGLE_PULSE_LENGTH_RESERVE_PERCENT_DEFAULT*100; //__AngleSetLimit(); } } @@ -243,9 +241,10 @@ void UPP_SetDefault(int pui_default, int internal_default) // Перерасчет максимально допустимого угла static void __AngleSetLimit(void) { // Сколько пачка ипульсов занимает процентов от всего периода - float pulses_percent_of_period = (((float)PARAM_INTERNAL.pwm.PulseNumber / PARAM_INTERNAL.pwm.Frequency) * 1000) / ANGLE_PERIOD_MS(NOM_F_HZ_DEFAULT); + float pulses_percent_of_period = (((float)PARAM_INTERNAL.pwm.PulseNumber / PARAM_INTERNAL.pwm.Frequency) * 1000) / ANGLE_PERIOD_MS(upp.pm.measured.final.Fmean); // Вычитаем этот процент из 1 - получаем максимально безопасный угол - float angle_limit = 1 - pulses_percent_of_period*1.5; // добавляем запас в половину пачки импульсов + float angle_limit = 1 - pulses_percent_of_period; + angle_limit -= pulses_percent_of_period*to_float(PARAM_INTERNAL.angle.PulseLengthReserve, 100); // добавляем запас в PulseLengthReserve процентов от пачки импульсов Angle_SetLimit(&upp.hangle, angle_limit); } diff --git a/UPP/Core/UPP/upp_params.h b/UPP/Core/UPP/upp_params.h index d502b1e..9f80af0 100644 --- a/UPP/Core/UPP/upp_params.h +++ b/UPP/Core/UPP/upp_params.h @@ -80,6 +80,8 @@ typedef struct /* Параметры Угла */ struct { + uint16_t PulseLengthReserve;/*!< @brief Сколько запаса закладывать на длительность пачки импульсов [Проценты] @ref __AngleSetLimit + @details Пример: 100% - будет запас в одну пачку импульсов */ uint16_t Angle_Max; ///< Максимальный угол открытия тиристора [0..1 x 65535] uint16_t Angle_Min; ///< Минимальный угол открытия тиристора [0..1 x 65535] uint16_t PID_Kp; ///< Пропорциональный коэфициент ПИ регулятора угла [x 10000] diff --git a/UPP/MDK-ARM/UPP.uvoptx b/UPP/MDK-ARM/UPP.uvoptx index d174165..511f869 100644 --- a/UPP/MDK-ARM/UPP.uvoptx +++ b/UPP/MDK-ARM/UPP.uvoptx @@ -363,52 +363,52 @@ 0 1 - upp,0x0A + upp.call,0x0A 1 1 - uwTick,0x0A + upp 2 1 - errors.prvt.f.err,0x0A + uwTick 3 1 - errors.prvt.cnt,0x0A + errors.prvt.f.err 4 1 - hbt,0x0A + errors.prvt.cnt 5 1 - htim5.Instance->CNT,0x0A + hbt 6 1 - htim5.Instance->PSC,0x0A + sysclockfreq,0x0A 7 1 - SystemCoreClock,0x0A + \\Debug_F417\../Core/UPP/upp_main.c\upp.pm.avg[5].dataProcessing 8 1 - sysclockfreq,0x0A + dbg_polarity,0x0A 9 1 - \\Debug_F417\../Core/UPP/upp_main.c\upp.pm.avg[5].dataProcessing + dbg_iref diff --git a/UPP/UPP.ioc b/UPP/UPP.ioc index 54bd3a7..458edce 100644 --- a/UPP/UPP.ioc +++ b/UPP/UPP.ioc @@ -7,7 +7,7 @@ ADC3.Channel-19\#ChannelRegularConversion=ADC_CHANNEL_8 ADC3.Channel-20\#ChannelRegularConversion=ADC_CHANNEL_10 ADC3.DMAContinuousRequests=ENABLE ADC3.EOCSelection=ADC_EOC_SEQ_CONV -ADC3.ExternalTrigConv=ADC_EXTERNALTRIGCONV_T8_TRGO +ADC3.ExternalTrigConv=ADC_EXTERNALTRIGCONV_T3_TRGO ADC3.IPParameters=Rank-15\#ChannelRegularConversion,Channel-15\#ChannelRegularConversion,SamplingTime-15\#ChannelRegularConversion,NbrOfConversionFlag,NbrOfConversion,ScanConvMode,Rank-16\#ChannelRegularConversion,Channel-16\#ChannelRegularConversion,SamplingTime-16\#ChannelRegularConversion,Rank-17\#ChannelRegularConversion,Channel-17\#ChannelRegularConversion,SamplingTime-17\#ChannelRegularConversion,Rank-18\#ChannelRegularConversion,Channel-18\#ChannelRegularConversion,SamplingTime-18\#ChannelRegularConversion,Rank-19\#ChannelRegularConversion,Channel-19\#ChannelRegularConversion,SamplingTime-19\#ChannelRegularConversion,Rank-20\#ChannelRegularConversion,Channel-20\#ChannelRegularConversion,SamplingTime-20\#ChannelRegularConversion,ExternalTrigConv,EOCSelection,DMAContinuousRequests ADC3.NbrOfConversion=6 ADC3.NbrOfConversionFlag=1 @@ -94,25 +94,25 @@ Mcu.Pin23=PB11 Mcu.Pin24=PB13 Mcu.Pin25=PG6 Mcu.Pin26=PC6 -Mcu.Pin27=PC7 -Mcu.Pin28=PC8 -Mcu.Pin29=PC9 +Mcu.Pin27=PC8 +Mcu.Pin28=PC9 +Mcu.Pin29=PA8 Mcu.Pin3=PE5 -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.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.Pin4=PE6 -Mcu.Pin40=PC12 -Mcu.Pin41=PD2 -Mcu.Pin42=PD3 -Mcu.Pin43=PD6 +Mcu.Pin40=PD2 +Mcu.Pin41=PD3 +Mcu.Pin42=PD6 +Mcu.Pin43=PG9 Mcu.Pin44=PG12 Mcu.Pin45=PG15 Mcu.Pin46=PB3 @@ -133,18 +133,17 @@ Mcu.Pin59=VP_TIM2_VS_no_output1 Mcu.Pin6=PC14/OSC32_IN Mcu.Pin60=VP_TIM2_VS_no_output2 Mcu.Pin61=VP_TIM2_VS_no_output3 -Mcu.Pin62=VP_TIM3_VS_ControllerModeTrigger -Mcu.Pin63=VP_TIM3_VS_ClockSourceINT -Mcu.Pin64=VP_TIM3_VS_ClockSourceITR -Mcu.Pin65=VP_TIM3_VS_OPM -Mcu.Pin66=VP_TIM5_VS_ClockSourceINT -Mcu.Pin67=VP_TIM8_VS_ClockSourceINT -Mcu.Pin68=VP_TIM11_VS_ClockSourceINT -Mcu.Pin69=VP_TIM12_VS_ClockSourceINT +Mcu.Pin62=VP_TIM3_VS_ClockSourceINT +Mcu.Pin63=VP_TIM5_VS_ClockSourceINT +Mcu.Pin64=VP_TIM8_VS_ControllerModeTrigger +Mcu.Pin65=VP_TIM8_VS_ClockSourceINT +Mcu.Pin66=VP_TIM8_VS_ClockSourceITR +Mcu.Pin67=VP_TIM11_VS_ClockSourceINT +Mcu.Pin68=VP_TIM12_VS_ClockSourceINT Mcu.Pin7=PC15/OSC32_OUT Mcu.Pin8=PF6 Mcu.Pin9=PF7 -Mcu.PinsNb=70 +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.UserName=STM32F427ZGTx @@ -262,10 +261,7 @@ PC12.GPIOParameters=GPIO_Label PC12.GPIO_Label=UM_SPI_MOSI PC12.Mode=Full_Duplex_Master PC12.Signal=SPI3_MOSI -PC13.GPIOParameters=PinState,GPIO_Label -PC13.GPIO_Label=DO3 PC13.Locked=true -PC13.PinState=GPIO_PIN_SET PC13.Signal=GPIO_Output PC14/OSC32_IN.Mode=LSE-External-Oscillator PC14/OSC32_IN.Signal=RCC_OSC32_IN @@ -275,18 +271,12 @@ PC6.GPIOParameters=GPIO_Label PC6.GPIO_Label=SCIT1 PC6.Mode=Asynchronous PC6.Signal=USART6_TX -PC7.GPIOParameters=GPIO_Label -PC7.GPIO_Label=SCIR2 -PC7.Mode=Asynchronous -PC7.Signal=USART6_RX PC8.GPIOParameters=GPIO_Label PC8.GPIO_Label=PWM5 -PC8.Locked=true -PC8.Signal=S_TIM3_CH3 +PC8.Signal=S_TIM8_CH3 PC9.GPIOParameters=GPIO_Label PC9.GPIO_Label=PWM6 -PC9.Locked=true -PC9.Signal=S_TIM3_CH4 +PC9.Signal=S_TIM8_CH4 PD2.GPIOParameters=GPIO_Label PD2.GPIO_Label=DIN3 PD2.Locked=true @@ -357,8 +347,6 @@ 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 @@ -370,6 +358,10 @@ 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 @@ -460,10 +452,10 @@ SH.S_TIM1_CH3.0=TIM1_CH3,PWM Generation3 CH3 SH.S_TIM1_CH3.ConfNb=1 SH.S_TIM1_CH4.0=TIM1_CH4,PWM Generation4 CH4 SH.S_TIM1_CH4.ConfNb=1 -SH.S_TIM3_CH3.0=TIM3_CH3,PWM Generation3 CH3 -SH.S_TIM3_CH3.ConfNb=1 -SH.S_TIM3_CH4.0=TIM3_CH4,PWM Generation4 CH4 -SH.S_TIM3_CH4.ConfNb=1 +SH.S_TIM8_CH3.0=TIM8_CH3,PWM Generation3 CH3 +SH.S_TIM8_CH3.ConfNb=1 +SH.S_TIM8_CH4.0=TIM8_CH4,PWM Generation4 CH4 +SH.S_TIM8_CH4.ConfNb=1 SPI3.CalculateBaudRate=22.5 MBits/s SPI3.Direction=SPI_DIRECTION_2LINES SPI3.IPParameters=VirtualType,Mode,Direction,CalculateBaudRate @@ -487,17 +479,18 @@ TIM2.IPParameters=Channel-Output Compare2 No Output,Channel-Output Compare1 No O TIM2.OCMode_1=TIM_OCMODE_TIMING TIM2.OCMode_2=TIM_OCMODE_TIMING TIM2.OCMode_3=TIM_OCMODE_TIMING -TIM3.Channel-PWM\ Generation3\ CH3=TIM_CHANNEL_3 -TIM3.Channel-PWM\ Generation4\ CH4=TIM_CHANNEL_4 -TIM3.IPParameters=Channel-PWM Generation3 CH3,Channel-PWM Generation4 CH4,TIM_MasterSlaveMode,TIM_MasterOutputTrigger -TIM3.TIM_MasterOutputTrigger=TIM_TRGO_RESET +TIM3.IPParameters=TIM_MasterSlaveMode,TIM_MasterOutputTrigger +TIM3.TIM_MasterOutputTrigger=TIM_TRGO_UPDATE TIM3.TIM_MasterSlaveMode=TIM_MASTERSLAVEMODE_ENABLE TIM5.IPParameters=Prescaler TIM5.Prescaler=90-1 -TIM8.IPParameters=Prescaler,Period,TIM_MasterSlaveMode,TIM_MasterOutputTrigger -TIM8.Period=1800-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.OC4Preload_PWM=ENABLE +TIM8.Period=65535 TIM8.Prescaler=0 -TIM8.TIM_MasterOutputTrigger=TIM_TRGO_UPDATE +TIM8.TIM_MasterOutputTrigger=TIM_TRGO_RESET TIM8.TIM_MasterSlaveMode=TIM_MASTERSLAVEMODE_DISABLE USART3.IPParameters=VirtualMode USART3.VirtualMode=VM_ASYNC @@ -527,14 +520,12 @@ VP_TIM2_VS_no_output3.Mode=Output Compare3 No Output VP_TIM2_VS_no_output3.Signal=TIM2_VS_no_output3 VP_TIM3_VS_ClockSourceINT.Mode=Internal VP_TIM3_VS_ClockSourceINT.Signal=TIM3_VS_ClockSourceINT -VP_TIM3_VS_ClockSourceITR.Mode=TriggerSource_ITR0 -VP_TIM3_VS_ClockSourceITR.Signal=TIM3_VS_ClockSourceITR -VP_TIM3_VS_ControllerModeTrigger.Mode=Trigger Mode -VP_TIM3_VS_ControllerModeTrigger.Signal=TIM3_VS_ControllerModeTrigger -VP_TIM3_VS_OPM.Mode=OPM_bit -VP_TIM3_VS_OPM.Signal=TIM3_VS_OPM 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 board=custom diff --git a/Информация для программиста (УПП СП СЭД)/Описание работы с платой управления УПП.docx b/Информация для программиста (УПП СП СЭД)/Описание работы с платой управления УПП.docx index 9b0dc6a..897126a 100644 Binary files a/Информация для программиста (УПП СП СЭД)/Описание работы с платой управления УПП.docx and b/Информация для программиста (УПП СП СЭД)/Описание работы с платой управления УПП.docx differ