Raspberry Pi Schrittmotorsteuerung für mehrere Motoren

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Hallo,
    Ich würde gerne mehrere (voraussichtlich 5, aber es reichen auch 3) Schrittmotoren über einen Raspberry Pi ansteuern. Ich habe natürlich schon im Internet gesucht und habe gesehen, dass es ein paar Erweiterungsplatinen gibt. Bei dem Arduino-Board braucht man aber zum Beispiel auch noch einen Schrittmotortreiber – das Arduino-Board ist jedoch ungeeignet, da es bei höheren Umdrehungszahlen bzw. bei mehreren Motoren langsam laufen soll.

    Welche Hardware brauch ich also um dies zu realisieren?


    ...ich kenn mich leider nicht viel mit Elektrotechnik aus also :danke_ATDE:

  • Raspberry Pi Schrittmotorsteuerung für mehrere Motoren? Schau mal ob du hier fündig wirst!

  • Hallo,

    du solltest Treiberstufen verwenden.

    Es kommt drauf an wie viel Strom deine Schrittmotoren benötigen.

    Du braucsht pro Motor 3 GPIOs... Enable / DIR / STEP

    kleine Treiberstufe A4988

    EDIT: Bei der Treiberstufe reichen 2 GPIOs.

    Einmal editiert, zuletzt von Semetex (17. Mai 2015 um 20:24)

  • Hallo,

    Hallo Questioner, du sprichst von hohen Geschwindigkeiten. Ein Raspi ist hier nicht sonderlich gut geeignet, weil er um einges zeitkritischer ist, als ein Arduino. Ausserdem ist die Rampensteuerenung (Beschleunigung und Bremsung) der Schrittmotoren nicht ganz trivial und die wird bei hohen Geschwindigkeiten unbedingt notwendig. Daher wuerde ich auf jeden Fall Schrittmotorsteuerungen verwenden, die die Stromkonditionierung uebernehmen. Die Dinger sind je nach Belastbarkeit fuer wenig Geld zu haben und benoetigen je nach Ausfuehrung nur Taktsignal und Drehrichtungsangabe. Die Verwendung von Arduinos (micro pro, Nano oder aehnliches) fuer das Timing scheint mir absolut angebracht. Den Raspi kann man dann eher als Supervisor fuer die verwendeten Arduinos einsetzen.
    Fuer Arduinos gibts fertige Libraries, mit denen man die Signalerzeugung bewerkstelligen kann. Man muss ich dann nur noch um die korrekten Parameter kuemmern, wie beispielsweise Anzahl der Schritte, Beschleunigung, Maximalstrom und Maximalfrequenz um nur die wichtigsten zu nennen.
    Will man die Motoren beschleunigungs- und geschwindigkeitsmaessig an die Grenzen bringen, ist darueber hinaus eine dynamisch Stromanpassung entsprechend der Taktfrequenz unerlaesslich. Hier die Parameter abhaengig von Belastung und Geschwindigkeit richtig einzustellen ist fast eine Wissenschaft fuer sich.

  • Hallo bechele,
    Danke für die Antwort. Ich kenne mich da nicht so aus (wie erwähnt). Hast du da Empfehlungen für Schrittmotortreiber, die ich an einen Arduino anschliessen kann?

  • Hallo,
    Ich möchte einen Roboterarm bauen, mit dem Ziel, dass er sich letztlich sehr schnell bewegen kann... als Anfänger ist mir klar, dass ich das vermutlich nicht so schnell erreichen werde.

  • Das ist jetzt noch ein bisschen dünn :)

    Wie lang in etwa sind die Teile des Arms?
    Was soll damit bewegt werden / wie schwer muss er heben?
    Wie gross sind die Verfahrwege?
    Hast Du schon Motoren ausgesucht?
    Wären da nicht evtl. Servos oder ein Mix aus Servos und Schrittmotoren sinnvoller?
    Kommt ein Greifer zum Einsatz?
    Sollte der Greifer nicht eher mit einem Servo angesteuert werden?
    Vielleicht hast Du noch die Möglichkeit eine grobe Skizze anzufertigen, damit man sich das Teil besser vorstellen kann.

    Also kurz gesagt: es geht darum, wie stark die Servos/Schrittmotoren sein müssen und wie lang die Wege sind (Schnellgang) um dann das enstprechend passende Treiber-Module/-Bausteine zu finden.

    cheers,
    -ds-

  • Hmm dann fangen wir mal ganz vornen an.
    1. Du solltest dir erstmal gedanken machen was soll der Arm können( Zahlen festhalten, Tragkraft, Beschleunigung, Länge, Gelenke, Wiederholgenauigkeit )
    2. Skizze anfertigen
    3. Werte Ausrechnen (Technische Mechanik, sollte Schwerpunktsatz & Momentensatz reichen. Du kannst es überprüfen mit Lagrangesche Gleichungen)

    Schrittmotoren sind für diese Projekt die Richtige Wahl
    Servos (Synchron-Mschinen mit Drehgeber <- übertrieben)
    Servos (DC-Motoren mit Positionsregelung evtl. wenn das Drehmoment reicht)

  • Hallo Semetex und dreamshader,
    Danke für euere Hilfe. Ich werde das mal ausprobieren und wieder schreiben, falls es schwierigkeiten gibt – oder wenn es erfolgreich war.

    Bis bald,
    Q---

  • Ich klinke mich mal ein.
    Gibt es Beispiele zur Programmierung einer Treiberstufe A4988. Hab hier eine aber bekomme sie nicht zum laufen weil ich nicht weiß wie sie programmiert wird.

  • Hm ... ich hab' da hier -> http://fritzing.org/projects/a4988-single-stepper-test was dazu gefunden.
    Ist für den Arduino ... aber scheint auch nicht sooo kompliziert zu sein.
    Vielleicht hilft's Dir weiter ... sonst einfach noch mal melden. Dann müssen wir uns das mal genauer ansehen ;) ...

    cheers,
    -ds-

  • Wenn du noch etwas warten kannst und eine "komfortable" Lösung haben möchtest,
    könnte folgendes kickstarter Projekt für dich interessant sein:

    Slush Engine


    Edit:
    Vorteilhaft ist dabei übrigens, dass die Taktung etc. von einem Controller übernommen wird und somit der pi über dieses Modul bis zu 4 Motoren steuern kann und die CPU dabei kaum belastet wird.

    Einmal editiert, zuletzt von Bong91 (1. Juni 2015 um 18:11)

  • Hallo,
    Also ich habe jetzt nochmal etwas recherchiert. Ist es möglich mit dem Raspberry Pi den A4988 anzusteuern und wenn ja, wie?
    Oder muss ich mir eine eigene Bibliothek schreiben, die die GPIOs entsprechend anspricht?

  • Ja hi ...


    ...
    Oder muss ich mir eine eigene Bibliothek schreiben, die die GPIOs entsprechend anspricht?


    ich fürchte, darauf wird es hinauslaufen. Mit einer passenden Lib (z.B. pigpio) sollte das allerdings kein Hexenwerk sein ...
    cu,
    -ds-

  • Hallo Questioner,
    man kann man den A4988 prinzipiell am raspi betreiben, weil dieser eigentlich nur das Taktsignal und ein Richtungssignal benötigt. Allerdings muss man sich um das gesamte Timing dann selbst kümmern, inklusive Rampensteuerung. Deswegen würde ich einen vorgeschalteten Arduino verwenden, hier gibt es die ganz brauchbare Library AccelStepper, die einem die Signalerzeugung weitgehend abnimmt. Man muss dann nur Anzahl der Schritte, Beschleunigung und Maximalgeschwindigkeit vorgeben. Die meisten Module, die den Chip verwenden, bieten aber leider keine programmierbaren Motorströme, man stellt dann den Strom mittels Trimmer fest ein. An die Grenzen des Schrittmotors kommt man so nicht.
    Das Untenstehende einfache Testprogramm arbeitet mit dem A4988. Einfach die Parameter mal verändern und so ein Gefühl dafür bekommen, wie weit man mit den Parametern gehen kann. Das Programme lässt den Motor abwechselnd vor und zurücklaufen.

    Gruß Rolf

    // Modified by bechele
    // Copyright (C) 2009 Mike McCauley

    #include <AccelStepper.h>

    // The X Stepper pins
    #define STEPPER1_DIR_PIN 3
    #define STEPPER1_STEP_PIN 2

    // Define some steppers and the pins they will use
    AccelStepper stepper1(AccelStepper::DRIVER, STEPPER1_STEP_PIN, STEPPER1_DIR_PIN);


    void setup()
    {
    }

    void loop()
    {
    if (stepper1.distanceToGo() == 0)
    {
    // Random change to speed, position and acceleration
    // Make sure we dont get 0 speed or accelerations
    delay(100);
    stepper1.moveTo(2000);
    stepper1.setMaxSpeed(200);
    stepper1.setAcceleration(400);
    }
    stepper1.run();
    if (stepper1.distanceToGo() == 0)
    {
    // Random change to speed, position and acceleration
    // Make sure we dont get 0 speed or accelerations
    delay(100);
    stepper1.moveTo(0);
    stepper1.setMaxSpeed(200);
    stepper1.setAcceleration(400);
    }
    stepper1.run();
    }

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!