STM32: Ausgänge mit verschiedenen Frequenzen toggeln

Gast #3256389
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?
#3256594
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.
#3256684
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren