Schlagwort-Archive: Stepper Motor Driver Carrier

Projekt: Drahtführung für Wickelautomat (Teil 8)

Hier nun der Schaltplan der kleinen Zwischenplatine mit dem Treiberbaustein von Pololu. Es ist völlig egal, ob ein A4988 oder ein DRV8825 verwendet wird. Die Beiden sind in Bezug auf diese Schaltung pinkompatibel.

Die Anschlüsse auf der linken Seite verweisen auf die entsprechenden Anschlüsse auf der Filawinderplatine.

Zwischenplatine Drahtführung

Zur besseren Orientierung hierzu noch eine Abbildung der Filawinderplatine.

Platine Oberseite gedreht

Beim Anschließen des Steppermotor ist natürlich die Referenzspannung auf dem Treiber richtig einzustellen. Das habe ich an anderer Stelle im Blog beschrieben.

Weil es hier passt, nochmal der Hinweis, wie die Endstopps (schließende Mikroschalter) angeschlossen werden:

Endstop li 1    an H1  „Guide Max +“ D8
Endstop li 2    an H1  „Guide Max -“ GND
Endstop re 1    an H1  „Guide Min +“ D3
Endstop re 2    an H1  „Guide Min -“ GND

Selbstverständlich werden die beiden Taster für die Servo-Endpositionierung nicht mehr angeschlossen. Eine manuelle Positionierung gibt es hier nicht. Wohl aber kann der Nutzer in der Firmware einstellen, ob die Anfangsposition der Führung auf der linken oder rechten Seite der Spule liegen soll. Zum Start des Gerätes bewegt sich dann die Führung dorthin und wartet auf die erste Spulenumdrehung.

Übrigens bin ich bei meiner Suche nach einen Programm zur Erstellung von elektronischen Schaltplänen auf TinyCad aufmerksam geworden. Mal abgesehen vom Bild des Treiberbausteins ist der Rest des obrigen Bildes damit erstellt. Scheint nicht schlecht zu sein und ist vor allem immer kostenlos.

… und zum Abschluss der aktuelle Stand der Firmware:

FilaWinder_t_v1

Die Firmware basiert auf der originalen Firmware für den Filawinder. Die Hinweise sind im Programm auch deutlich sichtbar. Zudem sind alle weiteren Anteile aus der originalen Firmware notwendig um ein funktionsfähiges System zu bekommen. Diese Anteile lassen sich über die Filastruder-Seite im Netz finden.

Besten Dank auch an den Programmierer der Filawinder Firmware Ian Johnson, der mir erlaubt hat auf diese Firmware aufzubauen.

Ich kann leider erst gegen Mitte Dezember weiter auf dieses Projekt eingehen. Dann werde ich die Firmware im einzelnen besprechen. Ich habe mich aber bemüht möglichst gut zu kommentieren, sodaß ein Nachbau jetzt möglich sein sollte.

Projekt: Drahtführung für Wickelautomat (Teil 7)

Es ist etwas Zeit vergangen und ich konnte leider nicht so schnell weitermachen, wie beabsichtigt. Aber: Die Drahtführung funktioniert mittlerweile. Ich will jetzt hier nach und nach aufzeichnen, wie der Aufbau aussieht.

Als kleiner Appetitanreger ist hier die Zwischenplatine mit dem Pololu-Treiberbaustein zu sehen. Die Platine wird mit der Hauptplatine des Filawinders mit 5 Kontakten verbunden:

RAW (12V)     an H1  „FAN+“
VCC (5V)    an H6  „5V“
GND         an H1  „FAN-“

DIR        an H1  „Servo S“ D06
STEP        an H8  „D10“

Zudem müssen natürlich die Endpositionen der Drahtführung überwacht werden:
Endstop li 1    an H1  „Guide Max +“ D8
Endstop li 2    an H1  „Guide Max -“ GND
Endstop re 1    an H1  „Guide Min +“ D3
Endstop re 2    an H1  „Guide Min -“ GND

