TIM3 и TIM8 поменяты местами

плюс по мелочи:
- полряность каналов
- симуляция тока для отладки без тока на АЦП
- регулируемый запас на максимальнйы угол
This commit is contained in:
Razvalyaev 2025-11-20 10:57:47 +03:00
parent 0e950148c5
commit 2b22c5b0eb
13 changed files with 132 additions and 97 deletions

View File

@ -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_dma.c^
.\MCU_STM32_Matlab\Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_exti.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_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.c^
.\MCU_STM32_Matlab\Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_pwr_ex.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^ .\MCU_STM32_Matlab\Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_rcc.c^

View File

@ -7,7 +7,7 @@
#include "app_wrapper.h" #include "app_wrapper.h"
float dbg[16]; float dbg[16];
extern float iref_dbg; extern float dbg_iref;
#define PIN_READ(_verbname_) (_verbname_##_GPIO_Port->ODR & (_verbname_##_Pin)) ? 1 : 0 #define PIN_READ(_verbname_) (_verbname_##_GPIO_Port->ODR & (_verbname_##_Pin)) ? 1 : 0
void Write_UPP_Outputs(real_T* Buffer, int ind_port) 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, 8, ReadInputArray(0,4));
ADC_Set_Channel_Value(ADC3, 10, ReadInputArray(0,5)); 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); upp.call->go = ReadInputArray(1, 1);
MB_INTERNAL.param.angle.Angle_Max = ReadInputArray(1, 2)*65535; MB_INTERNAL.param.angle.Angle_Max = ReadInputArray(1, 2)*65535;

View File

@ -30,12 +30,13 @@
#define TEMP_1 0 #define TEMP_1 0
#define TEMP_2 1 #define TEMP_2 1
#define UPP_SIMULATE_I ///< Симулировт токи а не брать с АЦП
/** /**
* @addtogroup UPP_DEFAULT_PARAMS Default params for external flash * @addtogroup UPP_DEFAULT_PARAMS Default params for external flash
* @ingroup UPP_CONFIG * @ingroup UPP_CONFIG
* @brief Дефолтные параметры для внешней памяти. Они применятся по команде или по ошибке * @brief Дефолтные параметры для внешней памяти. Они применятся по команде или по ошибке
* @details Префиксы
* @{ * @{
*/ */
@ -56,12 +57,12 @@
#define NOM_I_A_DEFAULT 5 #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_Tnt_MS_DEFAULT 300
#define PUI_Umin_PERCENT_DEFAULT 80 #define PUI_Umin_PERCENT_DEFAULT 0.8
#define PUI_Umax_PERCENT_DEFAULT 120 #define PUI_Umax_PERCENT_DEFAULT 1.2
#define PUI_Imax_PERCENT_DEFAULT 99 #define PUI_Imax_PERCENT_DEFAULT 0.99
#define PUI_Imin_PERCENT_DEFAULT 7 #define PUI_Imin_PERCENT_DEFAULT 0.07
#define PUI_TiMax_US_DEFAULT 5000 #define PUI_TiMax_US_DEFAULT 5000
#define PUI_Tdelay_SECONDS_DEFAULT 30 #define PUI_Tdelay_SECONDS_DEFAULT 30
#define PUI_Interlace_EN_DEFAULT 5000 #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_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.1
#define ANGLE_PID_KD_COEF_DEFAULT 0 #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 #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_TEMP_SLOW_PERIOD_CNT 200 ///< Период обновления датчиков температуры в тиках @ref PM_SLOW_PERIOD_CNT
#define PM_F_SLOW_PERIOD_CNT 2000 ///< Период обновления частоты в тиках @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 каналы) #define US_TIM5_FREQ_MHZ 90 ///< Частота тиков таймера ШИМ (1-4 каналы)

View File

@ -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(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); res = HAL_TIM_Base_Start(adc->htim);
if(res != HAL_OK) if(res != HAL_OK)

View File

