Arduino über SPI / I²C Schrittmotoren ansteuern

Hallo zusammen,

ich habe lange im Internet und auch hier im Forum nach einer Lösung für mein Vorhaben gesucht doch leider ohne Erfolg.

Ich möchte mehrere Schrittmotoren mit einem Arduino (Mega, Due, Nano, Uno...) per Dir / Setp Ansteuern.

Man kann sich das so vorstellen z.B. 4 Schrittmotoren:

  • Einen Arduino mit 4 Schrittmitorentstufen verdrahten.
  • Die Befehle wie z.B. Position, Geschwindigkeit, Beschleunigung und Verzögerung über SPI oder I²C
    von einer anderen Plattform (Raspberry Pi oder ein anderen Arduino) an den Arduino senden,
    um die Schrittmotoren zu verfahren.
  • Ist sowas überhaupt möglich?

Also zusammen gefasst: Ich möchte Schrittmotoren an einem Arduino über SPI oder I²C ansteuern.

Hat denn jemand Erfahrung mit sowas?
Kann man überhaupt diese Befehle über SPI oder I²C zum ansteuern von Schrittmotorn senden?

Hintergrund ist: Ich nutze den Raspberry Pi als SPS. Diese kann SPI und I²C. Somit möchte ich den Arduino als Schnittstelle zwischen SPS und Schrittmotorentstufen einsetzten.

Vielen Dank im Voraus

LG
Digit-22

Wo ist dein Problem?

PS:
Ein Arduino ist nur bedingt als SPI Slave geeignet.

Also eher I2C oder RS485 oder CAN oder LIN

Meine Fragen stehen oben. ;-).

LG

Digit-22

Der Rasberry kann noch mehr!
z.B. USB, und damit auch viele andere Kommunikations Verfahren.

Wo ist dein Problem?

Wo?

Habe kein Problem :wink: .

Möchte nur wissen ob jemand sowas schon gemacht hat und ob das in dieser Form überhaupt möglich ist.
Stehe noch am Anfang meines Vorhabens und versuche Infos zusammen zu tragen bevor ich dann loslege.

Und da ich im Netzt nicht viel gefunden habe, dachte ich mir ich frag mal die experten hier im Forum.

LG
Digit-22

Nahezu alle 3D-Drucker tun das so, oder so ähnlich.

Nahezu jeder Arduino Bastler überträgt Daten vom PC zum Arduino.
Hat das also schon gemacht.

Reicht dir die Antwort?

Digit-22:

  • Ist sowas überhaupt möglich?

Arduino als Steuerung für 3D-Drucker geht, also ja. Die vierte Achse könnte kribbelig werden.

Digit-22:
Hat denn jemand Erfahrung mit sowas?

Ich nicht, da kein RasPi vorhanden. I2C und CAN zwischen Arduinos ja, aber ohne Motorsteuerung.

Als Bibliothek AccelStepper oder MobaTools.

Digit-22:
Also zusammen gefasst: Ich möchte Schrittmotoren an einem Arduino über SPI oder I²C ansteuern.

Hat denn jemand Erfahrung mit sowas?
Kann man überhaupt diese Befehle über SPI oder I²C zum ansteuern von Schrittmotorn senden?

Was spricht gegen eine serielle Schnittstelle ? Für eine Punkt zu Punkt Verbindung ist die ziemlich problemlos. Das habe ich zumindest für meine MobaTools schon gemacht ( zum Testen ). Im Prinzip kannst Du sämtliche Methoden über die Schnittstelle steuern. Ein für deine Zwecke geeignetes Protokoll musst Du dir sowieso noch ausdenken.
4 Stepper sollten normalerweise auch noch kein allzu großes Problem sein. Welche Stepraten willst Du denn erreichen?

P.S. auf dem Due laufen die MobaTools noch nicht. Auf den AVR-basierten ( Mega, Uno Leonardo ... ) schon.

Hallo zusammen,

vielen Dank für die Antworten. Ich habe auch schon an einer Seriellen Verbindung gedacht. Z.B. USB. Da könnte man gegebenenfalls Marlin oder GRBL einsetzten. Leider beides was die Achsen Anzahl angeht sehr begrenzt. Deswegen hatte ich an einer Schnittstelle gedacht, wo ich das Protokoll selbst festlegen kann...

Die 4 Schrittmotoren die ich oben genannt habe ist ja nur ein Beispiel. Wenn ich z.B. eine kleine Automatisierungsaufgabe habe, habe ich in der Regel mehr als 4 Achsen. Und da wäre es cool wenn es keine starke Einschränkungen was die Anzahl der Achsen angeht hätte.

@MicroBahner MobaTools sieht sehr interessant aus. Ich schau mich da mal um und teste mal die Beispiele.

LG
Digit-22

vielen Dank für die Antworten. Ich habe auch schon an einer Seriellen Verbindung gedacht. Z.B. USB. Da könnte man gegebenenfalls Marlin oder GRBL einsetzten. Leider beides was die Achsen Anzahl angeht sehr begrenzt. Deswegen hatte ich an einer Schnittstelle gedacht, wo ich das Protokoll selbst festlegen kann...

Hmmmm...

Das hört sich ja so an, als würde über die Serielle/USB nur Marlin oder/oder GRBL gehen....

Wie kommst du auf die lustige Idee, dass man der Seriellen kein eigenes Protokoll aufdrücken kann?

Ich sehe da kein Problem!

Den Arduino an den Raspberry dran, über einen USB Hub, und fertig ist die serielle Verbindung.

Selbst ein brauchbares Protokoll ist einfach, bzw. gibts halb vorgekaut.
z.B. der CmdMessenger

