Hi, Ich versuche auf einem STM32 einen Schrittmotortreiber zu schreiben, wobei ich Rampen fahren möchte. Ich muss also während der Beschleunigungsphase nach jedem Puls einen Interrupt erzeugen und entsprechend die Periode des Timers anpassen. Wenn nun der Motor auf der Zielgeschwindigkeit ist, dann sind die Interrupts ja nicht mehr nötig, bis zur Entschleunigungsphase. Nun werden im Mikroschrittbetrieb bei höheren Geschwindigkeiten extrem viele Interrupts ausgelöst und dies kann Probleme bei anderer Peripherie auslösen. Meine Frage ist nun, wie man mit einem STM32F3 am besten Rampen für einen Schrittmotor generiert? Ist der Interrupt Ansatz doch die beste Möglichkeit oder wird dies in der Praxis anders gelöst, evtl mit DMA?
:
Bearbeitet durch User
Ich habe die Teacup Firmware für den STM32F411 und 446 portiert. Du könntest dir das dort Mal ansehen. Theoretisch habe ich schon Schrittraten mit etwas über 1Mhz realisiert bei 180Mhz Taktfrequenz.
Ich bin mir noch nicht sicher, wie genau man am besten den Timer eines STM32 für mehrere Schrittmotoren einstellen sollte? Ich verwende Timer 1 mit 3 Channels, an dem je ein Schrittmotortreiber STEP Input hängt. Nun kann ich anscheinend nur die DutyCycle pro Channel anpassen, nicht aber die Periodendauer. Sehe ich das richtig so? Oder kann ich auch je Channel irgendwie die Periodendauer einstellen?
Nein, ich habe mal die Stepper über PWM gesteuert. Sehe aber kaum Vorteile. Letzendlich muss man dann eh in jeden Interrupt vom PWM springen um einen Counter zu haben. Ansonsten weißt du ja nicht wie viele Schritte du gefahren bist. Am einfachsten ist es die Pins im Interrupt zu steuern (BSRR) und mittels Bresenham zu arbeiten. Wobei Teacup auch im TEMPORAL-Mode (Einstellbar in der Config) ohne Bresenham funktioniert. Hab den auch mal mit PWM getestet. Aber gerade bei sehr schnellem PWM konnte ich die Schrittsignale nicht mehr ordentlich zählen und den Interrupt rechtzeitig beenden. Das sind zumindest meine Erfahrungen in den letzten 2 Jahren damit gewesen. Seit dem haben sich meine Programmier-"Künste" ein wenig weiter entwickelt. Vielleicht würde ich das heute auch alles anders machen.
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.