cancel
Showing results for 
Search instead for 
Did you mean: 

Changing Pulse makes the frequency half of the original one

EmbeddedPepe
Associate III

Hi,

 

I have this function to simulate a quadrature output

void TIM3_Configuration_positive_quadrature(void)
{
	TIM_OCInitTypeDef TIM_OCInitStructure;
	int Period;
	Period = 1000 / 1; // 1 Hz - 1 second on, 1 second off duty

	TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_Toggle;
	TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
	TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
	TIM_OCInitStructure.TIM_Pulse = (Period * 1) / 4; // CH3 at 25%
	TIM_OC3Init(TIM3, &TIM_OCInitStructure);
	TIM_OCInitStructure.TIM_Pulse = (Period * 3) / 4; // CH4 at 75%, ie half cycle later
	TIM_OC4Init(TIM3, &TIM_OCInitStructure);
}

 

When I set 1000 Hz as frequency (controlled by oscilloscope that is correctly set) after calling the quadrature function above the frequency becomes half.

 

Any idea on why of this behaviour?

5 REPLIES 5
Sarra.S
ST Employee

Hello @EmbeddedPepe

I think this is related to the toggle match behavior, since a full square wave cycle requires two toggles (low to high and high to low) and the timer only toggles once per counter match, the frequency of the output signal will be half the rate at which the counter matches the TIM_Pulse value.

The workaround is to adjust the period or the PSC value to compensate for the toggle behavior

To give better visibility on the answered topics, please click on Accept as Solution on the reply which solved your issue or answered your question.

Toggling will implicitly half frequency, it's a DIV2, as you're now describing the individual mark and space duty times, not the period.

Where

TIM->PSC = x - 1;

use

TIM->PSC = ((x / 2) - 1);

Tips, Buy me a coffee, or three.. PayPal Venmo
Up vote any posts that you find helpful, it shows what's working..

Sorry, I didn't understand how to workaround it.

 

Does the function in the initial post work with mode PWM1?

Toggle is good for phase shifted square waves

My notation was one for halving the Prescaler (TIM->PSC) to get back to the higher (double) frequency to overcome the halving on the Period (TIM->ARR)

Tips, Buy me a coffee, or three.. PayPal Venmo
Up vote any posts that you find helpful, it shows what's working..

Ohh, now I got it. Thanks! 🙂