Stm32F4 - Timer Offset

OP #3861580
Lesenswert?
• ▲
▼
Hallo uC - Community,


ich habe da mal eine Frage, da ich weder hier noch im www bisher fündig 
geworden bin.

Ich möchte einen Sinus über zwei Timer ausgeben, welche um einen Wert x 
in ihren Zählregistern verschoben sind.
Soll heißen der Timer 1 zählt von 0-10000, der Timer 2 von 10000-20000, 
jedoch beide mit der gleichen Frequenz.

Ist es möglich einem Timer einen Offset mitzugeben, dass dieser z.B. von 
10000 bis 20000, und nicht von 0 bis 20000 zählt?

Ich habe es bisher über einen define auf das Register Tim1_Cnt 
versucht(sozusagen als preload der counter value), jedoch fängt er 
sobald er den Overflow erreicht hat immer wieder von 0 an zu zählen.

Mein aktuelles Board ist ein STM32F4 - Discovery.


Viele Grüße
Johannes
Gast #3862798
Lesenswert?
• ▲
▼
Du kannst in der Overflow Interrupt ISR immer den Tim1_Cnt auf den 
Preloadvalue setzten.

Im Datenblatt unter Timer steht auch dass die Timer TIM2 TIM3 TIM4 TIM5 
über einen Autoreload verfügen, dann musst du das oben genannte nicht 
machen und den Timer einfach in den Autoreloadmodus versetzen und deinen 
gewünschten Reloadwert in ein Register schreiben.
OP #3862941
Lesenswert?
• ▲
▼
Hallo,

erstmal danke für die Antwort.

Ich habe mich vielleicht etwas unglücklich ausgedrückt.
Ich sollte wohl dazu sagen, das ich die Timer in Center-aligned 
betreibe.

Dieser zählt also von sagen wir Cnt 10000 bis zur ARR von 20000 und 
wieder zurück. Nun stoppt er aber nicht bei "10000" sondern zählt weiter 
hinunter bis 0 und gibt das cnt underflow.

Ich versuche wie gesagt mithilfe von 2 Timern(Tim1&8) einen Sinus 
auszugeben. Sobald der Wert der Sinustabelle 10000 überschreitet, soll 
der "untere" Timer(0-10000) dauerhaft Signal geben und der "obere" 
Timer(10000-20000) übernehmen den Sinus zu takten.

Funktioniert soweit ganz gut, jedoch schaffe ich es nicht, dass der 
obere Timer quasi seinen "Endwert" bei 10000 und nicht bei 0 hat.

Meine nächste Idee wäre durch das Capture/Compare des oberen Timers 
einen DMA auszulösen, der die CNT_value um 10000 decrementiert.

Sozusagen zählt der Timer dann von "0+10000" bis 20000.
Und zurück von 20000 bis zum CC-10000, also wieder auf 0.
Ich benötige ja nur die beiden CC um den Sinus zu takten.

Diese Lösung, sofern das funktionieren kann?!?, scheint mir zwar alles 
andere als elegant, aber ich versuche es einfach mal ;)

Gruß
Johannes
Gast #3863080
Lesenswert?
• ▲
▼
Naja dann fällt mir dazu auch nichts ein als das im Capture Compare zu 
lösen, ich kenne ein paar µC die haben einen CaptureCompareReload, nur 
ich weis jetzt nicht ob der STM32 das auch kann.

Aber wozu brauchst du für den Sinus zwei Timer?
Du kannst es ja auf einem Timer machen bei der hälfte CaptureCompare 
Event und einfach nur den Ausgang umschalten, anstatt einen ganzen 
Timer, beim Overflow schaltest du wieder zurück
OP #3871510
Lesenswert?
• ▲
▼
Hey,


ich benötige zwei Timer, da ich eine 3-level Ansteuerung machen möchte 
und da brauch ich danke den 12 IGBTs auch 12 PWMs.

Für interresierte, ich habs mittlerweile gelöst.

Ob es mit Timer Offset geht weis ich nicht(funktioniert bestimmt, 
allerdings dann nur über Interrupt oder DMA denk ich mal).
Ich habe anstatt den Timer "hochzusetzen" einfach den Sinus 
"runtergezogen" sobald er einen Wert über x hat.

Jetz hab ich so lange überlegt für eine so banale Lösung :/

Viele Grüße
Johannes

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.