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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.