Archiv der Kategorie: Elektronik

Alles zur elektronischen Steuerung

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

Das kleine Testprogramm hilft auf Dauer natürlich nicht weiter. Es war ja auch nur zum Test gedacht. Sowohl dieses kleine Testprogramm als auch die in den Arduino-Bibliotheken vorhandenen Programmmteile haben den Nachteil, dass jegliche Motorbewegungen immer das Programm solange aufhalten, bis der Motor die Zielposition erreicht hat. Da beim Wickelautomat aber andere Programmteile auch in Echtzeit laufen müssen, wäre das fatal.

Ich habe eine andere Programmbibliothek gefunden: AccelStepper

Der Vorteil dieser Bibliothek ist, dass eine Bewegung initiiert wird und bei jedem Durchlauf der loop()-Funktion ein Stück weit vorwärtsgetrieben wird. Das Programm muss also nicht an der entsprechenden Stelle warten.

Zunächst muss die neue Bibliothek in die Arduino Entwicklungsumgebung integriert werden. Dazu wird die aktuelle Version von der AccelStepper-Projektseite geladen. Der entpackte Ordner AccelStepper wird nach Arduino/libraries kopiert. Kleine Kontrolle: In diesem Ordner muss die AccelStepper.h enthalten sein.

Von den Beispielen probiere ich als Erstes „Bounce.pde“

// Bounce.pde
// -*- mode: C++ -*-
//
// Make a single stepper bounce from one limit to another
//
// Copyright (C) 2012 Mike McCauley
// $Id: Random.pde,v 1.1 2011/01/05 01:51:01 mikem Exp mikem $
#include <AccelStepper.h>
// Define a stepper and the pins it will use
AccelStepper stepper; // Defaults to AccelStepper::FULL4WIRE (4 pins) on 2, 3, 4, 5
void setup()
{
// Change these to suit your stepper if you want
stepper.setMaxSpeed(100);
stepper.setAcceleration(20);
stepper.moveTo(500);
}
void loop()
{
// If at the end of travel go to the other end
if (stepper.distanceToGo() == 0)
stepper.moveTo(-stepper.currentPosition());
stepper.run();
}

Das ist aber noch nicht ganz das, was ich brauche. Die Anschlussart passt noch nicht. Sie wird definiert über AccelStepper::
Im Beispiel wird über eine H-Bridge gearbeitet. 4 Steuerleitungen werden gebraucht. Ich arbeite aber mit einem Treiber, der nur Step und Dir kennt. Der Constructor wir also geändert in:

AccelStepper::DRIVER
… und da ich STEP auf Pin 2 und DIR auf Pin5 gelegt habe, muss auch das dem Construktor bekannt gegeben werden. Der gesamte Constructor lautet also auf:

AccelStepper stepper(AccelStepper::DRIVER, 2, 5);

„stepper“ ist übrigens ganz einfach der Name meines Motors. Alle Funktionen werden mit diesem Namen aufgerufen: stepper.xxxx();

Das ist das fertige Programm in der Entwicklungsumgebung. Erfolgreich kompiliert ist es auch schon.

Bounce

Das Programm habe ich dann übertragen und dann läuft es auch schon. Aber der Treiber wird sehr schnell heiß und nach kurzer Zeit bleibt der Motor stehen. Also Speed runter. Poti auf Treiber einstellen?

Die Referenzspannung lag tatsächlich bei 1,5V. Das ist erheblich zu viel. Nach der üblichen Formel berechnet benötige ich 0,875V. Ich habe das Poti im Uhrzeigersinn gedreht, so dass ich jetzt etwas über 0,6V habe. Jetzt scheint es zu passen. Wenn noch Last draufkommt, werde ich vielleicht höher drehen müssen. Komischerweise ist im Schaltbild von Pololu die Drehrichtung zur Reduzierung der Spannung genau andersherum ausgewiesen. Seltsam.

Ich habe auch mal den Befehl moveTo auf 200 gesetzt. Der Motor hat schließlich 200 Schritte pro Umdrehung. Erst habe ich gestaunt, dass in jedem Zyklus die Fahne 2 Runden dreht. Aber klar. Von 200 bis -200 sind es ja auch 2 volle Umdrehungen. Also passt alles.

