Forum: Mikrocontroller und Digitale Elektronik Schrittmotor schrittweise ansteuern


von Klaus (Gast)


Lesenswert?

Hall Gemeinde
Einen Schrittmotor laufen lassen geht ohne Problem. Auch mit 
unterschiedlicher Drehzahl oder links oder rechts geht alles.
Doch wie kann ich eine definierte Anzahl von Schritten (Winkel) laufen 
lassen?
Habe schon einige Beiträge im Forum dazu gefunden, leider nicht das 
richtige dabei.
Oder gibt es eine Möglichkeit eine Rampe zu programmieren um einen 
Sanftanlauf zu bekommen?
LG Klaus

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Welche Hardware hast du?

von Sebastian R. (lange_leitung)


Lesenswert?

Schau Dir mal das Datenblatt der Motorsteuerung an. Es gibt 
normalerweise unterschiedliche Modi.
Dauerlauf: Da gibt man nur die Richtung vor.
Schrittmodus, Positioniermodus, oder so ähnlich: Da gibst Du die Anzahl 
der Schritte und die Richtung vor.

Die Rampe für die Beschleunigung ist meistens separat, da die ja für 
alle Modi gilt.

Gruß
Sebastian

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Sebastian R. schrieb:
> Schau Dir mal das Datenblatt der Motorsteuerung an. Es gibt
> normalerweise unterschiedliche Modi.
Und dann gibt es natürlich noch die "nackten" Endstufen, die nur Impuls- 
und Richtungseingänge haben...

von Klaus (Gast)


Lesenswert?

Dachte mehr an eine Software mit der ich eine Rampenzeit einstellen 
kann. So wie
T1 - Rampe hoch
T2 - Laufzeit
T3 - Rampe runter

A1 Steilheit zu T1
A3 Steilheit zu T3

und nicht zu vergessen die Drehzahlregelung mit Poti über ein U-F 
Wandler.
Habe schon mehrere Sachen im Forum dazu gesehen. Entweder ohne Code oder 
Beispiel oder alles sehr theoretisch.

LG K

von Sebastian R. (lange_leitung)


Lesenswert?

Genau diese Rampen (Beschleunigung und Geschwindigkeit; Laufzeit ergibt 
sich daraus) kannst Du über die Motorsteuerung einstellen. Wie 
kommunizierst Du denn mit dem Motor? Da hast Du doch bestimmt schon eine 
Software.

Gruß
Sebastian

von Michael B. (laberkopp)


Lesenswert?

Klaus schrieb:
> Einen Schrittmotor laufen lassen geht ohne Problem. Auch mit
> unterschiedlicher Drehzahl oder links oder rechts geht alles.

Na das ist ja super.

> Doch wie kann ich eine definierte Anzahl von Schritten (Winkel) laufen
> lassen?

Einfach mit der Ansteuerung zum passenden Zeitpunkt aufhören.

> Habe schon einige Beiträge im Forum dazu gefunden, leider nicht das
> richtige dabei.

Schlimm.

> Oder gibt es eine Möglichkeit eine Rampe zu programmieren um einen
> Sanftanlauf zu bekommen?

Natürlich.

Gibt es auch eine Möglichkeit, daß du dir die Mühe gibst, 
hinzuschreiben, welche Plattform und welchen Motortreiber du verwendest 
?

Ansonsten bleibt nur die allgemeine Antwort daß es bei passend 
ausgewählten schon geht:

https://www.airspayce.com/mikem/arduino/AccelStepper/

https://www.trinamic.com/technology/std-technologies/ramping/

https://github.com/plastiv/stepper-motor-controller/blob/master/%20stepper-motor-controller%20--username%20plastiv%40gmail.com/code/speed_cntr.h

von Rotho (Gast)


Lesenswert?

Klaus schrieb:
> Habe schon mehrere Sachen im Forum dazu gesehen. Entweder ohne Code oder
> Beispiel oder alles sehr theoretisch.


