STM32F4 Frequenzgenerator mit Zähler

OP #4355469
Lesenswert?
• ▲
▼
Hallo,

ich will auf einem STM32F4 einen Pin mit einer bestimmten Frequenz 
toggeln.
Theoretisch kein Problem, da die Timer zur Frequenzgeneration ausgelegt 
sind. Aber ich habe natürlich wieder einen Sonderfall. Und zwar soll der 
Pin nur eine bestimmte Anzahl getoggelt werden.

Z.B. Frequenz mit 5 KHz erzeugen, wenn 1000x High an Pin ausgegeben, 
dann Timer stop.

Mit PWM auf 50% duty cycle und hochzählen in der ISR sollte kein Problem 
sein, aber ich befürchte dass ich dann zu viele Interrupts bei höheren 
Frequenzen erzeuge, da es nicht bei diesem 1 Signal bleiben soll. Und 
anderer Code soll ja auch noch laufen.

Jetzt weiß ich einfach nicht weiter, wie ich dieses Problem am Besten 
löse.

mfg
Gast #4355474
Lesenswert?
• ▲
▼
>Jetzt weiß ich einfach nicht weiter, wie ich dieses Problem am Besten
>löse.

Da kann dir auch keiner weiterhelfen wenn man nicht
weiß wie hoch die Frequenz werden soll. Über 5000 Interrupts/s
lacht der STM32F4 sich jedenfalls tot.
Gast #4355880
Lesenswert?
• ▲
▼
Probieren geht über studieren in dem Falle. Selbst mit einer einfachen 
SW Lösung solltest du auf >>100 KHz kommen.

Per Timer geht noch mehr, gerade wenn du auf allen vier Pins die gleiche 
Frequenz haben willst. Dann brauchst du nur einen Timer.

Du kannst auch ein Bitmuster per DMA raushauen. Dann brauchst du die CPU 
gar nicht und es dürfte noch mal mehr gehen.

Möglichkeiten gibt es genug. Implementier doch einfach das was für dich 
am Einfachsten ist.
Gast #4355892
Lesenswert?
• ▲
▼
Du kannst einen anderen Timer 1000*(1/5kHz) lang laufen lassen (One Shot 
mode z.B.) Dann lässt du den PWM Timer im Gated mode laufen.
So kannst du den ersten Timer immer anstoßen. Dieser ist dann für eine 
Zeit aktiv, solange läuft der PWM Timer
#4355903
Lesenswert?
• ▲
▼
Ich würde für diese Anwendung einen zweiten Timer verwenden.

Setze bei deinem PWM-Timer die "Master Mode Selection" bits des 
"TIMx_CR2" auf "Update".

Bei deinem zweiten Timer setzt du die Anzahl der Toggles ins 
AutoReloadRegister, setzt "Slave Mode Selection" auf "External Clock 
Mode 1" und "Trigger Selection" auf den PWM-Timer. (Beides im TIMx_SMCR)
Achtung: Nicht jeder Timer kann von jedem Timer getriggert werden. Suche 
dir passende Timer!

Wenn nun ein Overflow Interrupt deines zweiten Timers auftritt, ist die 
gewünschte Anzahl der Toggles erreicht.
OP #4356692
Lesenswert?
• ▲
▼
Little B. schrieb:
> Ich würde für diese Anwendung einen zweiten Timer verwenden.
>
> Setze bei deinem PWM-Timer die "Master Mode Selection" bits des
> "TIMx_CR2" auf "Update".
>
> Bei deinem zweiten Timer setzt du die Anzahl der Toggles ins
> AutoReloadRegister, setzt "Slave Mode Selection" auf "External Clock
> Mode 1" und "Trigger Selection" auf den PWM-Timer. (Beides im TIMx_SMCR)
> Achtung: Nicht jeder Timer kann von jedem Timer getriggert werden. Suche
> dir passende Timer!
>
> Wenn nun ein Overflow Interrupt deines zweiten Timers auftritt, ist die
> gewünschte Anzahl der Toggles erreicht.

Das hört sich gut an, werde das mal genauer untersuchen.

mfg

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.