Forum: Mikrocontroller und Digitale Elektronik STM32 Timer: Verständnisfragen


von Sebastian (Gast)


Lesenswert?

Hallo,

ich lerne gerade die Timer von einem STM32 kennen und habe diesen 
Beitrag (Beitrag "Re: STM32 Timer-Periode einstellen") entdeckt 
und die Formel getestet.

Angenommen ich habe einen Takt von 8 MHz. Ich möchte den Timer bis 100 
zählen lassen. Dann fängt er von vorne wieder an. Nun möchte ich mit dem 
Timer ein PWM-Signal mit einer Frequenz von 50Hz erzeugen.

Also mit umgestellter Formel:

Prescaler = Takt / (Periode * Frequenz) = 8 MHz / (100 * 50 Hz) = 1600

Zusammenfassung:

Period = 100;
Prescaler = 1600-1;

Das ganze ergibt dann beim Messen eine Frequenz von etwa 49.4 Hz. Wähle 
ich nun als Periode 99, dann bekomme ich 49.9 Hz.

Ich habe dies für verschiedene Frequenzen ausprobiert und jedes mal 
trifft es die Periode mit 99 ziemlich genau, die mit 100 liegt immer 
daneben.

Ich habe auch diesen Rechner 
(http://www.libstock.com/projects/view/398/timer-calculator) 
ausprobiert. Dieser zieht bei der berechneten Periode immer eine eins 
ab.

Muss ich jetzt auch eine eins subtrahieren? Aber dann würde mein Timer 
ja nur 99 mal inkrementiert werden, oder nicht?

Viele Grüße,

Sebastian

von Franz J. (franz_j72)


Lesenswert?

Hallo,

der Timer zählt immer von 0 we und nicht von 1 => Wenn du 100 Schritte 
willst musst du 99 in den Period-Register schreiben.

lg

: Bearbeitet durch User
von Uwe B. (derexponent)


Lesenswert?

deine Formel ist falsch

richtig lautet sie :

f_timer= TimerClock / (1+Prescaler) / (1+Period)

Der kleinste Wert fuer "Prescaler" und "Periode"
ist 0 und der bedeutet => Teiler = 1

: Bearbeitet durch User
von Sebastian (Gast)


Lesenswert?

Danke für die korrekte Formel. Dann ist meine 99 ja doch richtig.

Aber die Zähllogik habe ich noch nicht so ganz verstanden: Ich beginne 
bei 0.

Erster Zählschritt: Zähler von 0 auf 1.
Zweiter Zählschritt: Zähler von 1 auf 2.
Dritter Zählschritt: Zähler von 2 auf 3.
Vierter Zählschritt: Zähler von 3 auf 4.
Fünfter Zählschritt: Zähler von 4 auf 5.
Sechster Zählschritt: Zähler von 5 auf 6.
Siebter Zählschritt: Zähler von 6 auf 7.
Achter Zählschritt: Zähler von 7 auf 8.
Neunter Zählschritt: Zähler von 8 auf 9.
Zehnter Zählschritt: Zähler von 9 auf 10.

So habe ich doch genau 10 Schritte und komme auch bei 10 an. Wenn ich 
die Periode dann auf 9 stelle, dann fehlt doch folglich ein Schritt und 
mein Zähler wurde nur neunmal erhöht. Oder ist das Zurücksetzen des 
Timers auch ein Schritt, dann würde es ja wieder hinkommen?

von Franz J. (franz_j72)


Lesenswert?

Hallo,

in der binären Welt fängt man immer mit 0 an. Das heißt 0 ist der erste 
Wert. Der Counter zählt von 0 los und vergleicht bei jeden erreichten 
Wert den "Period-Wert" mit den Zählwert, wenn dieser erreicht wird ein 
Reset ausgeführt.

Also das mit den 9 Schritten hat nichts mit dem Timer-Reset zu tun, 
sondern damit das man immer bei 0 anfängt zu zählen und der "Timer" 
immer den Wert im Register nach einem Schritt vergleicht. Daraus ergibt 
sich das man eben "9 Schritte" braucht um den "Wert 10" zu erreichen.


0 <- vgl. Register zum 1.-mal
 <- 1. Schritt
1 <- vgl. Register zum 2.-mal
 <- 2. Schritt
2 <- vgl. Register zum 3.-mal
 <- 3. Schritt
3 <- vgl. Register zum 4.-mal
 <- 4. Schritt
4 <- vgl. Register zum 5.-mal
 <- 5. Schritt
5 <- vgl. Register zum 6.-mal
 <- 6. Schritt
6 <- vgl. Register zum 7.-mal
 <- 7. Schritt
7 <- vgl. Register zum 8.-mal
 <- 8. Schritt
8 <- vgl. Register zum 9.-mal
 <- 9. Schritt
9 <- vgl. Register zum 10.-mal

Hoffe konnte dir helfen. Schau dir mal die Simulation des 4-Bit Counters 
an und zähle wieviele Schritte (Ansteigende Flanken) der Counter braucht 
um dem Wert 10 im Register zu erreichen (binär: 0b1010).

http://www.falstad.com/circuit/e-counter.html

lg

: Bearbeitet durch User
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.