STM32 PWM änderung Verständnisproblem

Gast #2486914
Lesenswert?

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
Gast #2487070
Lesenswert?

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
Gast #2487222
Lesenswert?

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);[/]

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren