Erste Schritte mit Arduino & Steppermotoren

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

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.

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.

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

Gruß, H.

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.).

chefin:
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()."

AccelStepper stepper(AccelStepper::DRIVER, STEPpin, DIRpin);

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:

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.

rpt007:
Ich meine, das hätte ich schon gesagt:

Da hatte ich wohl meine Brille nicht auf :o

Siehe es bitte als Bestätigung :slight_smile:

No problem.
Redundanz ist manchmal hilfreich und zielführend, vor allem, wenn sie aus 2 unabhängigen Quellen stammt :slight_smile:

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).

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.

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.

Nebenan im Reprap Forum schreiben sie was von 1200 U/min mit Nema 17 Motoren.

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.

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.

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".

rpt007:
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.

Grundsätzlich alles ok in deinen Ausführungen; man erkennt deine Industrie-Erfahrung :slight_smile:

Aber:

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 ...

rpt007:
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.

Diese Aussage ist meiner Meinung falsch. Wieso soll bei Microstepping bei gleichen Summenstrom der beiden Wicklungen das Drehmoment schwächer sein?

Ok, Bei "2 Phase Full Step" sind immer beide Spulen mit dem vollen Nennstrom betrieben und bei Microstepping arbeitet man normalerweise mit dem, in Summe der beiden Wicklungsströme, zwischen 1 und sqr(2) fachen Nennstrom einer Spule. Daraus ergibt sich bei "2 Phase Full Step" ein größeres Drehmoment. Es ergibt sich aber auch eine bedeutend größere Erwärmung des Motors da die Wärmeverluste proportional zum Quadrat des Stromes ansteigen (P= IIR).

Ein kleineres Drehmoment kann durch die Wahl eines anderen Schrittmotors kompensiert werden.

Für mich hat Microstepping die unumstrittenen Vorteile eines ruhigeren Laufs und geringerer Geräusche.

Grüße Uwe

Hallo Uwe,

ich möchte hier kein neues Diskussionsfass dazu (zum Thema Drehmoment-Abschwächung) aufmachen.
Es gibt hierzu unzählige Diskussionen und Fachbeiträge im I-Net.

Ich habe selbst keine Tests dazu durchgeführt, da ich in der Praxis zunächst grob überschlage, ggf. kleine Berechnungen durchführe und dann einfach teste, ob ich hinkomme oder nicht bzgl. Drehmoment.

Aus der Summe der Beiträge zu diesem Thema in den einschlägigen CNC-Foren habe ich nur mitgenommen, dass Fullstep (etwas) mehr Drehmoment liefert als Microstepping (und das, je höher man die Frequenz steigert). Macht ja auch aus elektrischen Überlegungen Sinn - wird m.E. aber in der Praxis meist überschätzt.

Daher suche ich einen Kompromiss zwischen Geräusch/ruhigem Lauf und Kraft. Trinamic scheint hier mit seinen SilentStepper-Modulen auf dem richtigen Weg zu sein.

Grüße Raimund

rpt007:
ich möchte hier kein neues Diskussionsfass dazu (zum Thema Drehmoment-Abschwächung) aufmachen.

Wie wäre es mit einem Grundsatzthema "Schrittmotoren und ihre Ansteuerung aus Sicht professioneller Anwender"? Da können sich dann alle austauschen, die tiefere Kenntnisse dazu haben. Bei Bedarf wird dann darauf verwiesen. Nur so eine Idee :slight_smile:

@agmue:
Das Thema ist m.E. besser in den einschlägigen CNC oder Maschinenbau-Foren aufgehoben und dort seit Jahren in heftigster "Bearbeitung" in allen möglichen Sprachen und auf sehr unterschiedlichem Niveau.

Nach einigem Studium dieser Diskussionen wirst du i.d.R. mehr verwirrt als schlauer rauskommen, da selbst ernannte Experten von echten nicht unterscheidbar sind und teils hanebüchene Sachen behauptet und "wissenschaftlich belegt" werden, die mir als E-Ingenieur die Nackenhaare aufrichten.

Dazu dann noch die persönlichen Beleidigungen, wenn jemand wagt zu widersprechen und und und ...

Ich habe nach anfänglichem Einlesen in die Materie einfach angefangen, mir ein kleines Basis-Wissen mittels Versuchsaufbauten diverser Treiber, Steppermotoren und Ansteuerung mittels MCU oder PC angeeignet. Dabei lernt man dann am besten und kann sich ein kleines Rüstzeug an Erfahrung (was man tun, was man lassen sollte) zulegen.

Würde aber nicht behaupten, so tief drin zu stecken, dass ich mich als Expoerte auf dem Gebiet betrachte. Das überlasse ich lieber einigen Theoretikern.

rpt007:
...
Daher suche ich einen Kompromiss zwischen Geräusch/ruhigem Lauf und Kraft. Trinamic scheint hier mit seinen SilentStepper-Modulen auf dem richtigen Weg zu sein.

Grüße Raimund

Aber Trinamic zB mit dem TMC2100 geht genau den entgegengesetzten Weg. Der Treiber interpoliert in einigen Betriebsmodi das Steuersignal (halb bis 1/16 Microstep) zu einer 256 Step Microstepping Ansteuerung des Schrittmotors.

http://www.trinamic.com/_scripts/download.php?file=_articles%2Fproducts%2Fintegrated-circuits%2Ftmc2100%2F_datasheet%2FTMC2100_datasheet.pdf

Grüße Uwe