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.