2017-11-21 04:08 AM
Greetings !
I have been working for STM32F401RE controller.
I am using timer for generation of PWM which is interrupt based and frequency change is desired during run time.
This is to achieve a trapezoidal type profile for controlling motor.
The PWM frequency range is 1 to 10 kHz with 1 Hz resolution. To achieve the same I have divided the Tick Frequency of timer into 31.203 kHz and 84 MHz by keeping separate prescalars.
The prescalar would change at a frequency beyond 1350 Hz.
I have observed that at frequencies near to 1350 Hz (between 1350 and 1380 Hz) the timer is suddenly stopping for about 2s and resuming from the next frequency point. This stopping of PWM is undesirable .
The timer works fine in cases where the frequency band between 1350 Hz and 1400 Hz is not encountered.
I have also enabled the preloading and immediately disabled after loading at the time of change in period.
I believe that the issue is due to change of all three parameters at the same time.
The exact synch of ARR, CCR and PSC is not being achieved.
Is there any way in which the synchronization be achieved?
htim3.Instance->CR1|=0x80; //ARR Preload enable
__HAL_TIM_SET_AUTORELOAD(&htim3, FrequencyCount) ;htim3.Instance->CR1 &= ~(0x80);// ARR Preload disable__HAL_TIM_SET_COMPARE(&htim3, TIM_CHANNEL_3, DutyCycleCounts);if(Frequency <= 1350){__HAL_TIM_SET_PRESCALER(&htim3, 2691); } else{ __HAL_TIM_SET_PRESCALER(&htim3 ,0); }Please note the above code is part ISR.
Thanking you in advance for your help.
Regards
Siddhesh