Forum: Mikrocontroller und Digitale Elektronik STM32F3 Schrittmotor Ansteuern Pulse zählen


von Bert S. (kautschuck)


Lesenswert?

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
von Nico W. (nico_w)


Lesenswert?

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.

von Bert S. (kautschuck)


Lesenswert?

Nico W. schrieb:
> Teacup Firmware für den STM32F411

Danke, schaue mir das mal an.

von Bert S. (kautschuck)


Lesenswert?

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?

von Nico W. (nico_w)


Lesenswert?

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
Noch kein Account? Hier anmelden.