Geht recht einfach : PWM mode TIM1 : die Tastverhaltnis lasst sich dan
einstellen mit
TIM1->CCR1=1500; //test 1.5 ms voor servo1 (channel1)
TIM1->CCR4=1825; //test 1.825 ms voor servo 4(channel 4)
Frequenz aenderen :
TIM1->ARR=9999;
Init (musst du auch noch GPIO und Clocks configurieren)
[c]
void Timer_Config(void)
{
/*
-----------------------------------------------------------------------
TIM1 Configuration: generate 2 PWM signals with 2 different duty
cycles:
TIM1CLK = 24 MHz, Prescaler = 23, TIM1 counter clock = 1 MHz
TIM1 ARR Register = 19999=> TIM1 Frequency = TIM1 counter clock/(ARR
+ 1)
TIM1 Frequency = 50 Hz.
TIM1 Channel1 pulse lenght = TIM1->CCR1 value gives servo between
1000 and 2000 µs
TIM1 Channel4 pulse lenght = TIM1->CCR4 value gives servo between
1000 and 2000 µs
-----------------------------------------------------------------------
*/
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_OCInitTypeDef TIM_OCInitStructure;
/* Time base configuration TIM1*/
TIM_TimeBaseStructure.TIM_Period = 19999;//PWM freq. = 1MHz/20000 =
50Hz
TIM_TimeBaseStructure.TIM_Prescaler = 23;// Timer loopt aan 24 MHz/24
= 1MHz
TIM_TimeBaseStructure.TIM_ClockDivision = 0;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure);
/* PWM1 Mode configuration: TIM 1, Channel1 */
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
TIM_OC1Init(TIM1, &TIM_OCInitStructure);
TIM_OC1PreloadConfig(TIM1, TIM_OCPreload_Enable);
/* PWM1 Mode configuration: TIM 1, Channel4 */
TIM_OC4Init(TIM1, &TIM_OCInitStructure);
TIM_OC4PreloadConfig(TIM1, TIM_OCPreload_Enable);
TIM_Cmd(TIM1, ENABLE);
/* TIM1 Main Output Enable */
TIM_CtrlPWMOutputs(TIM1, ENABLE);[/]