Compare commits
2 Commits
b61a11b4fe
...
0e950148c5
| Author | SHA1 | Date | |
|---|---|---|---|
| 0e950148c5 | |||
| 5090ddfd48 |
@ -1 +1 @@
|
|||||||
Subproject commit 2344926f92f837703ae7a6d484daf6ca3210472a
|
Subproject commit 74d692fdd5c92c6b624391b89f397e4ffcb823cc
|
||||||
@ -111,11 +111,13 @@
|
|||||||
|
|
||||||
/* Периоды вызова всякого */
|
/* Периоды вызова всякого */
|
||||||
#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 20 ///< Период обновления медленных расчетов тиках @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 PM_F_SLOW_PERIOD_CNT 2000 ///< Период обновления частоты в тиках @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 +129,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)
|
||||||
|
|||||||
@ -85,13 +85,22 @@ HAL_StatusTypeDef PowerMonitor_Init(PowerMonitor_t *hpm)
|
|||||||
|
|
||||||
Filter_Start(&hpm->avg[i]);
|
Filter_Start(&hpm->avg[i]);
|
||||||
}
|
}
|
||||||
|
/* Инициализация среднего фильтра для температур */
|
||||||
for(int i = 0; i < ADC_NUMB_OF_T_CHANNELS; i++)
|
for(int i = 0; i < ADC_NUMB_OF_T_CHANNELS; i++)
|
||||||
{
|
{
|
||||||
if(FilterAverage_Init(&hpm->avg[ADC_TEMP_CHANNELS_START+i], PM_TEMP_SLOW_PERIOD_CNT, FILTER_MODE_DEFAULT))
|
if(FilterAverage_Init(&hpm->avg[AVG_TEMP1+i], PM_TEMP_SLOW_PERIOD_CNT, FILTER_MODE_DEFAULT))
|
||||||
return HAL_ERROR;
|
return HAL_ERROR;
|
||||||
|
|
||||||
Filter_Start(&hpm->avg[ADC_TEMP_CHANNELS_START+i]);
|
Filter_Start(&hpm->avg[ADC_TEMP_CHANNELS_START+i]);
|
||||||
}
|
}
|
||||||
|
/* Инициализация среднего фильтра для частот */
|
||||||
|
for(int i = 0; i < 3; i++)
|
||||||
|
{
|
||||||
|
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]);
|
||||||
|
}
|
||||||
|
|
||||||
return HAL_OK;
|
return HAL_OK;
|
||||||
}
|
}
|
||||||
@ -130,8 +139,8 @@ void PowerMonitor_SlowCalc(PowerMonitor_t *hpm)
|
|||||||
/* Обработка температур */
|
/* Обработка температур */
|
||||||
float t1 = hpm->adc.Data[ADC_CHANNEL_TEMP1];
|
float t1 = hpm->adc.Data[ADC_CHANNEL_TEMP1];
|
||||||
float t2 = hpm->adc.Data[ADC_CHANNEL_TEMP2];
|
float t2 = hpm->adc.Data[ADC_CHANNEL_TEMP2];
|
||||||
meas->final.T[TEMP_1] = Filter_Process(&hpm->avg[ADC_CHANNEL_TEMP1], t1);
|
meas->final.T[TEMP_1] = Filter_Process(&hpm->avg[AVG_TEMP1], t1);
|
||||||
meas->final.T[TEMP_2] = Filter_Process(&hpm->avg[ADC_CHANNEL_TEMP2], t2);
|
meas->final.T[TEMP_2] = Filter_Process(&hpm->avg[AVG_TEMP2], t2);
|
||||||
|
|
||||||
/* Расчет третьей фазы */
|
/* Расчет третьей фазы */
|
||||||
meas->slow.U[U_BC] = U_BC_calc(meas->slow.U[U_BA], meas->slow.U[U_AC]);
|
meas->slow.U[U_BC] = U_BC_calc(meas->slow.U[U_BA], meas->slow.U[U_AC]);
|
||||||
@ -147,7 +156,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] = Filter_Process(&hpm->avg[AVG_FBA+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];
|
||||||
|
|
||||||
/* Средниее напряжение фазы */
|
/* Средниее напряжение фазы */
|
||||||
@ -163,8 +173,16 @@ void PowerMonitor_SlowCalc(PowerMonitor_t *hpm)
|
|||||||
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 +220,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);
|
||||||
|
|
||||||
@ -211,10 +227,10 @@ void PowerMonitor_FastCalc(PowerMonitor_t *hpm)
|
|||||||
//__SynchAvgFilters(hpm);
|
//__SynchAvgFilters(hpm);
|
||||||
|
|
||||||
/* Average для медленной фильтрации */
|
/* Average для медленной фильтрации */
|
||||||
meas->slow.U[U_BA] = Filter_Process(&hpm->avg[ADC_CHANNEL_UBA], meas->fast.U[U_BA]);
|
meas->slow.U[U_BA] = Filter_Process(&hpm->avg[AVG_UBA], meas->fast.U[U_BA]);
|
||||||
meas->slow.U[U_AC] = Filter_Process(&hpm->avg[ADC_CHANNEL_UAC], meas->fast.U[U_AC]);
|
meas->slow.U[U_AC] = Filter_Process(&hpm->avg[AVG_UAC], meas->fast.U[U_AC]);
|
||||||
meas->slow.I[I_C] = Filter_Process(&hpm->avg[ADC_CHANNEL_IC], meas->fast.I[I_C]);
|
meas->slow.I[I_C] = Filter_Process(&hpm->avg[AVG_IC], meas->fast.I[I_C]);
|
||||||
meas->slow.I[I_A] = Filter_Process(&hpm->avg[ADC_CHANNEL_IA], meas->fast.I[I_A]);
|
meas->slow.I[I_A] = Filter_Process(&hpm->avg[AVG_IA], meas->fast.I[I_A]);
|
||||||
|
|
||||||
|
|
||||||
/* Запускаем медленную обработку через slow_period прерываний */
|
/* Запускаем медленную обработку через slow_period прерываний */
|
||||||
|
|||||||
@ -21,6 +21,16 @@
|
|||||||
#define EXP_IA 6
|
#define EXP_IA 6
|
||||||
#define EXP_IB 7
|
#define EXP_IB 7
|
||||||
|
|
||||||
|
#define AVG_ALL 9
|
||||||
|
#define AVG_UBA 0
|
||||||
|
#define AVG_UAC 1
|
||||||
|
#define AVG_IC 2
|
||||||
|
#define AVG_IA 3
|
||||||
|
#define AVG_TEMP1 4
|
||||||
|
#define AVG_TEMP2 5
|
||||||
|
#define AVG_FBA 6
|
||||||
|
#define AVG_FAC 7
|
||||||
|
#define AVG_FBC 8
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Флаги Мониторинга сети
|
* @brief Флаги Мониторинга сети
|
||||||
@ -43,13 +53,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 */
|
||||||
@ -86,7 +98,7 @@ typedef struct
|
|||||||
PowerMonitor_Measured_t measured; ///< Измеренные/рассчитанные величины
|
PowerMonitor_Measured_t measured; ///< Измеренные/рассчитанные величины
|
||||||
|
|
||||||
FilterExp_t exp[EXP_ALL]; ///< Фильтры для сглаживания мговенного значения Напряжения/Токов
|
FilterExp_t exp[EXP_ALL]; ///< Фильтры для сглаживания мговенного значения Напряжения/Токов
|
||||||
FilterAverage_t avg[ADC_NUMB_OF_CHANNELS]; ///< Фильтры для сглаживания медленных величин АЦП
|
FilterAverage_t avg[AVG_ALL]; ///< Фильтры для сглаживания медленных величин АЦП
|
||||||
|
|
||||||
PowerMonitor_Flags_t f; ///< Флаги мониторинга
|
PowerMonitor_Flags_t f; ///< Флаги мониторинга
|
||||||
uint32_t isr_cnt;
|
uint32_t isr_cnt;
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
@ -68,10 +68,6 @@ void MX_TIM1_Init(void)
|
|||||||
{
|
{
|
||||||
Error_Handler();
|
Error_Handler();
|
||||||
}
|
}
|
||||||
if (HAL_TIM_OnePulse_Init(&htim1, TIM_OPMODE_SINGLE) != HAL_OK)
|
|
||||||
{
|
|
||||||
Error_Handler();
|
|
||||||
}
|
|
||||||
sMasterConfig.MasterOutputTrigger = TIM_TRGO_UPDATE;
|
sMasterConfig.MasterOutputTrigger = TIM_TRGO_UPDATE;
|
||||||
sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
|
sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
|
||||||
if (HAL_TIMEx_MasterConfigSynchronization(&htim1, &sMasterConfig) != HAL_OK)
|
if (HAL_TIMEx_MasterConfigSynchronization(&htim1, &sMasterConfig) != HAL_OK)
|
||||||
@ -256,8 +252,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 +264,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 +279,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 +429,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 +478,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 +572,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 +621,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 */
|
||||||
|
|||||||
@ -60,6 +60,7 @@ HAL_StatusTypeDef PWM_Init(PWM_Handle_t *hpwm)
|
|||||||
|
|
||||||
PWM_SetConfig(hpwm, PARAM_INTERNAL.pwm.PhaseMask, PARAM_INTERNAL.pwm.Frequency, PARAM_INTERNAL.pwm.PulseNumber);
|
PWM_SetConfig(hpwm, PARAM_INTERNAL.pwm.PhaseMask, PARAM_INTERNAL.pwm.Frequency, PARAM_INTERNAL.pwm.PulseNumber);
|
||||||
|
|
||||||
|
PWM_Stop(hpwm, 0, 1);
|
||||||
HAL_TIM_PWM_Start(&hpwm1, PWM_CHANNEL_1);
|
HAL_TIM_PWM_Start(&hpwm1, PWM_CHANNEL_1);
|
||||||
HAL_TIM_PWM_Start(&hpwm1, PWM_CHANNEL_2);
|
HAL_TIM_PWM_Start(&hpwm1, PWM_CHANNEL_2);
|
||||||
HAL_TIM_PWM_Start(&hpwm1, PWM_CHANNEL_3);
|
HAL_TIM_PWM_Start(&hpwm1, PWM_CHANNEL_3);
|
||||||
@ -68,7 +69,6 @@ HAL_StatusTypeDef PWM_Init(PWM_Handle_t *hpwm)
|
|||||||
HAL_TIM_PWM_Start(&hpwm2, PWM_CHANNEL_6);
|
HAL_TIM_PWM_Start(&hpwm2, PWM_CHANNEL_6);
|
||||||
HAL_TIM_Base_Start_IT(&hpwm1);
|
HAL_TIM_Base_Start_IT(&hpwm1);
|
||||||
|
|
||||||
|
|
||||||
return HAL_OK;
|
return HAL_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -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);
|
||||||
@ -246,6 +246,9 @@ HAL_StatusTypeDef PWM_SetConfig(PWM_Handle_t *hpwm, uint8_t PhaseMask, uint16_t
|
|||||||
// Сброс счетчиков таймера и запуск заного
|
// Сброс счетчиков таймера и запуск заного
|
||||||
__HAL_TIM_SET_COUNTER(&hpwm1, 0);
|
__HAL_TIM_SET_COUNTER(&hpwm1, 0);
|
||||||
__HAL_TIM_SET_COUNTER(&hpwm2, 0);
|
__HAL_TIM_SET_COUNTER(&hpwm2, 0);
|
||||||
|
|
||||||
|
PWM_Stop(hpwm, 0, 1);
|
||||||
|
|
||||||
return HAL_TIM_Base_Start_IT(&hpwm1);
|
return HAL_TIM_Base_Start_IT(&hpwm1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -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,12 +166,17 @@ 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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
UPP_Errors_Handle();
|
||||||
|
UPP_Params_InternalControl();
|
||||||
|
|
||||||
|
|
||||||
upp.pm.f.runSlow = 0;
|
upp.pm.f.runSlow = 0;
|
||||||
upp.Timings.slow_calc_us = BenchTime_End(BT_SLOWCALC, angletim.Instance->CNT)/ANGLE_TIM2_FREQ_MHZ;
|
upp.Timings.slow_calc_us = BenchTime_End(BT_SLOWCALC, angletim.Instance->CNT)/ANGLE_TIM2_FREQ_MHZ;
|
||||||
}//if(upp.pm.f.runSlow)
|
}//if(upp.pm.f.runSlow)
|
||||||
@ -191,10 +194,8 @@ 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_Params_InternalControl();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -214,15 +215,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 +249,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)
|
||||||
{
|
{
|
||||||
|
|||||||
@ -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>134233366</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>.\startup_stm32f417xx.s</Filename>
|
||||||
|
<ExecCommand></ExecCommand>
|
||||||
|
<Expression></Expression>
|
||||||
</Bp>
|
</Bp>
|
||||||
</Breakpoint>
|
</Breakpoint>
|
||||||
<WatchWindow1>
|
<WatchWindow1>
|
||||||
@ -369,6 +385,31 @@
|
|||||||
<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>htim5.Instance->PSC,0x0A</ItemText>
|
||||||
|
</Ww>
|
||||||
|
<Ww>
|
||||||
|
<count>7</count>
|
||||||
|
<WinNumber>1</WinNumber>
|
||||||
|
<ItemText>SystemCoreClock,0x0A</ItemText>
|
||||||
|
</Ww>
|
||||||
|
<Ww>
|
||||||
|
<count>8</count>
|
||||||
|
<WinNumber>1</WinNumber>
|
||||||
|
<ItemText>sysclockfreq,0x0A</ItemText>
|
||||||
|
</Ww>
|
||||||
|
<Ww>
|
||||||
|
<count>9</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>
|
||||||
@ -389,7 +430,7 @@
|
|||||||
<Ww>
|
<Ww>
|
||||||
<count>3</count>
|
<count>3</count>
|
||||||
<WinNumber>2</WinNumber>
|
<WinNumber>2</WinNumber>
|
||||||
<ItemText>errors.prvt.cnt</ItemText>
|
<ItemText>errors.prvt.cnt,0x0A</ItemText>
|
||||||
</Ww>
|
</Ww>
|
||||||
<Ww>
|
<Ww>
|
||||||
<count>4</count>
|
<count>4</count>
|
||||||
@ -401,6 +442,36 @@
|
|||||||
<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>
|
||||||
|
<Ww>
|
||||||
|
<count>11</count>
|
||||||
|
<WinNumber>2</WinNumber>
|
||||||
|
<ItemText>iref_dbg</ItemText>
|
||||||
|
</Ww>
|
||||||
</WatchWindow2>
|
</WatchWindow2>
|
||||||
<Tracepoint>
|
<Tracepoint>
|
||||||
<THDelay>0</THDelay>
|
<THDelay>0</THDelay>
|
||||||
@ -444,9 +515,38 @@
|
|||||||
<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\TIM1</Name>
|
||||||
|
<WinId>35901</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 +1462,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
|
||||||
|
|||||||
124
UPP/UPP.ioc
124
UPP/UPP.ioc
@ -82,70 +82,69 @@ 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_TIM2_VS_ClockSourceINT
|
||||||
Mcu.Pin59=VP_TIM1_VS_OPM
|
Mcu.Pin59=VP_TIM2_VS_no_output1
|
||||||
Mcu.Pin6=PC14/OSC32_IN
|
Mcu.Pin6=PC14/OSC32_IN
|
||||||
Mcu.Pin60=VP_TIM2_VS_ClockSourceINT
|
Mcu.Pin60=VP_TIM2_VS_no_output2
|
||||||
Mcu.Pin61=VP_TIM2_VS_no_output1
|
Mcu.Pin61=VP_TIM2_VS_no_output3
|
||||||
Mcu.Pin62=VP_TIM2_VS_no_output2
|
Mcu.Pin62=VP_TIM3_VS_ControllerModeTrigger
|
||||||
Mcu.Pin63=VP_TIM2_VS_no_output3
|
Mcu.Pin63=VP_TIM3_VS_ClockSourceINT
|
||||||
Mcu.Pin64=VP_TIM3_VS_ControllerModeTrigger
|
Mcu.Pin64=VP_TIM3_VS_ClockSourceITR
|
||||||
Mcu.Pin65=VP_TIM3_VS_ClockSourceINT
|
Mcu.Pin65=VP_TIM3_VS_OPM
|
||||||
Mcu.Pin66=VP_TIM3_VS_ClockSourceITR
|
Mcu.Pin66=VP_TIM5_VS_ClockSourceINT
|
||||||
Mcu.Pin67=VP_TIM3_VS_OPM
|
Mcu.Pin67=VP_TIM8_VS_ClockSourceINT
|
||||||
Mcu.Pin68=VP_TIM8_VS_ClockSourceINT
|
Mcu.Pin68=VP_TIM11_VS_ClockSourceINT
|
||||||
Mcu.Pin69=VP_TIM11_VS_ClockSourceINT
|
Mcu.Pin69=VP_TIM12_VS_ClockSourceINT
|
||||||
Mcu.Pin7=PC15/OSC32_OUT
|
Mcu.Pin7=PC15/OSC32_OUT
|
||||||
Mcu.Pin70=VP_TIM12_VS_ClockSourceINT
|
|
||||||
Mcu.Pin8=PF6
|
Mcu.Pin8=PF6
|
||||||
Mcu.Pin9=PF7
|
Mcu.Pin9=PF7
|
||||||
Mcu.PinsNb=71
|
Mcu.PinsNb=70
|
||||||
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
|
||||||
@ -168,7 +167,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,19 +464,16 @@ 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
|
||||||
SPI3.Mode=SPI_MODE_MASTER
|
SPI3.Mode=SPI_MODE_MASTER
|
||||||
SPI3.VirtualType=VM_MASTER
|
SPI3.VirtualType=VM_MASTER
|
||||||
TIM1.Channel-Output\ Compare2\ CH2=TIM_CHANNEL_2
|
|
||||||
TIM1.Channel-PWM\ Generation1\ CH1=TIM_CHANNEL_1
|
TIM1.Channel-PWM\ Generation1\ CH1=TIM_CHANNEL_1
|
||||||
TIM1.Channel-PWM\ Generation2\ CH2=TIM_CHANNEL_2
|
TIM1.Channel-PWM\ Generation2\ CH2=TIM_CHANNEL_2
|
||||||
TIM1.Channel-PWM\ Generation3\ CH3=TIM_CHANNEL_3
|
TIM1.Channel-PWM\ Generation3\ CH3=TIM_CHANNEL_3
|
||||||
TIM1.Channel-PWM\ Generation4\ CH4=TIM_CHANNEL_4
|
TIM1.Channel-PWM\ Generation4\ CH4=TIM_CHANNEL_4
|
||||||
TIM1.IPParameters=Prescaler,Channel-Output Compare2 CH2,Channel-PWM Generation1 CH1,Channel-PWM Generation2 CH2,Channel-PWM Generation4 CH4,Channel-PWM Generation3 CH3,TIM_MasterOutputTrigger
|
TIM1.IPParameters=Prescaler,Channel-PWM Generation1 CH1,Channel-PWM Generation2 CH2,Channel-PWM Generation4 CH4,Channel-PWM Generation3 CH3,TIM_MasterOutputTrigger
|
||||||
TIM1.Prescaler=0
|
TIM1.Prescaler=0
|
||||||
TIM1.TIM_MasterOutputTrigger=TIM_TRGO_UPDATE
|
TIM1.TIM_MasterOutputTrigger=TIM_TRGO_UPDATE
|
||||||
TIM11.IPParameters=Prescaler
|
TIM11.IPParameters=Prescaler
|
||||||
@ -497,8 +492,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
|
||||||
@ -523,8 +517,6 @@ VP_TIM12_VS_ClockSourceINT.Mode=Internal
|
|||||||
VP_TIM12_VS_ClockSourceINT.Signal=TIM12_VS_ClockSourceINT
|
VP_TIM12_VS_ClockSourceINT.Signal=TIM12_VS_ClockSourceINT
|
||||||
VP_TIM1_VS_ClockSourceINT.Mode=Internal
|
VP_TIM1_VS_ClockSourceINT.Mode=Internal
|
||||||
VP_TIM1_VS_ClockSourceINT.Signal=TIM1_VS_ClockSourceINT
|
VP_TIM1_VS_ClockSourceINT.Signal=TIM1_VS_ClockSourceINT
|
||||||
VP_TIM1_VS_OPM.Mode=OPM_bit
|
|
||||||
VP_TIM1_VS_OPM.Signal=TIM1_VS_OPM
|
|
||||||
VP_TIM2_VS_ClockSourceINT.Mode=Internal
|
VP_TIM2_VS_ClockSourceINT.Mode=Internal
|
||||||
VP_TIM2_VS_ClockSourceINT.Signal=TIM2_VS_ClockSourceINT
|
VP_TIM2_VS_ClockSourceINT.Signal=TIM2_VS_ClockSourceINT
|
||||||
VP_TIM2_VS_no_output1.Mode=Output Compare1 No Output
|
VP_TIM2_VS_no_output1.Mode=Output Compare1 No Output
|
||||||
@ -541,6 +533,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