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