Schrittmotorsteuerung mit dem Raspberry Pi

Ich möchte eine sehr günstige und einfache Methode vorstellen um mit dem Raspberry Pi eine Schrittmotorsteuerung zu realisieren.

Dazu habe ich ein fertiges Modul gefunden, welches einen Treiber und den Schrittmotor beeinhaltet. Es handelt sich um den Motor 28BYJ-48 mit einem ULN2003A als Treiber.28BYJ48

Das Modul gibt es z.B. auf Amazon.

Kleiner Geheimtipp: Wer etwas Zeit mitbringt, (ca. 4-6 Wochen) der nimmt die Dumpingpreise asiatischer Lieferanten auf eBay, die das Treiberboard samt Motor für weniger als 2,50 € versandkostenfrei verschicken. Für diesen Preis lohnt es sich kaum das Teil selber zu bauen. Zumal sogar noch LEDs verbaut sind, die den Zustand der einzelnen Spulen im Schrittmotor anzeigen.

Zur Hardware:

Das Board ist simpel und verfügt über eine Steckerwanne in die der Stecker des Motors passt. 4 weitere Pins (IN 1-4) dienen zur Ansteuerung der Spulen. Auf die letzten beiden freien Pins wird die Versorgungspannung des Motors gelegt (5-12V)

Anschlussplan:

IN1 -> Pin 12 (BCM18)
IN2 -> Pin 16 (BCM23)
IN2 -> Pin 18 (BCM24)
IN2 -> Pin 22 (BCM25)

Die Belegung ist natürlich frei wählbar. Im Python Programm müssen später nur entsprechend die Pins geändert werden.

Der Motor läuft an den 5V des Raspberry Pi. Daher klemmen wir den Pin “+” des Treiberboards an Pin 2 oder 4 des Raspberry Pi (5V).
Pin “-” wird an Pin 6 (GND) angeschlossen. Damit steht die Verkabelung auch schon. Ich habe den Motor mit einem externen Netzteil betrieben. Zu beachten ist hier, dass die Masse des Netzteils mit der Masse des Pi verbunden wird.

Die Software:

Bitte bedenkt, dass es sich hierbei um einen 5-poligen Schrittmotor und demnach um eine unipolare Ansteuerung handelt. 4, 6, 8-polige Motoren müssen bipolar angesteuert werden und benötigen einen anderen Treiber z.B. L298.

Programmiert habe ich die Ansteuerung in Python. Ich habe das Programm bewusst etwas länger geschrieben als nötig, bin aber der Meinung, dass dadurch die einzelnen Schritte verständlicher werden.
Zuerst nun das Programm, darunter einige Anmerkungen:

from time import sleep
import RPi.GPIO as GPIO

GPIO.setmode(GPIO.BCM)

# Verwendete Pins am Rapberry Pi
A=18
B=23
C=24
D=25
time = 0.005

# Pins aus Ausgänge definieren
GPIO.setup(A,GPIO.OUT)
GPIO.setup(B,GPIO.OUT)
GPIO.setup(C,GPIO.OUT)
GPIO.setup(D,GPIO.OUT)
GPIO.output(A, False)
GPIO.output(B, False)
GPIO.output(C, False)
GPIO.output(D, False)

# Schritte 1 - 8 festlegen
def Step1():
    GPIO.output(D, True)
    sleep (time)
    GPIO.output(D, False)

def Step2():
    GPIO.output(D, True)
    GPIO.output(C, True)
    sleep (time)
    GPIO.output(D, False)
    GPIO.output(C, False)

def Step3():
    GPIO.output(C, True)
    sleep (time)
    GPIO.output(C, False)

def Step4():
    GPIO.output(B, True)
    GPIO.output(C, True)
    sleep (time)
    GPIO.output(B, False)
    GPIO.output(C, False)

def Step5():
    GPIO.output(B, True)
    sleep (time)
    GPIO.output(B, False)

def Step6():
    GPIO.output(A, True)
    GPIO.output(B, True)
    sleep (time)
    GPIO.output(A, False)
    GPIO.output(B, False)

def Step7():
    GPIO.output(A, True)
    sleep (time)
    GPIO.output(A, False)