Ich habe mich nun doch noch entschieden die beiden Endstops einzeln abzufragen und nicht parallel zu schalten. Eventuell läßt sich da ja noch etwas realisieren.

Zwischenplatine Drahtführung Vorderseite Zwischenplatine Drahtführung RückseiteZwischenplatine Drahtführung mit TreiberWie man hier leicht sieht, ist das wirklich nichts Kompliziertes.

Die Schaltung liefere ich noch nach. Ich muss erst mal ein Tool finden, mit dem ich das ordentlich zeichnen kann.

Projekt: Drahtführung für Wickelautomat (Teil 6)

Der nächste Button hängt an Pin 8 des NANO. Er simuliert den Endanschlag an der linken und rechten Seite der Spulenbreite. Hier muss aus aktueller Sicht auch nicht zwischen links und rechts unterschieden werden, weil einfach nur ein sofortiger Stop und ein Wechsel der Bewegungsrichtung notwendig ist. Die beiden Endschalter sind also später parallel zu schalten. Zur Simulation reicht jetzt einer.

Der Button an Pin 9 setzt den Motor wie schon vorher in Gang. Der Button an Pin 8 leitet einen sofortigen Stop ein und ändert die Drehrichtung. Damit man das sieht muss die Bewegung aber mit dem „Bewegungs“-Button eingeleitet werden. Das Programm dazu:

// step and 2 buttons
// -*- mode: C++ -*-
//
// Ein Button um den Motor zu bewegen, zweiter Button um die Drehrichung zu ändern
//
// Thomas Sturm mit diversen Quellen

#include <AccelStepper.h>

// Define a stepper and the pins it will use
AccelStepper stepper(AccelStepper::DRIVER, 2, 5); // pin 2 = step, pin 5 = direction

// The button definition
const int buttonTurn = 9;     // the number of the buttonTurn pin, btn to Vcc, pin via resistor to ground
const int buttonEnd = 8;     // the number of the buttonEnd pin, btn to Vcc, pin via resistor to ground

// variables will change:
int btnTurnState = 0;         // variable for reading the pushbutton status
int btnEndState = 0;         // variable for reading the pushbutton status
int weg = 200;                // variable for Länge der Bewegung

void setup()
{
  // Anpassungen an Stepper
  stepper.setMaxSpeed(20);   // max steps per second
  stepper.setAcceleration(10);  // Beschleunigung in Steps per second per second

  // Die Pins an denen die Buttons hängen als Eingang definieren
  pinMode(buttonTurn, INPUT);     
  pinMode(buttonEnd, INPUT);     

}

void loop()
{
  // Auslesen der Button-Zustände
  btnTurnState = digitalRead(buttonTurn);
  btnEndState = digitalRead(buttonEnd);
 
  // beide Buttons auswerten

  if (btnTurnState == HIGH) {     
    stepper.move(weg);
  }

  if (btnEndState == HIGH) {
    weg = – weg;    // Drehrichtung ändern
    stepper.stop();  // sofortigen Stop einleiten, siehe AccelStepper Classes
  }

stepper.run();   // run immer ausführen um Bewegung zu vollenden, siehe AccelStepper Classes
}

Beim Ablauf des Programms gibt es jetzt aber schon ein Problem. Beim Drücken des Endstop-Buttons (Pin 8) wird zwar immer ein Stop ausgeführt. Leider scheint sich die Drehrichtung nicht immer zu ändern. Ich würde mal schätzen, dass entweder der Button prellt, oder aber die loop-Schleife während eines Buttondrucks mehrfach durchläuft. Das habe ich abgesichert. Dann stellte sich aber heraus, dass das natürlich auch für den „Bewegungs“-Button gilt, was vorher nicht auffiel. Ich habe eine neue Variable int lock (in die Variablen-Deklarationen aufnehmen !!) eingeführt und die loop folgendermaßen geändert:

void loop()
{
  // Auslesen der Button-Zustände
  btnTurnState = digitalRead(buttonTurn);
  btnEndState = digitalRead(buttonEnd);
 
  // beide Buttons auswerten

  if (btnTurnState == HIGH && stepper.distanceToGo() == 0) {     
    stepper.move(weg);
    lock–;
  }

  if (btnEndState == HIGH && lock < 1) {
    weg = – weg;    // Drehrichtung ändern
    lock = 5;        // mindestens 5 Bewegungstrigger muss gewartet werden, bis wieder ein Richtungtrigger möglich ist
    stepper.stop();  // sofortigen Stop einleiten, siehe AccelStepper Classes
  }

stepper.run();   // run immer ausführen um Bewegung zu vollenden, siehe AccelStepper Classes
}

Es steht ja schon im Kommentar: Bevor ein Stop und eine Richtungsänderung erneut möglich ist, müssen erst 5 Bewegungstrigger kommen. Nur dieser Anteil allein brachte aber nicht die notwendige Wirkung, weil eben auch der andere Button nicht kurz genug gedrückt werden kann. Also musste auch hier eine Sicherheit gegen Mehrfachbetätigung eingeführt werden. Über stepper.distanceToGo() == 0 lässt sich das einfach bewerkstelligen. Erst wenn eine Bewegung beendet ist, kann eine neue erfolgen.

Projekt: Drahtführung für Wickelautomat (Teil 3)

Jetzt werde ich die ersten Gehversuche mit einem Schrittmotor wagen. Ich verwende dazu den schon aus dem letzten Teil bekannten Arduino Nano, einen Treiberbaustein Pololu DRV8825 und natürlich einen Schrittmotor. Der Schrittmotor hat die Typbezeichnung 17HS5425. Wichtig ist daran eigentlich nur, dass es ein bipolarer Schrittmotor ist. Daher hat er 2 Paare Anschlussdrähte, die jeweils eine Motorwicklung ansteuern.

Die Schaltung ist eigentlich zwischen DRV8825 und dem etwas bekannteren Typ A4988 gleich. Besser gesagt, in eine Schaltung für einen A4988 kann man auch einen DRV8825 einsetzen. Andersrum ist das nicht sichergestellt. Ich verwende deshalb diese Schaltung:Pololu DRV8825 Beschaltung

In dieser Schaltung kann sowohl der A4988 als auch der DRV8825 verwendet werden, auch wenn eine Pinbezeichnung verändert ist. Beim DRV8825 gibt es einen FAULT-Eingang. Der gleiche Pin ist am A4988 mit VDD bezeichnet. Und tatsächlich wird dieser Pin auch mit der Ausgangsspannung des Nano beschaltet. Am Nano  ist das der PIN „+5V“. Der liefert beim Anschluss an USB (oder andere) Strom. Zum Vergleich die A4988-Schaltung.Pololu A4988 Beschaltung

In dieser Schaltung bleibt bei mir „logic power supply“ unbeschaltet, da ich den Nano mit USB-Strom versorge. Am Arduino Nano gibt es übrigens für GND zwei Pins, die zu verbinden sind.

Kleine Hintergrundinfo:
Am DRV8825 ist FAULT intern über einen Widerstand mit SLEEP verbunden. Somit macht dann auch die Brücke zu RESET Sinn.

VMOT und GND werden mit der Stromversorgung für den Schrittmotor versorgt. Ja, da benötigt man extra Strom. Deshalb ja auch der Treiberbaustein. Denn der stellt den Motorwicklungen gezielt Strom zur Verfügung. Die läppischen Milliampere über USB reichen da bei Weitem nicht. Die Stromversorgung sollte unbedingt mit dem 100 µF (Mikrofarad) -Elko geglättet werden. Jetzt noch den Schrittmotor selbst anschließen und die Schaltung ist fertig. Die Verbindung zum Schrittmotor sollte unbedingt sehr sicher angelegt werden. Sollte auch nur ein Pin während des Betriebs keinen Kontakt haben löst sich der Treiberbaustein per Rauchwolke in wertlosen Schrott auf.

Zuletzt darf natürlich die Datenverbindung zwischen Nano und Treiberbaustein nicht fehlen. Welche Pins am Nano genommen werden ist egal, solange es digitale Pins sind. Die analogen sollten hier nicht genommen werden. Ich habe Pin D2 und D5 genommen.

