Archiv der Kategorie: Wickelmaschine

Alles zur Filament- Wickelmaschine

Filamentextruder – Meine Filamentproduktionsanlage

Filament zu produzieren ist gar nicht so einfach, vor allem, wenn die Maße stimmen sollen. Die beiden Standarddurchmesser von 1,75mm und 3mm stelle ich mittlerweile recht genau her. Dafür waren viele Versuche mit den verschiedenen beteiligten Faktoren notwendig. Eins der Setups möchte ich hier einmal zeigen:

Filamentextruder – Meine Filamentproduktionsanlage weiterlesen

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

Ich habe das Projekt im amerikanischen Forum „Soliforum“ vorgestellt. Der entsprechende Thread ist hier zu finden. Ich kann das Forum jedem empfehlen, der sich mit dem Thema 3d-Druck und Filamentherstellung auseinandersetzen will. Das Forum ist allerdings englischsprachig.

Dort wurde schon die Frage gestellt, ob ich die STL-Dateien für die Teile meiner Drahtführung veröffentlichen werde. Ja, das werde ich tun. Leider habe ich aber beim Entwurf ein paar gravierende Fehler gemacht, die zu massiver Nacharbeit nach dem Druck führen. So kann ich das niemandem anbieten. Ich werde die Teile überarbeiten und dann hier veröffentlichen. Gebt mir ein paar Tage.

Für die Problematik der zu lockeren Wicklung hat mir der Entwickler des Filawinders einen Tip gegeben. Wahrscheinlich werde ich direkt in der Drahtführung ein weiteres PTFE-Röhrchen integrieren, dessen Querschnitt über eine Schraube verengt werden kann.  Das sollte funktionieren. Aktuell kann ich nichts umbauen, da der Extruder und der Winder rund um die Uhr laufen. Ich glaube fast, dass bald ein zweites Set nötig wird. Die Produktion ist leider ziemlich langsam. Etwa 8cm vom 3mm Draht werden pro Minute ausgeworfen. Bis da 2Kg zusammen sind, dauert es ein paar Tage.

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

Zum vorläufigen Ende dieses Projektes will ich noch ein paar Bilder der fertigen „Maschine“ zeigen.

Drahtführung Zwischenplatine am Flawinder

Die Zwischenplatine habe ich genau gegenüber der Filawinderplatine montiert. Dafür muss natürlich die vorhandene Befestigung geändert werden.

Drahtführung Zwischenplatine verkabelt

Nahaufnahme der Verdrahtung. Ich empfehle sowohl die Leitungen als auch die Platine zu beschriften. Verwechslungen werden hier kaum verziehen.

Drahtführung seitlich

Filawinder mit Drahführung komplett von oben

gewickeltes Filament um 7Uhr

So sah die Wicklung morgens um 7Uhr aus. Gegen 22Uhr am Abend hatte ich angefangen.

gewickeltes Filament um 20Uhr

So sieht es am gleichen Tag um 20Uhr aus. Die Verteilung ist schon recht gleichmäßig, aber die Wicklung ist noch nicht straff genug. Der PTFE-Kanal hat für diesen Aufbau anscheinen nicht genug Reibung. Da muss ich mir noch etwas einfallen lassen.

Filawinder mit Drahführung komplett aus Zuführungsrichtung

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

Ein relativ einfacher nächster Schritt:

An Pin 9 des NANO wird ein Button gegen Vcc angeschlossen.  Das ist wieder der 5V-Anschluss am NANO, den ich schon zum Treiber „FAULT“ verbunden hatte. Gleichzeitig liegt am NANO-Pin 9 über einen 10k-Widerstand GND.
Die ganzen Grundlagen zu AVR, – nichts anderes ist der Arduino -, kann man sich auf Mikrocontroller.net erarbeiten.
Das Ziel dieser Aktion ist, dass der Motor losläuft, wenn der Button gedrückt wird.  Bei mir lief das problemlos. Der Motor macht eine volle Umdrehung, da 200 relative Schritte vorgegeben sind. Drückt man nochmal, wird wieder in die gleiche Richtung gedreht.

Hier das entsprechende Programm:

// step and button
// -*- mode: C++ -*-
//
// Make a single stepper turn on button press
//
// 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 buttonPin = 9;     // the number of the pushbutton pin, btn to Vcc, pin via resistor to ground
// only for test purpose
const int ledPin =  13;      // the number of the LED pin onboard

// variables will change:
int buttonState = 0;         // variable for reading the pushbutton status

void setup()
{
  // Change these to suit your stepper if you want
  stepper.setMaxSpeed(10);   // max 10 steps per second
  stepper.setAcceleration(5);
  // initialize the LED pin as an output:
  pinMode(ledPin, OUTPUT);      
  // initialize the pushbutton pin as an input:
  pinMode(buttonPin, INPUT);     

}

void loop()
{
  // read the state of the pushbutton value:
  buttonState = digitalRead(buttonPin);

  // check if the pushbutton is pressed.
  // if it is, the buttonState is HIGH:
  if (buttonState == HIGH) {     
    // turn LED on:    
    digitalWrite(ledPin, HIGH);
    stepper.move(200);
  }
  else {
    // turn LED off:
    digitalWrite(ledPin, LOW);
  }
stepper.run();   // run immer ausführen um Bewegung zu vollenden, siehe AccelStepper Classes
}

 

Der jetzt eingebaute Button ist praktisch der Umdrehungssensor an der Drahtspule. Das Signal wird am Filawinder durch einen Magneten erzeugt, der an einem Hall-Sensor vorbeiläuft. Pro Umlauf der Spule muss sich später die Drahtführung um einen Drahtdurchmesser weiterbewegen.
Ein weiterer Button wird jetzt eingefügt. Er simuliert die Endpositionen, – die linke und rechte Seite der Spule.

