Projekt 3 Achs-Positionierung mit Schrittmotoren

Hallo zusammen,

für ein Projekt möchte ich eine Kamera in relativ kleinem Bauraum auf 3 Achsen bewegen können. Hierfür verwende ich für 2 Achsen Schrittmotoren mit Trapezgewindespindeln für die z-(Nema 11) und x-Achse (Nema 8 ). Die y-Achse wird mit einem kompakten Linear-Aktuator betrieben, der aus 2 (2-phasig-bipolar betrieben) Schrittmotoren und einem Synchronmotor besteht. Da ich mit Arduino und der Ansteuerung von Motoren noch keine Erfahrung gemacht habe, benötige ich etwas Hilfe:)

Im Moment geht es erstmal um die Auswahl der richtigen Komponenten. Reicht mir neben dem Arduino Uno R3 ein bzw. zwei Motor Shields (U=4,5 V bis 13,5 V) für die Ansteuerung?
Wäre es besser die H-Brücke für die Schrittmotoren auf einem Breadboard darzustellen, weil für den Motor der y-Achse noch ein Kondensator benötigt wird?

Anbei noch die Daten zu den Motoren.
Ein Schaltbild für den Motor der y-Achse Achse befindet sich auch im Anhang.

Vielen Dank schon mal!

Crouzet.pdf (128 KB)

Die y-Achse wird mit einem kompakten Linear-Aktuator betrieben, der aus 2 (2-phasig-bipolar betrieben) Schrittmotoren und einem Synchronmotor besteht.

Ich denke, das ist ein Synchronmotor, dessen Spulen man seriell oder parallel verschalten/betreiben kann. Aber sicher keine Kombination von 3 Motoren.

Du weißt, dass der ausgesuchte Motor 220V Wechselspannung benötigt? Im Schaltbild sind auch 24V (AC) angegeben, ich habe aber keine Erfahrung damit, ob nur die andere Dimensionierung des Kondensators reicht, um auf diese Spannung zu reduzieren und ob sich Geschwindigkeit und Antriebskraft dabei verändern. Zudem ist es aber immer noch eine Wechselspannung und würde deine Stromversorgung verkomplizieren.

Danke für die Antwort!

Da hast du natürlich recht:) Ich habe jetzt einen alternativen Schrittmotor mit linearer Betätigung gefunden, der mit 5,6 V (DC) betrieben werden kann.

Welche Hardware würde ich in dem Fall benötigen, um alle 3 Schrittmotoren und evtl noch einen DC-Motor anzusteuern?

Bevor ich dir dazu eine belastbare Antwort geben kann, lass mich erst einmal kurz zusammenfassen, was ich bislang verstanden habe - wenn etwas nicht bei mir angekommen ist, bitte korrigieren.

  1. Du möchtest eine Kamera in 3 Achsen (XYZ) bewegen können
  2. Du hast bereits 2 Schrittmotoren mit Trapezspindeln (Z: Nema11, X: Nema8)
  3. Für Y willst du einen Linearantrieb verwenden

Was ich (noch) nicht verstanden habe, bzw. was mir an Info fehlt:
4. Wie schwer ist die Kamera?
5. Welche Verfahrwege sind zurückzulegen (für XYZ)?
6. Welche Geschwindigkeit(en) sollen erreicht werden (mm/sec)?
7. Wieso hast du für X und Z unterscheidliche (ziemlich kleine) Stepper ausgewählt?
8. Welche Steigung (bzw. Dimensionen) haben die Trapezspindeln?
9. Warum ist die Y-Achse anscheinend so besonders?
10. Gibt es noch weitere Projektbedingungen (Abmessungen der Gesamtkonfiguration / Einbau in ein Gehäuse, mobiler Betrieb über eine Batterie etc.)?

Die Auswahl hängt hauptsächlich mit dem zur Verfügung stehenden Bauraum, der relativ klein ist, zusammen.