Ich spiele jetzt noch ein wenig mit setMaxSpeed und SetAcceleration.
Der erste Wert sagt aus, wieviele Schritte pro Sekunde maximal ausgeführt werden dürfen. Der zweite Wert sagt aus wie stark die Beschleunigung sein soll in Schritten pro Sekunde².

 

 

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 2)

Ich hatte ja schon erwähnt, dass ich mit dem Filawinder nicht ganz glücklich bin, weil die Führung des Drahtes auf der Spule nicht so gut funktioniert. Das liegt aber nicht etwa an einer schlechten Konstruktion des Gerätes, sondern daran, dass ich wesentlich größere Spulen verwende und 3mm-Draht produziere. Das Gerät ist aber wohl eher für 1,75mm-Draht und kleine Spulen ausgelegt.

Ich habe mir überlegt, dass ich die Konstruktion mit einem Schrittmotor antreiben will. Die Steuerung soll letztendlich von dem bereits im Gerät verbauten Arduino Nano erledigt werden. Das vorhandene Programm werde ich erweitern und die Anteile der Servosteuerung entfernen.

Zur Entwicklung in den ersten Schritten fange ich mit einem Breadboard an. Wer es nicht kennen sollte: Ein Steckbrett für elektrische Komponenten.

Ich fange mal klein an: Arduino Nano soll blinken.

Also den Nano per USB an den Rechner anschließen. Das kann problemlos bei laufendem Rechner passieren. Die Arduinos brauchen keinen zusätzlichen Strom. USB reicht.

Neben dem Arduino Nano wird die Entwicklungsumgebung gebraucht. Etwas Programmiersprache C sollte man beherschen dafür.  Nach der Installation findet man sich auf der Oberfläche wieder. Die sieht dann so aus:Arduino EntwicklungsoberflächeZuerst muss das Board ausgewählt werdenBoardauswahl in Arduino

… und jetzt noch das erste Testprogramm: BLINK…Blink auswählen in ArduinoDann sieht es so aus:

Arduino BlinkJetzt den Upload-Button Upload-Button drücken und dann wird diese Software, auch Sketch genannt, auf den Nano geladen. Danach blinkt die rote LED im Sekundentakt.Blink ErfolgDie grüne LED darunter zeigt an, dass der Nano mit Strom versorgt ist.

Netzteile entdeckt

Ich habe beim Elektronikversand meines Vertrauens ein paar alte Server entdeckt, die für billiges Geld ausrangiert wurden. Als ich hinkam, standen die Dinger vor dem Laden auf einer Palette.

Klar, dass man als Bastler ja eigentlich alles gebrauchen könnte. Die Server waren aber sehr schwer. Und eigentlich brauchte ich nur ein paar Teile davon. Der Deal ließ sich mit den Angestellten machen.

Ich habe neben ein paar Lüftern und Speicher zwei Netzteile ergattert: Compaq PS-5551-2

Compaq PS-5551-2 Front Compaq PS-5551-2 Anschlüsse Compaq PS-5551-2 Übersicht Compaq PS-5551-2 Label

Die Netzteile sollen auf der 12V-Leitung 30A bringen.
Das übliche Problem der Beschaltung war per Internet auch gleich gelöst. Die Netzteile geben ihren Saft beim Kurzschließen per Jumper von je zwei PINs her:

* * * * *
*-* * * *
* * * * *
* *-* * *
… und dann kommt auf den Anschlußzungen links und rechts auch schon die Energie:
||    ||    ||    ||    ||    ||       ##     ||    ||    ||    ||
3.3V     5V      12V    5x4p   —-GND—-

Mittlerweile habe ich das auch getestet und kann das oben Genannte bestätigen. Die Spannungen kommen wie erwartet. Beim Verbinden von 230V laufen die Lüfter kurz hoch und werden dann sofort wieder leise. Ich habe auch mal eines der Netzteile aufgeschraubt. Erstens war ich neugierig, wie es innen aussieht (-> keine wirkliche Überraschung, eher üppig dimensioniert) und zweitens hätte ich eventuell eine andere Anschlussleiste angebracht. Die Serversteckleiste habe ich nämlich nicht und will ich auch nicht unbedingt kaufen. Die Leiste auszulöten habe ich nach zwei Pins abgebrochen. Das würde zu aufwendig werden. Jede einzelne Zunge in der Leiste ist mit 4 recht dicken Kontakten in die Platine eingelötet. Selbst mit Entlötvorrichtung bei 400°C war da kaum was auszurichten. Ich lass mir was einfallen.