@ -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)) if(FilterAverage_Init(&hpm->avg[AVG_FBA+i], PM_F_SLOW_PERIOD_CNT, FILTER_MODE_DEFAULT))
return HAL_ERROR; return HAL_ERROR;
Filter_Start(&hpm->avg[AVG_FBA+i]); Filter_Start(&hpm->avg[ADC_TEMP_CHANNELS_START+i]);
} }
return HAL_OK; return HAL_OK;

View File

@ -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 Установка режима для канала ШИМ. * @brief Установка режима для канала ШИМ.
* @param hpwm Указатель на хендл ШИМ тиристоров * @param hpwm Указатель на хендл ШИМ тиристоров

View File

@ -14,7 +14,7 @@
#define PWM_ENABLE TIM_OCMODE_PWM2 #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_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_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); HAL_StatusTypeDef PWM_Handle(PWM_Handle_t *hpwm);

View File

@ -10,7 +10,8 @@
#include "iwdg.h" #include "iwdg.h"
UPP_t upp; UPP_t upp;
float iref_dbg = 0; float dbg_iref = 1;
int dbg_polarity = 1;
// ОСНОВНОЙ ЦИКЛ main.c // ОСНОВНОЙ ЦИКЛ main.c
/** /**
@ -74,9 +75,12 @@ int UPP_PreWhile(void)
*/ */
int UPP_While(void) int UPP_While(void)
{ {
PWM_SetPolarity(&upp.hpwm, dbg_polarity);
int retval = 0; int retval = 0;
if(upp.pm.f.runSlow) if(upp.pm.f.runSlow)
{ {
static uint32_t slow_cnt = 0;
HAL_IWDG_Refresh(&hiwdg); HAL_IWDG_Refresh(&hiwdg);
BenchTime_Start(BT_SLOWCALC, angletim.Instance->CNT, HAL_MAX_DELAY); BenchTime_Start(BT_SLOWCALC, angletim.Instance->CNT, HAL_MAX_DELAY);
@ -110,6 +114,14 @@ int UPP_While(void)
// Автомат состояний УПП // Автомат состояний УПП
switch(upp.workmode) switch(upp.workmode)
{ {
/* Состояние инициализации */
case UPP_Not_Init:
if(slow_cnt > UPP_SLOW_TICKS_FOR_INIT)
{
upp.workmode = UPP_Ready;
}
break;
/* Состояние готовности */ /* Состояние готовности */
case UPP_Ready: case UPP_Ready:
PWM_Stop(&upp.hpwm, 0, 1); // Останавливаем ВЕСЬ ШИМ PWM_Stop(&upp.hpwm, 0, 1); // Останавливаем ВЕСЬ ШИМ
@ -138,8 +150,11 @@ int UPP_While(void)
upp.workmode = UPP_Ready; 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)) if((local_time() - upp.StartTick) > (upp.PUI.params->Tdelay*1000))
{ {
@ -166,7 +181,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_Ready; upp.workmode = UPP_Not_Init;
retval = 1; retval = 1;
break; break;

View File

@ -20,6 +20,7 @@ static void __AngleSetLimit(void);
*/ */
void UPP_Params_InternalControl(void) void UPP_Params_InternalControl(void)
{ {
__AngleSetLimit();
if(upp.call->go) // при запущеном УПП ничего не меняем if(upp.call->go) // при запущеном УПП ничего не меняем
return; 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) if(PWM_SetConfig(&upp.hpwm, pwm_phase_mask, pwm_freq, pwm_pulse_num) == HAL_OK)
{ {
pwm_update = 0; pwm_update = 0;
__AngleSetLimit();
} }
else else
ERR_PRIVATE_CNT.pwm_reinit_err++; 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) 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.Tnt = PUI_Tnt_MS_DEFAULT;
PARAM_PUI.Umin = PUI_Umin_PERCENT_DEFAULT; PARAM_PUI.Umin = PUI_Umin_PERCENT_DEFAULT*100;
PARAM_PUI.Umax = PUI_Umax_PERCENT_DEFAULT; PARAM_PUI.Umax = PUI_Umax_PERCENT_DEFAULT*100;
PARAM_PUI.Imax = PUI_Imax_PERCENT_DEFAULT; PARAM_PUI.Imax = PUI_Imax_PERCENT_DEFAULT*100;
PARAM_PUI.Imin = PUI_Imin_PERCENT_DEFAULT; PARAM_PUI.Imin = PUI_Imin_PERCENT_DEFAULT*100;
PARAM_PUI.TiMax = PUI_TiMax_US_DEFAULT; PARAM_PUI.TiMax = PUI_TiMax_US_DEFAULT;
PARAM_PUI.Tdelay = PUI_Tdelay_SECONDS_DEFAULT; PARAM_PUI.Tdelay = PUI_Tdelay_SECONDS_DEFAULT;
PARAM_PUI.Interlace = PUI_Interlace_EN_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.PID_ExpAlpha = ANGLE_REF_ALPHA_COEF_DEFAULT*65535;
PARAM_INTERNAL.angle.Angle_Max = ANGLE_MAX_PERCENT_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.Angle_Min = ANGLE_MIN_PERCENT_DEFAULT*65535;
PARAM_INTERNAL.angle.PulseLengthReserve = ANGLE_PULSE_LENGTH_RESERVE_PERCENT_DEFAULT*100;
//__AngleSetLimit(); //__AngleSetLimit();
} }
} }
@ -243,9 +241,10 @@ void UPP_SetDefault(int pui_default, int internal_default)
// Перерасчет максимально допустимого угла // Перерасчет максимально допустимого угла
static void __AngleSetLimit(void) 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 - получаем максимально безопасный угол // Вычитаем этот процент из 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); Angle_SetLimit(&upp.hangle, angle_limit);
} }

