Dauerdruckplatte

An der einen oder anderen Stelle hatte ich hier im Block beschrieben, wie ich ABS dazu bringe auf meiner Druckplatte zu haften. Das ist auch so nach wie vor richtig, – es funktioniert so tadellos.

Nun hat diese Methode aber diverse Nachteile:

  • Aufbringen des Kaptonbandes sehr aufwändig
  • Nahezu unmöglich eine absolut glatte faltenfreie Oberfläche hinzukriegen
  • Jedesmal mit Aceton reinigen
  • Nicht sonderlich haltbar. Nach 5 Drucken ist meistens die Kaptonschicht ziemlich ramponiert.
  • Abziehen des zerstückelten Kaptonbandes ist mühselig und das Reinigen ist auch aufwändig
  • Drucke haften auch nach Abkühlung zu fest auf der Oberfläche. Ablösen schwierig.

Ich habe mich Anfang Oktober 2014 dann auf die Suche nach einer besseren Methode gemacht und dazu sehr viele Foreneinträge gelesen. Mir fiel dann eine sogenannte Dauerdruckplatte auf, die allgemein sehr gelobt wurde. Da ich das zunächst mal über längere Zeit ausprobieren wollte, habe dazu zunächst noch nichts geschrieben. Jetzt drucke ich allerdings schon drei Monate darauf und ich bin wirklich überzeugt davon.

Dauerdruckplatte
Man sieht auf dem Bild die braune Platte, auf der gerade ein Delphin mit ABS gedruckt wird. Mein Aufbau von unten nach oben:

  1. Presspappe auf dem Y-Carriage
  2. Bodenlaminat-Isolationsmaterial mit silberner Seite nach oben
  3. Heatbed
  4. Spiegelfliese 20cmx20cm (die besonders Gute von Ikea 🙂 ) als Heatspreader
  5. Dauerdruckplatte 20cmx20cm
  6. Die Druckplatte ist mit Klammern mit der Spiegelfliese zusammen auf das Heatbed geklemmt

Während bei der Verwendung von Kaptonband noch ein gewisses Aufpressen der ersten Druckschickt sinnvoll erscheint, kann man hier auf solche Spielchen verzichten. Ich stelle den Abstand zwischen Druckdüse und Dauerdruckplatte immer so ein, dass ein Notizklotzzettel gerade schleifend dazwischen zu schieben ist.

Der Druck haftet so lange darauf, wie die Platte heiß ist. Aktuell verdrucke ich mein Terluran bei 225°C (220°C erste Schicht) und die Platte ist immer 122°C heiß. Wenn der Druck fertig ist und die Platte langsam kalt wird knackt es ein paar Mal und das Teil löst sich vollkommen von allein.

Ein paar Infos noch:

Die 122°C für das Druckbett scheinen das absolute Maximum meines Druckbettes zu sein. Die Messung hängt natürlich stark von der Position des Thermistors ab. Bei mir liegt er in dem Loch des Heatbeds mit Kontakt zur Spiegelfliese. Zum Aufheizen lege ich immer noch einen Karton oben drauf. Es geht dann merklich schneller. Die Isolation auf der Unterseite scheint mir nicht so viel zu bringen, wenn der Drucker eh schon gekappselt ist. Zumindest haben alle meine Versuche dahingehend nicht viel gebracht, – inklusive der aktuellen Konfiguration mit dem Laminat-Isolationsmaterial, was aus Silberfolie und dichtem Schaum besteht. Das nächste Heatbed wird auf jeden Fall auf Basis einer Silikonheizfläche entstehen.

Die Dauerdruckplatte muss je nach Material ab und zu mit Alkohol gereinigt werden.  Ich benetze ein Küchentuch mit Alkohol und wische einmal drüber. Dann passt es wieder. Die Notwendigkeit des Abwischens hängt wohl davon ab, wie stark das verdruckte Material ausfettet. Die Platte ist übrigens beidseitig benutzbar und sollte auch hin und wieder gedreht werden.

Herr Dr. Schlautmann schreibt dazu:
Reiner Alkohol und auch Aceton verdrängen das in die Oberfläche diffundierte Wasser, dadurch verstärkt sich die Haftwirkung und die Trennfunktion kann verloren gehen. Dieser Prozess kann durch die erneute Behandlung mit Wasser regeneriert werden. Man spricht bei Kunststoffen von Konditionierung. (Die Platte einige Zeit über Wasserdampf halten oder warm mit Wasser abwaschen) Auch durch häufigen Betrieb bei hohen Temperaturen kann dieser Effekt entstehen. Ich klebe die Platten mittlerweile mit Transferklebeband auf, das ist bei den größeren Platten sehr empfehlenswert.
„3M 468MP“.

Also kurzum: Ich kann die Platte uneingeschränkt empfehlen und werde sie auch in weiteren Druckerprojekten einbauen. Die Platte gibt es bei MTplus. Unter „Produkte“ ist die Platte zu finden. Der Inhaber der Unternehmens, Herr Dr.-Ing. Philipp Schlautmann, ist übrigens sehr freundlich und hilft bei Problemen per Mail weiter. Mittlerweile habe ich aber auch recht viel Erfahrung damit und helfe auf Anfrage gern.

