Arduino Forum

International => Deutsch => Topic started by: 100-200-00 on Sep 22, 2016, 04:33 pm

Title: Erste Schritte mit Arduino & Steppermotoren
Post by: 100-200-00 on Sep 22, 2016, 04:33 pm
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
Title: Re: Erste Schritte mit Arduino & Steppermotoren
Post by: chefin on Sep 22, 2016, 06:50 pm
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.
 
Title: Re: Erste Schritte mit Arduino & Steppermotoren
Post by: chefin on Sep 22, 2016, 06:55 pm
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.

Title: Re: Erste Schritte mit Arduino & Steppermotoren
Post by: Helmuth on Sep 22, 2016, 08:06 pm
Kannst Dir ja mal den Code von Grbl (https://github.com/grbl/grbl) anschauen, da sind auch Beschleunigungs- u. Bremsrampen integriert.

Gruß, H.
Title: Re: Erste Schritte mit Arduino & Steppermotoren
Post by: rpt007 on Sep 23, 2016, 10:56 am
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.).
Title: Re: Erste Schritte mit Arduino & Steppermotoren
Post by: agmue on Sep 23, 2016, 01:05 pm
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);
Title: Re: Erste Schritte mit Arduino & Steppermotoren
Post by: rpt007 on Sep 23, 2016, 01:24 pm
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.
Title: Re: Erste Schritte mit Arduino & Steppermotoren
Post by: agmue on Sep 23, 2016, 01:35 pm
Ich meine, das hätte ich schon gesagt:
Da hatte ich wohl meine Brille nicht auf :o

Siehe es bitte als Bestätigung :)
Title: Re: Erste Schritte mit Arduino & Steppermotoren
Post by: rpt007 on Sep 23, 2016, 01:43 pm
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).
Title: Re: Erste Schritte mit Arduino & Steppermotoren
Post by: chefin on Sep 23, 2016, 02:21 pm
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.
Title: Re: Erste Schritte mit Arduino & Steppermotoren
Post by: Helmuth on Sep 23, 2016, 05:44 pm
Nebenan im Reprap Forum (http://forums.reprap.org/read.php?1,381570) 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.
Title: Re: Erste Schritte mit Arduino & Steppermotoren
Post by: chefin on Sep 23, 2016, 06:37 pm
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.
Title: Re: Erste Schritte mit Arduino & Steppermotoren
Post by: rpt007 on Sep 23, 2016, 08:26 pm
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".
Title: Re: Erste Schritte mit Arduino & Steppermotoren
Post by: chefin on Sep 24, 2016, 10:31 am
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.
Title: Re: Erste Schritte mit Arduino & Steppermotoren
Post by: rpt007 on Sep 24, 2016, 10:54 am
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 ...
Title: Re: Erste Schritte mit Arduino & Steppermotoren
Post by: uwefed on Sep 24, 2016, 11:34 am
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= I*I*R).

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
Title: Re: Erste Schritte mit Arduino & Steppermotoren
Post by: rpt007 on Sep 24, 2016, 11:41 am
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
Title: Re: Erste Schritte mit Arduino & Steppermotoren
Post by: agmue on Sep 24, 2016, 12:44 pm
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 :)

Title: Re: Erste Schritte mit Arduino & Steppermotoren
Post by: rpt007 on Sep 24, 2016, 01:01 pm
@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.
Title: Re: Erste Schritte mit Arduino & Steppermotoren
Post by: uwefed on Sep 24, 2016, 01:19 pm
...
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
Title: Re: Erste Schritte mit Arduino & Steppermotoren
Post by: rpt007 on Sep 24, 2016, 02:13 pm
OK, das weiß ich, ich sehe aber nicht, was das mit einem "entgegengesetztem Weg" (von was?) zu tun hat.
Wenn die Motoren leise bei guter Kraft laufen, das soll mir recht sein, denn genau das suche ich - zumindest für meine Projekte.

Ein enormer weiterer Vorteil ggü. den A4988/DRV8825 ist, dass es bei gleicher Baugröße einen Standby Modus gibt, wo nach 3-4sec bei Motorstillstand noch ca. 1/3 Haltestrom fließt (-> 1/9 der Energie).

Aktuell kann ich den voreingestellten Spulenstrom nur komplett Ein oder Aus schalten - was bei manchen Applikationen auf engstem Raum dazu führt, dass die Treiber verdammt heiß werden, wenn man auch im Stillstandsmoment noch Haltekraft braucht.
Title: Re: Erste Schritte mit Arduino & Steppermotoren
Post by: uwefed on Sep 24, 2016, 04:19 pm
OK, das weiß ich, ich sehe aber nicht, was das mit einem "entgegengesetztem Weg" (von was?) zu tun hat.
Wenn die Motoren leise bei guter Kraft laufen, das soll mir recht sein, denn genau das suche ich - zumindest für meine Projekte.
Von dem was Du vorher sagst.
Quote
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.
Grüße Uwe
Title: Re: Erste Schritte mit Arduino & Steppermotoren
Post by: 100-200-00 on Sep 28, 2016, 11:37 am
So, ich habe mich mittlerweile mit den Bibliotheken weiter auseinandergesetzt und die für mich relevanten Begriffe herausgesucht.

Ich bin etwas überrascht, dass hier so eine rege Diskussion über (Stepper-) Motoren und ihre Eigenschaften entstanden ist :)

Für meine Zwecke reichen jedoch geringe Geschwindigkeiten, da es sich bei dem Projekt um keine CNC-Maschine handelt, sondern um einen Messaufbau, dh. es soll eine Punktewolke abgerastert werden. Pro Punkt werden mehrere Sekunden gemessen, daher spielt Zeit bzw. die Geschwindikeit der Motoren in diesem Fall eine untergeordnete Rolle.

Ich werde einen neuen Thread zu dem Projekt erstellen, da dies den Rahmen hier sprengen würde.