Forum: Mikrocontroller und Digitale Elektronik STM32F4 - Möglichkeiten für Timer


von John W. (halfpastseven)


Lesenswert?

Hallo allerseits!

Ich habe ein kleines Timer "Problem" mit meinem STM32F407VG (Discovery 
Board, CPU Takt 168MHz) bzw ich weiß nicht ob dso ein Timer mit dem STM 
überhaupt möglich ist?!

Ich benötige einen genauen Taktausgang für eine Schrittmotoransteuerung 
da für meine Anforderung eine genaue Geschwindigkeit, ein genauer 
Fahrweg (Anzahl Mikroschritte) und eine genaue Fahrzeit/Gesamtzeit immer 
stimmen muss.

Ein Beispiel:
Fahrweg: 1000 Schritte -> Geschwindigkeit 10steps/s -> Fahrzeit 100s

Eckdaten:
- Frequenzverstellung: 3,072Hz bis 153,6kHz
- Auflösung der Frequenzverstellung: 3,072Hz
-> ergibt 50000 Einstellmöglichkeiten

Die kleinen Frequenzen kann ich relativ gut einstellen, würde auch noch 
locker 0,3072Hz schaffen aber die größeren Frequenzen machen mir extreme 
Probleme.

Wegen einer genaueren Verstellung habe ich schon versucht den Quarz von 
8MHz auf 15,36MHz (Vielfaches vom Maximaltakt) zu tauschen und mit 
153,6MHz Prozessortakt zu betreiben.
Funktioniert auch, allerdings nur bedingt besser da die genaue Frequenz 
sich immer nur bei einem Teiler(vielfachen) von 1 oder 5 ergibt 
(Denkfehler von mir). Zusätzlich das selbe Probleme bei den großen 
Frequenzen.

Hat jemand von euch eine Idee wie man so einen Timer aufbauen könnte??

Kann man mehrere Timer quasi per interner Hardware 
hintereinanderschalten??

Bin für jede Hilfe und jeden Tipp dankbar!
Vielen Dank im Voraus!

von Karl (Gast)


Lesenswert?

Das geht nicht, zumindest nicht in jedem Schritt. Mit etwas Aufwand kann 
es im Mittel klappen (dithering oder so), aber sonst seh ich schwarz.

Warum? fcpu = 168 MHz -> tclk = 1/fmax ~ 5,95 ns

fmax = 153,6 kHz, fmax-1 = 1/(1/fmax + tclk) ~ 153,46 kHz

Mehr als 140 Hz Frequenzauflösung ist bei der Wunschfrequenz und dem 
Takt einfach nicht drin.

Rechnung ist noch dazu zu schön, weil man die Timer nur mit max. 84 MHz 
takten darf. Also nochmal schlechtere Auflösung.

Wozu braucht man so einen Dynamikumfang?

von holger (Gast)


Lesenswert?

>Mit etwas Aufwand kann
>es im Mittel klappen (dithering oder so), aber sonst seh ich schwarz.

Och, man kann mit der PLL die CPU Frequenz auch noch ganz gut
variieren. Allerdings muss man dann auch UART und andere
Peripherie unter Umständen neu initialisieren.

von Karl (Gast)


Lesenswert?

Da hast Du natürlich Recht, machen wollen würde ich es trotzdem nicht, 
FALLS es andere gangbare Möglichkeiten gibt. Vielleicht bin ich an der 
Stelle auch zu konservativ.

von John W. (halfpastseven)


Lesenswert?

Danke für eure Antworten.

Ich benötige diese hohe Dynamik für die geforderte 
Schrittmotoransteuerung im medizinischen Bereich. Eventuell könnte man 
noch kleinere Fehler in der Fahrzeit tolerieren aber ansonsten sollte es 
schon genau passen!

Ich hatte auch schon an externe Bauteile wie DDS IC usw gedacht, wollte 
aber vorher nochmal abklären OB es mit dem STM machbar wäre...

Mich würde immer noch interessieren ob man eine Lösung mit mehreren 
Timern bauen könnte?
Hat in dieser Richtung schon mal jemand was versucht??

von Karl (Gast)


Lesenswert?

Wenn Du einen definierten Verfahrweg in einer definierten Zeit brauchst, 
ok. Kapiert.

Kommt es aber tatsächlich auf ca 12 ns an, wann der nächste Schritt 
ausgeführt wird?

Falls nein: Alle x Schritte einen mit einem Takt länger oder kürzer 
ausführen. Dann kommt man über viele Schritte im Mittel ziemlich genau 
auf die gewünschte Verfahrzeit.

Falls doch: Viel höheren Takt wählen oder die Variante von holger 
wählen. Die ist zugegebenermaßen ziemlich smart. Man muss dann aber 
schon wissen, was man tut. Z.B ist es nicht unendlich schnell möglich 
die Frequenz zu ändern, weil die PLL immer einschwingen muss. 
Kommunikation nach Außen muss dann auch immer angepasst werden.

Evtl. noch ne gute Alternative: PLLI2SCLK über MCO2 ausgeben und damit 
einen Timer takten. Damit sollte man ziemlich genau werden können und 
man erspart sich das Umtakten des ganzen Prozessors.

von John W. (halfpastseven)


Lesenswert?

Danke für den Vorschlag.

Die Lösung mit dem "Frequenzmitteln" habe ich bereits bei der alten 
Lösung  verwendet. Aber dort fiel das Mitteln bereits negativ auf, 
deshalb auch diese hohe Anforderung.

Habe mir nun eine "Software DDS Lösung" gebastelt die lediglich mit 
einer externen Taktquelle auskommt und die hohe Auflösung problemlos 
schafft.

Alleine mit dem STM wäre es aber eher nicht möglich gewesen.

: Bearbeitet durch User
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.