Forum: Mikrocontroller und Digitale Elektronik STM32 Timer gewünschte PWM Frequenz einstellen (CubeMX)?


von Noob (Gast)


Lesenswert?

Grüße,
ich bin Anfänger und stehe wahrscheinlich gerade ziemlich auf dem 
Schlauch.

Habe einen STM32F469NI und möchte über den TIM2 auf dessen Channel 1 an 
PIN PA15 ein PWM Signal mit 5Mhz ausgeben. Zur Konfiguration nutze ich 
CubeMX.

Timer 2 liegt wohl auf dem APB1 Bus. Den "APB1 timer clocks" habe ich 
über den APB1 Prescaler auf 11,25MHz eingestellt. (Im Clock Configurator 
CubeMX)

Nun habe ich folgende "Formel" gefunden:
1
Prescaler = (Timer'sClockFrequency/DesiredFrequency) -1

Das wäre ja dann bei mir:
1
(11250000/5000000)-1 = 1,25

Nun kann ich aber ja nur Ganzzahlen als Prescaler einstellen und nicht 
1,25. Und warum muss ich -1 rechnen?

Bitte vergebt mir, ich bin mir sicher ich habe da einen dummen 
Denkfehler. Kann mir jemand sagen wie ich am besten auf z.B. 5Mhz komme?

Liebe Grüße!

von Schorschi (Gast)


Lesenswert?

Hi,

minus 1 => weil die 0 mitgezählt wird und meistens schon Teiler 2 ist.

Mit deiner Grundfrequenz kommst du nicht auf 5MHz. Da wie du schon 
gemerkt hast nur ganzzahlige Teiler möglich sind.
Entweder du lebst mit einem Wert in der Nähe von 5MHz oder du änderst 
deine Grundfrequenz (PLA oder ext. Oszillator/Quarz)

Gruß.

von Ingo Less (Gast)


Lesenswert?

Noob schrieb:
> Timer 2 liegt wohl auf dem APB1 Bus. Den "APB1 timer clocks" habe ich
> über den APB1 Prescaler auf 11,25MHz eingestellt. (Im Clock Configurator
> CubeMX)
Warum denn das? Das is doch n 32-Bit Timer, der hat genug Zählumfang um 
bei hohen Frequenzen noch genug Auflösung bereit zu stellen. Mann lässt 
Timer bei PWM meist so schnell laufen wie es geht um keine Auflösung zu 
verschenken.

Also, (180MHz/5MHz)-1 = 35. Is nicht mehr viel an Auflösung über, aber 
ich bezweifle eigentlich schon, dass du ne 5MHz PWM erzeugen willst...

von Noob (Gast)


Lesenswert?

Danke Schorschi, das hilft mir. Dann schaue ich heute Abend mal nach 
einer passenden Grundfrequenz. Ich denke ich war gestern einfach neben 
der Spur. Auf diese Frequenz kam ich weil ich sie im Vornhinein schon 
mal möglichst gering haben wollte und geringer ging nicht weil CubeMX 
dann meckerte dass APB1 peripheral clocks > 4MHz sein muss.

Ingo Less schrieb:
> ich bezweifle eigentlich schon, dass du ne 5MHz PWM erzeugen willst...
Das Signal ist als GSCLK für den TLC5940 gedacht. Das kann maximal 30MHz 
schnell sein und ich wollte etwas kleiner anfangen um ggf. Störungen 
vorzubeugen. So bin ich dann gestern auf mein Verständnisproblem mit dem 
Prescaler gestoßen. Heute denke ich das 5MHz auch noch zu hoch sein 
wird. Werde wohl erstmal 10kHz nehmen.

Alles in Allem hab ich mich da gestern sehr doof angestellt! Danke für 
eure Nachsicht. Hab auf jeden Fall bisschen was gelernt durch euch. 
Danke!

von Noob (Gast)


Lesenswert?

Ingo Less schrieb:
> Is nicht mehr viel an Auflösung über

Meinst du mit Auflösung dann den "duty cycle" des PWMs?

von Johannes S. (Gast)


Lesenswert?

wenn es nur ein Clock sein soll, dann kann man auch den MCO aktivieren. 
HSE / 2 liefert dann z.B. 4 MHz.

von Ingo Less (Gast)


Lesenswert?

Noob schrieb:
> Meinst du mit Auflösung dann den "duty cycle" des PWMs?
Jein, du kannst halt bei 5MHz und einem Zählumfang von 0-35 deinen 
Tastgrad nur in 36 Stufen verändern. Somit hast du pro Increment eine 
Änderung des Tastgrades von 2,78%.

Hättest du einen Zählumfang von 0...999, hättest du 1000 Incremente und 
eine Auflösung von 0,1%/Increment.

von Noob (Gast)


Lesenswert?

Danke, Ingo Less.

Aber hat der Prescaler wirklich einen Einfluss auf den Zählumfang? Bin 
davon ausgegangen das ich diesen Unabhängig vom Prescaler mit dem 
"Counter Period (AutoReload Register)" einstelle. Dort kann ich ja trotz 
Prescaler noch einen 16bit Wert eintragen.

Grüße.

von Noob (Gast)


Lesenswert?

Okay, ich hab jetzt rausgefunden das die Formel oben nicht für den 
Prescaler ist sondern eben für "Counter Period".

"APB1 timer clocks" hat Standart 90MHz.

Also z.B. für 10kHz:
1
90MHz / 10kHz - 1 = 8999

Dann:
1
Prescaler = 0
2
Counter Period = 8999
3
Pulse = 4499 //50% duty cycle

Und ich hab ein sauberes 50% 10kHz PWM am Ausgang. Dann macht auch die 
Aussage von Ingo Less mit der Auflösung sinn. Ich hab die ganze Zeit am 
Prescaler gefummelt...

Danke :)

von Ingo Less (Gast)


Lesenswert?

Noob schrieb:
> Danke :)
Gern

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.