Mittwoch, 1. Oktober 2014

Anschnallen und festhalten! 3D-Drucker in Hyperspeed

Die neuse Version des Ormerod Firmware Branches ermöglicht die Einstellung eines Geschwindigkeitsmultiplikators. Zusammen mit einem erhöten Motorstrom kann hier an der Druckgeschwindigkeit gedreht werden. Die Motoren des Ormerod sind für 1,4 A ausgelegt und die Treiber können bis zu 2 A treiben. Dabei ist darauf zu achten, dass die Treiber nur passiv ohne zusätzliche Heatsinks außer dem PCB gekühlt werden. Der obere Berecih der Motorströme sollte also möglichst gemieden werden. Ich habe aktuell die Achsenmotoren auf 1 A und den Extruder bei 800 mA gestellt und erreiche damit bei 300% Druckgeschwindigkeit zufriedenstellende Ergebnisse.
Der Geschwindigkeitsmultiplikator beeinflusst jede Geschwindigkeit des Druckers und kann somit von 0% bis ???% den Drucker auch mal an die Grenzen des Möglichen bringen. Die Bewegungen werden linear Skaliert, was für die Beschleunigungswerte ebenfalls eine skalierung bedeutet. Hierdurch werden im System neue Schwingungen eingebracht, die durch die ruckartigen Start- und Stopbewegungen entstehen. Neben dem erhöhten Geräuschpegel führen die Vibrationen auch zu mechanischen beeinträchtigung. Meine Druckbettbefestigung hat sich im hinteren Bereich gelöst, was dazu führte, das das Bett abgesunken und der Druck damit nach zwei Stunden 300% Druckgeschwindigkeit leider doch noch fehlgeschlagen ist.

Lessons learned:
  • Schraubensicherungslack für Schraube-Mutter alle Verbindungen verwenden
  • Vibrationsdämpfer für den Drucker herstellen
  • Druckgeschwindigkeit im G-Code Generator festlegen und nicht manuell alles beschleunigen
  • Z-Achse ist das ausbremsende Element
  • Große Druckaufträge dauern auch mit 300% Geschwindigkeit sehr lange.
Zum Schluss: Verfahrgesräusche bei 300%

Sonntag, 28. September 2014

3D Drucker Augen zu und kapazitiv testen

Im Rahmen einer kleinen Umbauaktion des Druckers habe ich auch den optischen Sensor gegen einen kapazitiven Nährungesschalter getauscht. Das ging nicht so leicht wie erwartet. Der optische Näherungsschalter wird zum Einstellen der X- und Z-Achse verwendet. Diese Konfiguration kann mit einem kapazitiven Sensor nicht durchgeführt werden, da der Sensor wesentlich größer ist als die kleine Platine des optischen Sensors.
Druckkopf mit vorläufig angebrachtem kapazitiven Sensor zur Druckbettbestimmung
Im Hintergrund der Abbildung kann man den neuen Endschalter der X-Achse erkennen. Der wird, wie der Endschalter der Y-Achse am Duet Board an den Pins neben dem Z-Motor. Dabei wird der Schalter wie der Y-Endschalter angeschlossen. Die LED auf dem Duet Board soll nun leuchten, wenn der Endschalter nicht betätigt wird. Die Löcher zur Montage des Tasters sind im X-Achstenträger schon vorhanden und müssen nicht neu angebracht werden.

Der schwierigste Teil ist es den Endtaster jetzt als Quelle für den Nullpunkt zu etablieren. Dazu muss die Firmware geändert werden. Dank 3D-ES gibt es aber ein script, mit dem man sich das git Repository von dc42 herunterladen kann. Dort muss in der Auswahl allerdings der dev tree und nicht der duet tree aus.

   - git clone -b duet ${FW_REPO}/${FIRMWARE} ${FIRMWARE}
   + git clone -b dev ${FW_REPO}/${FIRMWARE} ${FIRMWARE}

Nachdem das Repository heruntergeladen wurde kann mit 

   ./make.sh && ./make.sh install

Der Code kompiliert und installiert werden. Die zu ändernden Werte befinden sich in der Datei "Platform.h" bei Zeile 120

   - #define Z_PROBE_AXES {true, false, true}
   + #define Z_PROBE_AXES {false, false, true}

Damit wird der Firmware gesagt, dass nur noch die Z-Achse mit Hilfe des Z-Sensors genullt werden soll. Alle anderen Achsen haben eigene Endstops.

Bei der Einstellung des Z-Nullpunkts kann wie in der Anleitung beschrieben vorgegangen werden, nur dass man jetzt einen definierten Schaltpunkt hat und daher der Wert keine Rolle spielt. Ich habe mich langsam an den Nullpunkt herangetastet und dann 1,5mm nach oben gefahren. Der Schaltpunkt des Sensors habe ich dann so eingestellt, dass er gerade an diesem Punkt schaltet. Dann den Punkt noch einmal angefahren und der neue Wert für M31 stand fest.

   M31 Z1.66 P600