Ja, leider ist das manchmal so. Mit meinem DRV8825 bin ich auch noch 
nicht so richtig weiter. Der Motor läuft nach dem Ansteuern (manchmal) 
wieder zurück, ohne dass der uC ncoh Impulse liefert. Vielleicht hat der 
Chip eine Macke (oder ich).

https://www.exp-tech.de/module/motorsteuerung/schrittmotoren/4802/drv8825-stepper-motor-driver-carrier-high-current

von spess53 (Gast)


Lesenswert?


von georg (Gast)


Lesenswert?

Klaus schrieb:
> Oder gibt es eine Möglichkeit eine Rampe zu programmieren um einen
> Sanftanlauf zu bekommen?

Klar gibt es die. Anlaufen ist trivial, einfach die Geschwindigkeit 
schrittweise erhöhen bis die gewünschte erreicht ist. Bremsen geht 
umgekehrt, ausser wenn man einen bestimmten Endpunkt ansteuern will: 
dann muss man nämlich vorausberechnen, wann man mit dem Bremsen anfangen 
muss. Daher ist eine Punkt-zu-Punkt-Steuerung mit Rampen recht 
kompliziert (und ohne Rampen funktioniert es meistens garnicht, weil der 
Schrittmotor nur mit einer bestimmten Maximalfrequenz überhaupt 
loslaufen kann).

Also am besten Hardware und Treiber verwenden, die das alles selber 
beherrschen.

Georg

von Berbog (Gast)


Lesenswert?

Vieleicht  siehst du dir mal die Marlin Software an die 3D Drucker 
steuert.

http://marlinfw.org/

von Nico W. (nico_w)


Lesenswert?

Na ich weiß nicht ob bei den Schwierigkeiten Marlin eine Erleuchtung 
bringt. Marlin ist schon sehr komplex. Es gibt da einfachere Module in 
der Arduino-Welt. Auch wenn Teacup sicher etwas einfacher zu Verstehen 
ist, würde ich da auch nicht als erstes drauf verlinken.

Es gibt auch ein paar nette Papers [1] und/oder [2] dazu, wie man solche 
Rampen berechnen kann. Wenn man ein bischen rumsucht, findet man auch 
noch viele andere Ansätze.

[1] 
http://www.embedded.com/design/mcus-processors-and-socs/4006438/Generate-stepper-motor-speed-profiles-in-real-time
[2] 
https://www.microchip.com//wwwAppNotes/AppNotes.aspx?appnote=en591185

von Klaus (Gast)


Lesenswert?

Als Hardware verwende ich einen Atmega 128 und C. Der Treiber IC ist ein 
L6208 mit einem SM von 3,8V und 2,2A. Verwende CLOK, EN und CCW. Das 
Programm habe ich selber geschrieben. Beinhaltet eigentlich nur einen 
Timer und schalte die Zeiten um.
Georg hat da zwei Sachen drin. Wie kann ich einen bestimmten Punkt 
ansteuern? z.B. bei 1,8° soll er 20 Schritte drehen. Das ist doch die 
Ausgabe einer definierten Anzahl von Impulsen mit einer bestimmtem 
Frequenz (ms oder Hz). Dazu vielleicht das Haltemoment.
Da gibt es bestimmt noch mehr zu fragen

von M. K. (sylaina)


Lesenswert?

Klaus schrieb:
> Doch wie kann ich eine definierte Anzahl von Schritten (Winkel) laufen
> lassen?

Öhm...zählen!?! Das ist doch das tolle an Steppern: Man muss nur zählen 
können. Beispiel ein Stepper der 200 Schritte/Umdrehung hat: 50 
Vollschritte und der Motor dreht um 90°. Sind es dagegen nur 50 
Viertelschritte dann dreht er grad mal um 90°/4. Und wieviele Schritte 
er macht...du machst es doch nicht etwa so, dass du dem Stepper 
permament Schritte schickst sondern nur soviele Schritte, wie er machen 
soll um sein Ziel zu erreichen...