Hier (Youtube) noch ein kleines Video zur Schaltungserklärung auf dem Breadboard.

Nachdem alles verdrahtet ist, kontrolliert wurde und die 12V-Stromversorgung für den Schrittmotor eingeschaltet ist lade ich ein erstes extrem simples Testprogramm auf den Arduino Nano. Einziges Ziel ist die Funktionskontrolle der Schaltung.Stepper ansteuern

Zum leichteren Kopieren nochmal als Text …

/*
Schrittmotor
alle 200ms ein Schritt in eine Richtung.

This example code is in the public domain.
*/

void setup() { 
// setzen der Digitalpins 1 und 2 als Ausgang.
pinMode(5, OUTPUT);
pinMode(2, OUTPUT); 
}

void loop() {
digitalWrite(5, HIGH); // DIR an Pin D5
digitalWrite(2, HIGH); // STEP an Pin D2
delay(100); // warte eine zehntel Sekunde
digitalWrite(2, LOW); // Gnd an Pin D2
delay(100); // warte eine zehntel Sekunde
}

Das Programm habe ich vor einiger Zeit in einem Forum entdeckt und gleich kopiert. Leider finde ich die Quelle nicht wieder. Auch wenn es als PD gekennzeichnet ist: Wenn jemand die Quelle weiß, wäre ich für den Hinweis dankbar.

Wenn das Programm übertragen wurde, sollte sich der Schrittmotor im Zehntelsekundentakt in Bewegung setzen. Bei mir hat es auf Anhieb funktioniert.

Projekt: Drahtführung für Wickelautomat (Teil 1)

Aller Anfang …

Wie schon in einem früheren Artikel beschrieben, erzeuge ich mein Filament selbst. Dazu benutze ich den Filastruder. Um dann auch gleich den erzeugten Filamentdraht zu wickeln habe ich auch den Filawinder. Der ist bei mir mittlerweile schon ziemlich modifiziert, was größtenteils dem Umstand meiner großen Spulen (bis 5kg) zu verdanken ist.

Der Filawinder hat eine Vorrichtung, die den erzeugten Draht auf der Spule führen soll, so dass Wicklung neben Wicklung sauber auf die Spule kommt. Das ist mit einem Servomotor aus dem Modellbausektor umgesetzt. IMAG0049Ich denke, dass diese Lösung bei 1,75mm-Drähten auch ganz gut funktioniert. Bei meinem recht steifen 3mm-Draht und zudem meinen breiten Spulen tut sich diese Führung aber sehr schwer und schafft es nicht mehr sauber.

Mein Gedanke ist es, die Führung per Servo durch eine Führung per Schrittmotor und Gewindestange zu ersetzen. Was haben wir:

  1. Von einem Hallsensor am Spulenzahnrad kommt ein Signal pro Umdrehung der Spule.
  2. Der Durchmesser des Drahtes wird schon heute mit einem Jumper auf der Elektronik eingestellt.
  3. Der steuernde kleine Arduino kann auch noch den Schrittmotor steuern, – zumal der Servo ja wegfällt.
  4. Die Firmware der aktuellen Elektronik ist bekannt und liegt in bearbeitbarer Form vor. Servoanteil raus und Schrittmotorsteuerung rein sollte kein Thema sein.
  5. Stromversorgung ist mit 12V passend vorhanden.

Jetzt muss ich mich erstmal in das Thema reinarbeiten. Alles für erste Versuchsaufbauten ist vorhanden:

  • Platinen oder Breadboard
  • Schrittmotor NEMA17
  • Treiberbaustein Pololu DRV8825
  • Arduino
  • Stepperbibliothek habe ich gefunden: AccelStepper
  • Schaltungsentwürfe von Pololu und RAMPS 1.4
  • Draht, Kabel, Bauteile, Strom
  • Mut zum Anfang

Die Schaltungsentwürfe:
Treiberbeschaltung DRV8825-Beschaltung