View File

@ -80,6 +80,8 @@ typedef struct
/* Параметры Угла */ /* Параметры Угла */
struct struct
{ {
uint16_t PulseLengthReserve;/*!< @brief Сколько запаса закладывать на длительность пачки импульсов [Проценты] @ref __AngleSetLimit
@details Пример: 100% - будет запас в одну пачку импульсов */
uint16_t Angle_Max; ///< Максимальный угол открытия тиристора [0..1 x 65535] uint16_t Angle_Max; ///< Максимальный угол открытия тиристора [0..1 x 65535]
uint16_t Angle_Min; ///< Минимальный угол открытия тиристора [0..1 x 65535] uint16_t Angle_Min; ///< Минимальный угол открытия тиристора [0..1 x 65535]
uint16_t PID_Kp; ///< Пропорциональный коэфициент ПИ регулятора угла [x 10000] uint16_t PID_Kp; ///< Пропорциональный коэфициент ПИ регулятора угла [x 10000]

View File

@ -363,52 +363,52 @@
<Ww> <Ww>
<count>0</count> <count>0</count>
<WinNumber>1</WinNumber> <WinNumber>1</WinNumber>
<ItemText>upp,0x0A</ItemText> <ItemText>upp.call,0x0A</ItemText>
</Ww> </Ww>
<Ww> <Ww>
<count>1</count> <count>1</count>
<WinNumber>1</WinNumber> <WinNumber>1</WinNumber>
<ItemText>uwTick,0x0A</ItemText> <ItemText>upp</ItemText>
</Ww> </Ww>
<Ww> <Ww>
<count>2</count> <count>2</count>
<WinNumber>1</WinNumber> <WinNumber>1</WinNumber>
<ItemText>errors.prvt.f.err,0x0A</ItemText> <ItemText>uwTick</ItemText>
</Ww> </Ww>
<Ww> <Ww>
<count>3</count> <count>3</count>
<WinNumber>1</WinNumber> <WinNumber>1</WinNumber>
<ItemText>errors.prvt.cnt,0x0A</ItemText> <ItemText>errors.prvt.f.err</ItemText>
</Ww> </Ww>
<Ww> <Ww>
<count>4</count> <count>4</count>
<WinNumber>1</WinNumber> <WinNumber>1</WinNumber>
<ItemText>hbt,0x0A</ItemText> <ItemText>errors.prvt.cnt</ItemText>
</Ww> </Ww>
<Ww> <Ww>
<count>5</count> <count>5</count>
<WinNumber>1</WinNumber> <WinNumber>1</WinNumber>
<ItemText>htim5.Instance-&gt;CNT,0x0A</ItemText> <ItemText>hbt</ItemText>
</Ww> </Ww>
<Ww> <Ww>
<count>6</count> <count>6</count>
<WinNumber>1</WinNumber> <WinNumber>1</WinNumber>
<ItemText>htim5.Instance-&gt;PSC,0x0A</ItemText> <ItemText>sysclockfreq,0x0A</ItemText>
</Ww> </Ww>
<Ww> <Ww>
<count>7</count> <count>7</count>
<WinNumber>1</WinNumber> <WinNumber>1</WinNumber>
<ItemText>SystemCoreClock,0x0A</ItemText> <ItemText>\\Debug_F417\../Core/UPP/upp_main.c\upp.pm.avg[5].dataProcessing</ItemText>
</Ww> </Ww>
<Ww> <Ww>
<count>8</count> <count>8</count>
<WinNumber>1</WinNumber> <WinNumber>1</WinNumber>
<ItemText>sysclockfreq,0x0A</ItemText> <ItemText>dbg_polarity,0x0A</ItemText>
</Ww> </Ww>
<Ww> <Ww>
<count>9</count> <count>9</count>
<WinNumber>1</WinNumber> <WinNumber>1</WinNumber>
<ItemText>\\Debug_F417\../Core/UPP/upp_main.c\upp.pm.avg[5].dataProcessing</ItemText> <ItemText>dbg_iref</ItemText>
</Ww> </Ww>
</WatchWindow1> </WatchWindow1>
<WatchWindow2> <WatchWindow2>

View File

@ -7,7 +7,7 @@ ADC3.Channel-19\#ChannelRegularConversion=ADC_CHANNEL_8
ADC3.Channel-20\#ChannelRegularConversion=ADC_CHANNEL_10 ADC3.Channel-20\#ChannelRegularConversion=ADC_CHANNEL_10
ADC3.DMAContinuousRequests=ENABLE ADC3.DMAContinuousRequests=ENABLE
ADC3.EOCSelection=ADC_EOC_SEQ_CONV 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.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.NbrOfConversion=6
ADC3.NbrOfConversionFlag=1 ADC3.NbrOfConversionFlag=1
@ -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=PC7 Mcu.Pin27=PC8
Mcu.Pin28=PC8 Mcu.Pin28=PC9
Mcu.Pin29=PC9 Mcu.Pin29=PA8
Mcu.Pin3=PE5 Mcu.Pin3=PE5
Mcu.Pin30=PA8 Mcu.Pin30=PA9
Mcu.Pin31=PA9 Mcu.Pin31=PA10
Mcu.Pin32=PA10 Mcu.Pin32=PA11
Mcu.Pin33=PA11 Mcu.Pin33=PA12
Mcu.Pin34=PA12 Mcu.Pin34=PA13
Mcu.Pin35=PA13 Mcu.Pin35=PA14
Mcu.Pin36=PA14 Mcu.Pin36=PA15
Mcu.Pin37=PA15 Mcu.Pin37=PC10
Mcu.Pin38=PC10 Mcu.Pin38=PC11
Mcu.Pin39=PC11 Mcu.Pin39=PC12
Mcu.Pin4=PE6 Mcu.Pin4=PE6
Mcu.Pin40=PC12 Mcu.Pin40=PD2
Mcu.Pin41=PD2 Mcu.Pin41=PD3
Mcu.Pin42=PD3 Mcu.Pin42=PD6
Mcu.Pin43=PD6 Mcu.Pin43=PG9
Mcu.Pin44=PG12 Mcu.Pin44=PG12
Mcu.Pin45=PG15 Mcu.Pin45=PG15
Mcu.Pin46=PB3 Mcu.Pin46=PB3
@ -133,18 +133,17 @@ Mcu.Pin59=VP_TIM2_VS_no_output1
Mcu.Pin6=PC14/OSC32_IN Mcu.Pin6=PC14/OSC32_IN
Mcu.Pin60=VP_TIM2_VS_no_output2 Mcu.Pin60=VP_TIM2_VS_no_output2
Mcu.Pin61=VP_TIM2_VS_no_output3 Mcu.Pin61=VP_TIM2_VS_no_output3
Mcu.Pin62=VP_TIM3_VS_ControllerModeTrigger Mcu.Pin62=VP_TIM3_VS_ClockSourceINT
Mcu.Pin63=VP_TIM3_VS_ClockSourceINT Mcu.Pin63=VP_TIM5_VS_ClockSourceINT
Mcu.Pin64=VP_TIM3_VS_ClockSourceITR Mcu.Pin64=VP_TIM8_VS_ControllerModeTrigger
Mcu.Pin65=VP_TIM3_VS_OPM Mcu.Pin65=VP_TIM8_VS_ClockSourceINT
Mcu.Pin66=VP_TIM5_VS_ClockSourceINT Mcu.Pin66=VP_TIM8_VS_ClockSourceITR
Mcu.Pin67=VP_TIM8_VS_ClockSourceINT Mcu.Pin67=VP_TIM11_VS_ClockSourceINT
Mcu.Pin68=VP_TIM11_VS_ClockSourceINT Mcu.Pin68=VP_TIM12_VS_ClockSourceINT
Mcu.Pin69=VP_TIM12_VS_ClockSourceINT
Mcu.Pin7=PC15/OSC32_OUT Mcu.Pin7=PC15/OSC32_OUT
Mcu.Pin8=PF6 Mcu.Pin8=PF6
Mcu.Pin9=PF7 Mcu.Pin9=PF7
Mcu.PinsNb=70 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=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 Mcu.UserName=STM32F427ZGTx
@ -262,10 +261,7 @@ 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=PinState,GPIO_Label
PC13.GPIO_Label=DO3
PC13.Locked=true PC13.Locked=true
PC13.PinState=GPIO_PIN_SET
PC13.Signal=GPIO_Output PC13.Signal=GPIO_Output
PC14/OSC32_IN.Mode=LSE-External-Oscillator PC14/OSC32_IN.Mode=LSE-External-Oscillator
PC14/OSC32_IN.Signal=RCC_OSC32_IN PC14/OSC32_IN.Signal=RCC_OSC32_IN
@ -275,18 +271,12 @@ 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.Mode=Asynchronous
PC7.Signal=USART6_RX
PC8.GPIOParameters=GPIO_Label PC8.GPIOParameters=GPIO_Label
PC8.GPIO_Label=PWM5 PC8.GPIO_Label=PWM5
PC8.Locked=true PC8.Signal=S_TIM8_CH3
PC8.Signal=S_TIM3_CH3
PC9.GPIOParameters=GPIO_Label PC9.GPIOParameters=GPIO_Label
PC9.GPIO_Label=PWM6 PC9.GPIO_Label=PWM6
PC9.Locked=true PC9.Signal=S_TIM8_CH4
PC9.Signal=S_TIM3_CH4
PD2.GPIOParameters=GPIO_Label PD2.GPIOParameters=GPIO_Label
PD2.GPIO_Label=DIN3 PD2.GPIO_Label=DIN3
PD2.Locked=true PD2.Locked=true
@ -357,8 +347,6 @@ 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
@ -370,6 +358,10 @@ 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
@ -460,10 +452,10 @@ SH.S_TIM1_CH3.0=TIM1_CH3,PWM Generation3 CH3
SH.S_TIM1_CH3.ConfNb=1 SH.S_TIM1_CH3.ConfNb=1
SH.S_TIM1_CH4.0=TIM1_CH4,PWM Generation4 CH4 SH.S_TIM1_CH4.0=TIM1_CH4,PWM Generation4 CH4
SH.S_TIM1_CH4.ConfNb=1 SH.S_TIM1_CH4.ConfNb=1
SH.S_TIM3_CH3.0=TIM3_CH3,PWM Generation3 CH3 SH.S_TIM8_CH3.0=TIM8_CH3,PWM Generation3 CH3
SH.S_TIM3_CH3.ConfNb=1 SH.S_TIM8_CH3.ConfNb=1
SH.S_TIM3_CH4.0=TIM3_CH4,PWM Generation4 CH4 SH.S_TIM8_CH4.0=TIM8_CH4,PWM Generation4 CH4
SH.S_TIM3_CH4.ConfNb=1 SH.S_TIM8_CH4.ConfNb=1
SPI3.CalculateBaudRate=22.5 MBits/s SPI3.CalculateBaudRate=22.5 MBits/s
SPI3.Direction=SPI_DIRECTION_2LINES SPI3.Direction=SPI_DIRECTION_2LINES
SPI3.IPParameters=VirtualType,Mode,Direction,CalculateBaudRate 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_1=TIM_OCMODE_TIMING
TIM2.OCMode_2=TIM_OCMODE_TIMING TIM2.OCMode_2=TIM_OCMODE_TIMING
TIM2.OCMode_3=TIM_OCMODE_TIMING TIM2.OCMode_3=TIM_OCMODE_TIMING
TIM3.Channel-PWM\ Generation3\ CH3=TIM_CHANNEL_3 TIM3.IPParameters=TIM_MasterSlaveMode,TIM_MasterOutputTrigger
TIM3.Channel-PWM\ Generation4\ CH4=TIM_CHANNEL_4 TIM3.TIM_MasterOutputTrigger=TIM_TRGO_UPDATE
TIM3.IPParameters=Channel-PWM Generation3 CH3,Channel-PWM Generation4 CH4,TIM_MasterSlaveMode,TIM_MasterOutputTrigger
TIM3.TIM_MasterOutputTrigger=TIM_TRGO_RESET
TIM3.TIM_MasterSlaveMode=TIM_MASTERSLAVEMODE_ENABLE TIM3.TIM_MasterSlaveMode=TIM_MASTERSLAVEMODE_ENABLE
TIM5.IPParameters=Prescaler TIM5.IPParameters=Prescaler
TIM5.Prescaler=90-1 TIM5.Prescaler=90-1
TIM8.IPParameters=Prescaler,Period,TIM_MasterSlaveMode,TIM_MasterOutputTrigger TIM8.Channel-PWM\ Generation3\ CH3=TIM_CHANNEL_3
TIM8.Period=1800-1 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.Prescaler=0
TIM8.TIM_MasterOutputTrigger=TIM_TRGO_UPDATE TIM8.TIM_MasterOutputTrigger=TIM_TRGO_RESET
TIM8.TIM_MasterSlaveMode=TIM_MASTERSLAVEMODE_DISABLE TIM8.TIM_MasterSlaveMode=TIM_MASTERSLAVEMODE_DISABLE
USART3.IPParameters=VirtualMode USART3.IPParameters=VirtualMode
USART3.VirtualMode=VM_ASYNC 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_TIM2_VS_no_output3.Signal=TIM2_VS_no_output3
VP_TIM3_VS_ClockSourceINT.Mode=Internal VP_TIM3_VS_ClockSourceINT.Mode=Internal
VP_TIM3_VS_ClockSourceINT.Signal=TIM3_VS_ClockSourceINT 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.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_ClockSourceITR.Signal=TIM8_VS_ClockSourceITR
VP_TIM8_VS_ControllerModeTrigger.Mode=Trigger Mode
VP_TIM8_VS_ControllerModeTrigger.Signal=TIM8_VS_ControllerModeTrigger
board=custom board=custom