Всякие оптимизации и переделки под отладку на 417
По основному алгу - расчет частоты сети тепер по всему периоду, а не полупериоду - добавлены новые параметры: сдвиг синуса от нуля и сдвиг между фазами
This commit is contained in:
parent
b61a11b4fe
commit
5090ddfd48
@ -1 +1 @@
|
|||||||
Subproject commit 2344926f92f837703ae7a6d484daf6ca3210472a
|
Subproject commit 74d692fdd5c92c6b624391b89f397e4ffcb823cc
|
||||||
@ -111,11 +111,12 @@
|
|||||||
|
|
||||||
/* Периоды вызова всякого */
|
/* Периоды вызова всякого */
|
||||||
#define PM_ADC_PERIOD_US 30 ///< Период опроса АЦП в мкс
|
#define PM_ADC_PERIOD_US 30 ///< Период опроса АЦП в мкс
|
||||||
#define PM_SLOW_PERIOD_CNT 25 ///< Период обновления медленных расчетов тиках @ref PM_ADC_PERIOD_US
|
#define PM_SLOW_PERIOD_CNT 50 ///< Период обновления медленных расчетов тиках @ref PM_ADC_PERIOD_US
|
||||||
#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 US_TIM5_FREQ_MHZ 90 ///< Частота тиков таймера ШИМ (1-4 каналы)
|
||||||
#define ADC_TIM8_FREQ_MZH 180 ///< Частота тиков таймера АЦП
|
#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_TIM3_FREQ_MHZ 90 ///< Частота тиков таймера ШИМ (5-6 каналы)
|
||||||
@ -127,12 +128,14 @@
|
|||||||
|
|
||||||
// ===== ОТЛАДОЧНЫЕ ШТУКИ ДЛЯ 417 ======
|
// ===== ОТЛАДОЧНЫЕ ШТУКИ ДЛЯ 417 ======
|
||||||
#if defined(STM32F417xx)
|
#if defined(STM32F417xx)
|
||||||
|
#undef US_TIM5_FREQ_MHZ
|
||||||
#undef ADC_TIM8_FREQ_MZH
|
#undef ADC_TIM8_FREQ_MZH
|
||||||
#undef PWM_TIM1_FREQ_MHZ
|
#undef PWM_TIM1_FREQ_MHZ
|
||||||
#undef PWM_TIM3_FREQ_MHZ
|
#undef PWM_TIM3_FREQ_MHZ
|
||||||
#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 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_TIM3_FREQ_MHZ 84 ///< Частота тиков таймера ШИМ (5-6 каналы)
|
||||||
|
|||||||
@ -27,11 +27,11 @@
|
|||||||
* @brief Список аварий УПП
|
* @brief Список аварий УПП
|
||||||
*/
|
*/
|
||||||
typedef enum {
|
typedef enum {
|
||||||
WM_Not_Init = 0, ///< УПП не инициализирован
|
UPP_Not_Init = 0, ///< УПП не инициализирован
|
||||||
WM_Ready = 1, ///< УПП в готовности
|
UPP_Ready = 1, ///< УПП в готовности
|
||||||
WM_Running = 2, ///< УПП в работе, управляет тиристорами
|
UPP_Work = 2, ///< УПП в работе, управляет тиристорами
|
||||||
WM_Done = 3, ///< УПП закончил свою работу
|
UPP_Error = 3, ///< УПП в аварии
|
||||||
WM_Error = 4, ///< УПП в аварии
|
// WM_Done = 3, ///< УПП закончил свою работу
|
||||||
} UPP_WorkModeType_t;
|
} UPP_WorkModeType_t;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@ -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));
|
__HAL_TIM_SET_AUTORELOAD(adc->htim, TIM_MicrosToTick(PeriodUs, ADC_TIM8_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)
|
||||||
|
|||||||
@ -147,7 +147,8 @@ void PowerMonitor_SlowCalc(PowerMonitor_t *hpm)
|
|||||||
for(int i = 0; i < 3; i++)
|
for(int i = 0; i < 3; i++)
|
||||||
{
|
{
|
||||||
/* Получение частоты фазы */
|
/* Получение частоты фазы */
|
||||||
meas->final.F[i] = ZC_GetFrequency(&hpm->zc, i) / 2;
|
meas->final.F[i] = ZC_GetFrequency(&hpm->zc, i);
|
||||||
|
meas->final.Offset[i] = ZC_GetOffset(&hpm->zc, i);
|
||||||
fmean += meas->final.F[i];
|
fmean += meas->final.F[i];
|
||||||
|
|
||||||
/* Средниее напряжение фазы */
|
/* Средниее напряжение фазы */
|
||||||
@ -162,9 +163,17 @@ void PowerMonitor_SlowCalc(PowerMonitor_t *hpm)
|
|||||||
meas->real.I[i] = meas->slow.I[i]*i_base;
|
meas->real.I[i] = meas->slow.I[i]*i_base;
|
||||||
meas->real.U[i] = meas->slow.U[i]*u_base;
|
meas->real.U[i] = meas->slow.U[i]*u_base;
|
||||||
}
|
}
|
||||||
/* Получение средней частоты по трем фазам */
|
/* Получение средней частоты по трем фазам */
|
||||||
|
|
||||||
meas->final.Fmean = fmean / 3;
|
meas->final.Fmean = fmean / 3;
|
||||||
|
/* Оределение сдвига фаз */
|
||||||
|
static uint32_t prev_tick_phase_a = 0;
|
||||||
|
if(prev_tick_phase_a != hpm->zc.Channel[0].PeriodStartTime)
|
||||||
|
{ // Определяем только когда начался новый период фазы A
|
||||||
|
prev_tick_phase_a = hpm->zc.Channel[0].PeriodStartTime;
|
||||||
|
meas->final.Phase[0] = 0;
|
||||||
|
meas->final.Phase[1] = ZC_GetPhaseShift(&hpm->zc, 0, 1);
|
||||||
|
meas->final.Phase[2] = ZC_GetPhaseShift(&hpm->zc, 0, 2);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/* Расчет амплитуд трехфазной сети */
|
/* Расчет амплитуд трехфазной сети */
|
||||||
@ -202,8 +211,6 @@ void PowerMonitor_FastCalc(PowerMonitor_t *hpm)
|
|||||||
meas->fast.I[I_A] = hpm->adc.Data[ADC_CHANNEL_IA]/i_base;
|
meas->fast.I[I_A] = hpm->adc.Data[ADC_CHANNEL_IA]/i_base;
|
||||||
meas->fast.I[I_B] = I_B_calc(meas->fast.I[I_A], meas->fast.I[I_C]);
|
meas->fast.I[I_B] = I_B_calc(meas->fast.I[I_A], meas->fast.I[I_C]);
|
||||||
|
|
||||||
/* Преобразуем в относительные единицы (о.е.) */
|
|
||||||
|
|
||||||
/* Ищем переход через ноль */
|
/* Ищем переход через ноль */
|
||||||
ZC_ProcessAllChannels(&hpm->zc, meas->fast.U, usTick);
|
ZC_ProcessAllChannels(&hpm->zc, meas->fast.U, usTick);
|
||||||
|
|
||||||
|
|||||||
@ -43,13 +43,15 @@ typedef struct
|
|||||||
/** @brief Усредненные величины (о.е.) */
|
/** @brief Усредненные величины (о.е.) */
|
||||||
struct
|
struct
|
||||||
{
|
{
|
||||||
float Uamp; ///< Результирующий вектор Напряжения по трем фазам
|
float Uamp; ///< Результирующий вектор Напряжения по трем фазам
|
||||||
float Iamp; ///< Результирующий вектор Тока по трем фазам
|
float Iamp; ///< Результирующий вектор Тока по трем фазам
|
||||||
float U[3]; ///< Среднее Наряжение по трем фазам
|
float U[3]; ///< Среднее Наряжение по трем фазам
|
||||||
float I[3]; ///< Средний Ток по трем фазам
|
float I[3]; ///< Средний Ток по трем фазам
|
||||||
float Fmean; ///< Средняя Частота по трем фазам
|
float Fmean; ///< Средняя Частота по трем фазам
|
||||||
float F[3]; ///< Частота от Zero Cross (обновляется в main)
|
float F[3]; ///< Частота от Zero Cross (обновляется в main)
|
||||||
float T[2]; ///< Температура (обновляется в main)
|
float Phase[3]; ///< Фазовое смещение по отношению к фазе A
|
||||||
|
float Offset[3]; ///< Смещение синуса относителньо нуля (определяется по отношению полупериодов)
|
||||||
|
float T[2]; ///< Температура (обновляется в main)
|
||||||
}final;
|
}final;
|
||||||
|
|
||||||
/** @brief Быстрые величины (в о.е.) - обновляются в каждом прерывании АЦП @ref PowerMonitor_FastCalc */
|
/** @brief Быстрые величины (в о.е.) - обновляются в каждом прерывании АЦП @ref PowerMonitor_FastCalc */
|
||||||
|
|||||||
@ -155,10 +155,17 @@ void ZC_ProcessChannel(ZeroCross_Handle_t *zc, uint8_t channel, float value, uin
|
|||||||
uint32_t RealTimestamp = timestamp-RealTimeShift;
|
uint32_t RealTimestamp = timestamp-RealTimeShift;
|
||||||
if (zc_ch->LastCrossTime != 0) {
|
if (zc_ch->LastCrossTime != 0) {
|
||||||
// Расчет периода и частоты
|
// Расчет периода и частоты
|
||||||
zc_ch->Period = RealTimestamp - zc_ch->LastCrossTime;
|
float curr_half_period = RealTimestamp - zc_ch->LastCrossTime;
|
||||||
if (zc_ch->Period > 0) {
|
if (curr_half_period > 0) {
|
||||||
zc_ch->Frequency = 1000000.0f / zc_ch->Period;
|
if(zc_ch->HalfWave == UPP_WAVE_POSITIVE)
|
||||||
|
{
|
||||||
|
zc_ch->PeriodStartTime = RealTimestamp;
|
||||||
|
zc_ch->Period = zc_ch->halfPeriod + curr_half_period;
|
||||||
|
zc_ch->Frequency = 1000000.0f / zc_ch->Period;
|
||||||
|
zc_ch->FrequencyOffset = (float)zc_ch->halfPeriod / curr_half_period;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
zc_ch->halfPeriod = curr_half_period;
|
||||||
}
|
}
|
||||||
|
|
||||||
zc_ch->LastCrossTime = RealTimestamp;
|
zc_ch->LastCrossTime = RealTimestamp;
|
||||||
@ -245,6 +252,54 @@ float ZC_GetFrequency(ZeroCross_Handle_t *zc, uint8_t channel)
|
|||||||
return zc->Channel[channel].Frequency;
|
return zc->Channel[channel].Frequency;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Получение смещение частот полупериода сигнала.
|
||||||
|
* @param zc Указатель на хендл детектора нуля
|
||||||
|
* @param channel Номер канала
|
||||||
|
* @return Отношение длительности первой полуволны к второй полуволне.
|
||||||
|
*/
|
||||||
|
float ZC_GetOffset(ZeroCross_Handle_t *zc, uint8_t channel)
|
||||||
|
{
|
||||||
|
if (assert_upp(zc)){
|
||||||
|
return 0.0f;
|
||||||
|
}
|
||||||
|
if (channel >= zc->Config.NumChannels) {
|
||||||
|
return 0.0f;
|
||||||
|
}
|
||||||
|
|
||||||
|
return zc->Channel[channel].FrequencyOffset;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Получить сдвиг между двумя фазами.
|
||||||
|
* @param zc Указатель на хендл детектора нуля
|
||||||
|
* @param channel Номер канала от которого считать сдвиг
|
||||||
|
* @param channe2 Номер канала для которого расчитать сдвиг
|
||||||
|
* @return Фазовый сдвиг в процентах от периода от 1 до 2 канала
|
||||||
|
*/
|
||||||
|
float ZC_GetPhaseShift(ZeroCross_Handle_t *zc, uint8_t channel1, uint8_t channel2)
|
||||||
|
{
|
||||||
|
if (assert_upp(zc)){
|
||||||
|
return 0.0f;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((channel1 >= zc->Config.NumChannels) || (channel2 >= zc->Config.NumChannels)){
|
||||||
|
return 0.0f;
|
||||||
|
}
|
||||||
|
|
||||||
|
float delta_time = 0;
|
||||||
|
if(zc->Channel[channel1].PeriodStartTime >= zc->Channel[channel2].PeriodStartTime)
|
||||||
|
delta_time = (zc->Channel[channel1].PeriodStartTime - zc->Channel[channel2].PeriodStartTime);
|
||||||
|
else
|
||||||
|
delta_time = (zc->Channel[channel2].PeriodStartTime - zc->Channel[channel1].PeriodStartTime);
|
||||||
|
|
||||||
|
|
||||||
|
float phase_ratio = delta_time/zc->Channel[channel1].Period;
|
||||||
|
return phase_ratio;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Включение/выключение мониторинга.
|
* @brief Включение/выключение мониторинга.
|
||||||
* @param zc Указатель на хендл детектора нуля
|
* @param zc Указатель на хендл детектора нуля
|
||||||
|
|||||||
@ -94,8 +94,11 @@ typedef struct {
|
|||||||
float CurrentValue; ///< Текущее значение
|
float CurrentValue; ///< Текущее значение
|
||||||
uint16_t DebounceCounter; ///< Счетчик антидребезга
|
uint16_t DebounceCounter; ///< Счетчик антидребезга
|
||||||
uint32_t LastCrossTime; ///< Время последнего перехода
|
uint32_t LastCrossTime; ///< Время последнего перехода
|
||||||
|
float halfPeriod; ///< Длительность полупериода (в тактах таймера)
|
||||||
|
uint32_t PeriodStartTime; ///< Время начала периода (в тактах таймера)
|
||||||
uint32_t Period; ///< Период сигнала (в тактах таймера)
|
uint32_t Period; ///< Период сигнала (в тактах таймера)
|
||||||
float Frequency; ///< Частота
|
float Frequency; ///< Частота
|
||||||
|
float FrequencyOffset; ///< Смещение частот полупериода - насколько сигнал смещен
|
||||||
UPP_HalfWave_t HalfWave; ///< Текущая полуволна
|
UPP_HalfWave_t HalfWave; ///< Текущая полуволна
|
||||||
ZC_EdgeType_t EdgeType; ///< Тип детектируемого перехода
|
ZC_EdgeType_t EdgeType; ///< Тип детектируемого перехода
|
||||||
} ZC_Channel_t;
|
} ZC_Channel_t;
|
||||||
@ -152,6 +155,10 @@ void ZC_ProcessAllChannels(ZeroCross_Handle_t *zc, float *values,
|
|||||||
int ZC_isOccurred(ZeroCross_Handle_t *zc, uint8_t channel);
|
int ZC_isOccurred(ZeroCross_Handle_t *zc, uint8_t channel);
|
||||||
/* Получение частоты сигнала */
|
/* Получение частоты сигнала */
|
||||||
float ZC_GetFrequency(ZeroCross_Handle_t *zc, uint8_t channel);
|
float ZC_GetFrequency(ZeroCross_Handle_t *zc, uint8_t channel);
|
||||||
|
/* Получение смещение частот полупериода сигнала */
|
||||||
|
float ZC_GetOffset(ZeroCross_Handle_t *zc, uint8_t channel);
|
||||||
|
/* Получить сдвиг между двумя фазами. */
|
||||||
|
float ZC_GetPhaseShift(ZeroCross_Handle_t *zc, uint8_t channel1, uint8_t channel2);
|
||||||
/* Получение полуволны (после последнего zero-cross) */
|
/* Получение полуволны (после последнего zero-cross) */
|
||||||
UPP_HalfWave_t ZC_GetHalfWave(ZeroCross_Handle_t *zc, uint8_t channel);
|
UPP_HalfWave_t ZC_GetHalfWave(ZeroCross_Handle_t *zc, uint8_t channel);
|
||||||
|
|
||||||
|
|||||||
@ -108,7 +108,7 @@ 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_RTC_Init();
|
||||||
MX_TIM1_Init();
|
MX_TIM1_Init();
|
||||||
MX_TIM3_Init();
|
MX_TIM3_Init();
|
||||||
MX_USART6_UART_Init();
|
MX_USART6_UART_Init();
|
||||||
@ -119,10 +119,10 @@ int main(void)
|
|||||||
MX_TIM5_Init();
|
MX_TIM5_Init();
|
||||||
MX_TIM2_Init();
|
MX_TIM2_Init();
|
||||||
/* USER CODE BEGIN 2 */
|
/* USER CODE BEGIN 2 */
|
||||||
|
// меняем прескалер на частоту по дефайну
|
||||||
|
__HAL_TIM_SET_PRESCALER_FORCE(&ustim, US_TIM5_FREQ_MHZ-1);
|
||||||
#if defined(STM32F417xx)
|
#if defined(STM32F417xx)
|
||||||
// У 417 меньше частота поэтому меняем прескалер
|
// т.к. нет епромки выставляем дефолтные
|
||||||
__HAL_TIM_SET_PRESCALER(&ustim, 84-1);
|
|
||||||
// И т.к. нет епромки выставляем дефолтные
|
|
||||||
UPP_SetDefault(1, 1);
|
UPP_SetDefault(1, 1);
|
||||||
#endif
|
#endif
|
||||||
#else //MATLAB
|
#else //MATLAB
|
||||||
|
|||||||
@ -256,8 +256,8 @@ void MX_TIM5_Init(void)
|
|||||||
|
|
||||||
/* USER CODE END TIM5_Init 0 */
|
/* USER CODE END TIM5_Init 0 */
|
||||||
|
|
||||||
|
TIM_ClockConfigTypeDef sClockSourceConfig = {0};
|
||||||
TIM_MasterConfigTypeDef sMasterConfig = {0};
|
TIM_MasterConfigTypeDef sMasterConfig = {0};
|
||||||
TIM_IC_InitTypeDef sConfigIC = {0};
|
|
||||||
|
|
||||||
/* USER CODE BEGIN TIM5_Init 1 */
|
/* USER CODE BEGIN TIM5_Init 1 */
|
||||||
|
|
||||||
@ -268,7 +268,12 @@ void MX_TIM5_Init(void)
|
|||||||
htim5.Init.Period = 4294967295;
|
htim5.Init.Period = 4294967295;
|
||||||
htim5.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
|
htim5.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
|
||||||
htim5.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
|
htim5.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
|
||||||
if (HAL_TIM_IC_Init(&htim5) != HAL_OK)
|
if (HAL_TIM_Base_Init(&htim5) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
|
||||||
|
if (HAL_TIM_ConfigClockSource(&htim5, &sClockSourceConfig) != HAL_OK)
|
||||||
{
|
{
|
||||||
Error_Handler();
|
Error_Handler();
|
||||||
}
|
}
|
||||||
@ -278,14 +283,6 @@ void MX_TIM5_Init(void)
|
|||||||
{
|
{
|
||||||
Error_Handler();
|
Error_Handler();
|
||||||
}
|
}
|
||||||
sConfigIC.ICPolarity = TIM_INPUTCHANNELPOLARITY_RISING;
|
|
||||||
sConfigIC.ICSelection = TIM_ICSELECTION_DIRECTTI;
|
|
||||||
sConfigIC.ICPrescaler = TIM_ICPSC_DIV1;
|
|
||||||
sConfigIC.ICFilter = 0;
|
|
||||||
if (HAL_TIM_IC_ConfigChannel(&htim5, &sConfigIC, TIM_CHANNEL_1) != HAL_OK)
|
|
||||||
{
|
|
||||||
Error_Handler();
|
|
||||||
}
|
|
||||||
/* USER CODE BEGIN TIM5_Init 2 */
|
/* USER CODE BEGIN TIM5_Init 2 */
|
||||||
|
|
||||||
/* USER CODE END TIM5_Init 2 */
|
/* USER CODE END TIM5_Init 2 */
|
||||||
@ -436,6 +433,17 @@ void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* tim_baseHandle)
|
|||||||
|
|
||||||
/* USER CODE END TIM3_MspInit 1 */
|
/* USER CODE END TIM3_MspInit 1 */
|
||||||
}
|
}
|
||||||
|
else if(tim_baseHandle->Instance==TIM5)
|
||||||
|
{
|
||||||
|
/* USER CODE BEGIN TIM5_MspInit 0 */
|
||||||
|
|
||||||
|
/* USER CODE END TIM5_MspInit 0 */
|
||||||
|
/* TIM5 clock enable */
|
||||||
|
__HAL_RCC_TIM5_CLK_ENABLE();
|
||||||
|
/* USER CODE BEGIN TIM5_MspInit 1 */
|
||||||
|
|
||||||
|
/* USER CODE END TIM5_MspInit 1 */
|
||||||
|
}
|
||||||
else if(tim_baseHandle->Instance==TIM8)
|
else if(tim_baseHandle->Instance==TIM8)
|
||||||
{
|
{
|
||||||
/* USER CODE BEGIN TIM8_MspInit 0 */
|
/* USER CODE BEGIN TIM8_MspInit 0 */
|
||||||
@ -474,35 +482,6 @@ void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* tim_baseHandle)
|
|||||||
/* USER CODE END TIM12_MspInit 1 */
|
/* USER CODE END TIM12_MspInit 1 */
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void HAL_TIM_IC_MspInit(TIM_HandleTypeDef* tim_icHandle)
|
|
||||||
{
|
|
||||||
|
|
||||||
GPIO_InitTypeDef GPIO_InitStruct = {0};
|
|
||||||
if(tim_icHandle->Instance==TIM5)
|
|
||||||
{
|
|
||||||
/* USER CODE BEGIN TIM5_MspInit 0 */
|
|
||||||
|
|
||||||
/* USER CODE END TIM5_MspInit 0 */
|
|
||||||
/* TIM5 clock enable */
|
|
||||||
__HAL_RCC_TIM5_CLK_ENABLE();
|
|
||||||
|
|
||||||
__HAL_RCC_GPIOA_CLK_ENABLE();
|
|
||||||
/**TIM5 GPIO Configuration
|
|
||||||
PA0/WKUP ------> TIM5_CH1
|
|
||||||
*/
|
|
||||||
GPIO_InitStruct.Pin = GPIO_PIN_0;
|
|
||||||
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
|
|
||||||
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
|
||||||
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
|
|
||||||
GPIO_InitStruct.Alternate = GPIO_AF2_TIM5;
|
|
||||||
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
|
|
||||||
|
|
||||||
/* USER CODE BEGIN TIM5_MspInit 1 */
|
|
||||||
|
|
||||||
/* USER CODE END TIM5_MspInit 1 */
|
|
||||||
}
|
|
||||||
}
|
|
||||||
void HAL_TIM_MspPostInit(TIM_HandleTypeDef* timHandle)
|
void HAL_TIM_MspPostInit(TIM_HandleTypeDef* timHandle)
|
||||||
{
|
{
|
||||||
|
|
||||||
@ -597,6 +576,17 @@ void HAL_TIM_Base_MspDeInit(TIM_HandleTypeDef* tim_baseHandle)
|
|||||||
|
|
||||||
/* USER CODE END TIM3_MspDeInit 1 */
|
/* USER CODE END TIM3_MspDeInit 1 */
|
||||||
}
|
}
|
||||||
|
else if(tim_baseHandle->Instance==TIM5)
|
||||||
|
{
|
||||||
|
/* USER CODE BEGIN TIM5_MspDeInit 0 */
|
||||||
|
|
||||||
|
/* USER CODE END TIM5_MspDeInit 0 */
|
||||||
|
/* Peripheral clock disable */
|
||||||
|
__HAL_RCC_TIM5_CLK_DISABLE();
|
||||||
|
/* USER CODE BEGIN TIM5_MspDeInit 1 */
|
||||||
|
|
||||||
|
/* USER CODE END TIM5_MspDeInit 1 */
|
||||||
|
}
|
||||||
else if(tim_baseHandle->Instance==TIM8)
|
else if(tim_baseHandle->Instance==TIM8)
|
||||||
{
|
{
|
||||||
/* USER CODE BEGIN TIM8_MspDeInit 0 */
|
/* USER CODE BEGIN TIM8_MspDeInit 0 */
|
||||||
@ -635,28 +625,6 @@ void HAL_TIM_Base_MspDeInit(TIM_HandleTypeDef* tim_baseHandle)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void HAL_TIM_IC_MspDeInit(TIM_HandleTypeDef* tim_icHandle)
|
|
||||||
{
|
|
||||||
|
|
||||||
if(tim_icHandle->Instance==TIM5)
|
|
||||||
{
|
|
||||||
/* USER CODE BEGIN TIM5_MspDeInit 0 */
|
|
||||||
|
|
||||||
/* USER CODE END TIM5_MspDeInit 0 */
|
|
||||||
/* Peripheral clock disable */
|
|
||||||
__HAL_RCC_TIM5_CLK_DISABLE();
|
|
||||||
|
|
||||||
/**TIM5 GPIO Configuration
|
|
||||||
PA0/WKUP ------> TIM5_CH1
|
|
||||||
*/
|
|
||||||
HAL_GPIO_DeInit(GPIOA, GPIO_PIN_0);
|
|
||||||
|
|
||||||
/* USER CODE BEGIN TIM5_MspDeInit 1 */
|
|
||||||
|
|
||||||
/* USER CODE END TIM5_MspDeInit 1 */
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* USER CODE BEGIN 1 */
|
/* USER CODE BEGIN 1 */
|
||||||
|
|
||||||
/* USER CODE END 1 */
|
/* USER CODE END 1 */
|
||||||
|
|||||||
@ -232,8 +232,8 @@ HAL_StatusTypeDef PWM_SetConfig(PWM_Handle_t *hpwm, uint8_t PhaseMask, uint16_t
|
|||||||
hpwm->Config.PulseNumber = PulseNumber;
|
hpwm->Config.PulseNumber = PulseNumber;
|
||||||
hpwm->Config.Frequency = Frequency;
|
hpwm->Config.Frequency = Frequency;
|
||||||
// Высставление периодов
|
// Высставление периодов
|
||||||
__HAL_TIM_SET_AUTORELOAD(&hpwm1, TIM_FreqToTick(Frequency, PWM_TIM1_FREQ_MHZ));
|
__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));
|
__HAL_TIM_SET_AUTORELOAD(&hpwm2, TIM_FreqToTick(Frequency, PWM_TIM3_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);
|
||||||
|
|||||||
@ -46,7 +46,7 @@ int UPP_Init(void)
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
upp.workmode = WM_Ready;
|
upp.workmode = UPP_Ready;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -75,10 +75,9 @@ int UPP_PreWhile(void)
|
|||||||
int UPP_While(void)
|
int UPP_While(void)
|
||||||
{
|
{
|
||||||
int retval = 0;
|
int retval = 0;
|
||||||
HAL_IWDG_Refresh(&hiwdg);
|
|
||||||
if(upp.pm.f.runSlow)
|
if(upp.pm.f.runSlow)
|
||||||
{
|
{
|
||||||
|
HAL_IWDG_Refresh(&hiwdg);
|
||||||
BenchTime_Start(BT_SLOWCALC, angletim.Instance->CNT, HAL_MAX_DELAY);
|
BenchTime_Start(BT_SLOWCALC, angletim.Instance->CNT, HAL_MAX_DELAY);
|
||||||
|
|
||||||
UPP_DO.CEN(ENABLE);
|
UPP_DO.CEN(ENABLE);
|
||||||
@ -92,28 +91,27 @@ int UPP_While(void)
|
|||||||
{
|
{
|
||||||
upp.call->stop = 0;
|
upp.call->stop = 0;
|
||||||
}
|
}
|
||||||
|
// Если СТОП - переходим в ошибку
|
||||||
if (upp.call->stop)
|
if (upp.call->stop)
|
||||||
upp.workmode = WM_Error;
|
upp.workmode = UPP_Error;
|
||||||
|
|
||||||
// Сброс на дефолтные по запросу
|
// Сброс на дефолтные по запросу
|
||||||
if(upp.call->set_default_pui)
|
if(upp.call->set_default_pui || upp.call->set_default_internal)
|
||||||
{
|
{
|
||||||
UPP_SetDefault(1, 0);
|
UPP_SetDefault(upp.call->set_default_pui, upp.call->set_default_internal);
|
||||||
}
|
|
||||||
if(upp.call->set_default_internal)
|
|
||||||
{
|
|
||||||
UPP_SetDefault(0, 1);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Медленные расчеты
|
||||||
PowerMonitor_SlowCalc(&upp.pm);
|
PowerMonitor_SlowCalc(&upp.pm);
|
||||||
|
|
||||||
|
// Защиты // Определенные защиты включаем только в режиме работы
|
||||||
|
PowerMonitor_Protect(&upp.pm, upp.workmode == UPP_Work);
|
||||||
|
|
||||||
|
|
||||||
// Если СТОП - переходим в ошибку
|
|
||||||
// Автомат состояний УПП
|
// Автомат состояний УПП
|
||||||
switch(upp.workmode)
|
switch(upp.workmode)
|
||||||
{
|
{
|
||||||
/* Состояние готовности */
|
/* Состояние готовности */
|
||||||
case WM_Ready:
|
case UPP_Ready:
|
||||||
PWM_Stop(&upp.hpwm, 0, 1); // Останавливаем ВЕСЬ ШИМ
|
PWM_Stop(&upp.hpwm, 0, 1); // Останавливаем ВЕСЬ ШИМ
|
||||||
// Индикация
|
// Индикация
|
||||||
UPP_DO.Ready(ENABLE);
|
UPP_DO.Ready(ENABLE);
|
||||||
@ -123,21 +121,21 @@ int UPP_While(void)
|
|||||||
// если пришла команда на запуск
|
// если пришла команда на запуск
|
||||||
if (upp.call->go)
|
if (upp.call->go)
|
||||||
{
|
{
|
||||||
upp.workmode = WM_Running;
|
upp.workmode = UPP_Work;
|
||||||
Angle_PID_Reset(&upp.hangle);
|
Angle_PID_Reset(&upp.hangle);
|
||||||
upp.StartTick = local_time();
|
upp.StartTick = local_time();
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
/* Состояние В работе */
|
/* Состояние В работе */
|
||||||
case WM_Running:
|
case UPP_Work:
|
||||||
// Индикация
|
// Индикация
|
||||||
UPP_DO.Ready(DISABLE);
|
UPP_DO.Ready(DISABLE);
|
||||||
UPP_DO.Work(ENABLE);
|
UPP_DO.Work(ENABLE);
|
||||||
UPP_DO.Error(DISABLE);
|
UPP_DO.Error(DISABLE);
|
||||||
// если пришла команда на остановку
|
// если пришла команда на остановку
|
||||||
if (!upp.call->go)
|
if (!upp.call->go)
|
||||||
upp.workmode = WM_Ready;
|
upp.workmode = UPP_Ready;
|
||||||
|
|
||||||
// Регулирование тиристоров
|
// Регулирование тиристоров
|
||||||
Angle_PID(&upp.hangle, iref_dbg, upp.pm.measured.final.Iamp);
|
Angle_PID(&upp.hangle, iref_dbg, upp.pm.measured.final.Iamp);
|
||||||
@ -159,7 +157,7 @@ int UPP_While(void)
|
|||||||
// break;
|
// break;
|
||||||
|
|
||||||
/* Состояние Ошибки */
|
/* Состояние Ошибки */
|
||||||
case WM_Error:
|
case UPP_Error:
|
||||||
default:
|
default:
|
||||||
PWM_Stop(&upp.hpwm, 0, 1); // Останавливаем ВЕСЬ ШИМ
|
PWM_Stop(&upp.hpwm, 0, 1); // Останавливаем ВЕСЬ ШИМ
|
||||||
// Индикация
|
// Индикация
|
||||||
@ -168,7 +166,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 = WM_Ready;
|
upp.workmode = UPP_Ready;
|
||||||
|
|
||||||
retval = 1;
|
retval = 1;
|
||||||
break;
|
break;
|
||||||
@ -191,7 +189,7 @@ int UPP_While(void)
|
|||||||
*/
|
*/
|
||||||
void UPP_Tick(void)
|
void UPP_Tick(void)
|
||||||
{
|
{
|
||||||
if(upp.workmode == WM_Not_Init)
|
if(upp.workmode == UPP_Not_Init)
|
||||||
return;
|
return;
|
||||||
UPP_Errors_Handle();
|
UPP_Errors_Handle();
|
||||||
UPP_Params_InternalControl();
|
UPP_Params_InternalControl();
|
||||||
@ -214,15 +212,13 @@ void UPP_ADC_Handle(void)
|
|||||||
|
|
||||||
PowerMonitor_FastCalc(&upp.pm);
|
PowerMonitor_FastCalc(&upp.pm);
|
||||||
|
|
||||||
PowerMonitor_Protect(&upp.pm, upp.workmode == WM_Running);
|
|
||||||
|
|
||||||
for(int phase = 0; phase < 3; phase++)
|
for(int phase = 0; phase < 3; phase++)
|
||||||
{
|
{
|
||||||
// Если произошел Zero Cross
|
// Если произошел Zero Cross
|
||||||
if(ZC_isOccurred(&upp.pm.zc, phase))
|
if(ZC_isOccurred(&upp.pm.zc, phase))
|
||||||
{
|
{
|
||||||
// Если УПП в работе
|
// Если УПП в работе
|
||||||
if(upp.workmode == WM_Running)
|
if(upp.workmode == UPP_Work)
|
||||||
{
|
{
|
||||||
// Меняем полуволну тиристора
|
// Меняем полуволну тиристора
|
||||||
UPP_HalfWave_t curr_halfwave = ZC_GetHalfWave(&upp.pm.zc, phase);
|
UPP_HalfWave_t curr_halfwave = ZC_GetHalfWave(&upp.pm.zc, phase);
|
||||||
@ -250,7 +246,7 @@ void UPP_Angle_Handle(void)
|
|||||||
UPP_Phase_t phase = Angle_Handle(&upp.hangle);
|
UPP_Phase_t phase = Angle_Handle(&upp.hangle);
|
||||||
Angle_Reset(&upp.hangle, phase);
|
Angle_Reset(&upp.hangle, phase);
|
||||||
// Если УПП в работе
|
// Если УПП в работе
|
||||||
if(upp.workmode == WM_Running)
|
if(upp.workmode == UPP_Work)
|
||||||
{
|
{
|
||||||
switch(phase)
|
switch(phase)
|
||||||
{
|
{
|
||||||
@ -278,8 +274,8 @@ void HAL_TIM_OC_DelayElapsedCallback(TIM_HandleTypeDef* htim)
|
|||||||
}
|
}
|
||||||
void HAL_IncTick(void)
|
void HAL_IncTick(void)
|
||||||
{
|
{
|
||||||
BenchTime_Start(BT_SYSTICK, angletim.Instance->CNT, HAL_MAX_DELAY);
|
//BenchTime_Start(BT_SYSTICK, angletim.Instance->CNT, HAL_MAX_DELAY);
|
||||||
uwTick += uwTickFreq;
|
uwTick += uwTickFreq;
|
||||||
UPP_Tick();
|
//UPP_Tick();
|
||||||
upp.Timings.isr_systick_us = BenchTime_End(BT_SYSTICK, angletim.Instance->CNT)/ANGLE_TIM2_FREQ_MHZ;
|
//upp.Timings.isr_systick_us = BenchTime_End(BT_SYSTICK, angletim.Instance->CNT)/ANGLE_TIM2_FREQ_MHZ;
|
||||||
}
|
}
|
||||||
@ -329,18 +329,34 @@
|
|||||||
<Bp>
|
<Bp>
|
||||||
<Number>0</Number>
|
<Number>0</Number>
|
||||||
<Type>0</Type>
|
<Type>0</Type>
|
||||||
<LineNumber>136</LineNumber>
|
<LineNumber>407</LineNumber>
|
||||||
<EnabledFlag>1</EnabledFlag>
|
<EnabledFlag>1</EnabledFlag>
|
||||||
<Address>134258308</Address>
|
<Address>134233290</Address>
|
||||||
<ByteObject>0</ByteObject>
|
<ByteObject>0</ByteObject>
|
||||||
<HtxType>0</HtxType>
|
<HtxType>0</HtxType>
|
||||||
<ManyObjects>0</ManyObjects>
|
<ManyObjects>0</ManyObjects>
|
||||||
<SizeOfObject>0</SizeOfObject>
|
<SizeOfObject>0</SizeOfObject>
|
||||||
<BreakByAccess>0</BreakByAccess>
|
<BreakByAccess>0</BreakByAccess>
|
||||||
<BreakIfRCount>1</BreakIfRCount>
|
<BreakIfRCount>1</BreakIfRCount>
|
||||||
<Filename>../Core/Src/stm32f4xx_it.c</Filename>
|
<Filename>../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.c</Filename>
|
||||||
<ExecCommand></ExecCommand>
|
<ExecCommand></ExecCommand>
|
||||||
<Expression>\\Debug_F417\../Core/Src/stm32f4xx_it.c\136</Expression>
|
<Expression>\\Debug_F417\../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.c\407</Expression>
|
||||||
|
</Bp>
|
||||||
|
<Bp>
|
||||||
|
<Number>1</Number>
|
||||||
|
<Type>0</Type>
|
||||||
|
<LineNumber>27</LineNumber>
|
||||||
|
<EnabledFlag>1</EnabledFlag>
|
||||||
|
<Address>0</Address>
|
||||||
|
<ByteObject>0</ByteObject>
|
||||||
|
<HtxType>0</HtxType>
|
||||||
|
<ManyObjects>0</ManyObjects>
|
||||||
|
<SizeOfObject>0</SizeOfObject>
|
||||||
|
<BreakByAccess>0</BreakByAccess>
|
||||||
|
<BreakIfRCount>0</BreakIfRCount>
|
||||||
|
<Filename>..\Core\Src\DBG_stm32f417_support.c</Filename>
|
||||||
|
<ExecCommand></ExecCommand>
|
||||||
|
<Expression></Expression>
|
||||||
</Bp>
|
</Bp>
|
||||||
</Breakpoint>
|
</Breakpoint>
|
||||||
<WatchWindow1>
|
<WatchWindow1>
|
||||||
@ -369,6 +385,36 @@
|
|||||||
<WinNumber>1</WinNumber>
|
<WinNumber>1</WinNumber>
|
||||||
<ItemText>hbt,0x0A</ItemText>
|
<ItemText>hbt,0x0A</ItemText>
|
||||||
</Ww>
|
</Ww>
|
||||||
|
<Ww>
|
||||||
|
<count>5</count>
|
||||||
|
<WinNumber>1</WinNumber>
|
||||||
|
<ItemText>htim5.Instance->CNT,0x0A</ItemText>
|
||||||
|
</Ww>
|
||||||
|
<Ww>
|
||||||
|
<count>6</count>
|
||||||
|
<WinNumber>1</WinNumber>
|
||||||
|
<ItemText>htim14.Instance->PSC,0x0A</ItemText>
|
||||||
|
</Ww>
|
||||||
|
<Ww>
|
||||||
|
<count>7</count>
|
||||||
|
<WinNumber>1</WinNumber>
|
||||||
|
<ItemText>htim5.Instance->PSC,0x0A</ItemText>
|
||||||
|
</Ww>
|
||||||
|
<Ww>
|
||||||
|
<count>8</count>
|
||||||
|
<WinNumber>1</WinNumber>
|
||||||
|
<ItemText>SystemCoreClock,0x0A</ItemText>
|
||||||
|
</Ww>
|
||||||
|
<Ww>
|
||||||
|
<count>9</count>
|
||||||
|
<WinNumber>1</WinNumber>
|
||||||
|
<ItemText>sysclockfreq,0x0A</ItemText>
|
||||||
|
</Ww>
|
||||||
|
<Ww>
|
||||||
|
<count>10</count>
|
||||||
|
<WinNumber>1</WinNumber>
|
||||||
|
<ItemText>\\Debug_F417\../Core/UPP/upp_main.c\upp.pm.avg[5].dataProcessing</ItemText>
|
||||||
|
</Ww>
|
||||||
</WatchWindow1>
|
</WatchWindow1>
|
||||||
<WatchWindow2>
|
<WatchWindow2>
|
||||||
<Ww>
|
<Ww>
|
||||||
@ -401,6 +447,31 @@
|
|||||||
<WinNumber>2</WinNumber>
|
<WinNumber>2</WinNumber>
|
||||||
<ItemText>errors.common</ItemText>
|
<ItemText>errors.common</ItemText>
|
||||||
</Ww>
|
</Ww>
|
||||||
|
<Ww>
|
||||||
|
<count>6</count>
|
||||||
|
<WinNumber>2</WinNumber>
|
||||||
|
<ItemText>upp.pm.measured.slow.U[0]</ItemText>
|
||||||
|
</Ww>
|
||||||
|
<Ww>
|
||||||
|
<count>7</count>
|
||||||
|
<WinNumber>2</WinNumber>
|
||||||
|
<ItemText>zc->Channel[channel1].PeriodStartTime,0x0A</ItemText>
|
||||||
|
</Ww>
|
||||||
|
<Ww>
|
||||||
|
<count>8</count>
|
||||||
|
<WinNumber>2</WinNumber>
|
||||||
|
<ItemText>zc->Channel[channel2].PeriodStartTime,0x0A</ItemText>
|
||||||
|
</Ww>
|
||||||
|
<Ww>
|
||||||
|
<count>9</count>
|
||||||
|
<WinNumber>2</WinNumber>
|
||||||
|
<ItemText>zc->Channel[channel1].PeriodStartTime - zc->Channel[channel2].PeriodStartTime,0x10</ItemText>
|
||||||
|
</Ww>
|
||||||
|
<Ww>
|
||||||
|
<count>10</count>
|
||||||
|
<WinNumber>2</WinNumber>
|
||||||
|
<ItemText>htim5.Instance,0x0A</ItemText>
|
||||||
|
</Ww>
|
||||||
</WatchWindow2>
|
</WatchWindow2>
|
||||||
<Tracepoint>
|
<Tracepoint>
|
||||||
<THDelay>0</THDelay>
|
<THDelay>0</THDelay>
|
||||||
@ -444,9 +515,34 @@
|
|||||||
<pszMrulep></pszMrulep>
|
<pszMrulep></pszMrulep>
|
||||||
<pSingCmdsp></pSingCmdsp>
|
<pSingCmdsp></pSingCmdsp>
|
||||||
<pMultCmdsp></pMultCmdsp>
|
<pMultCmdsp></pMultCmdsp>
|
||||||
|
<LogicAnalyzers>
|
||||||
|
<Wi>
|
||||||
|
<IntNumber>0</IntNumber>
|
||||||
|
<FirstString>`upp.pm.measured.real.U[0]</FirstString>
|
||||||
|
<SecondString>0000000000000000007097C00000000000709740000000000000000000000000000000007570702E706D2E6D656173757265642E7265616C2E555B305D000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000700000001000000731CC7711CC7D13F1400000000000000000000000000000000000000A49F0008</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>
|
||||||
|
</LogicAnalyzers>
|
||||||
<SystemViewers>
|
<SystemViewers>
|
||||||
<Entry>
|
<Entry>
|
||||||
<Name>System Viewer\DMA2</Name>
|
<Name>System Viewer\DBG</Name>
|
||||||
|
<WinId>35902</WinId>
|
||||||
|
</Entry>
|
||||||
|
<Entry>
|
||||||
|
<Name>System Viewer\TIM14</Name>
|
||||||
|
<WinId>35903</WinId>
|
||||||
|
</Entry>
|
||||||
|
<Entry>
|
||||||
|
<Name>System Viewer\TIM5</Name>
|
||||||
<WinId>35905</WinId>
|
<WinId>35905</WinId>
|
||||||
</Entry>
|
</Entry>
|
||||||
<Entry>
|
<Entry>
|
||||||
@ -1362,7 +1458,7 @@
|
|||||||
|
|
||||||
<Group>
|
<Group>
|
||||||
<GroupName>PeriphGeneral</GroupName>
|
<GroupName>PeriphGeneral</GroupName>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>1</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
<cbSel>0</cbSel>
|
<cbSel>0</cbSel>
|
||||||
<RteFlg>0</RteFlg>
|
<RteFlg>0</RteFlg>
|
||||||
|
|||||||
@ -17,8 +17,8 @@
|
|||||||
<TargetCommonOption>
|
<TargetCommonOption>
|
||||||
<Device>STM32F427ZGTx</Device>
|
<Device>STM32F427ZGTx</Device>
|
||||||
<Vendor>STMicroelectronics</Vendor>
|
<Vendor>STMicroelectronics</Vendor>
|
||||||
<PackID>Keil.STM32F4xx_DFP.2.16.0</PackID>
|
<PackID>Keil.STM32F4xx_DFP.2.17.1</PackID>
|
||||||
<PackURL>http://www.keil.com/pack/</PackURL>
|
<PackURL>https://www.keil.com/pack/</PackURL>
|
||||||
<Cpu>IRAM(0x20000000-0x2002FFFF) IRAM2(0x10000000-0x1000FFFF) IROM(0x8000000-0x80FFFFF) CLOCK(25000000) FPU2 CPUTYPE("Cortex-M4") TZ</Cpu>
|
<Cpu>IRAM(0x20000000-0x2002FFFF) IRAM2(0x10000000-0x1000FFFF) IROM(0x8000000-0x80FFFFF) CLOCK(25000000) FPU2 CPUTYPE("Cortex-M4") TZ</Cpu>
|
||||||
<FlashUtilSpec></FlashUtilSpec>
|
<FlashUtilSpec></FlashUtilSpec>
|
||||||
<StartupFile></StartupFile>
|
<StartupFile></StartupFile>
|
||||||
@ -1004,8 +1004,8 @@
|
|||||||
<TargetCommonOption>
|
<TargetCommonOption>
|
||||||
<Device>STM32F417ZGTx</Device>
|
<Device>STM32F417ZGTx</Device>
|
||||||
<Vendor>STMicroelectronics</Vendor>
|
<Vendor>STMicroelectronics</Vendor>
|
||||||
<PackID>Keil.STM32F4xx_DFP.2.16.0</PackID>
|
<PackID>Keil.STM32F4xx_DFP.2.17.1</PackID>
|
||||||
<PackURL>http://www.keil.com/pack/</PackURL>
|
<PackURL>https://www.keil.com/pack/</PackURL>
|
||||||
<Cpu>IRAM(0x20000000,0x00020000) IRAM2(0x10000000,0x00010000) IROM(0x08000000,0x00100000) CPUTYPE("Cortex-M4") FPU2 CLOCK(12000000) ELITTLE</Cpu>
|
<Cpu>IRAM(0x20000000,0x00020000) IRAM2(0x10000000,0x00010000) IROM(0x08000000,0x00100000) CPUTYPE("Cortex-M4") FPU2 CLOCK(12000000) ELITTLE</Cpu>
|
||||||
<FlashUtilSpec></FlashUtilSpec>
|
<FlashUtilSpec></FlashUtilSpec>
|
||||||
<StartupFile></StartupFile>
|
<StartupFile></StartupFile>
|
||||||
|
|||||||
@ -40,7 +40,7 @@ __initial_sp
|
|||||||
; <o> Heap Size (in Bytes) <0x0-0xFFFFFFFF:8>
|
; <o> Heap Size (in Bytes) <0x0-0xFFFFFFFF:8>
|
||||||
; </h>
|
; </h>
|
||||||
|
|
||||||
Heap_Size EQU 0x200
|
Heap_Size EQU 0x400
|
||||||
|
|
||||||
AREA HEAP, NOINIT, READWRITE, ALIGN=3
|
AREA HEAP, NOINIT, READWRITE, ALIGN=3
|
||||||
__heap_base
|
__heap_base
|
||||||
|
|||||||
112
UPP/UPP.ioc
112
UPP/UPP.ioc
@ -82,63 +82,63 @@ Mcu.Pin12=PF10
|
|||||||
Mcu.Pin13=PH0/OSC_IN
|
Mcu.Pin13=PH0/OSC_IN
|
||||||
Mcu.Pin14=PH1/OSC_OUT
|
Mcu.Pin14=PH1/OSC_OUT
|
||||||
Mcu.Pin15=PC0
|
Mcu.Pin15=PC0
|
||||||
Mcu.Pin16=PA0/WKUP
|
Mcu.Pin16=PA4
|
||||||
Mcu.Pin17=PA4
|
Mcu.Pin17=PA5
|
||||||
Mcu.Pin18=PA5
|
Mcu.Pin18=PA6
|
||||||
Mcu.Pin19=PA6
|
Mcu.Pin19=PB0
|
||||||
Mcu.Pin2=PE4
|
Mcu.Pin2=PE4
|
||||||
Mcu.Pin20=PB0
|
Mcu.Pin20=PB1
|
||||||
Mcu.Pin21=PB1
|
Mcu.Pin21=PF11
|
||||||
Mcu.Pin22=PF11
|
Mcu.Pin22=PB10
|
||||||
Mcu.Pin23=PB10
|
Mcu.Pin23=PB11
|
||||||
Mcu.Pin24=PB11
|
Mcu.Pin24=PB13
|
||||||
Mcu.Pin25=PB13
|
Mcu.Pin25=PG6
|
||||||
Mcu.Pin26=PG6
|
Mcu.Pin26=PC6
|
||||||
Mcu.Pin27=PC6
|
Mcu.Pin27=PC7
|
||||||
Mcu.Pin28=PC7
|
Mcu.Pin28=PC8
|
||||||
Mcu.Pin29=PC8
|
Mcu.Pin29=PC9
|
||||||
Mcu.Pin3=PE5
|
Mcu.Pin3=PE5
|
||||||
Mcu.Pin30=PC9
|
Mcu.Pin30=PA8
|
||||||
Mcu.Pin31=PA8
|
Mcu.Pin31=PA9
|
||||||
Mcu.Pin32=PA9
|
Mcu.Pin32=PA10
|
||||||
Mcu.Pin33=PA10
|
Mcu.Pin33=PA11
|
||||||
Mcu.Pin34=PA11
|
Mcu.Pin34=PA12
|
||||||
Mcu.Pin35=PA12
|
Mcu.Pin35=PA13
|
||||||
Mcu.Pin36=PA13
|
Mcu.Pin36=PA14
|
||||||
Mcu.Pin37=PA14
|
Mcu.Pin37=PA15
|
||||||
Mcu.Pin38=PA15
|
Mcu.Pin38=PC10
|
||||||
Mcu.Pin39=PC10
|
Mcu.Pin39=PC11
|
||||||
Mcu.Pin4=PE6
|
Mcu.Pin4=PE6
|
||||||
Mcu.Pin40=PC11
|
Mcu.Pin40=PC12
|
||||||
Mcu.Pin41=PC12
|
Mcu.Pin41=PD2
|
||||||
Mcu.Pin42=PD2
|
Mcu.Pin42=PD3
|
||||||
Mcu.Pin43=PD3
|
Mcu.Pin43=PD6
|
||||||
Mcu.Pin44=PD6
|
Mcu.Pin44=PG12
|
||||||
Mcu.Pin45=PG12
|
Mcu.Pin45=PG15
|
||||||
Mcu.Pin46=PG15
|
Mcu.Pin46=PB3
|
||||||
Mcu.Pin47=PB3
|
Mcu.Pin47=PB6
|
||||||
Mcu.Pin48=PB6
|
Mcu.Pin48=PB7
|
||||||
Mcu.Pin49=PB7
|
Mcu.Pin49=PB8
|
||||||
Mcu.Pin5=PC13
|
Mcu.Pin5=PC13
|
||||||
Mcu.Pin50=PB8
|
Mcu.Pin50=PB9
|
||||||
Mcu.Pin51=PB9
|
Mcu.Pin51=PE0
|
||||||
Mcu.Pin52=PE0
|
Mcu.Pin52=PE1
|
||||||
Mcu.Pin53=PE1
|
Mcu.Pin53=VP_IWDG_VS_IWDG
|
||||||
Mcu.Pin54=VP_IWDG_VS_IWDG
|
Mcu.Pin54=VP_RTC_VS_RTC_Activate
|
||||||
Mcu.Pin55=VP_RTC_VS_RTC_Activate
|
Mcu.Pin55=VP_RTC_VS_RTC_Calendar
|
||||||
Mcu.Pin56=VP_RTC_VS_RTC_Calendar
|
Mcu.Pin56=VP_SYS_VS_tim14
|
||||||
Mcu.Pin57=VP_SYS_VS_tim14
|
Mcu.Pin57=VP_TIM1_VS_ClockSourceINT
|
||||||
Mcu.Pin58=VP_TIM1_VS_ClockSourceINT
|
Mcu.Pin58=VP_TIM1_VS_OPM
|
||||||
Mcu.Pin59=VP_TIM1_VS_OPM
|
Mcu.Pin59=VP_TIM2_VS_ClockSourceINT
|
||||||
Mcu.Pin6=PC14/OSC32_IN
|
Mcu.Pin6=PC14/OSC32_IN
|
||||||
Mcu.Pin60=VP_TIM2_VS_ClockSourceINT
|
Mcu.Pin60=VP_TIM2_VS_no_output1
|
||||||
Mcu.Pin61=VP_TIM2_VS_no_output1
|
Mcu.Pin61=VP_TIM2_VS_no_output2
|
||||||
Mcu.Pin62=VP_TIM2_VS_no_output2
|
Mcu.Pin62=VP_TIM2_VS_no_output3
|
||||||
Mcu.Pin63=VP_TIM2_VS_no_output3
|
Mcu.Pin63=VP_TIM3_VS_ControllerModeTrigger
|
||||||
Mcu.Pin64=VP_TIM3_VS_ControllerModeTrigger
|
Mcu.Pin64=VP_TIM3_VS_ClockSourceINT
|
||||||
Mcu.Pin65=VP_TIM3_VS_ClockSourceINT
|
Mcu.Pin65=VP_TIM3_VS_ClockSourceITR
|
||||||
Mcu.Pin66=VP_TIM3_VS_ClockSourceITR
|
Mcu.Pin66=VP_TIM3_VS_OPM
|
||||||
Mcu.Pin67=VP_TIM3_VS_OPM
|
Mcu.Pin67=VP_TIM5_VS_ClockSourceINT
|
||||||
Mcu.Pin68=VP_TIM8_VS_ClockSourceINT
|
Mcu.Pin68=VP_TIM8_VS_ClockSourceINT
|
||||||
Mcu.Pin69=VP_TIM11_VS_ClockSourceINT
|
Mcu.Pin69=VP_TIM11_VS_ClockSourceINT
|
||||||
Mcu.Pin7=PC15/OSC32_OUT
|
Mcu.Pin7=PC15/OSC32_OUT
|
||||||
@ -168,7 +168,6 @@ NVIC.TIM8_TRG_COM_TIM14_IRQn=true\:15\:0\:false\:false\:true\:false\:true\:true
|
|||||||
NVIC.TimeBase=TIM8_TRG_COM_TIM14_IRQn
|
NVIC.TimeBase=TIM8_TRG_COM_TIM14_IRQn
|
||||||
NVIC.TimeBaseIP=TIM14
|
NVIC.TimeBaseIP=TIM14
|
||||||
NVIC.UsageFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
|
NVIC.UsageFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
|
||||||
PA0/WKUP.Signal=S_TIM5_CH1
|
|
||||||
PA10.GPIOParameters=GPIO_Label
|
PA10.GPIOParameters=GPIO_Label
|
||||||
PA10.GPIO_Label=PWM3
|
PA10.GPIO_Label=PWM3
|
||||||
PA10.Locked=true
|
PA10.Locked=true
|
||||||
@ -466,8 +465,6 @@ SH.S_TIM3_CH3.0=TIM3_CH3,PWM Generation3 CH3
|
|||||||
SH.S_TIM3_CH3.ConfNb=1
|
SH.S_TIM3_CH3.ConfNb=1
|
||||||
SH.S_TIM3_CH4.0=TIM3_CH4,PWM Generation4 CH4
|
SH.S_TIM3_CH4.0=TIM3_CH4,PWM Generation4 CH4
|
||||||
SH.S_TIM3_CH4.ConfNb=1
|
SH.S_TIM3_CH4.ConfNb=1
|
||||||
SH.S_TIM5_CH1.0=TIM5_CH1,Input_Capture1_from_TI1
|
|
||||||
SH.S_TIM5_CH1.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
|
||||||
@ -497,8 +494,7 @@ TIM3.Channel-PWM\ Generation4\ CH4=TIM_CHANNEL_4
|
|||||||
TIM3.IPParameters=Channel-PWM Generation3 CH3,Channel-PWM Generation4 CH4,TIM_MasterSlaveMode,TIM_MasterOutputTrigger
|
TIM3.IPParameters=Channel-PWM Generation3 CH3,Channel-PWM Generation4 CH4,TIM_MasterSlaveMode,TIM_MasterOutputTrigger
|
||||||
TIM3.TIM_MasterOutputTrigger=TIM_TRGO_RESET
|
TIM3.TIM_MasterOutputTrigger=TIM_TRGO_RESET
|
||||||
TIM3.TIM_MasterSlaveMode=TIM_MASTERSLAVEMODE_ENABLE
|
TIM3.TIM_MasterSlaveMode=TIM_MASTERSLAVEMODE_ENABLE
|
||||||
TIM5.Channel-Input_Capture1_from_TI1=TIM_CHANNEL_1
|
TIM5.IPParameters=Prescaler
|
||||||
TIM5.IPParameters=Channel-Input_Capture1_from_TI1,Prescaler
|
|
||||||
TIM5.Prescaler=90-1
|
TIM5.Prescaler=90-1
|
||||||
TIM8.IPParameters=Prescaler,Period,TIM_MasterSlaveMode,TIM_MasterOutputTrigger
|
TIM8.IPParameters=Prescaler,Period,TIM_MasterSlaveMode,TIM_MasterOutputTrigger
|
||||||
TIM8.Period=1800-1
|
TIM8.Period=1800-1
|
||||||
@ -541,6 +537,8 @@ VP_TIM3_VS_ControllerModeTrigger.Mode=Trigger Mode
|
|||||||
VP_TIM3_VS_ControllerModeTrigger.Signal=TIM3_VS_ControllerModeTrigger
|
VP_TIM3_VS_ControllerModeTrigger.Signal=TIM3_VS_ControllerModeTrigger
|
||||||
VP_TIM3_VS_OPM.Mode=OPM_bit
|
VP_TIM3_VS_OPM.Mode=OPM_bit
|
||||||
VP_TIM3_VS_OPM.Signal=TIM3_VS_OPM
|
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.Mode=Internal
|
||||||
VP_TIM8_VS_ClockSourceINT.Signal=TIM8_VS_ClockSourceINT
|
VP_TIM8_VS_ClockSourceINT.Signal=TIM8_VS_ClockSourceINT
|
||||||
board=custom
|
board=custom
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user