def Step8():
    GPIO.output(D, True)
    GPIO.output(A, True)
    sleep (time)
    GPIO.output(D, False)
    GPIO.output(A, False)

# Volle Umdrehung    
for i in range (512):    
    Step1()
    Step2()
    Step3()
    Step4()
    Step5()
    Step6()
    Step7()
    Step8()  
    print i

GPIO.cleanup()

Woher kommen nun die Inhalte der Schrittfunktionen? Hier hilft ein Blick ins Datenblatt.
Dort ist diese Tabelle zu finden. Hier wird ersichtlich, welche Spule in welchem Schritt angesteuert werden muss. Stepper_sequence

Zu lesen ist die Tabelle wie folgt:
Step 1:

IN4 -> High
Step 2:
IN4 -> High
IN3 -> High
usw…
Die Spulenausgänge auf dem Board sind von A-D gekennzeichnet. Diese Beschriftung habe ich im Programm übernommen. So kann man erkennen, dass in der Funktion “Step1 ()” der der Spulenanschluss “D” eingeschaltet wird. In “Step2 ()” sind es “D” und “C”. Das setzt sich gemäß der Tabelle für alle 8 Schritte fort.

Der eigentliche Hauptteil des Programmes, ist der Aufruf der einzelnen Funktionen. In meinem Fall 512 mal. Also eine komplette Umdrehung.

Wieso 512?
Auch das möchte ich kurz erläutern.

Dem Datenblatt kann man entnehmen, dass die Teilung des Motors 64 beträgt. Das heißt: 360° / 64 = 5,625°. Da der Motor aber ein Getriebe integriert hat, steht unter dem Punkt “Gear Reduction Ratio” die Übersetzung: 1/64.
Also haben wir im Endeffekt ein 64stel von 5,625° pro Schritt. Also 0,087890625°. Teilen wir nun 360° durch die Größe des Einzelschrittes, so erhalten wir die Anzahl der nötigen Schritte für eine volle Umdrehung: 360° / 0,087890625° = 4096.
4096 Schritte sind also notwendig damit sich die Achse des Motors einmal um sich selbst dreht. In meinem Programm durchlaufe ich immer alle 8 Schritte, brauche deshalb nur ein Achtel der 4096 Schritte. 4096 / 8 = 512.

P.S: Ruft man die Schritte in der umgekehrten Reihenfolge auf, so dreht der Motor rückwärts.

Bleibt am Ende nur noch eine zu beeinflussende Größe, die Geschwindigkeit. Diese habe ich durch die Pause zwischen Ein- und Ausschalten der Spulen bestimmt. Die Variable “time” kann beliebig verändert werden, wobei eine kleine Pause den Motor schneller drehen lässt. 0,001 Sek war bei mir die Grenze. Danach wurde es dem Treiber (ULN2003) etwas zu schnell und er Motor machte gar nichts mehr.

Viel Spaß beim Ausprobieren und Optimieren des Programms 😉
Stepper Breadboard

