Forum: Mikrocontroller und Digitale Elektronik STM32: Ausgänge mit verschiedenen Frequenzen toggeln


von brechbunkt (Gast)


Lesenswert?

Hallo,

ich schaue mir gerade dieses Beispiel an, wie beim STM32 ein einziger 
Timer verwendet werden kann, um mehrere Ausgänge mit verschiedenen 
Frequenzen togglen zu lassen:
http://www.longlandclan.yi.org/~stuartl/stm32f10x_stdperiph_lib_um/STM32F10x__StdPeriph__Examples_2TIM_2OCToggle_2main_8c_source.html#l00056

Dort wird der Timer eingestellt und wenn der Wert vom Counter der selbe 
Wert ist wie im Compare-Register (zB. TIM3CCR1), wird der Ausgang 
getoggelt. So weit, so gut.

Nun wird das ganze auch für weitere Compare-Register/Ausgänge gemacht 
(wie in Zeile 00108).
Wenn ich mir das ganze so anschaue (ohne ein STM32 vor mir zu haben), 
zählt doch der timer immerzu von 0 bis Ende und bei Übereinstimmung der 
Compare-Register toggeln die Ausgänge. Das würde aber bedeuten, die 
Frequenz ist bei allen Ausgängen die gleiche (nur eben mit einem delay 
zwischen den einzelnen Ausgängen). Kann mir jemand sagen wo mein 
Denkfehler sein muss?

von Patrick B. (p51d)


Lesenswert?

Die verlinkte Datei für sich genommen hast du recht, aber wenn du dir 
die Interrupt-Dateien noch ansiehtst, mekrst du, dass bei jedem 
Compare-Interrupt die compare-Register aktualisiert werden. Das hat zur 
Folge, dass für ein Timer-Durchlauf xy Compare-Interrupts generiert 
werden und somit auch die Pins getoggelt.

Habs gerade ausprobiert: Ohne Interrupt-Dateien hast du nur eine 
Phasenverschiebung, mit Interrupt-Handler die unterschiedlichen 
Frequenzen.

von brechbunkt (Gast)


Lesenswert?

Recht herzlichen Dank. Das mit den irq hatte ich nicht gesehen.

von Nik D. (nik_uc)


Lesenswert?

Hey, finde das Thema interessant und möchte mich sowieso in die Timer 
des ST's einarbeiten, habe aber gerade noch ein paar Verständnis Fragen.
Mir ist generell bekannt wie die Compare und Capture Unit arbeitet, denk 
ich mal, allerdings habe ich Probleme dabei wie man auf sinnvolle Werte 
für Prescaler usw kommt, wenn man andere Frequenzen haben will. Hier mal 
ein Rechenbeispiel.
Ich möchte 500Hz haben (bzw. der Timer soll mit 500 Hz ein Event 
auslösen)

da passt noch alles. Jetzt möchte ich aber z.b. 75Hz haben:

Der Wert ist doch sicherlich zu groß für das CCR Register, oder? Sprich 
man müsste den Prescaler(der quasi den Zähltakt verlangsamt?) oder die 
Period (also den Nachlade Wert des Timers) ändern, sehe ich das richtig?
Nur fehlt mir jetzt die Idee wie ich auf entsprechende Werte kommen 
kann.

Danke für die Hilfe.

von Nik D. (nik_uc)


Lesenswert?

schubs


keiner nen Tipp für mich?

von LTC1043 (Gast)


Lesenswert?

Nik D. schrieb:
> zu groß für das CCR Register,

Wie viele bits hat den das CCR laut dem Datenblatt?

Wie viele bits braucht den dein 160000?

Die Grundlagen sind beim STM32 die gleichen wie bei jedem anderen uC....

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.