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!
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?
>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.
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.
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??
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.