Wobei der Wert bei P wie oben schon beschrieben relativ egal ist, da der Sensor einen Schaltpunkt hat ab dem er dann von 0V auf einen festen Wert springt. Dieser Wert ist meistens die Betriebsspannung des Sensors. In unserem Fall ist das aber ehr hinderlich, da der Sensor mit 12V betrieben werden muss. Also ein Spannugnsteiler zwischen Signal und Masse, sodass ein ca. 3V starkes Signal am ADC Eingang anliegt. Den Sensor, wie den Taster für die X-Achse, als einfacher Enschalter zu verwenden scheitert, da der Sensor auf Versorgungsspannung schaltet und nicht auf GND, wie es von den Endschaltern getan ist. Hier kann man eventuell noch etwas verbessern.

Alle Änderungen in der Firmware des Ormerod werden in meinem github Repository eingespielt und stehen zur Verwendung zur Vefügung.

Samstag, 27. September 2014

3D Drucker der zweite Akt

Ein paar Drucke sind erfolgreich beendet worden, es sind sogar ein paar brauchbare Sachen dabei herausgekommen. Aber was wäre denn ein RepRap, wenn er nicht direkt mit besseren Teilen erweitert wird. Wie im ersten Bericht schon beschrieben sind die Zahnräder für die Z-Achse bereits ersetzt. Heute habe ich das Flachbandkabel für das beheizte Druckbett mit einem 1,5 mm² Kabel ersetzt. Das ist jetzt wesentlich leichter zu verlegen und blockiert nicht die komplette Steuerplatine. Weiterhin habe ich das Netzteil so angeschlossen, dass ich über G-Code Befehle die 12V Steuerspannung zu und abschalten kann. Das benötigt allerdings eine angepasste Firmware. Ich habe es heute mit der Version von dc42 versucht. Die bringt auch gleich eine neue Weboberfläche mit. Somit ist jetzt lediglich die Logik mit dem Standbystrom des Netzteil verbunden und bei bedarf wird die komplette Energie des Netzteils hinzugeschaltet.
Ormerod 1 mit erhöhtem Druckbett und neuem Kabelbaum für den Heizer
Das Software update hat allerdings auch seine Nachteile mit sich gebracht. Einmal führte es dazu, dass der X-Achsen Motor falsch herum angesteuert wurde. Im Nachhinein sind jetzt alle Achsenmotoren gleich angeschlossen und es funktioniert wieder. Ein weiteres Problem, das leider weiterhin besteht ist, dass der Vorgang des Nullens der Z-Achse das Koordinatensystem verschiebt. Und das führt dazu, dass die Punkte für den automatischen Bettabgleich nicht mehr an den ursprünglichen Punkten zu finden sind. Ich hatte aber heute keine Zeit mehr die Punkte anzupassen und zu testen, ob ich mit neuen Referenzpunkten auf ein annehmbares Ergebnis komme. Laut dc42 liegt dieser Fehler an einem Bug in der RepRapPro Firmware, die auch in sinem Fork nicht behoben wurde. Der Bug tritt auf, wenn Achsenkompensation verwendet wird. Eine weitere Untersuchung folgt. Update: Die heute erschienene Version 0.78t zeigt dieses Verhalten nicht mehr.

Geplant sind weitere Erweiterungen, wie ein Schwingungsdämpfer, sowie ein Schutz für den Lüfter. Auch werde ich auf lange Sicht den optischen Sensor gegen einen kapazitiven tauschen, ich habe nämlich heute einige Tests gemacht, die sehr vielversprechend auf die Reproduzierbarkeit der Ergebnisse gelaufen sind. Das Problem des optischen Sensors ist, neben der Empfindlichkeit gegenüber Tageslicht, die ungleichen Refektionseigenschaften der unterschiedlichen Tastpunkte. Mit dem kapazitiven Sensor habe ich an zwei unterschiedlichen Stellen den Nullpunkt einwandfrei bestimmen können.

Ein weiterer geplanter Umbau ist die Neustrukturierung des X-Auslegers. Dort wird im Moment eine M5 Gewindestange verwendet um den Arm nach obern und unten zu verfahren. Ich habe mir überlegt die vorhandenen Kunststoffteile so neu zu drucken, dass die Kraft nicht mehr von der Seite, sondern zwischen Führungslinie und Biegekraft liegt, also auf einer Achse mit dem Ausleger. Außerdem soll die M5 Spindel gegen eine stabilere und spielfreie Tr10x2 Trapezspindel getaucht werden. Der Motor wird auch nicht über Zahnräder die Achse antreiben, sondern direkt über eine Kupplung. Dieser Umbau benötigt allerdings einen funktionierenden Drucker, also erst einmal die Fehler der Achsenkompensation auftreiben und eliminieren.