Hallo Leute :) Ich habe viele Fragen zum Thema Timerberechnung und PVM. Wie würde so eine Timerberechnung für PVM in der Praxis aussehen (STM32) ? Was ist dabei zu beachten? Mein jetziger Wissensstand: _______________________________________________________________ 1) Man besitzt einen Zähler (PIN) der im umprogrammierten Zustand mit der Taktfrequenz des Mikrocontrollers arbeitet. Es stellt sich dabei ein Problem, da der Mikrocontroller mit einer sehr hohen Taktfrequenz betrieben wird. (Z.B. 24 MHz) mit dieser Frequenz wird das Zählermaximum viel zu schnell erreicht. 2) Um dies zum Umgehen muss ein sogenannter „Vorteiler (Prescaler)“ eingebaut werden. Oft hat man Faktoren von 1, 8, 64 ,256 oder 1024. Beispiel: Bei einem Zähler mit einem Prescaler von 256, führt nur jeder 256te Eingangsimpuls zur Erhöhung des Zählers um einen Zähler. 3) Es gibt zwei verschiedene Arten von Zählern: Einmal den 8-bit Timer und den 16-bit Timer. 8-bit Timer: 2^8=256 Zähl-schritte (0…256) 16-bit Timer: 2^16=65536 Zähl-schritte (0…65536) Außerdem Modus: - Normalmodus - CTC - PWM 4) Der Zähler zählt solange bis er den Maximalwert erreicht. Bsp. 16bit Zähler: 2^16-1= 65535 (minus eins, da mit Null angefangen wird zu Zählen), wenn er den Maximal Wert erreicht springt er auf Null und fängt von vorne. 5) Overflow des Zählers ist abhängig von: - Taktfrequenz des Controllers - dem eingestellten Prescaler-Wert - Timerauflösung 6) Da gibt es noch diesen Vorladewert ???? Wozu er da ist :/ Ich stelle mir den als "Start Wert". Ab dann wird begonnen zu zählen. 7) Wieso und wie man den Prescaler berechnet. Das ist mir noch nicht bekannt.
Katerina V. schrieb: > 6) > Da gibt es noch diesen Vorladewert ???? Wozu er da ist :/ > Ich stelle mir den als "Start Wert". Ab dann wird begonnen zu zählen. Richtig :) Das hat man früher mal so gemacht, als Timermodule (als integrierte µC-Peripherie) noch keinen "clear on compare match" / "Zähle-bis"-Modus besaßen. Dazu musste im Overflow-Interrupt der Timer-Zählwert, den es als Register gibt, mit einem Wert vorgeladen werden. Der Timer zählt dann ab diesem Wert bis zum Überlauf(nächster overflow-interrupt). Damit waren dann fast beliebige Frequenzen möglich. Nachteil ist, dass das Timing von Software abhängt und man den Timer nicht beliebig schnell laufen lassen kann(interrupt latency, code-Ausführungszeit für Vorladen, ...) Heutzutage kann man einen "Zähle-bis"-Modus verwenden. Da gibt es dann ein Register, wo du den maximalen Timer-Zählwert ("Auflösung") einstellst. Der Timer Zählt von 0 bis zu dem eingestellten Wert und wird von der Hardware des Timermoduls zurückgesetzt. Katerina V. schrieb: > 7) > Wieso und wie man den Prescaler berechnet. Das ist mir noch nicht > bekannt. F_CPU / (F_PWM * N_Prescaler) <= N_Timerticks Fallbeispiel: Wenn du z.B. eine PWM-Frequenz von 8kHz brauchst, dein Prozessor aber mit 72MHz rennt und du dich für einen 8bit-Timer entschieden hast. F_CPU = 72E6 F_PWM = 8E3 N_Prescaler = ?? N_Timerticks = 255 ("Auflösung") So, und jetzt bist du dran. mfg mf
:
Bearbeitet durch User
Katerina V. schrieb: > 3) > [...] > Außerdem Modus: > - Normalmodus > - CTC > - PWM Normalmodus - 0...Auflösung_Max CTC - *C*lear *T*imer on *C*ompare match ("Zähle-Bis-X"-Modus) Manche bezeichnen das CTC-Nmax-Register als Vorladewert, was mmN. Quatsch ist, aber ist (siehe vorheriger Post) aus den Köpfen wohl nicht heraus zu bekommen. PWM - PWM-Generator "Sägezahn" - Timer zählt wie Normalmodus oder CTC - PWM-Generator "Center-Aligned" - Timer zählt hoch bis Auflösung oder CTC-Registerwert und dann wieder runter (!!) auf 0 Center-Aligned ist zur Dreiphasen-PWM-Erzeugung für 3-Phasen-Drehstrommotoren nützlich. mfg mf
Hallo, mit Vorladewert bzw. Vorladeregister meinst du sicherlich den Compare-Match Wert. Der Normal- und CTC Mode zählt immer bis Max.TOP. Mit dem Vorlade/Compare-Match Register verkürzt man den Zählumfang des Timers bis er seinen Overflow erreicht. Im PWM Modus stellt man mit einem, dem TOP, die Taktfrequenz ein und mit einem zweiten Compare-Match den Duty Cycle dessen ein. Der Prescaler bestimmt wie langsam oder schnell der Timer generell zählen soll. Mit 1 wird mit jedem Takt am Timereingang sein Counter 1:1 mitgezählt. Mit Prescaler 8 zählt sein Timercounter nur bei jeden 8 Pegelwechsel am Eingang eins hoch. Der Prescaler ist im Grunde ein Taktvorteiler für den Timer. Formeln stehen sicherlich im Datenblatt.
Holger schrieb: > Was genau stand davon NICHT im reference manual??? > > kopfschüttel Hallo Holger, nicht jeder ist so eine Leuchte wie du und versteht alles im Manual. Da zähle ich mich auch dazu. Für mich waren ein paar Sachen hier auch erhellend, daher danke ich dem TO für die Frage und den anderen für deren Antworten. >lbonk Holger
Jetzt kommts. Die Zähler/Timer im STM32 unterscheiden sich in einigen Punkten von 'klassischen', die sonst in MCs eingebaut sind. 1. Sie werden nicht direkt von der Taktfrequenz angetrieben, sondern von einer der 'Peripheral Clocks'(AHB,APB), die schon vorgeteilt sind - meistens mit 1/2 oder 1/4 der Taktfrequenz des STM32. 2. Sie haben eine einstellbare Periode, bis zu der sie zählen als Maximalwert. Im Gegensatz zu einem klassischen 16-bit Timer kann man sie also z.B. bis 10000 oder 13768 laufen lassen. Hier gibts einige interessante Dinge zur STM32 Familie mit Tipps und Tricks: http://measure.fel.cvut.cz/system/files/files/cs/vyuka/predmety/A4M38AVS/2014/materialy/Hitex_STM32_Insider_Guide.pdf
Hallo, Ergänzung, nicht das wir uns falsch verstehen. In der Regel gibt es verschiedene Timer-Modi. Ich habe bis jetzt nur AVRs in den Fingern gehabt. Also es gibt nicht nur den Fixed-TOP sondern auch den Max-TOP. Fixed TOP sind die festen Werte, 8Bit 255 und 16Bit 65535, und im Modi mit Max-TOP kann ich den Zählumfang nach oben selbst einstellen/begrenzen. Damit stellt man zum Bsp. im CTC/PWM Modi die Taktfrequenz ein unter Berücksichtigung vom Prescaler natürlich. Die grundlegende Funktion und Einstellung der Timer dürfte Architektur übergreifend immer gleich sein, nehme ich an. Nochmal wegen dem Compare-Matchwert bzw. Vorladeregister. Wenn man den Compare Match einstellt zum Bsp. im CTC Mode, dann stellt man damit den Max-TOP ein. Dann zählt er nur von 0 bis Max-TOP. Im CTC Mode oder Normal-Mode mit Fixed-TOP, gibt es nur die Möglichkeit den Wert des Timercounters selbst vorab zu ändern. Nur den muss man dann ständig nach Overflow wieder neu setzen, sonst fängt er nach der ersten Runde bei 0 an. Wird eigentlich nicht gemacht. TOP einstellen ist besser.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.