zu 1.: Ganz genau:)
2. Ich habe Sie noch nicht bestellt, sie würden aber von der Größe und Leistung gut in meine Konstruktion passen.
3. Ein kleiner Lineraktuator wäre hier von Vorteil. 10 mm Hub wären hierbei schon ausreichend, der Linearaktuator würde eine Halterung inkl. Kamera horizontal verschieben.

  1. Die Kamera wiegt ungefähr 100g.
  2. Für die z-Achse benötige ich etwa 25 mm für die x-Achse mindestend 10 mm und für die y-Achse wie gesagt maximal 10-15 mm.
  3. Die Geschwindigkeit ist irrelevant, daher müssen die Schrittmotoren auch nicht wie normal und vom Hersteller gewünscht mit 6-8 facher Spannung betrieben werden. Die Positioniergenauigkeit ist entscheidend.
    7.Dies hängt wiederum vom Bauraum und von der erforderlichen Leistung der Motoren zusammen. Die z-Achse trägt im Prinzip die ganze Last und muss daher etwas größer ausgelegt werden. Für die x-Achse wäre ein kleinerer Stepper aufgrund des Bauraums sinnvoll.
  4. Bei beiden Motoren laut Datenblatt etwa 0,0032 mm/1,8° Spindelsteigung pro Schritt, bei einer Länge von etwa 100 mm.
  5. Geringer Bauraum. Lineare Bewegung wäre wie gesagt von Vorteil.
  6. Die Konstruktion wird in einen Druckgasautoklaven (Wasserstoffdruck) eingespannt. Die Kamera soll dabei Risse in Versuchsproben detektieren können. Der Autoklav ist zylindrisch mit einem Durchmesser von 180 mm.
    Die Kabel der Motoren müssen zudem über Lemosa FFA.0S.304.CLAL22 Stecker aus dem Autoklav herausgeführt werden und außerhalb wieder einzeln mit einem Steuerboard verbunden und angesteuert werden.

Ich habe noch eine kleine Darstellung meiner Konstruktion angehängt.

Vielen Dank schon mal für die Hilfe!

M0ZZ: Welche Hardware würde ich in dem Fall benötigen, um alle 3 Schrittmotoren und evtl noch einen DC-Motor anzusteuern?

Mein Vorschlag: Schrittmotoren 5VDC mit DRV8825 oder SilentStepStick steuern. Ein Shield ist nicht notwendig. Für den Single Brushed DC Motor Driver mußt Du Dir den hinsichtlich Strom passenden aussuchen, habe keine Angabe dazu gefunden. Als Spannungsversorgung die mehrfache Motornennspannung so zwischen 12 und 24 V mit genügend Stromreserve (1,4 * Nennstrom). Für den Arduino einen StepDown-Wandler auf 5V.

Alle Links sind nur Illustrationen und viele Wege führen nach Rom.

Mein Vorschlag: Alles mit Schrittmotoren machen und das CNC Shield verwenden.

Ist eine kompakte Lösung und die Treiber können problemlos getauscht werden, falls mal einer abraucht.

Ist für den A4988 und Kompatible ausgelegt. Ausreichende Kühlung sicherstellen.

Wenn Du den Strangstrom im Bereich von 1-1,5 A hälst, halten die lange. Für Deine Anwendung sollte dieser Strom völlig ausreichen. Motoren aussuchen, denen das reicht.

Nebeneffekt: Du könntest Grbl verwenden und müsstest Dir keine Gedanken über die Ansteuerung der Motoren machen. Einfach ein paar Zeilen G-Code schreiben, welche Deine X/Y/Z(/A) Bewegungen beschreiben, diese zum Arduino streamen, fertig.

Gruß, Helmuth

Ich kann mich @Helmuth nur völlig anschließen. Das wäre auch meine präferierte Lösung.

GRBL ist eigentlich optimal und es gibt verschiedene Software-Controller, die dann den Arduino mit der GRBL firmware ansteuern. Muss allerdings immer ein PC/Laptop angeschlossen sein, der den GCode sendet. Bei Bedarf kann ich dir ein paar selbst getestete Software-Controller nennen.

Man kann den GCode komplett automatisch ablaufen lassen oder manuelle Schrittbefehle eingeben incl. Homing etc.

Nachteil der GRBL Lösung ist, dass du beim Stillstand der Motoren den Strom nicht abstellen und den Treiber in den sleep-Modus versetzen kannst. Das würde die Hitze-Entwicklung der Treiber bremsen, wobei eine Z-Achse immer unter Strom gehalten werden muss, damit die Last die Spindel nicht selbständig zurückdreht. Es kann aber sein, dass deine Anforderungen auch so sein werden (bei dem geringen Gewicht der Kamera), dass du mit 0,5 A je Spule/Motor auskommst und da werden die Treiber noch nicht wirklich heiß, ab 0,8A aufwärts ist es aber schon ratsam, zu kühlen.

Einen Änderungsvorschlag habe ich allerdings noch. Besser als die A4988 sind die DRV8825 als Motortreiber. Grundsätzlich sind die beiden Typen pinkompatibel - bei einer Sache bin ich mir allerdings nicht ganz sicher. Müsste heute abend mal nachschauen.

Vielleicht findest du ja einen Hinweis, ob es ein shield gibt, welches garantiert, auch die DRV8825 zu unterstützen.