Das Lob für das Herausfinden der Beschaltung gebührt übrigens dem Forum Tech Support Guy . Danke dafür !

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.

Heated Chamber – Umzug Teil 1

Der erste Teil des Umzugs des Druckers in die Heated Chamber ist vollzogen. Leider aber nicht so, wie ich mir das dachte. Die Crimpkontakte, die ich für eine saubere Verdrahtung des neuen RAMPS gebraucht hätte, sind nicht gekommen. Also fand der Umzug nur mit der alten Elektronik statt.

Trotzdem hat sich ein bisschen was getan. Ich habe einen Stromverteiler eingebaut und die Inbetriebnahme läuft jetzt nicht mehr über Stecker einstecken, sondern über einen Schalter. Das Ganze sieht dann von oben so aus.

Druckergehäuse Technik 01

Diese Teile liegen im unteren Teil des Gehäuses, der später nicht warm gehalten wird. Die Steckdosenleiste wird als Einschalter für die gesamte Anlage dienen. Links sieht man das Netzteil. Das ist ein Servernetzteil mit genügend Leistung. Dem geht so schnell die Puste nicht aus. Wie man das anschließt ist sehr gut auf dieser Seite erklärt.

Drucker Stromversorgung

Hier ist die Verteilerplatine zu sehen. Ich war es leid, ständig für Licht und Ähnliches am Kabel direkt rumzufrickeln. Hier ist Potenzial für weitere Basteleien. Die Platine ist eine Streifenrasterplatine. Die Bahnen laufen durchgängig horizontal. Die stromführenden Bahnen habe ich komplett verzinnt. Links ist der Eingang vom Netzteil und rechts die Verteilung. Die durchgängigen Bahnen, also der Abzweig in der Mitte geht dann zum RAMPS.  Ich habe darauf verzichtet, die Pinbelegung einheitlich zu halten, sonst hätte ich alles drehen müssen. So muss man halt passende Leitungen bauen. Das System der grünen Stecker und Buchsen nennt sich PTR.Verteilerplatine 01

Ich habe die Verteilerplatine mit Abstandshülsen auf dem Brett festgeschraubt. Das habe ich eigentlich am Ende mit allen Teilen vor, damit nichts herumrutscht. Für Abstandshülsen noch ein kleiner Tip: Ich habe etwas länger nach was Brauchbarem gesucht, was beim Festschrauben etwas nachgibt, damit die Platinen nicht beschädigt werden. Ich habe dann Gummistopfen bei meinem freundlichen Elektronikhändler gefunden.

Verteilerplatine 02

Jetzt habe ich noch das Brett für den Drucker eingelegt und den Drucker von dem kleinen Computertisch in das Gehäuse umgestellt.

Drucker im Gehäuserahmen 01

Nach einer solchen Maßnahme sollte die Z-Nivellierung des Drucktisches überprüft werden, denn der Rahmen des Druckers könnte sich leicht verzogen haben.

Jetzt heißt es warten. Die Crimpkontakte kommen laut Ankündigung in KW 36. Dass sowas so lange dauert …

Elektronik-Update

Meine Ramps-Platine (1.3) habe ich am Anfang ziemlich oft mit dem Lötkolben bearbeitet. Zum einen, weil ich sie selbst zusammengelötet habe und zum anderen, weil es einige Probleme gab.

Zudem hatte ich mir aus vorhandenen Bauteilen eine 4zeilige Displayeinheit mit SD-Card und Einstellmöglichkeiten gebaut. Die ganze Sache war aber ziemlich im Prototypenstatus. So gab es dann auch immer wieder gerne Probleme. Ich habe es dann deinstalliert. Dabei musste ich natürlich wieder auf dem Ramps löten.

In der Bucht habe ich gestern recht günstig ein Grafikdisplay mit SD-Card-Steckplatz entdeckt. Es lagert zwar in Fernost, aber das hat bisher immer problemlos geklappt. Bei der Gelegenheit habe ich mir dann auch noch ein neues Ramps 1.4 aus Großbritannien bestellt. In Summe hat der ganze Spass 33€ gekostet. Ich glaube, da kann man nicht meckern.

Sobald was eintrudelt gibt es Bilder ….