Auf geht’s …

Pololu (Schrittmotortreiber) einstellen

Mal wieder ein wenig Grundlagen. Und diesmal voller Eigennutzen, denn ich brauchte die Information selbst, um etwas zu experimentieren.

Die üblichen Schrittmotortreiber im Bereich 3D-Druck kommen von der Firma Pololu. Es gibt da zum einen den A4988 und zum anderen den DRV8825. Der Letztgenannte hält höhere Ströme aus, wird zudem nicht so heiß und bietet 1/32 Mikrosteps. Bei Neubauten würde ich dazu raten.

Diese Treiberbausteine müssen eingestellt werden, denn die Bausteine und die Schrittmotoren können ja mit einem großen Spannungsbereich betrieben werden. Die Nennspannung des Schrittmotors ist eigentlich völlig uninteressant. Entscheidend ist der Strom, – zumindest, wenn man über einen Schrittmotortreiber steuert. Bei der alten Beschaltung mit H-Bridges war das anders. Aber das nur am Rande. Die Nutzung höherer Spannungen führt letztendlich dazu, dass der Motor wesentlich schneller höhere Drehmomente aufbaut. Der DRV8825 erlaubt Eingangsspannungen von 8,2V bis 45V. Üblicherweise arbeiten wir mit Schaltnetzteilen aus dem PC-Umfeld. Da sind 12Volt üblich.

Weiterer kleiner Exkurs: Neben der präzisen Einstellmöglichkeit mit Mikrosteps, die immerhin statt 200 Steps pro Umdrehung ganze 6400 Steps ermöglicht, bringen Mikrosteps noch den Vorteil des besseren Einschwingverhaltens beim Anfahren einer Position. Die Motoren sind nämlich nicht in der Lage einfach den Punkt genau anzufahren, sondern schwingen sich um den Zielpunkt ein. Die Mikrosteps reduzieren die Schwingungen erheblich.

Die einfache, aber auch völlig unpräzise Art der Einstellung will ich nicht verschweigen:
Zu wenig Strom -> Der Motor hat keine Kraft eine Position anzufahren
Zu viel Strom -> Der Motor „singt“ und wird übermäßig heiß
Diese „Methode der Einstellung“ würde ich aber nicht einmal für das schnelle Experiment vorschlagen.

Jetzt schaue ich mir mal meinen Beispiel-Schrittmotor an. Es ist ein NEMA 17HS5425:

NEMA 17HS5425 Daten

Die für uns entscheidende Formel lautet …
Vref = Imax x (5 x Rs)
Rs ist der auf der Treiberplatine verbaute Widerstand. Der ist laut Datenblatt beim DRV8825 0,1Ohm.
Im Internet findet man in den Foren die Aussage, dass die Einstellung nicht mit dem Maximalstrom sondern mit 70% davon erfolgen soll. Das wäre dann 2,5A x 0,7 = 1,75A.
Damit ergibt sich Vref = 1,75A x 5 x 0,1Ohm=0,875Volt
Wenn die vollen 2,5A gebraucht werden, bekommen wir mit dem DRV8825 übrigens schon Probleme, denn er liefert laut Datenblatt bis zu 2,2A.

Die gleiche Rechnung jetzt noch für den A4988:
Hier ist die Formel etwas anders und lautet …
Vref = Imax x (8 x Rs) mit Rs zu 0,05Ohm. Damit wäre die Referenzspannung 0,7Volt.

Die Referenzspannung kann recht leicht auf dem Motortreiber gemessen werden. Legt man vom Multimeter eine Seite einfach irgendwo auf Masse kann man am Schleifer des Potis auf dem Treiberbaustein die Spannung messen.

Zur Sicherheit noch ein paar Hinweise:
Während Strom auf dem Treiber ist, darf der Schrittmotor keinesfalls abgetrennt werden. Das ist der sichere Tod des Treibers.
Höchste Konzentration ist bei der Messung angebracht. Ein Abrutschen mit der Messspitze kann schnell einen Kurzschluss verursachen.