Meine Testkonstruktion ist auch schon fertig. Sämtliche Halter, der Reiter und die Verbindungsmuffe sind gedruckte Teile. Die Files werde ich später zur Verfügung stellen.

Drahtführung Testaufbau Antrieb und Verbindung Drahtführung Testaufbau linker Halter Drahtführung Testaufbau Reiter Drahtführung Testaufbau Gesamtansicht

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 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 …

Filawinder – Aufbau

Wer den Aufbau laut Anleitung vornehmen will, kann eigentlich nicht viel falsch machen. Die mitgelieferte Anleitung zeigt Schritt für Schritt wie es geht. Wer sich vorher ein Bild davon machen will sollte soliforum.com aufsuchen. Das ist ein englischsprachiges Forum, in dem alles rund um das Thema 3D-Druck diskutiert wird. Hier findet man aber eben auch viele weitergehende Themen. Beispielsweise der Filastruder und der Filawinder werden in aller Ausführlichkeit diskutiert. Alle Aufbauanleitungen findet man hier auch. Die kostenlose Mitgliedschaft lohnt sich auf jeden Fall um mitzudiskutieren oder eben auch am Anfang Fragen zu stellen. Ich habe immer sehr schnell sehr gute Antworten erhalten.

Ich habe zwar auch mit dem Aufbau gemäß Anleitung begonnen, aber dann schnell festgestellt, dass ich ein paar Änderungen benötige. Diese waren größtenteils dadurch bedingt, dass ich größere Spulen für das Filament benutze. Wie ich schon im Unpacking geschrieben habe, änderte ich auch das Antriebsrad.  Das neue Antriebsrad ist wie immer im thingiverse zu finden:

Antriebsrad neu IMAG0039
IMAG0041 IMAG0040

Aufgrund meiner größeren Spulen musste die gesamte Wickelkontruktion wachsen. Da ich keinen Lasercutter habe, wurde die Kontruktion aus Aluminium erstellt:

IMAG0051 IMAG0036
IMAG0042

 

Das bedingt jetzt natürlich auch eine längere Welle für die Spule und damit eine neue Abstützung auf der rechten Seite:

IMAG0048 IMAG0047

Die Antriebskontruktion habe ich ebenfalls überarbeitet. Ich wollte erreichen, dass das Zahnrad an der Spule auf der Achse frei einstellbar ist und trotzdem mit zwei Muttern fixiert werden kann. Dann passt natürlich nicht mehr das urpsprüngliche Antriebsrad (siehe oben):

IMAG0044 IMAG0044b

… und jetzt funktioniert der Hall-Sensor nicht mehr. Er ist zu weit vom Magnet im Spulenzahnrad entfernt. Also muss die Platine auch anders montiert werden:
IMAG0045
Wie man sieht, habe ich die Drähte in einem Spiralschlauch geführt.

Als letztes habe ich dann noch den Verteilerarm eine Position nach hinten versetzt. Er kam sonst mit der Spule in Konflikt. Ich lasse übrigens den Filamentdraht unterhalb der Spule zulaufen. Ein simples Drehen des Motorsteckers erledigt das.

Ich vermute, dass sich der Draht auf einer Seite der Verteilerkonstruktion verfangen würde. Deshalb der provisorische Guide (braun). Da ändere ich aber noch was dran, weil es erstens nicht breit genug ist und zweitens nicht gut aussieht.
IMAG0049

Letzte kleine Änderung: Bei mir liegt im Betrieb der Winder genauso wie hier auf den Bildern. Er zieht bei mir den Draht von unten an und führt ihn dan waagerecht in den Winder. Das hat wunderbar funktioniert.
IMAG0050

Der Winder war so zusammen mit dem Extruder, der bei mir aufrecht an der Wand hängt gute 20 Stunden im Betrieb. Es hat in dieser Zeit alles gut gearbeitet. In einer unbeobachteten Minute hat es aber anscheinend eine kleine Störung gegeben, die dazu führte, dass der Winder nicht mehr gewickelt hat. Warum war nicht nachvollziehbar, denn auch nach Neustart des Gerätes lief wieder alles wunderbar.

Einen kleinen Fehler hatte ich übrigens auch gemacht. Ich erzeuge 3mm Filamentdraht. Das Gerät ist aber nativ für 1,75mm konzipiert. Den Unterschied merkt man daran, dass sich der Verteiler unterschiedlich schnell bewegt. Ein Jumper an der Steuerplatine schaltet das um. Hier dann auch gleich die Erklärung für den Magnet und den Hall-Sensor: Damit wird der Verteilerarm getriggert.

Und so sieht das Ergebnis aus:
IMAG0052

Filawinder: Das Auspacken des Pakets

Mal wieder ein Paket aus der weiten Welt. Der Filawinder ist angekommen. Hier gleich mal ein paar Bilder vom Auspacken.

IMAG0014 IMAG0015

Die Holzteile müssen zunächst mal von der Schutzschicht befreit werden.

IMAG0016

Anschließend sehen sie schon wesentlich besser aus.
IMAG0017

Jetzt Schrauben sortieren.
IMAG0018

Die bereits vorher selbst angefertigten Kunststoffteile. Die Dateien liegen bei Filastruder im Forum.
IMAG0020

Die Montage beginnt gemäß Anleitung.

IMAG0019 IMAG0021

Das Antriebszahnrad gefällt mir so absolut nicht. Die Sicherung auf der Achse ist leider schon beim Zusammenbau größtenteils weggebröselt. Einerseits eine Konstruktionsschwäche und andererseits ein Fehler im neuen Slic3r. Momentan hält es.