Der Raspberry hat auch einen stinknormalen UART ( /dev/tty ). Den kann man direkt mit dem Arduino verbinden. Am besten einen mit einer freien HW-seriellen ( Mega/Leonardo/Micro/Due ).

Oder über USB und dann auch gleich den Programmupload über den Raspi :wink:

Wieviele Achsen willst Du gleichzeitig bzw synchron steuern?

Hallo zusammen,

vielen Dank für die zahlreichen Antworten.

@combie: Das hab ich doch nie behauptet. Marlin und GRBL waren ja nur ein Beispiel. Mann muss ja nicht das Rad neu erfinden wenn es doch schon vorhanden ist...

@MicroBahner: Ja UART wäe auch eine Möglichkeit. Daran hab ich garnicht gedacht.

@uwefed: Hängt von der Aufgabe ab. Aber nehmen wir mal an ich hätte die Aufgabe eine kleine Automatisierungsstraße aufzubauen, dann könnten es schon mal 10 Achsen werden. Die müssten zwar nicht alle Synchron arbeiten aber ein paar davon sicher. Z.B. wenn es noch eine Pic&Place Aufgabe gibt...

LG
Digit-22

Aber nehmen wir mal an ich hätte die Aufgabe eine kleine Automatisierungsstraße aufzubauen,

Ach Industrie?

Das hört sich nach "viele Meter" an.
Und nach elektrisch dreckiger Umgebung.

Damit ist dann SPI, I2C, nacktes UART, aus dem Rennen.
RS485, CAN und LIN, bleiben im Spiel.

Also könnte wohl der Industriestandard Modbus das Mittel der Wahl sein.
Viele Aktoren haben die Modbus Schnittstelle eingebaut.

Selber einen Modbus fähigen Aktor zu bauen ist keine Raketentechnik

Ja nicht unbedingt Industrie. Eine "kleine" Automatisierungsstraße kann überall eingesetzt werden. Z.B. um eigene Projekte zu realisieren, wenn man ein Produkt entwickelt und ein Prototypen bauen möchte, für Lehrzwecke an Technischen Schulen... Also sehr viele Anwendungen.

Das ganze soll möglichst günstig sein und so wenig wie möglich Industriekomponenten beinhalten. CAN Bus, Modbus und weitere Feldbusse wäre schon cool aber so einfach nun auch nicht zu realisieren. Dafür benötigt man wiederum Industriekomponenten wie Servoregler, Servomotoren... Ziel ist defiitiv Schrittmotoren einzusetzten.

Vielleicht habe ich einfach zu wenig Informationen in meine Fragenstellung reingepackt.

Hier mal eine kleine Erweiterung:

Also einen Rapberry Pi kann man als SPS nutzen in dem man eine CODESYS SoftSPS (Runtime Lizenz) auf den Pi installiert. Damit ist man dann in der Lage, den Pi als vollwertige SPS mit diversen I/Os zu nutzen.

Der Pi bekommt die kompette Steuerungsaufgabe. Alle Abläufe, Funktionen, Überwachungen finden im Pi statt.

Da man aber an den I/Os vom Pi nicht direkt eine Schrittmotorsteuerung z.B. TB6600 oder pololu a4988 anschließen kann, kommt nun der Arduino ins Spiel. Dieser soll dann einfach als Schnittstelle zwischen SPS und Schrittmotorsteuerung dienen.

Der Abstand zwischen SPS und Arduino wird weniger als 20mm. Daher auch der Gedanke SPI oder I²C.

Hoffe die Infos reichen aus.

LG
Digit-22

Hoffe die Infos reichen aus.

Hmmm ....

Versuche erst mal 10 Schrittmotore an einem Arduino zu betreiben.
Wenn das klappt, kannst du die Kommunikation immer noch aufbauen und testen ob sie dir nicht zu doll ins Timing spuckt.

10 Schrittmotore mit einem Arduino zu steuern ist schon eine Hausnummer.
Um welche Stepraten geht es denn? Davon hängt ab, ob Du da überhaupt eine Chance hast.

Digit-22:
CAN Bus ... wäre schon cool aber so einfach nun auch nicht zu realisieren.

Im Thema UNO - Mega - Teensy mittels CAN-Bus verbinden habe ich probiert, die Hardware kostet nur ein paar Euro. Bei 20 mm aber wiederum auch nicht nötig.

Wenn das klappt, kannst du die Kommunikation immer noch aufbauen und testen ob sie dir nicht zu doll ins Timing spuckt.

Das ist ein sehr guter Einwand. Das müsste ich mal genauer betrachten.

10 Schrittmotore mit einem Arduino zu steuern ist schon eine Hausnummer.

Das ist absplut korrekt. Es muss aber nicht zwangsläufig alles nur von einem Arduino übernommen werden. Man könnte z.b. mehrere Arduinos einsetzen die sich die Aufgaben teilen...

Es Gibt Projekte wo 6 Schrittmotoren (6 Achs Robot-Arm) an einem Mega betrieben werden. Zusätzlich noch ein paar RC Servos, Relais und diverse Endschalter...

Um welche Stepraten geht es denn? Davon hängt ab, ob Du da überhaupt eine Chance hast.

Müsste ich mir nochmal durch den Kopf gehen lassen. Aber ein sehr wichtiger Punkt.

LG
Digit-22

agmue:
Im Thema UNO - Mega - Teensy mittels CAN-Bus verbinden habe ich probiert, die Hardware kostet nur ein paar Euro. Bei 20 mm aber wiederum auch nicht nötig.

Passenderweise gibt es für den Teensy auch eine Library für bis zu 10 Schrittmotoren ...