Zum Inhalt springen
Arduino DRV8825 Stepper Schrittmotor Treiber

Stepper-Motor mit dem DRV8825 steuern

    In diesem Beitrag zeige ich dir, wie du einen Stepper-Motor mit Arduino und dem DRV8825 Stepper-Driver steuern kannst. Darüber hinaus sehen wir uns an, die du den Strom zum Motor am DRV8825 begrenzen musst. Wie immer gibt es alle Erklärungen, einen Schaltplan und den Programmcode.

    Bevor wir richtig einsteigen, musst du erstmal verstehen, wie ein Stepper-Motor (Schrittmotor) funktioniert. Das folgende Video erklärt das ziemlich gut:

    Wir benötigen Ihre Zustimmung um den Inhalt von YouTube laden zu können.

    Mit dem Klick auf das Video werden durch den mit uns gemeinsam Verantwortlichen Youtube [Google Ireland Limited, Irland] das Video abgespielt, auf Ihrem Endgerät Skripte geladen, Cookies gespeichert und personenbezogene Daten erfasst. Damit kann Google Aktivitäten im Internet verfolgen und Werbung zielgruppengerecht ausspielen. Es erfolgt eine Datenübermittlung in die USA, diese verfügt über keinen EU-konformen Datenschutz. Weitere Informationen finden Sie hier.

    Jmx0O2RpdiBjbGFzcz0mcXVvdDtudi1pZnJhbWUtZW1iZWQmcXVvdDsmZ3Q7Jmx0O2lmcmFtZSB0aXRsZT0mcXVvdDtTY2hyaXR0bW90b3IgLSBBdWZiYXUgdW5kIEZ1bmt0aW9uc3dlaXNlJnF1b3Q7IHdpZHRoPSZxdW90OzEyMDAmcXVvdDsgaGVpZ2h0PSZxdW90OzY3NSZxdW90OyBzcmM9JnF1b3Q7aHR0cHM6Ly93d3cueW91dHViZS5jb20vZW1iZWQvVnRiZDgwRmtzdU0/ZmVhdHVyZT1vZW1iZWQmcXVvdDsgZnJhbWVib3JkZXI9JnF1b3Q7MCZxdW90OyBhbGxvdz0mcXVvdDthY2NlbGVyb21ldGVyOyBhdXRvcGxheTsgY2xpcGJvYXJkLXdyaXRlOyBlbmNyeXB0ZWQtbWVkaWE7IGd5cm9zY29wZTsgcGljdHVyZS1pbi1waWN0dXJlOyB3ZWItc2hhcmUmcXVvdDsgYWxsb3dmdWxsc2NyZWVuJmd0OyZsdDsvaWZyYW1lJmd0OyZsdDsvZGl2Jmd0Ow==

    Ich hoffe, das Video hat dir gefallen und du kennst nun die wichtigsten Grundlagen.


    Sieh dir jetzt meinen neuen Arduino-Videokurs an: Jetzt ansehen!


    Motortreiber DRV8825

    Der Motortreiber DRV8825 ist ein IC (Integrated Circuit) von Texas Instruments. Aus praktischen Gründen verwendet man ihn normalerweise als Breakout-Board, einer Breadboard-freundlichen Platine, auf der der Chip verlötet ist. Durch wird die Verbindung vom Arduino zum Stepper-Motor zum Kinderspiel und man benötigt nur zwei digitale Pins des Arduino-Boards. Damit lässt sich dann jeder einzelne Motorschritt steuern.

    Arduino DRV8825 Schrittmotor Stepper Treiber NEMA 17

    Der Treiber hat eine maximale Ausgangskapazität von 45 V und 2 A, was für die Ansteuerung kleiner bis mittelgroßer Schrittmotoren, wie z. B. eines bipolaren NEMA 17-Schrittmotors ideal ist.

    Größere Schrittmotoren sollte man allerdings mit Treibern wie dem TB6600 ansteuern. Übrigens verwendet der DRV8825 die gleichen Pins wie der A4988. (Achtung: Das Trimpotentiometer ist dort genau auf der anderen Seite. Man muss also penibel auf die Polung achten, falls man die Module austauschen möchte. → Ja, eigene schmerzliche Erfahrung 😂)

    Sehen wir uns die technischen Daten des DRV8825 an. Hier ein Auszug aus dem Datenblatt:

    Betriebsspannung8,2 V – 45 V
    Dauerstrom pro Phase1,5 A
    Maximaler Strom pro Phase2,5 A (bei 24 V)
    Logikspannung2,5 V – 5,25 V
    Mikroschrittauflösungvoll, 1/2, 1/4, 1/8, 1/16 und 1/32
    VerpolungsschutzNein
    Abmessungen 15,5 × 20,5 mm

    Wie im Video erwähnt kann man Stepper-Motoren in Microstepping-Modus betreiben. Der DRV8825 lässt sich in unterschiedlichen Schrittmodi nutzen. Dafür muss man die Pins M0, M1, M2 mit 5V+ (HIGH) verbinden. Die folgende Tabelle gibt an, wie man diese Pins setzen muss:

    M0M1M2Microstep Auflösung
    LowLowLowFull step
    HighLowLowHalf step
    LowHighLow1/4 step
    HighHighLow1/8 step
    LowLowHigh1/16 step
    HighLowHigh1/32 step
    LowHighHigh1/32 step
    HighHighHigh1/32 step

    Übrigens muss man die Pins nicht manuell auf LOW setzen. Das macht der Chip durch integrierte Pull-Down-Widerstände von allein.

    Der NEMA 17 Motor, den ich hier zum Testen verwende, dreht übrigens erst ruhig, wenn ich mindestens das Half-Stepping aktiviere.

    Schaltung Arduino DRV8825

    Arduino NEMA 17 DRV8825 Schrittmotor-Treiber Stepper

    In der Schaltung ist Half Stepping durch die Verbindung vom 5V+ zum Pin M0 des DRV8825 aktiviert. Zusätzlich sind die Pins Reset und Sleep ebenfalls mit 5V+ verbunden. Der GND vom Arduino ist unten rechts am GND-Pin des DRV8825 angeschlossen. Der DIR und STEP Pin sind mit den Arduino-Pins D2 und D3 verbunden. Hier kann man natürlich auch andere Pins verwenden. Die Versorgungsspannung für den Motor liegt an den Pins VMOT und dem oberen GND an. Diese Verbindung ist noch mit einem 100 µF-Elektrolytkondensator gestützt. Der Schrittmotor ist mit dem einen Spulen-Stromkreis an den Pins A1 und A2, mit seinem anderen Spulen-Stromkreis an den Pins B1 und B2 verbunden.

    Bauteile

    Wie finde ich heraus, welche Kabel am Schrittmotor jeweils einen Stromkreis bilden?

    1. Möglichkeit: Widerstands-Messgerät
      Miss jeweils den Widerstand zwischen den einzelnen Kabeln des Schrittmotors. Die beiden Kabel, an denen der Widerstand nicht unendlich groß ist, sind die Enden einer der Spulen-Stromkreise.
    2. Möglichkeit: Induktion
      Verbinde zwei der Kabel vom Motor und drehe die Achse. Wenn sie sich schwer drehen lässt, hast du einen der Stromkreise gefunden. Die Drehung induziert einen Strom, der beim Drehen ein Magnetfeld aufbaut und den Motor bremst. Wenn sie sich leicht drehen lässt, versuche ein anderes Kabel.

    Strom begrenzen

    Oft übersehen, aber von größter Bedeutung ist das Begrenzen des Stromes. Um hohe Schrittraten zu erreichen, ist die Motorversorgung normalerweise viel höher, als es ohne aktive Strombegrenzung möglich wäre. Ein typischer Schrittmotor hat z. B. einen maximalen Nennstrom von 1 A bei einem Spulenwiderstand von 5Ω, was eine maximale Motorversorgung von 5 V bedeuten würde. Die Verwendung eines solchen Motors mit 12 V würde höhere Schrittraten ermöglichen. Um hierbei Schäden am Motor zu vermeiden, muss der Strom aktiv auf unter 1 A begrenzt werden.

    Der DRV8825 unterstützt eine solche aktive Strombegrenzung. Eingestellt wird sie mithilfe eines Trimmpotentiometers auf der Platine. In der Regel sollte die Stromgrenze des Treibers so eingestellt werden, dass sie kleiner gleich dem Nennstrom des Schrittmotors entspricht.

    Am einfachsten lässt sich die Stromgrenze einstellen, indem man die Referenz-Spannung am Trimmpotentiometer misst und die resultierende Stromgrenze berechnet. Die Stromgrenze berechnet sich mittels Referenzspannung wie folgt:

    Stromgrenze = VREF × 2

    Wenn man also z. B. einen Schrittmotor nutzt, der für 1 A ausgelegt ist, kann man die Stromgrenze auf 1 A einstellen, indem man die Referenzspannung auf 0,5 V einstellt.

    Hinweis: Der Spulenstrom kann sich stark vom Strom der Spannungsversorgung unterscheiden. Daher sollte man nicht den an der Spannungsversorgung gemessenen Strom zur Einstellung der Stromgrenze verwenden.

    Übrigens: Obwohl der Motortreiber einen eingebauten Überhitzungsschutz eingebaut hat, kann sehr heiß werden. Also, nicht die Finger verbrennen!

    Software: AccelStepper

    Ich verwende für die Ansteuerung sehr gern die AccelStepper-Bibliothek. Wenn man im Arduino-Menü Sketch>Bibliothek hinzufügen>Bibliotheken verwalten nach AccelStepper sucht, kann man die aktuelle Version installieren und verwenden.

    Beispielcode

    #include <AccelStepper.h>
    
    #define dirPin 2
    #define stepPin 3
    #define motorInterfaceType 1
    
    AccelStepper stepper = AccelStepper(motorInterfaceType, stepPin, dirPin);
    
    void setup() {  
       stepper.setMaxSpeed(1000);
       stepper.setSpeed(150);	
    }
    
    void loop() {  
       stepper.runSpeed();
    }

    In diesem Beispiel wird das Objekt stepper mit am Pin 2 und 3 angelegt. Der Motor dreht konstant in der angelegten Geschwindigkeit von 150.

    Beschleunigung

    Im folgenden Beispiel wird der Motor beschleunigt und wieder abgebremst. Danach fährt er in die umgekehrte Richtung. Wie oben im Video angesprochen, kann es durchaus sinnvoll sein, den Motor nicht mit der Endgeschwindigkeit zu starten, sondern zu beschleunigen.

    #include <AccelStepper.h>
    
    #define dirPin 2
    #define stepPin 3
    #define motorInterfaceType 1
    
    AccelStepper stepper = AccelStepper(motorInterfaceType, stepPin, dirPin);
    
    void setup() {  
      stepper.setMaxSpeed(2000);
      stepper.setAcceleration(200);
      stepper.moveTo(5000);
    }
    
    void loop() {
        if (stepper.distanceToGo() == 0)
          stepper.moveTo(-stepper.currentPosition());
        stepper.run();
    }

    Eine vollständige Dokumentation zu genutzten Bibliothek ist übrigens hier zu finden: AccelStepper-Library.

    Und was stellen wir jetzt damit an? Wie wäre es damit:


    Wenn dir das Projekt gefallen hat und du von weiteren interessanten Projekten inspiriert werden willst, sieh dir doch mal mein neues E-Book »Arduino Projekte Volume 1« an!

    • Die beliebtesten Arduino-Projekte von StartHardware
    • Inklusive Schaltplan, Beschreibung und Code
    • Arduino-Schnellstart-Kapitel
    • Kompakter Programmierkurs


    5 Gedanken zu „Stepper-Motor mit dem DRV8825 steuern“

    1. Hallo,
      danke für die ausführliche Beschreibung.
      Ich hab so weit alles verstanden, nur beim Einstellen der Strombegrenzung gibt es Probleme.
      Der Motortreiber DRV8825 hab ich an einem 12 V 2,5 A Netzteil an GND (-) und VMOT (+) angeschlossen.
      Wenn ich die Referenz-Spannung am Trimmpotentiometer messen will, erhalte ich immer 0 V.
      Ist der Motortreiber Defekt oder mache ich was falsche?

      Viele Grüße!

    2. Hi Henrik,

      oha, das klingt gar nicht gut. So ein Verhalten hatte ich auch mal, als ich fälschlicherweise A4988-Motortreiber verwendet hatte. Willst du mir mal ein Foto von deinem Aufbau an hallo@starthardware.org schicken? Dann gucke ich mal rauf.

      Liebe Grüße

      Stefan

    3. Guten Tag,

      vielen Dank für den interessanten Guide.
      Beim ersten anschließen läuft der Motor zwar, aber sehr unrund und stockend. Nachdem ich einmal die Stromverbindung vom Motor getrennt habe und neu verbunden habe funktioniert nichts mehr. Mit einem neuen Treiber klappt es dann wieder kurz, sodass ich das Gefühl habe, dass ich die Treiber irgendwie sehr schnell “zerstöre”. Eine Idee, woran das liegen könnte? Mittlerweile sind es schon 5 Treiber..

      Viele Grüße!

      1. Hi Henrik, hast du die das Strom-Limit richtig eingestellt? Wenn du z.B. einen drv8825 Treiber hast kannst dieses Limit über das kleine Poti einstellen. (mehr steht auf der Website von Pololu)

      2. Hi Henrik,
        Den Motor (und auch den Treiber) nie beim Anliegen von Spannung vom Stromkreis trennen! Dabei riskiert man, dass sowohl der Motor als auch der Treiber kaputt gehen können, sodass bestenfalls erratische Bewegungsmuster beim Motor zu beobachten sind, und schlimmstenfalls beides wirklich kaputt geht und für nichts zu gebrauchen ist.

    Schreibe einen Kommentar

    Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

     

    Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.