Hallo zusammen, arbeite hier mit einem STM32 und schaffe es auch nach der Initialisierung eine PWM zu erzeugen! Nun möchte ich diese im laufenden Betrieb ändern können... so lag meine Vermutung, dass ich mit TIM_OCInitTypeDef TIM_OCInitStructure; TIM_OCInitStructure.TIM_Pulse = CCR1; //Pulsebreite TIM_OC1Init(TIM3, &TIM_OCInitStructure); //Initialisieren Channel 1 Timer 3 den 3 Befehlen die PWM breite aktualisiere. Andere Einstellungen des Channels verbleiben ja so. Wo ist der Denkfehler? Irgendwo hab ich es mit direkt Registerzugriff gesehen, würde aber gerne bei der StandartLib bleiben
Manche Änderungen an Timer-Registern werden erst mit einem Update-Event aktiv. Das muss man u.U. manuell auslösen.
beim LPC17xx kann man die werte verändern und muss dann die register updaten damit ist sichergestellt das die kanäle weiterhin synchron laufen das selbe gibts auch beim STM .. wo das in der LIB ist weiß ich leider nicht
Ich denke mal du willst die An/Aus Zeit der PWM verändern, wenn ja geht das eigentlich ganz einfach mit:
1 | TIM_SetCompare1(TIM3, 0); |
Hier ist das Kanal 1 (angefangen bei 1) von Timer 3. Wenn das nicht klappt lass uns doch mal deine komplette Initalisierung sehen.
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);[/]
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.