Forum: Mikrocontroller und Digitale Elektronik STM32F0 - PWM Timer1 und 3 snychronisieren


von soundmachine (Gast)


Lesenswert?

Hallo Zusammen,

wie der Betreff schon sagt habe ich momentan 7 PWM Kanäle an Ausgängen 
des Cortex M0 am laufen. 4 Kanäle werden durch den Timer 1, weitere 3 
Kanäle durch den Timer 3 realisiert. Im Setup benutze ich die gleiche 
Parametrierung für beide Timer, allerdings musste ich feststellen, dass 
das PWM Signal des Timer 1 um ca. 20% voreilend ist.
Das kann ich aber so garnicht gebrauchen. Hat jemand hier Erfahrung wie 
ich ggf. die beiden Timer/PWM Gruppen synchronisieren kann?

Bin für jede Ernst gemeinte Antwort mehr als dankbar.

: Bearbeitet durch Moderator
von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Ein „Cortex M0“ hat als solche keine Timer (außer SysTick).

Du solltest also wohl schon dazu schreiben, um welchen Controller es
sich handelt.

von soundmachine (Gast)


Lesenswert?

STM32F0

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

soundmachine schrieb:
> STM32F0

OK, ich habe das Subject im Eingangsposting mal modifiziert.  Vielleicht
findest du ja so eher Leute, die sich damit auskennen.

von soundmachine (Gast)


Lesenswert?

Hallo Jörg...
danke vielmals. Bin, was den STM betrifft noch eher ein Anfänger, von 
daher auch die falsche Ausrucksweise. Vielleicht findet sich so ja 
jemand der das Problem schonmal hatte und mir weiter helfen kann.

Nochmals Danke

von soundmachine (Gast)


Lesenswert?

Hallo, ich habe mitlerweile die Lösung gefunden.

Evtl. ist es ja nützlich für jemand anderes.

Die beiden PWM Timer liefen bei mir deshalb "unsynchron" weil die Timer 
zu unterschiedlichen Zeiten aktiviert wurden.

Die Zeilen
TIM_CtrlPWMOutputs(TIM1, ENABLE);
und
TIM_CtrlPWMOutputs(TIM3, ENABLE);
sind ca. 30 Zeilen auseinander.

Auf gleiches Level gebracht laufen beide PWM Kanäle einwandfrei 
Taktsynchron.

von Nico W. (nico_w)


Lesenswert?

100%ig werden die so auch nicht synchron laufen. Beim F4 kann man den 
advance Timer so einstellen, dass er als Taktgeber für andere Timer 
fungiert. Dadurch könnte man die synchronsieren.

von Christopher J. (christopher_j23)



Lesenswert?

Nico W. schrieb:
> 100%ig werden die so auch nicht synchron laufen. Beim F4 kann man den
> advance Timer so einstellen, dass er als Taktgeber für andere Timer
> fungiert. Dadurch könnte man die synchronsieren.

Meines Wissens nach geht das auch mit dem F0, ich habe es allerdings 
selber noch nicht ausprobiert. Im RefMan des F030/F070 gibt es 
jedenfalls ein Beispiel wo genau das gemacht wird. Genauer gesagt dient 
der eine Timer da nicht als Taktgeber sondern als Trigger um den anderen 
zu starten:
"Using one timer to start another timer" (RM0360 S.334), siehe 
Screenshot.

100% synchron sind sie da zwar auch nicht, weil der eine Timer ja 
startet und es dann ein paar Takte braucht bis der zweite den Trigger 
verarbeitet hat. Eventuell kann man einen dritten Timer (TIM15) nehmen 
und den als Master Trigger verwenden, wobei Timer 1 und Timer 3 dann 
beide als Slave laufen. Dann sollte es theoretisch 100% genau passen, 
aber was sind schon 100% ;)

Wenn es auch in Software klappt ist ja sowieso alles gut.

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
Noch kein Account? Hier anmelden.