Nur mal so nebenbei: Wenn ich hier über solche Produkte berichte, tue ich das aus Erfahrung/Überzeugung. Ich bin in keinem Fall am Umsatz beteiligt. Sollte das mal anders sein, werde ich das fairnesshalber angeben.

Der Extruder ist defekt

Mein Extruder lief die letzten Tage ohne Pause durch. Etwa 3,5kg sind wohl am Stück produziert worden. Dann musste ich feststellen, dass das Filament nicht mehr cremeweiß herauskam sondern immer mehr grau wurde.

Nachdem ich den Extruder zerlegt hatte, war das Problem schnell gefunden. Das obere Axialzylinderrollenlager war vollkommen trockengelaufen und verrostet. Beim Zerlegen fielen schon die ganzen kleinen Zylindernadeln heraus, weil der Käfig zerbrochen war. Die ganzen Rostbestandteile sind dann irgendwie durch den Extruder gewandert. Kein Wunder, denn um die Schadenstelle heraum war alles voll mit Abrieb.

Jetzt musste ich zunächst mal ermitteln, was das für ein Lager war. Durch Messen und Recherchieren habe ich es dann gefunden. INA TC815. Die Besonderheit ist, dass der Innendurchmesser genau auf den Holzbohrerschaft passt. 1/2-Zoll ist aber in Deutschland höchstens noch bei Wasserrohren ein Begriff. So konnte mir mein örtlicher Wälzlagershop auch nicht wirklich weiterhelfen. Ein Lager wäre zum „Schnäppchenpreis“ von 27€ über die Theke gegangen. Dafür musste es aber zunächst mal bestellt werden, denn vorrätig ist es nicht. Und noch einen kleinen Hinweis gab er mir mit auf den Weg als ich ihm sagte, ich hätte doch das alte Lager gut geschmiert, – mit WD-40. „Niemals mit WD-40 schmieren, wenn es um Lager geht“ war seine Aussage. WD-40 wäre dafür so ziemlich das Schlimmste, was man nehmen könnte. Er empfahl mir ein paar andere Öle/Fette. Da muss ich nochmal ein bisschen recherchieren.

In Anbetracht des hohen Preises habe ich dann Alternativen gesucht, selbstverständlich auch im Internet:

  • ebay in Deutschland und England waren nicht hilfreich. Wenn überhaupt lieferbar nur zu enormen Preisen. Amazon ebenfalls Fehlanzeige.
  • google brachte nur Ergebnisse aus USA. Na das wusste ich ja schon, denn der Extruder kommt ja von dort.
  • ebay USA war ähnlich aufgestellt wie die beiden europäischen Pendants.
  • Andere Lager nehmen geht auch nicht …

Die nächsten Lagertypen sind 12mm und dann 15mm. Der Schaft hat leider ziemlich genau 12,7mm – eben ein halbes Zoll. Also scheiden beide Lösungen aus. Der Konstrukteur des Filastruders meinte zwar, dass die 15mm kein Problem wären, das Lager sich selbst zentrieren würde und er seinen Extruder ebenfalls mit einem zu großen Lager bestückt hätte, aber darauf wollte ich mich nicht einlassen. Schließlich müssen Lagerkranz und beide Lagerscheiben sauber aufeinanderabrollen. Der das aber 3 einzelne Teile sind, habe ich meine Zweifel an der sauberen Funktion.

Ich habe dann noch auf aliexpress nachgeschaut. Das ist der große asiatische Konkurrent von ebay. Und siehe da, dort war ein akzeptabler Anbieter zu finden. Der hat das baugleiche NTA815.

Gelesen, bestellt und jetzt heißt es warten. Ich hab gleich 10 Sätze bestellt, also Lagerkränze und je zwei Scheiben. Wer in die gleiche Misere kommt wie ich, kann sich bei mir melden. Ich schreibe hier mit voller Absicht nicht den Preis hin, den ich jetzt zahle. Nur soviel: Für die 27€ nur für einen Lagerkranz bekomme ich jetzt gleich mehrere Sätze.

Ja und deshalb kann ich auch bis mindestens Mitte Januar kein Filament erzeugen und damit auch nicht verkaufen.

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.

Atheros WLAN-Treiber unter Windows 7 (Win8 auch?) führt zu BlueScreen BSOD

Eigentlich passt es ja gar nicht in meinen Blog. Trotzdem der Hinweis, weil ich nirgends im Internet eine gute Lösung für das Problem gefunden habe ….

Wer den Atheros Chipsatz für WLAN in seinem Notebook oder Netbook hat, wird bei Treiberversionen ab 10.X eine böse Überraschung erleben, – BlueScreen.

Nach stundenlangem Probieren habe ich dann rausgefunden, dass die letzte 9.X-Version installierbar ist und nicht zu BSOD führt.

Zudem musste ich feststellen, dass die Atheros-Seite mit Firefox auf Kriegsfuss steht. Die Seiten durchblättern geht ja noch. Treiberdownload Fehlanzeige. Meine Lösung war das Ausweichen auf den Internet Explorer von Microsoft. Da geht es dann.

Vielleicht hilft es ja dem Einen oder Anderen.

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 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 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².