Добавлен фильтр на частоту сети
Исправлены баги Кое как работает: - с периодом АЦП 30 мкс - с периодом while 600 мкс
This commit is contained in:
parent
5090ddfd48
commit
0e950148c5
@ -111,8 +111,9 @@
|
||||
|
||||
/* Периоды вызова всякого */
|
||||
#define PM_ADC_PERIOD_US 30 ///< Период опроса АЦП в мкс
|
||||
#define PM_SLOW_PERIOD_CNT 50 ///< Период обновления медленных расчетов тиках @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_F_SLOW_PERIOD_CNT 2000 ///< Период обновления частоты в тиках @ref PM_SLOW_PERIOD_CNT
|
||||
|
||||
|
||||
/* Частоты таймеров в МГц*/
|
||||
|
||||
@ -85,13 +85,22 @@ HAL_StatusTypeDef PowerMonitor_Init(PowerMonitor_t *hpm)
|
||||
|
||||
Filter_Start(&hpm->avg[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;
|
||||
|
||||
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;
|
||||
}
|
||||
@ -130,8 +139,8 @@ void PowerMonitor_SlowCalc(PowerMonitor_t *hpm)
|
||||
/* Обработка температур */
|
||||
float t1 = hpm->adc.Data[ADC_CHANNEL_TEMP1];
|
||||
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_2] = Filter_Process(&hpm->avg[ADC_CHANNEL_TEMP2], t2);
|
||||
meas->final.T[TEMP_1] = Filter_Process(&hpm->avg[AVG_TEMP1], t1);
|
||||
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]);
|
||||
@ -147,7 +156,7 @@ void PowerMonitor_SlowCalc(PowerMonitor_t *hpm)
|
||||
for(int i = 0; i < 3; i++)
|
||||
{
|
||||
/* Получение частоты фазы */
|
||||
meas->final.F[i] = ZC_GetFrequency(&hpm->zc, i);
|
||||
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];
|
||||
|
||||
@ -218,10 +227,10 @@ void PowerMonitor_FastCalc(PowerMonitor_t *hpm)
|
||||
//__SynchAvgFilters(hpm);
|
||||
|
||||
/* Average для медленной фильтрации */
|
||||
meas->slow.U[U_BA] = Filter_Process(&hpm->avg[ADC_CHANNEL_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.I[I_C] = Filter_Process(&hpm->avg[ADC_CHANNEL_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.U[U_BA] = Filter_Process(&hpm->avg[AVG_UBA], meas->fast.U[U_BA]);
|
||||
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[AVG_IC], meas->fast.I[I_C]);
|
||||
meas->slow.I[I_A] = Filter_Process(&hpm->avg[AVG_IA], meas->fast.I[I_A]);
|
||||
|
||||
|
||||
/* Запускаем медленную обработку через slow_period прерываний */
|
||||
|
||||
@ -21,6 +21,16 @@
|
||||
#define EXP_IA 6
|
||||
#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 Флаги Мониторинга сети
|
||||
@ -88,7 +98,7 @@ typedef struct
|
||||
PowerMonitor_Measured_t measured; ///< Измеренные/рассчитанные величины
|
||||
|
||||
FilterExp_t exp[EXP_ALL]; ///< Фильтры для сглаживания мговенного значения Напряжения/Токов
|
||||
FilterAverage_t avg[ADC_NUMB_OF_CHANNELS]; ///< Фильтры для сглаживания медленных величин АЦП
|
||||
FilterAverage_t avg[AVG_ALL]; ///< Фильтры для сглаживания медленных величин АЦП
|
||||
|
||||
PowerMonitor_Flags_t f; ///< Флаги мониторинга
|
||||
uint32_t isr_cnt;
|
||||
|
||||
@ -68,10 +68,6 @@ void MX_TIM1_Init(void)
|
||||
{
|
||||
Error_Handler();
|
||||
}
|
||||
if (HAL_TIM_OnePulse_Init(&htim1, TIM_OPMODE_SINGLE) != HAL_OK)
|
||||
{
|
||||
Error_Handler();
|
||||
}
|
||||
sMasterConfig.MasterOutputTrigger = TIM_TRGO_UPDATE;
|
||||
sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
|
||||
if (HAL_TIMEx_MasterConfigSynchronization(&htim1, &sMasterConfig) != HAL_OK)
|
||||
|
||||
@ -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_Stop(hpwm, 0, 1);
|
||||
HAL_TIM_PWM_Start(&hpwm1, PWM_CHANNEL_1);
|
||||
HAL_TIM_PWM_Start(&hpwm1, PWM_CHANNEL_2);
|
||||
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_Base_Start_IT(&hpwm1);
|
||||
|
||||
|
||||
return HAL_OK;
|
||||
}
|
||||
|
||||
@ -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(&hpwm2, 0);
|
||||
|
||||
PWM_Stop(hpwm, 0, 1);
|
||||
|
||||
return HAL_TIM_Base_Start_IT(&hpwm1);
|
||||
}
|
||||
|
||||
|
||||
@ -172,6 +172,11 @@ int UPP_While(void)
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
UPP_Errors_Handle();
|
||||
UPP_Params_InternalControl();
|
||||
|
||||
|
||||
upp.pm.f.runSlow = 0;
|
||||
upp.Timings.slow_calc_us = BenchTime_End(BT_SLOWCALC, angletim.Instance->CNT)/ANGLE_TIM2_FREQ_MHZ;
|
||||
}//if(upp.pm.f.runSlow)
|
||||
@ -191,8 +196,6 @@ void UPP_Tick(void)
|
||||
{
|
||||
if(upp.workmode == UPP_Not_Init)
|
||||
return;
|
||||
UPP_Errors_Handle();
|
||||
UPP_Params_InternalControl();
|
||||
}
|
||||
|
||||
|
||||
@ -274,8 +277,8 @@ void HAL_TIM_OC_DelayElapsedCallback(TIM_HandleTypeDef* htim)
|
||||
}
|
||||
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;
|
||||
//UPP_Tick();
|
||||
//upp.Timings.isr_systick_us = BenchTime_End(BT_SYSTICK, angletim.Instance->CNT)/ANGLE_TIM2_FREQ_MHZ;
|
||||
UPP_Tick();
|
||||
upp.Timings.isr_systick_us = BenchTime_End(BT_SYSTICK, angletim.Instance->CNT)/ANGLE_TIM2_FREQ_MHZ;
|
||||
}
|
||||
@ -331,7 +331,7 @@
|
||||
<Type>0</Type>
|
||||
<LineNumber>407</LineNumber>
|
||||
<EnabledFlag>1</EnabledFlag>
|
||||
<Address>134233290</Address>
|
||||
<Address>134233366</Address>
|
||||
<ByteObject>0</ByteObject>
|
||||
<HtxType>0</HtxType>
|
||||
<ManyObjects>0</ManyObjects>
|
||||
@ -354,7 +354,7 @@
|
||||
<SizeOfObject>0</SizeOfObject>
|
||||
<BreakByAccess>0</BreakByAccess>
|
||||
<BreakIfRCount>0</BreakIfRCount>
|
||||
<Filename>..\Core\Src\DBG_stm32f417_support.c</Filename>
|
||||
<Filename>.\startup_stm32f417xx.s</Filename>
|
||||
<ExecCommand></ExecCommand>
|
||||
<Expression></Expression>
|
||||
</Bp>
|
||||
@ -393,25 +393,20 @@
|
||||
<Ww>
|
||||
<count>6</count>
|
||||
<WinNumber>1</WinNumber>
|
||||
<ItemText>htim14.Instance->PSC,0x0A</ItemText>
|
||||
<ItemText>htim5.Instance->PSC,0x0A</ItemText>
|
||||
</Ww>
|
||||
<Ww>
|
||||
<count>7</count>
|
||||
<WinNumber>1</WinNumber>
|
||||
<ItemText>htim5.Instance->PSC,0x0A</ItemText>
|
||||
<ItemText>SystemCoreClock,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>
|
||||
<count>9</count>
|
||||
<WinNumber>1</WinNumber>
|
||||
<ItemText>\\Debug_F417\../Core/UPP/upp_main.c\upp.pm.avg[5].dataProcessing</ItemText>
|
||||
</Ww>
|
||||
@ -435,7 +430,7 @@
|
||||
<Ww>
|
||||
<count>3</count>
|
||||
<WinNumber>2</WinNumber>
|
||||
<ItemText>errors.prvt.cnt</ItemText>
|
||||
<ItemText>errors.prvt.cnt,0x0A</ItemText>
|
||||
</Ww>
|
||||
<Ww>
|
||||
<count>4</count>
|
||||
@ -472,6 +467,11 @@
|
||||
<WinNumber>2</WinNumber>
|
||||
<ItemText>htim5.Instance,0x0A</ItemText>
|
||||
</Ww>
|
||||
<Ww>
|
||||
<count>11</count>
|
||||
<WinNumber>2</WinNumber>
|
||||
<ItemText>iref_dbg</ItemText>
|
||||
</Ww>
|
||||
</WatchWindow2>
|
||||
<Tracepoint>
|
||||
<THDelay>0</THDelay>
|
||||
@ -537,6 +537,10 @@
|
||||
<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>
|
||||
|
||||
32
UPP/UPP.ioc
32
UPP/UPP.ioc
@ -128,24 +128,23 @@ Mcu.Pin54=VP_RTC_VS_RTC_Activate
|
||||
Mcu.Pin55=VP_RTC_VS_RTC_Calendar
|
||||
Mcu.Pin56=VP_SYS_VS_tim14
|
||||
Mcu.Pin57=VP_TIM1_VS_ClockSourceINT
|
||||
Mcu.Pin58=VP_TIM1_VS_OPM
|
||||
Mcu.Pin59=VP_TIM2_VS_ClockSourceINT
|
||||
Mcu.Pin58=VP_TIM2_VS_ClockSourceINT
|
||||
Mcu.Pin59=VP_TIM2_VS_no_output1
|
||||
Mcu.Pin6=PC14/OSC32_IN
|
||||
Mcu.Pin60=VP_TIM2_VS_no_output1
|
||||
Mcu.Pin61=VP_TIM2_VS_no_output2
|
||||
Mcu.Pin62=VP_TIM2_VS_no_output3
|
||||
Mcu.Pin63=VP_TIM3_VS_ControllerModeTrigger
|
||||
Mcu.Pin64=VP_TIM3_VS_ClockSourceINT
|
||||
Mcu.Pin65=VP_TIM3_VS_ClockSourceITR
|
||||
Mcu.Pin66=VP_TIM3_VS_OPM
|
||||
Mcu.Pin67=VP_TIM5_VS_ClockSourceINT
|
||||
Mcu.Pin68=VP_TIM8_VS_ClockSourceINT
|
||||
Mcu.Pin69=VP_TIM11_VS_ClockSourceINT
|
||||
Mcu.Pin60=VP_TIM2_VS_no_output2
|
||||
Mcu.Pin61=VP_TIM2_VS_no_output3
|
||||
Mcu.Pin62=VP_TIM3_VS_ControllerModeTrigger
|
||||
Mcu.Pin63=VP_TIM3_VS_ClockSourceINT
|
||||
Mcu.Pin64=VP_TIM3_VS_ClockSourceITR
|
||||
Mcu.Pin65=VP_TIM3_VS_OPM
|
||||
Mcu.Pin66=VP_TIM5_VS_ClockSourceINT
|
||||
Mcu.Pin67=VP_TIM8_VS_ClockSourceINT
|
||||
Mcu.Pin68=VP_TIM11_VS_ClockSourceINT
|
||||
Mcu.Pin69=VP_TIM12_VS_ClockSourceINT
|
||||
Mcu.Pin7=PC15/OSC32_OUT
|
||||
Mcu.Pin70=VP_TIM12_VS_ClockSourceINT
|
||||
Mcu.Pin8=PF6
|
||||
Mcu.Pin9=PF7
|
||||
Mcu.PinsNb=71
|
||||
Mcu.PinsNb=70
|
||||
Mcu.ThirdPartyNb=0
|
||||
Mcu.UserConstants=mb_huart,huart3;mbdbg_htim,htim11;PWM_CHANNEL_1,TIM_CHANNEL_1;PWM_CHANNEL_2,TIM_CHANNEL_2;PWM_CHANNEL_3,TIM_CHANNEL_3;PWM_CHANNEL_4,TIM_CHANNEL_4;mem_hspi,hspi3;PWM_CHANNEL_5,TIM_CHANNEL_3;PWM_CHANNEL_6,TIM_CHANNEL_4;mb_htim,htim12;adc_tim,htim8;usTick,ustim.Instance->CNT;hpwm2,htim3;mb_dbg_huart,huart6;ustim,htim5;hpwm1,htim1;ANGLE_CHANNEL_1,TIM_CHANNEL_1;ANGLE_CHANNEL_2,TIM_CHANNEL_2;ANGLE_CHANNEL_3,TIM_CHANNEL_3;angletim,htim2
|
||||
Mcu.UserName=STM32F427ZGTx
|
||||
@ -470,12 +469,11 @@ SPI3.Direction=SPI_DIRECTION_2LINES
|
||||
SPI3.IPParameters=VirtualType,Mode,Direction,CalculateBaudRate
|
||||
SPI3.Mode=SPI_MODE_MASTER
|
||||
SPI3.VirtualType=VM_MASTER
|
||||
TIM1.Channel-Output\ Compare2\ CH2=TIM_CHANNEL_2
|
||||
TIM1.Channel-PWM\ Generation1\ CH1=TIM_CHANNEL_1
|
||||
TIM1.Channel-PWM\ Generation2\ CH2=TIM_CHANNEL_2
|
||||
TIM1.Channel-PWM\ Generation3\ CH3=TIM_CHANNEL_3
|
||||
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.TIM_MasterOutputTrigger=TIM_TRGO_UPDATE
|
||||
TIM11.IPParameters=Prescaler
|
||||
@ -519,8 +517,6 @@ VP_TIM12_VS_ClockSourceINT.Mode=Internal
|
||||
VP_TIM12_VS_ClockSourceINT.Signal=TIM12_VS_ClockSourceINT
|
||||
VP_TIM1_VS_ClockSourceINT.Mode=Internal
|
||||
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.Signal=TIM2_VS_ClockSourceINT
|
||||
VP_TIM2_VS_no_output1.Mode=Output Compare1 No Output
|
||||
|
||||
Loading…
Reference in New Issue
Block a user