von Wolfgang (Gast)


Lesenswert?

Klaus schrieb:
> Oder gibt es eine Möglichkeit eine Rampe zu programmieren um einen
> Sanftanlauf zu bekommen?

Normalerweise wirst du einen Schrittmotor, außer in einigen 
Minimalanwendungen, nie vernünftig ohne Rampen betreiben können.

Keiner außer dir kennt deine Hardware. Wie eine Rampe gesteuert wird, 
hängt davon ab, was zwischen deinem Steuerrechner und dem Motor hängt.

Wenn du direkt die Drehzahl steuern kannst, scheint da einige 
Eigenintelligenz drin zu stecken. Ohne die zu kennen, wird dir keiner 
deine Fragen beantworten können.

von m.n. (Gast)


Lesenswert?

Klaus schrieb:
> Entweder ohne Code oder
> Beispiel oder alles sehr theoretisch.

Vielleicht reicht Dir das: 
http://mino-elektronik.de/Generator/takte_impulse.htm#bsp7
Die Rampen werden automatisch erzeugt. Weiter oben sind auch 
Schaltungen, die per Poti ein oder zwei Schrittmotore ansteuern. Die 
Filterung der Potiwerte für automatisch zu Rampen.

Gezielte Fahrt zur Sollposition mit Rampen und frei einstellbarer 
Geschwindigkeit per Poti dürften sich in einigen Punkten widersprechen. 
Einzig eine max. Geschwindigkleit per Poti wäre eventuell sinnvoll.

von m.n. (Gast)


Lesenswert?

m.n. schrieb:
> ... für automatisch zu Rampen.

... führt ...

von svensson (Gast)


Lesenswert?

Moin,

>Verwende CLOK, EN und CCW.

Das klingt doch so als wäre der Treiber geeignet.

Hier habe ich einen Trinamic näher beschrieben. Funktioniert 
einwandfrei. Der Treiber macht ihn m.E. optimal für die Ansteuerung mit 
einem µC.

Beitrag "Arduino: Schrittmotor+Treiber gesucht"

EN = 1 bedeutet Treiber ein (Motor hat Haltekraft)

DIR bedeutet Drehrichtung: 0=rechts, 1=links

STEP = Schritt bzw. Microschritt

Alles Andere (Strom, Haltekraft, Rampen, Verzögerungen usw.) läßt sich 
im Treiber programmieren mittels graphischer IDE.
Wer sich den ganz großen Kick geben will, kann dem Motor auch 
Assembler-Steuerbefehle in Echtzeit schicken...

von nix und n. (nixundnul)


Lesenswert?

Ich kenne keine Hardware, die selbsstätig Rampen macht. Außer es ist 
etwas Programmierbares drin. Dann aber mußt Du den Ersteller desselben 
fragen.
Ich wüßte auch nicht, wie man die AVR internen Timer auf selbsttätige 
Rampen bringen sollte. Wenn es sich um eine Geschwindigkeitsregelung 
(ohne Position) handelt, dann ist es noch einfacher. Da kann man in 
Software die Frequenzausgabe stückchenweise hinundher schieben.
Soll zusätzlich noch die Position stimmen, geht das nur vollständig in 
Software: Zeit zum nächsten Impuls berechnen, Timer-Interrupt drauf 
setzen. Die oben genannte Marlin-Software macht das so, für 4 
Schrittmotoren gleichzeitig, und dann noch nebenher-Aufgaben. 
Hochachtung davor, aber als Schulprojekt nicht unbedingt zu gebrauchen.
Fange erstmal an, jeden Impuls einzeln zu berechnen und auszugeben. 
Parallelverarbeitung kommt dann im 2. Lehrjahr dran.

von Klaus (Gast)


Lesenswert?

Hallo m.n.
Habe deine Sachen schon öfters im Netz und auf deinen Seiten gesehen. 
Werde es mal ausprobieren und dir dazu antworten.

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.