Forum: Mikrocontroller und Digitale Elektronik STM32 PWM Verständnis


von Pete (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,

ich versuche gerade mir einen Einstieg in die STM32 Welt zu verschaffen. 
Dafür möchte ich gerne eine LED via PWM ansteuern und dimmen.
Aktuell habe ich leider keine HW auf der ich testen kann.

Im Anhang ist ein Codestück aus diesem Thread
Beitrag "STM32 Servoansteuerung PWM"

Ich würde gerne wissen ob ich alles richtig verstanden habe

---

Die Timer Peripherie läuft standardgemäß auf SystemClock/2.
Diese Frequenz kann durch TIM_PRESCALER weiter nach unten geteilt 
werden.
Im Beispiel wird der Takt um 1Meg geteilt.
Das hat zur Folge dass der Timer jede us einen Wert zum Zählregister 
addiert.
Mit TIM_PERIOD wird dann die Periodendauer festgesetzt.
In diesem Falle 20.000 * 1us = 20ms.
Das bedeutet wir bekommen schon einmal eine Frequenz unseres 
Rechtecksignals von 50Hz heraus.
TIM_PULSE ergibt die Anzahl der Punkte in denen das Signal "high" sein 
soll. Der Timer gibt also die ersten 1500 Punkte ein High Signal aus 
(1.5ms) und die restlichen 18500 Punkte ein Low (18.5ms). Dann fängt das 
ganze wieder von vorne an.

Ist das so richtig verstanden ?

---

Noch eine Frage:
Man sollte doch versuchen seine Periode so nah wie möglich an 16Bit 
(65535) zu legen damit man möglichst viel Auflösung gewinnt.
Wäre es nicht sinnvoller den Prescaler mit 2.5Meg zu teilen ?
Der Timer addiert dann jede 0,4us einen Wert.
TIM_PERIOD = 50.000 würde ebenfalls eine Frequenz von 20ms ergeben
TIM_PULSE  =  3.750 würde ebenfalls eine Impulsdauer von 1.5ms ergeben

---

Für das LED Fading habe ich folgende Seite gefunden
http://www.mikrocontroller.net/articles/LED-Fading

Nun brauche ich doch nur meine PWM mit einer Verweilzeit step_time mit 
allen Werten aus z.B. pwmtable_16 zu füttern und es sollte 
funktionieren.

Wie dimensioniert man die Verweilzeit step_time ?

von Niklas G. (erlkoenig) Benutzerseite


Lesenswert?

Pete schrieb:
> Die Timer Peripherie läuft standardgemäß auf SystemClock/2.
Je nachdem, was man im Initialisierungs-Code eingestellt hat! Das 
Maximum (wie in den meisten Beispielcodes so eingestellt) ist 
SystemClock für die Timer auf APB2 und SystemClock/2 für die auf APB1.
> Diese Frequenz kann durch TIM_PRESCALER weiter nach unten geteilt
> werden.
Ja.
> Im Beispiel wird der Takt um 1Meg geteilt.
Nein, der Prescaler geht nur von 0-65535. Der Prescaler wird so 
berechnet, dass der Timer bei 1 MHz läuft. Ist also z.B. 
SystemCoreClock=168000000, wird daraus also TIM_Prescaler = 83, d.h. der 
Takt wird durch 84 geteilt (0 zählt ja auch).
> Das hat zur Folge dass der Timer jede us einen Wert zum Zählregister
> addiert.
> Mit TIM_PERIOD wird dann die Periodendauer festgesetzt.
> In diesem Falle 20.000 * 1us = 20ms.
> Das bedeutet wir bekommen schon einmal eine Frequenz unseres
> Rechtecksignals von 50Hz heraus.
> TIM_PULSE ergibt die Anzahl der Punkte in denen das Signal "high" sein
> soll. Der Timer gibt also die ersten 1500 Punkte ein High Signal aus
> (1.5ms) und die restlichen 18500 Punkte ein Low (18.5ms). Dann fängt das
> ganze wieder von vorne an.
>
> Ist das so richtig verstanden ?
Dieser Teil ist völlig richtig.
> ---
>
> Noch eine Frage:
> Man sollte doch versuchen seine Periode so nah wie möglich an 16Bit
> (65535) zu legen damit man möglichst viel Auflösung gewinnt.
Prinzipiell ja. Aber dann kann man nicht so schön in glatten 
Mikrosekunden rechnen :)
> Wäre es nicht sinnvoller den Prescaler mit 2.5Meg zu teilen ?
> Der Timer addiert dann jede 0,4us einen Wert.
> TIM_PERIOD = 50.000 würde ebenfalls eine Frequenz von 20ms ergeben
> TIM_PULSE  =  3.750 würde ebenfalls eine Impulsdauer von 1.5ms ergeben
Klar. Aber ein oller Modellbauservo hat sowieso bestimmt keine Auflösung 
von 2000 Schritten (bei 0.5-2.5ms Pulsen und 1µs Auflösung), weswegen 
man auch genausogut in Mikrosekunden rechnen kann...


Für LED Fading wäre es eventuell schlauer einen Up&Down-Counting Modus 
zu verwenden, damit die Phasenlage immer gleich ist. Und natürlich eine 
viel höhere Frequenz als 50Hz, damit man das Flimmern nicht mehr sieht.

von MT (Gast)


Lesenswert?

Bei dem oben verlinkten Beitrag
http://www.mikrocontroller.net/articles/LED-Fading

im Text und in den Excel Sheets ist immer die Rede von einem "Faktor".
Wofür ist der gut, bzw. was sagt er aus ??

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.