Go Down

Topic: Erste Schritte mit Arduino & Steppermotoren (Read 3829 times) previous topic - next topic

100-200-00

Hallo,
Seit kurzem beschäftige ich mich mit Arduino. Ich habe ein Projekt, bei dem ich ein xyz Portalsystem erstellen muss, welches über 3 Steppermotoren gesteuert werden soll.

Für die Steuerung des Ganzen soll ein Controllino Mega eingesetzt werden.  Jeder Steppermotor ist an einem C5 Motor Controller (Nanotec) angeschlossen.

Zu Beginn würde ich mich gerne in die Befehle der Bibliotheken Stepper.h, AccelStepper.h und MultiStepper.h einlesen. Ich suche eine Dokumentation die gerade für Anfänger wie mich verständlich und umfangreich erklärt ist. Damit wäre mir schon sehr geholfen =)

Vielen Dank

chefin

Der C5 Controller hat variable Möglichkeiten zur Ansteuerung, bin mir aber nicht sicher ob eine der Libs die du erwähnst dazu passt.

Die Stepper.h jedenfalls möchte die Anschlüsse selbst setzen. Die anderen zwei habe ich noch nicht getestet. Den C5 solltest du aber recht einfach ansteuern können, wenn du die Enable, Puls, Direction Ansteuerung nimmst. Dabei wird am Puls ein Takt drauf gegeben und mit Enable in Bewegung gesetzt oder gestoppt. Direction gibt die Richtung an.

Dann gibt es noch die Variante einen Analogwert aufzuschalten, der die Geschwindigkeit einstellt, hierbei hat man aber keine Kontrolle über die Anzahl Steps die gemacht werden.

Die weiteren Möglichkeiten sind Busgesteuert, die sollte man testen, wenn man mal weis wie ein Stepper grundsätzlich funktioniert.

Ich würde also mit der Ena, Puls, Dir Variante anfangen

Die Bibliotheken schau ich mir später mal an, wenn ich sie finde oder vieleicht kennt jemand diese und kann was dazu sagen.
 

chefin

Ok, auch die AccelStepper steuert direkt, eignet sich also nicht für einen Controller. Und Multistepper ist nur die Erweiterung dazu.

Dann solltest du einen Takt erzeugen indem du einen Ausgang togglest und den zum Ansteuern benutzen. Direction und Enable sind dann statisch, also werden während des Betriebs nicht geändert.


Helmuth

Kannst Dir ja mal den Code von Grbl anschauen, da sind auch Beschleunigungs- u. Bremsrampen integriert.

Gruß, H.

rpt007

Ich kenne den C5 nicht; scheint aber ein etwas funktional aufgepeppter Motortreiber zu sein, den man in diversen Modi ansteuern kann.
Also bis auf die zusätzlichen features, wie analoger Eingang, funktional identisch mit anderen Motortreibern.

Da man den Treiber mittels step/dir/ena ansteuern kann, kann man entsprechende libraries für Arduino verwenden, die eben step/dir/ena ausgeben - also wird es u.a. mit AccelStepper gehen, da diese library eben step/dir ausgibt und auch EN versteht, wenn man den Treiber stromlos schalten will.

Multistepper ist eine Erweiterung von AccelStepper, würde aber nur dann Sinn machen, wenn 2 oder mehr Stepper exakt synchron laufen sollen, z.B. 2 Antriebswellen parallel z.B. für die Y-Achse. Bei einer 3achsigen CNC mit 3 Motoren kommt AccelStepper "pur" zum Einsatz - man definiert hier nur 3 separate Motoren im Konstruktor (also z.B. X-Motor, Y-Motor und Z-Motor).

AccelStepper hat den Vorteil, dass du Rampen definieren kannst, die zum Anlaufen bei Last vermeiden, dass Schrittverluste entstehen und die bewegten Massen etwas sanfter abgebremst werden, um"Überschießen" zu vermeiden.

Nachteil: bei 16MHz erzielst du mit AccelStepper max. 4000 steps/sec; wenn dann noch mit microstepping gearbeitet wird, dann hast du eine ziemlich lahme CNC-Maschine. Daher würde ich bei einer CNC-Maschine eher mit einem Arduino Due mit Atmel SAM3X8E ARM Cortex-M3 CPU arbeiten, aber den gibt es ja (noch) nicht in der Controllino-Version). Dann hättest du genug Reserven (16MHz -> 84MHz), um alle 3 Achsen mit entsprechendem Speed anzutreiben.

Daher finde ich @Helmuths Vorschlag gut, bei einem 16MHz Mega Controllino dann eher mit GRBL als firmware auf dem Arduino arbeiten und den GCode mit einem geeigneten GRBL-Programm streamen (Universal GCode-Sender, chilipeppr.com etc.).
Before you ask:
Did you really read and understand How to use this forum ?
AND:
Do you have already some solution or is a part of the problem sitting in front of the screen?  :)

agmue

Ok, auch die AccelStepper steuert direkt, eignet sich also nicht für einen Controller.
Nö, die Bibliothek geht auch beispielsweise für die von mir verwendeten DRV8825 mit STEP, DIR und ENABLE. Aus der Bibliotheksdoku:

"AccelStepper::DRIVER (1) means a stepper driver (with Step and Direction pins). If an enable line is also needed, call setEnablePin() after construction. You may also invert the pins using setPinsInverted()."

Code: [Select]
AccelStepper stepper(AccelStepper::DRIVER, STEPpin, DIRpin);
Wahnsinn und Verstand trennt nur eine dünne Wand. (Daniel Düsentrieb)

rpt007

Quote
Nö, die Bibliothek geht auch beispielsweise für die von mir verwendeten DRV8825 mit STEP, DIR und ENABLE
Ich meine, das hätte ich schon gesagt:
Quote
Da man den Treiber mittels step/dir/ena ansteuern kann, kann man entsprechende libraries für Arduino verwenden, die eben step/dir/ena ausgeben - also wird es u.a. mit AccelStepper gehen, da diese library eben step/dir ausgibt und auch EN versteht, wenn man den Treiber stromlos schalten will.
Before you ask:
Did you really read and understand How to use this forum ?
AND:
Do you have already some solution or is a part of the problem sitting in front of the screen?  :)

agmue

Ich meine, das hätte ich schon gesagt:
Da hatte ich wohl meine Brille nicht auf :o

Siehe es bitte als Bestätigung :)
Wahnsinn und Verstand trennt nur eine dünne Wand. (Daniel Düsentrieb)

rpt007

#8
Sep 23, 2016, 01:43 pm Last Edit: Sep 23, 2016, 01:48 pm by rpt007
No problem.
Redundanz ist manchmal hilfreich und zielführend, vor allem, wenn sie aus 2 unabhängigen Quellen stammt :)

Dennoch wird AccelStepper wahrscheinlich hier nicht die richtige Wahl, weil zu lahm sein mit einem 16MHz Prozessor und "gleichzeitigem" Ansteuern von 3 Motoren - da geht der Speed schön in den Keller.

Daher entweder mit deutlich schnellerem Prozessor oder zumindest mit GRBL (aber auch hier wird man mit 3 steppern an die Grenzen von 16MHz kommen). Oder auch GRBL mit Arduino Due (das wäre meine präferierte Lösung).
Before you ask:
Did you really read and understand How to use this forum ?
AND:
Do you have already some solution or is a part of the problem sitting in front of the screen?  :)

chefin

Jo, ich war da zu schnell im Lesen, hab das nicht gesehen.

Du sagst 4khz maximal, das sind beim 1,8° Stepper immerhin flotte 1200U/min. Bei 1200U/min haben Stepper aber meist kaum noch Leistung. Selten das man sie über 300U/min fährt. Das sind beim 1,8° Stepper dann 1KHz.

http://de.nanotec.com/produkte/478-st5909-schrittmotor-09-nema-23/

Klick den einzelnen Motor an, dann bekommst die Drehzahl/Drehmoment Kurve. Es gibt zwar auch Motoren die mehr Drehzahl noch mit hohem Drehmoment überdecken, aber mehr als 300U/min habe ich noch nicht gesehen bis das Drehmoment abfällt. Spätestens bei 500U/min ist kaum noch 50% da.

Stepper sind keine Servos oder DC Motoren. Aber vieleicht kennst du Steppermotoren die es anders machen, dann würde ich mich über einen Link dazu freuen. Den ich muss mich immer damit rumschlagen, das wenn ich die Produktionszeit reduzieren will am Speedlimit und der damit einhergehenden Drehmomentreduzierung kämpfe. Während gleichzeitig das Gegenmoment zunimmt, wenn man schneller produzieren will.

Helmuth

#10
Sep 23, 2016, 05:44 pm Last Edit: Sep 23, 2016, 05:47 pm by Helmuth
Nebenan im Reprap Forum schreiben sie was von 1200 U/min mit Nema 17 Motoren.

Quote
for higher speeds you have to select 4x to 16x microstepping and according higher clocking rates.

With optimal selections you can get something around 1200 rpm from steppers ...
Das bräuchte dann (bei 16x) immerhin sportliche 3,84 Megaimpulse pro Sekunde.

Ob die Treiber dann eine Wasserkühlung brauchen, haben sie nicht geschrieben...

Gruß, H.

chefin

Ich habe Schrittmotortreiber die 100KHz ab können, allerdings sind das schon größere Modelle die entsprechend Kühlkörper haben. Ich denke arg viel mehr wird es nicht geben.

Ich baue gerade einen Drehmomentprüfstand mit Wirbelstrombremsung für Kleinmotoren um die Steppermotoren genauer auszutesten. Bisher fehlen mir einfach noch zuviel Daten um sie so genau zu beurteilen wie ich das gerne möchte. In solchen Fällen hilft dann nur eines: selbst testen. Spannung, Strom, Taktfrequenz, Microstepping, alles mal austesten.

Aber das wird noch dauern, nicht so leicht, ordentliche Magnetkräfte aufzubauen.