Was ist denn der Vorteil von DRV8825 im Vergleich zu A4988? Benötige ich dann neben dem Arduino Uno R3, dem CNC Shield und 4 Motortreiber für die 4 Schrittmotoren noch andere Komponenten?

Gerne kannst du mir noch deine getesteten Software-Controller nennen.

Grüße Marc

Was ist denn der Vorteil von DRV8825 im Vergleich zu A4988?

  1. DRV8825 kann mehr Strom liefern (2,5A vs 2,0A); man sollte das aber nicht ausreizen - beide Treiber werden bereits ab ca. 0,8A sehr warm/heiß und brauchen spätestens ab 1,0A aktive Kühlung! Insgesamt bleiben (bei gleicher Stromstärke) die DRV8825 kühler, was für eine längere Lebensdauer spricht
  2. A4988 kann bis zu 16 Microsteps, DRV8825 bis zu 32 Microsteps; insgesamt laufen imho die DRV8825 (bei gleich eingestellten Microsteps) etwas ruhiger (bzw. die angeschlossenen Motoren)

Benötige ich dann neben dem Arduino Uno R3, dem CNC Shield und 4 Motortreiber für die 4 Schrittmotoren noch andere Komponenten?

Ich würde (siehe auch Pololu Schaltbild) noch je Motor-Treiber einen Elko (100 … 220uF) sehr nahe am Motor-Spannungsanschluss anschließen (zur Glättung von Spannungsspitzen, bzw., um “Versorgungs-Dellen” abzufedern)
Wenn du vorhast, die Motoren mal eben schnell per Hand zu drehen (bzw. bei CNC-Anwendung ein Handrad zum manuellen Bewegen der Achsen), dann benötigst du noch je Motortreiber 8 Schottky-Dioden bzw. ein Schottky-Dioden-Array, damit die erzeugte Spannung keinen Rückwärtsstrom in die Treiber drückt (dann arbeiten die Motoren nämlich wie Generatoren/Dynamos).

Gerne kannst du mir noch deine getesteten Software-Controller nennen.

Getestet habe ich bislang 3 Controller (wobei aus Zeitgründen eher oberflächlich):
http://chilipeppr.com/grbl
Universal GCode Sender
GRBL Controller

Alle haben bei mir funktioniert; entscheiden habe ich aber noch nicht, welchen ich für meine kleine Laser-CNC, die zur Zeit noch nicht ganz fertig zusammengeschraubt ist, einsetzen werde. Dazu komme ich wahrscheinlich erst im nächsten Jahr, dann kann ich mehr sagen.

Darüber hinaus gibt es noch:
BCNC
und wahrscheinlich noch ein paar mehr. Ich vermute aber, dass die hier genannten Controller die meistgenutzten sein dürften.

Hallo zusammen,

langsam nimmt mein Projekt Formen an. Ein paar kleine Fragen hätte ich noch. Mit GRBL kann man aktuell ja nur 3 Achsen ansteuern. Bei mir ist die 4 Achse mit einem kleinen Schrittmotor zur Einstellung der Scharfstellung der Kamera belegt.

Könnt ihr mir andere Software-Controller empfehlen, welche für 4 Achsen geeignet sind, bzw. hat jmd schon Erfahrungen mit den Controllern TinyG und/oder Smoothie gesammelt.

Zudem benötige ich ja 2 Jumper für die Pins Digital Pin 12 und Digital Pin 13 um eine unabhängige 4. Achse zu erhalten?!

(Abgesehen von den Jumper für die Microsteps, die noch fraglich sind bei meiner Ausführung)

Grüße, Marc

... oder macht es Sinn die 3 Hauptachsen mit grbl zu steuern und die Scharfstellung (die vermutlich nur einmal zu Beginn von jedem Versuch justiert werden muss) direkt über die Arduino IDE zu steuern?

M0ZZ: ... direkt über die Arduino IDE zu steuern?

USB vom Arduino hängt doch am grbl-Programm, da ist dann keine IDE mehr vorhanden, oder sehe ich das falsch?

Wie wird denn die richtige Schärfeeinstellung ermittelt? Wenn Du sagen kannst, bei Position x y z benötigt die Kamera Schärfe s, dann wäre eine Einstellung per Programm sinnvoll. Wenn Du eine manuelle Einstellung vor der Messung machen möchtest, kannst Du über zwei Taster scharfstellen.

Eine manuelle Einstellung davor würde ausreichen. Ich habe heute meine Motoren mit grbl getestet. Funktioniert sehr gut. Es gibt aber beim Universal G Code Sender nur Taster für die x, y und z-Achse oder? Bei welchen Sofware-Controller gibt es auch Taster für die A-Achse, bzw wie lässt sich dies umsetzten?