53 Gedanken zu “Schrittmotorsteuerung mit dem Raspberry Pi

  1. Pingback: Neues Tutorial: Schrittmotorsteuerung - elektronX

  2. Vielen Dank für die Anleitung! Hat bis auf zwei Fallstricke auf Anhieb geklappt:

    1. Bei mir hat sich python an den Umlauten gestört (obigen Code habe ich in dreh.py gespeichert):

    <code>

    SyntaxError: Non-ASCII character 'xc3' in file dreh.py on line 13, but no encoding declared; see http://www.python.org/peps/pep-0263.html for details

    </code>

    Das habe ich gelöst, indem ich folgende Zeile am Anfang der Datei eingefügt habe:

    <code>

    # -*- coding: utf-8 -*-

    </code>

    2. Danach gab es noch einen Fehler:

    <code>

    RuntimeError: No access to /dev/mem. Try running as root!

    </code>

    Hier ist die Lösung genau die vorgeschlagene (<code>sudo python dreh.py</code>).

  3. Hallo, super Hilfe dein Tutorial. Ich habe mir genau das gleiche Teil gekauft und gleich ausprobiert. Leider hat mein Schrittmotor überhaupt keine Power. Er dreht sich zwar wie gewollt aber sobald auch nur ein kleines Hinderniss im Weg ist, dreht der Motor durch. (Habe einen Kabelbinder an der Achse dran und wenn ich meinen Finger in den Weg stelle – reicht das schon).

    Hast Du eine Idee? Oder ist das normal?

    • Hey,
      ne das ist nicht wirklich normal 😉
      Also als ich das Ding ausprobiert habe, war er schon recht kräftig.
      Aber was heisst er dreht durch?

      Rattert es innen weiter? Oder blockiert er komplett?

      Also evtl Getriebe intern defekt? Oder nicht genug Strom zur Verfügung?
      Hast Du ein externes Netzteil benutzt?

      Gruß
      Christoph

  4. Pingback: Controlling a stepper motor 28BYI-48 with a Raspberry Pi | defendtheplanet.net

  5. Hi, danke für das Tutorial, das ist echt klasse!

    Hab das ganze mal auf C übersetzt.

    Für die GPIO Pins hab ich diese Liberary verwendet:

    http://www.airspayce.com/mikem/bcm2835/

    Hier das C-Programm, viel Spaß damit 😉

    /* Compilieren: gcc -Wall -o schrittmotor schrittmotor.c -l bcm2835 */

    #include

    #include

    #include

    #include

    #include

    #include

    #include

    int main(void) {

    uint8_t pinA = 18;

    uint8_t pinB = 23;

    uint8_t pinC = 24;

    uint8_t pinD = 25;

    uint32_t zeit = 1000;

    int i;

    /* Library initialisieren */

    if (!bcm2835_init()) return 1;

    /* Enable GPIO Output Pins (Export und Richtungswahl) */

    bcm2835_gpio_fsel(pinA, BCM2835_GPIO_FSEL_OUTP);

    bcm2835_gpio_fsel(pinB, BCM2835_GPIO_FSEL_OUTP);

    bcm2835_gpio_fsel(pinC, BCM2835_GPIO_FSEL_OUTP);

    bcm2835_gpio_fsel(pinD, BCM2835_GPIO_FSEL_OUTP);

    /* einzelne Schritte */

    int schritt1() {

    bcm2835_gpio_write(pinD, HIGH);

    usleep(zeit);

    bcm2835_gpio_write(pinD, LOW);

    return(0);

    }

    int schritt2() {

    bcm2835_gpio_write(pinD, HIGH);

    bcm2835_gpio_write(pinC, HIGH);

    usleep(zeit);

    bcm2835_gpio_write(pinD, LOW);

    bcm2835_gpio_write(pinC, LOW);

    return(0);

    }

    int schritt3() {

    bcm2835_gpio_write(pinC, HIGH);

    usleep(zeit);

    bcm2835_gpio_write(pinC, LOW);

    return(0);

    }

    int schritt4() {

    bcm2835_gpio_write(pinB, HIGH);

    bcm2835_gpio_write(pinC, HIGH);

    usleep(zeit);

    bcm2835_gpio_write(pinB, LOW);

    bcm2835_gpio_write(pinC, LOW);

    return(0);

    }

    int schritt5() {

    bcm2835_gpio_write(pinB, HIGH);

    usleep(zeit);

    bcm2835_gpio_write(pinB, LOW);

    return(0);

    }

    int schritt6() {

    bcm2835_gpio_write(pinA, HIGH);

    bcm2835_gpio_write(pinB, HIGH);

    usleep(zeit);

    bcm2835_gpio_write(pinA, LOW);

    bcm2835_gpio_write(pinB, LOW);

    return(0);

    }

    int schritt7() {

    bcm2835_gpio_write(pinA, HIGH);

    usleep(zeit);

    bcm2835_gpio_write(pinA, LOW);

    return(0);

    }

    int schritt8() {

    bcm2835_gpio_write(pinD, HIGH);

    bcm2835_gpio_write(pinA, HIGH);

    usleep(zeit);

    bcm2835_gpio_write(pinD, LOW);

    bcm2835_gpio_write(pinA, LOW);

    return(0);

    }

    /* Volle Umdrehung */

    for(i=1; i <= 512; i++) {

    printf("Satz: %d n", i);

    schritt1();

    schritt2();

    schritt3();

    schritt4();

    schritt5();

    schritt6();

    schritt7();

    schritt8();

    }

    return(0); /* main */

    }

        • Hi,

          Habe es als sudo ausgeführt. Hab sogar die Pins abgefragt. An den Stellen, an denen sie auf true stehen sollen, stehen sie es auch.

          habe die Pinreihe verwendet, die nach aussen zeigt.

          Kann es sein, dass der 5V-Pin keinen Strom liefert. Muss der vielleicht erst noch aktiviert werden oder steht liefert der immer 5V?

          • Doch, der ist schon immer an, aber vlt hast du einen dreher drin… der Pin in der Ecke sollte der 5V Pin sein…

  6. Ja, habe ich. Pin 2. Hole morgen mal eine Batterie für mein Multimeter oder wie das heisst und messe das.

    Also sind wie in der Anleitung alle benutzten Pins auf der Aussenseite. Richtig?

    • Hi,

      da bin ich wieder. 4,86V sind dran.

      Ich habe das Skript jetzt mal gekürzt und nur die Pins auf True gesetzt. Und siehe da: der Treiber bekommt Signale. Beim Original-Skript leucht keine einzige LED der Treiber-Platine.

      Versteht das jemand?

      • Läuft vielleicht die Schleife nicht? oder gibts vielleicht irgendwelche Versionsunterschiede? Bin in Python nicht so fit…

        Bau mal das Script schritt für schritt nach und füge ein paar ausgaben ein…

        • Das Skript zählt bis 512 durch. Habe Variable A mal mal mit print nach jedem Setzen auf True ausgeben lassen. Jedesmal eine 1.

          Es sind die richtigen Pins da ich diese erst am Kabel gemesssen habe.

          Und wenn er die Pins im Skript richtig schaltet, muss das ja eigentlich korrekt sein.

          Könnte die Treiberplatine kaputt sein, obwohl die LEDs leuchten? Oh, oder sogar der Motor?

          • achso die LEDs leuchten?! Ich dachte die bleiben auch aus? Dann könnte es noch sein, dass das die Schritte zu schnell ausgeführt werden. Hast du die Zeit von dem Tutorial genommen? Einfach mal die Zeit um Faktor 10 erhöhen, damit er langsamer läuft. Wenn das Skript zu schnell ist, dreht sich der Motor nicht, weil er nicht mehr mit kommt. Oder du belastest den Motor mechanisch zu stark. Der Winzling ist nicht der stärkste. Hast du ihn erst mal frei am Tisch liegend, ohne Last, getestet?

            Wenns das nicht ist, kanns eigentlich nur noch am Motor liegen. Darauf solltest du ja noch Garantie haben?

  7. Habe time = 0,05 auch ausprobiert. Nix. Die LED leuchtet nur, wenn ich den PIN auf True lasse. Motor ist ohne Belastung. Ist ein 2 Euro Ding aus China. Bestelle ich halt noch einen. Oder gleich einen Nema17.

  8. Hi,

    ein Gedanke, falls jemand vor hat, irgendwas mit 4 Rädern zu bauen! 😉

    Man ist dann mit dem GPIO schnell am Ende.

    Aber muss die Ansteuerlogik vom Raspberry kommen? Man simuliert ja ein Schieberegister und das kann eine HW übernehmen, wodurch man dann statt jeweils 4 bit pro Motor nur noch 2 braucht (einen für Puls und einen für die Richtung).

    Bei ebay vll. mal nach "L297" suchen.

  9. Hallo,

    hab da mal ne Frage: Mit der Anleitung und dem Programm hat alles super funktioniert =) danke schonmal dafür. Ich habe das Programm jetzt umgeschrieben, sodass ich den Motor mit 2 Tasten jeweils links und rechts rum drehen lassen kann. Ich zähle den Wert dann einmal hoch und in dem anderern Fall wieder runter. Mir ist nur aufgefallen, dass der Richtungswechsel ein wenig dauert wenn ich die eine Taste los lasse und die andere drücke. Der Zähler zählt aber trotzdem schon, weil auch die Ausgänge schon kommen. Wollte einen kleinen 2 Achsigen Roboter bauen und Softwareendschalter über diesen Zähler programmieren, aber das ist zu ungenau. Ich würde nur ungerne Endschalter anbauen.

    Hat jemand ne Idee wieso der Motor beim Richtungswechsel eine Zeit braucht bis er ihn ausführt?

    • Hallo, und zwar müssen Wir einen Roboter im Rahmen Unseres Studiums programmieren, haben jedoch kaum Erfahrung damit. Wie muss ich denn den Code umschreiben, dass ich wie Du mit ,,W” und ,,S” in die jeweilige Richtung drehen lasse? Wäre cool wenn Du und helfen kannst. Grüße

  10. Achso eine weitere Frage wäre: Wir sagen dem Treiberboard ja das selbe was es dann an den Motor weitergibt, was hat das Treiberboard dann für einen Sinn, ausser dass der Motor ziemlich langsam ist?

    • Hey,
      zuerst einmal zu dieser Frage:

      Das Treiberboard macht das, was der Name sagt: Treiben: 😉
      Der Raspberry Pi schafft mit seinen GPIO-Pins gar nicht die Leistung, die es braucht um den Motor zu bewegen. Ein Treiber wird dagegen mit der geringen 3,3V Spannung angesteuert und "treibt" daraufhin die größere, benötigte Leistung zum Motor. Zudem schaltet die Logik des integrierten ICs jede Phase gegen Masse. Auch das bekommst du mit dem RasPi alleine nicht hin.
      Als weiteren "intelligenten" Treiber (neben dem erwähnten L297) ist auch der A4988 zu nennen. In der Arduino-Szene ein beliebter Schrittmotortreiber, der eine Menge Pins und Pythoncode erspart.

      Warum dein Motor eine Weile braucht um Umzudrehen ist mir schleierhaft. Was ist für dich eine Weile? Mehrere Sekunden?

      Gruß
      Christoph

      • Mit einem anderen Treiberboard am selben Schrittmotor könnte ich die Geschwindigkeit erhöhen?

        Mit einer Weile meinte ich jetzt so 1-3 Sekunden. Wenn ich von einer Pause von 0.001 ausgehe kommen da ja schon ein paar Schritte zusammen die gezählt werden, aber im endeffekt nicht ausgeführt werden.

  11. Hallo!

    Hab eine etwas größere Steuerung 3 Achsen mit 3.5A.

    Im Prinzip funktioniert alles ganz gut.

    Einziges Problem welches ich habe:

    Der liebe Raspy gibt mit einer Schleife so wie oben beschrieben nicht immer eine saubere Impulsfolge aus. Es Kommen 80 Impulse komplett gleichmäßig und dann fehlt ein Impuls die restlichen 119 Impulse kommen wieder normal.

    Ich verliere Schritte nachweislich mit DSO gemessen. Das auch schon bei relativ kleiner Drehzahl. Für eine CNC Steuerung damit unbrauchbar. Problem wird schlimmer wenn ich zB. Im Grafikmode bin und nur die Maus bewege. Hat jemand Erfahrung ob mit Raspby eine ernsthafte Steurung aufgebaut werden kann. Vermutlich zu langsam um Echtzeitanforderungen zu erfüllen. Am Schrittmotor merkt man das natürlich deutlich am Geräusch. Ein richtiger Hacker. Lg Herbert

  12. Pingback: Raspberry RotaryCam | Cam-in-Box

  13. Hallo,

    erstmal DANKE für den Code und die Beschreibung dazu.

    Habe das ganze mit einer Version von Pollin (BestNr. 310543/4,95€) ausprobiert und es funktioniert ebenfalls.

  14. Danke für die super Anleitung,

    Jedoch bevor ich das nachbau wollte ich erst mal noch Fragen wie viele Umdrehungen der Motor maximal pro Minute schafft. Lieg ich richtig das für eine umdrehung 512 ms benötigt werden sodass ich dann auf 120 Umdrehungen pro Minute komme?

    Eine weitere Frage wäre wie stark der Motor ist da ich für einen plotter demnach die Steigung der spindel anpassen müsste.

    Gruß Nico

    • 1 Minute = 60 Sekunden
      60 / 120 = 500ms (pro Umdrehung)

      Die 120 erreichst du mit oben genanntem Schrittmotor nicht. Bei maximaler Geschwindigkeit (0.001s Pause) und nur leichter Last braucht meiner im Mittel 4,8 Sekunden pro Umdrehung. Machbar sind also etwa 12 volle Umdrehungen pro Minute. (Bezogen auf den Motor alleine)

      Mit einer Übersetzung kannst du das ganze nahezu beliebig verändern. Im einfachsten Fall großes Zahnrad an kleines Zahnrad, wie früher beim Lego spielen 😉 Hier aber unbedingt auf die veränderten Kräfte aufpassen.

      Wenn du den Motor mit mehr Spannung versorgst (laut Datenblatt bis zu 12V) kannst du noch etwas mehr Kraft erzeugen. Ob es reicht kann ich dir leider nicht sagen.

  15. Danke für die detailierte Anleitung.
    Leider ist kein Kauf über eBay möglich. Das Münchner Hauptzollamt hat die Rausgabe der 4 Motoren 28BYJ-48 mit ULN2003A verweigert.
    Begründung:
    – ROHS veraltet
    – keine deutschen Unterlagen
    – Herstellerangaben unbekannt

    Schade. Jetzt warte ich auf die Lieferung von Amazon. Bei Amazon kosten die Motoren aber 3 mal so viel.

    • Laut dieser PDF kannst du nochmal zum Hauptzollamt und dir fröhlich deine Schrittmotoren abholen:

      zvei.org/Publikationen/Position-CE-Bauelemente-2013.pdf

      Auch wichtig zu sagen: "Eigenbedarf! Das was ich mit dem Bauteil machen will, wird nicht in den Handel kommen"

  16. Hallo,
    vielen Dank für das tolle Script und alle Anmerkungen!

    Komisches Problem: bei mir sind die 512 Steps nicht eine volle Umdrehung und noch komischer: jeder Durchlauf erzeugt eine verschieden lange Umdrehung… echt komisch.

    Ich treibe mit dem Motor über einen Gummiantrieb einen Plattenteller…

    Any Ideas? Hab keinen Clou, was das sein könnte…

    Vielen Dank, falls wer eine Idee hat
    Siegfried

    • Moin,

      also bei mir läuft alles super. Hohe Geschwindigkeiten erreiche aber, wie die anderen ebenfalls, auch nicht. Auch die Kraft des Motors ist natürlich begrenzt, bei entsprechender Übersetzung ist das aber kein Problem.

      @Siegfried: Kann es sein, dass der Plattenteller eventuell zu träge oder zu schwer ist? Dann scheint der Motor mal den einen oder anderen Step nicht zu schaffen.

  17. MoinMoin,

    ich bin in Python nicht so gut. Mir liegt eher der Arduino.

    Was muss ich in dem Code ändern damit der Schrittmotor 360° und 360° zurück in dauer schleife läuft?

    Möchte eine Kamera damit drehen lassen.

    • eine Dauerschleife in Python ist:

      while True: (doppelpunkt nicht vergessen)
      alles was in der schleife getan werden soll, muss eingerückt
      werden. also hier einfach die obigen schritte 512mal vörwärts und
      512mal rückwärts eingeben
      die schleife endet wenn die Einrückung unterbrochen wird
      naja also so:

      # Volle Umdrehung hin und zurück Dauerschleife
      whileTrue:
      for i in range (512):
      Step1()
      Step2()
      Step3()
      Step4()
      Step5()
      Step6()
      Step7()
      Step8()
      for i in range (512):
      Step7()
      Step6()
      Step5()
      Step4()
      Step3()
      Step3()
      Step1()
      Step8()

      GPIO.cleanup()

  18. Hallo zusammen

    Weiss ein Schrittmotor immer auf welcher Position er sich befindet?
    Das soll heissen, kann ich den Schrittmotor so programmieren, dass ich ihm sage er muss bei einer bestimmten Zeit auf eine bestimmten Position geht und nach einem Stromunterbruch selbstständig auf die der Zeit entsprechenden Position geht?

    • Ohne Zumindest einen Referenzsensor wird es glaube nicht gehen. Beim Start lässt du den Motor so lange drehen bis er den Referenzsensor erreicht. Dieser kann beliebig platziert sein. von dort kann man dann berechnen wie weit der Motor zur Sollpostion drehen muss.

  19. Bin Neuling was das Arbeiten mit dem Raspberry Pi betrifft… Ich möchte als Schulprojekt mit den Motoren ein Kettenfahrzeug bauen. Ich weiss aber nicht ob die Motoren stark genug sind. Das Panzerähnliche Fahrzeug wird am Ende etwa 5 Kilo wiegen. Da ich schon erfolgreich mit Servomotoren und dem Raspberry Pi rumprobiert habe und da die Motordriver Dual-H-Bridge L298N benutzt. Wenn ich also mit diesen Motoren arbeiten würde (wenn sie genug Power haben), brauche ich dann den Motordriver oder läuft das auch ohne?

    Frage 1:Sind die Motoren stark genug um ein Kettenfahrzeug zu bewegen, ohne beim Anfahren Schritte zu verlieren?

    Frage 2: Benötigen /Kann man an die Motoren noch ein Motordriver dranhängen?

    Ich freue mich auf leicht verständliche Antworten! Danke

  20. Hi Leute! Ich habe mir jetzt genau die gleichen Motoren gekauft und das Skript übernommen…Leider funktioniert es bei mir nicht….Ich habe fast das gleiche Problem wie Simon…Wenn ich das Programm starte, zuckt es im Motor. Er dreht sich aber nicht. Auf dem Treiber blinkt nur die Rot/Pinke Lampe… Ich finde den Fehler nicht

    • Ich vermute das der Motor zu viel Strom (Ampere) zieht. Habe an dem Raspberry Pi (Modell A) nen Hub mit Wlan-Antenne und Tastatur dran. An dem anderen Usb-Input habe ich nen Bluetooth-Stick dran. Außerdem ist noch der HDMI Anschluss für den Bildschirm belegt. Ich benutze kein Externes Netzteil sondern die 5V die vom Raspberry Pi bereitgestellt werden. Wie habt ihr das gemacht?

      • Wäre möglich. Bluetooth und WLAN ziehen einiges an Strom. Probier es mit einem größeren Netzteil nochmal. Ausgangsstrom um die 2A sollte reichen.

        Ansonsten:
        * Stimmt die Verdrahtung?
        * Passt die Ansteuerung über die Software? die richtige Schrittfolge, keine zu kurzen Pausen, usw.
        * Es ist grundsätzlich auch möglich, dass der Motor oder Treiber defekt ist

        Meiner läuft direkt mit den 5V vom Raspberry

        • Hey erstmal danke für den Tipp!
          Ich hatte nach langem rumprobieren endlich den Fehler gefunden. Bei GPIO.setmode stand bei mir hinten (wie in der Anleitung) BCM. Als ich dann stattdessen BOARD eingegeben habe, funktionierte es

          PS: Habe mich jetzt von den Ketten wegbewegt und baue das Fahrzeug mit 2 Rädern und 2 Gleitfüßen

          Danke für die Tolle Anleitung

  21. Hallo!

    Ich habe ein Model B und somit ja die kleinere GPIO Pinleiste. Bei mir wirft er folgende Fehlermeldung:
    ValueError: The channel sent is invalid on a RaspberryPi.

    Habe im Internet wie gesagt herausgefunden, dass es daran liegt, dass ich ein Model B hab. Hast du da eine Lösung für?

    Vielen Dank! :)

  22. Besser die Schritte in einem Array festhalten und das mit der Schleife zu durchlaufen. Außerdem ist darauf zu achten das der Raspberry kein hartes Echtzeitsystem hat und dadurch Schrittverluste auftreten können ab einer bestimmten Frequenz. Besser ist also über Master-Slave prinzip ala. Raspberry -> Parameter -> uController -> H-Brücke -> Motor. Bei Fragen wie so etwas realisiert wird einfach melden ;). Trotzdem gut für den Anfang.

Kommentar verfassen