Die 1200U/min halte ich dabei allerdings für Leerlaufgrenzwerte die gerade noch erreichbar sind und im Posting davor geschrieben, der hat bei 360U/min schon Grenzdrehzahl erreicht. Was also bringt es, diese Drehzahl zu erreichen, wenn dabei das Abgabe Drehmoment Null wird und das Drehmoment im gesamten kleiner als bei Vollsteps. Zu zeigen was geht ist eine Sache, sie real zu benutzen um etwas zu bewegen eine ganz andere.

Übrigens, NEMA sind Bauformbezeichnungen, keinen Leistungen.

http://reprap.org/wiki/NEMA_17_Stepper_motor

Sie beziehen sich auf ein 1,7" x 1,7" Frontmass. Aber natürlich bekommt man in diese Baugröße nicht unendlich Wicklung und Magnete rein. Daher begrenzt es etwas, aber die Leistungsbandbreite geht locker von 0,3A bis 3A Stromaufnahme in diese Klasse. Daher sagt NEMA nicht viel über die Leistung aus.

rpt007

Quote
Du sagst 4khz maximal, das sind beim 1,8° Stepper immerhin flotte 1200U/min.
Das gilt aber nur in Summe und, wenn man in "fullstep" Mode unterwegs ist.

D.h. wenn alle Stepper gleichzeitig drehen sollen, dann reduziert sich die Frequenz je Stepper entsprechend.
Wobei es in der Praxis eher unwahrscheinlich ist, dass man für alle Stepper zeitgleich die maximale Frequenz benötigt - höchstens bei "Homefahrten".
Before you ask:
Did you really read and understand How to use this forum ?
AND:
Do you have already some solution or is a part of the problem sitting in front of the screen?  :)

chefin

Das gilt aber nur in Summe und, wenn man in "fullstep" Mode unterwegs ist.

D.h. wenn alle Stepper gleichzeitig drehen sollen, dann reduziert sich die Frequenz je Stepper entsprechend.
Wobei es in der Praxis eher unwahrscheinlich ist, dass man für alle Stepper zeitgleich die maximale Frequenz benötigt - höchstens bei "Homefahrten".
Das ist natürlich korrekt, 3 Motoren benötigen mehr Rechenzeit. Aber 1200U/min schafft ja auch kaum ein Motor und Microsteps benutzt man nur selten. Ich benutze zb Getriebe mit 1:40 Untersetzung, zusammen mit 1,8° Stepper komme ich auf 8000 Schritte pro Umdrehung. Nehme ich nun eine Gewindewelle mit 1,5mm Steigung komme ich auf 1/5333 pro Step. Das schafft die Mechanik nicht, das sind 2 Zehntausendstel Millimeter pro Step. Und das ohne Microstep. Microstep ist also für Direktantrieb nötig, wenn die 1,8° Genauigkeit nicht reichen. Ich kenn aber kaum einen direktantrieb der dann auch noch 100U/min benötigt, geschweige den 300U/min und gleichzeitig auf weniger als 1,8° genau sein muss. Wenn man einen Punkt so genau anfährt, macht man dort ja auch was und stoppt daher kurz.

Daher wird man in realen Anwendungen nur selten Microsteps benutzen. Dazu kommt, das der Widerstand der Spule mit der Frequenz steigt. Je höher ich die Stepanzahl treibe, desdo mehr Spannung brauche ich um den Strom zu treiben. Das führt irgendwann dazu das man mit den üblichen 24V garnicht mehr weiter kommt. Da landet man schnell bei 50V oder 60V.

rpt007

#14
Sep 24, 2016, 10:54 am Last Edit: Sep 24, 2016, 10:56 am by rpt007
Grundsätzlich alles ok in deinen Ausführungen; man erkennt deine Industrie-Erfahrung :)

Aber:
Quote
Daher wird man in realen Anwendungen nur selten Microsteps benutzen
Sorry, aber das stimmt nicht, bzw. wenn man "selten" richtig interpretiert, dann doch. Es mag sein, dass bestimmte Industrieanwendungen aus guten Gründen nur mit full step arbeiten - u.a. weil das Drehmoment bei full step nicht abgeschwächt ist, als wenn man microstepping einsetzt.

Aber: ich habe selbst eine kleine Industrieanwendung programmiert, die mit 2 Stepper arbeitet und auf Wunsch der Kunden sollte das Gerät etwas smoother/leiser arbeiten - das habe ich dann mit 1/8 Schritt gelöst, da der Speed relativ gering ist und die Stepper immer nur für eine kurze Zeit laufen.

Das Ganze ist nun aus Sicht der Kunden perfekt und läuft "rund", ohne die lauten Steppergeräusche vorher -  muss dazu sagen, dass aus Platz-/Kompaktheitsgründen DRV8825 zum Einsatz kommen und ich derzeit mit Trinamic TMC2100 teste, ob ich microstepping auf 1/2 reduzieren kann und dennoch kaum Steppergeräusche höre. Ein zukünftiges Projekt verlangt nämlich wesentlich höheren Speed ...
Before you ask:
Did you really read and understand How to use this forum ?
AND:
Do you have already some solution or is a part of the problem sitting in front of the screen?  :)

Go Up