GRBL kann aktuell, wie du schon festgestellt hast, nur 3 Achsen bedienen. Google mal nach "4 Achsen GRBL", angeblich sind da schon einige Versuche, GRBL zu erweitern (als fork von der Basisentwicklung), gemacht worden.

Alternativ gibt es TinyG und TinyG2, welche ebenfalls als Basis GRBL haben/hatten, allerdings brauchst du dazu andere Hardware. TinyG mit der entsprechenden Platine, auf der der Controllerchip und 4 Treiber für 4 Achsen verbaut sind, kostet aber deutlich über 100 Euro und TinyG2 braucht ein gShield und einen Due (Kosten: ca. 80-90 Euro). Als Software kann man dann z.B. Chilipeppr verwenden.

Ich experimentiere aktuell mit der Due/gShield/Chilipeppr Kombi, bin aber noch nicht zufrieden, da die Dokus, um alle Komponenten aufeinander abzustimmen, leider ziemlich wirr verstreut sind und sich zu ALLEN meinen Newbiefragen kein konzentriertes Wiki oder Tutorial finden lässt.

Evtl. Braucht man aber das gShield nicht und kann einfach 4 DRV8825 einsetzen. Das scheint einfacher und preiswerter als mit dem shield, dessen Pin-Belegung ich noch überprüfen muss, da momentan die y- und z-Achse nur zusammen angesteuert werden bzw. sich bei z nichts tut, und bei y-Bewegung z gleich mitgedreht wird ...

ok also mit meiner Hardware lässt sich das auf jeden Fall nicht mit TinyG umsetzen?! Das wären dann ohnehin zu hohe Kosten für mich insgesamt.

Wäre es dann möglich die A-Achse, also die Scharfstellung, per Arduino IDE zu steuern bzw. programmieren, und im Anschluss bspw. mit dem Universal G Code Sender die 3 Achsen zu bewegen?

Wäre es dann möglich die A-Achse, also die Scharfstellung, per Arduino IDE zu steuern bzw. programmieren, und im Anschluss bspw. mit dem Universal G Code Sender die 3 Achsen zu bewegen?

Nicht, wenn du nur mit einem Arduino arbeiten willst.
Hintergrund:
Für die Steuerung der 3 Achsen arbeitet du nicht mit dem normalen bootloader und der IDE, sondern da ist dann ein eigenes Betriebssystem drauf (GRBL), was mit der normalen IDE und der Möglichkeit, darauf sketche laufen zu lassen, nichts mehr am Hut hat, sondern auf G-Code Befehle wartet.

Du hast (wenn TinyG / G2 keine Alternative ist), imho 2 Optionen:

  1. setze dich mal mit “Alfred” in Verbindung; er hat angeblich ein 4-Achsen grbl laufen; Software lässt sich hier downloaden; allerdings habe ich keine weiteren Infos dazu gefunden
    1. Achse per Arduino (z.B. Nano oder Mini) ansteuern mit normalem Sketch zum Scharfstellen; die anderen 3 Achsen mit 2. Arduino, wo grbl drauf ist; weiß aber nicht, ob die beiden Arduinos sich noch untereinander “absprechen” müssen; dann wird es problematisch und Option1, wenn es denn wirklich funktioniert, wäre die beste Lösung.

Lass mal hören, wenn du Kontakt zu “Alfred” hattest und ob die 4-Achsen GRBL-Lösung tatsächlich funktionieren sollte.

Hier die Antwort von Alfred:

Hallo Marc! Ich verwende einen Arduino Mega2560 (weil ich ihn hatte) für die Ansteuerung eines Styroporschneiders. Die verwendeten Achsen sind X, Y, U und V. Das ist auch zu ändern. Das CNC Shield V3.51 kann 4 Achsen. Der Uno R3 müßte sich dafür auch eignen, Du mußt nur die Ausgänge in pia_map.h und nach Bedarf die Werte in pia_defaults.h anpassen. Eventuell noch das Homing ändern. Wenn es Probleme mit der Größe des Rams gibt, kannst Du die ...BUFFER_SIZE verkleinern. Änderungen in der Software sind mit //pia gekennzeichnet. Grundsätzlich kann man bis zu 8 Achsen ansteuern, das wird die Prozessoren aber überfordern.

Mit freundlichen Grüßen aus Wien

Funktioniert also anscheinend. Ich versuche mich gerade an den Änderungen der Ausgänge.

Das hört sich ja gut an; bin mal gespannt, ob du es damit gebacken kriegst. Ist auch für mich eine interessante Information, die ich ggf. in einem zukünftigen Projekt verwenden kann.