Posts mit dem Label Firmware werden angezeigt. Alle Posts anzeigen
Posts mit dem Label Firmware werden angezeigt. Alle Posts anzeigen

Montag, 14. Juli 2014

Hotend PID Autotuning

Um eine definierte Termperatur am Hotend zu erhalten gibt es in Marlin zwei Methon. Die Simplere, BANG-BANG genannt begnügt sich damit das Hotend einfach einzuschalten, wenn die Temperatur unter der definierten liegt und auszuschalten wenn sie darüber ist.
Die zweite Methode benutzt PWM um die Temperatur so konstant wie möglich zu halten. Damit diese Methode funktioniert benötigt die Firmware drei Werte, Kp, Ki und Kd. Glücklicherweise verfügt Marlin über eine Methode um diese Werte automatisch zu erhalten.

M303 E0 S200 C8 

Dieser Befehl für das PID autotune programm aus, definiert den ersten Extruder (E0),eine Solltemperatur von 200 °C, und 8 Cycles rund um die Temperatur. Als Ausgabe erhält man von der Firmware die drei genannten Werte, die man in die Firmware (Configuration.h) oder als eigenen Gcode Header einbauen kann. Meine Werte habe ich in Slic3r als custom start gcode eingebaut.

M301 P25.38 I1.40 D115.19 ; set PID for extruder

Acceleration und Jerk

Zwei Einstellungen der Firmware beeinflussen das Verhalten des 3D Druckers erheblich, und die möchte ich jetzt etwas genauer analysieren.

Acceleration

Wenn man Beschleunigung nicht berücksichtigt, dann erzeugt das Slicer Programm einfach GCode der quasi von 0-100 in 0 sekunden beschleunigen müsste. Das ganze läßt sich zwar in Software leicht realisieren, aber wenn es um physikalische Bewegungen geht, wie etwa die Steuerung eines Schrittmotors ist das eigentlich nicht möglich. Der Schrittmotor, bzw. die ganze Achse hat nun einmal eine gewisse Trägheit die eine unedliche Beschleuinigung verhindert.
Zu diesem Zweck gibt es folgende Parameter in der Marlin Firmware, die unbedingt geändert werden müssen, da sie in der Default Einstellung viel zu hoch sind:

#define DEFAULT_MAX_ACCELERATION      {180,180,10,200}    // X, Y, Z, E maximum start speed for...
#define DEFAULT_ACCELERATION          60    // X, Y, Z and E max acceleration in mm/s^2 for printing moves
#define DEFAULT_RETRACT_ACCELERATION  60   // X, Y, Z and E max acceleration in mm/s^2 for retracts

DEFAULT_ACCELERATION definiert die Standardbeschleunigung und  DEFAULT_MAX_ACCELERATION die obere Grenze.
Bei einer Suche im Internet habe ich auch User gefunden welche die Werte noch wesentlich niedriger angesetzt haben.
Sind die Werte zu hoch, so kann es durchaus sein, dass der Motor Schritte ausläßt und deshalb Fehler im Druck passieren, sind die Werte zu niedrig, so beeinträchtigt das die Druckgeschwindigkeit. Es bleibt also durchaus Raum für Trial and Error.
Will man die obigen Werte als GCODE dann sind folgende M-Codes zu verwenden

M201 X180 Y180 Z10 E200 # DEFAULT_MAX_ACCELERATION
M204 S60 T60 # DEFAULT_ACCELERATION and DEFAULT_RETRACT_ACCELERATION

Die M-Codes können übrigens auf http://reprap.org/wiki/G-code#M201_-_Set_max_printing_acceleration nachgelesen werden.

Jerk

Jerk ist der maximale Geschwindigkeitsunterschied, der ohne Beschleunigung ausgeführt werden kann. Wenn JERK zum Beispiel 20.00 mm/s wäre und eine Geschwindigkeitsänderung von 0-20 mm/s benötigt wird, dann kann dies ohne Beschleunigung ausgeführt werden.

// The speed change that does not require acceleration (i.e. the software might assume it can be done instantaneously)
#define DEFAULT_XYJERK                20.0    // (mm/sec)
#define DEFAULT_ZJERK                 0.4     // (mm/sec)
#define DEFAULT_EJERK                 5.0    // (mm/sec)

Wie üblich ist die Z-Achse die Trägste und kann nicht so schnell bewegt werden, der Extruder ist ebenso unabhängig einstellbar.
Der Begriff JERK kommt aus den GRBL Wurzeln von Merlin.
Bei mir sind diese Werte (noch) default.

Montag, 7. Juli 2014

Der 3D Print Software Stack

Was ich zu Beginn meiner 3D Druck Karriere noch nicht wußte, war welche Software Produkte man in welcher Abfolge für das Erzeugen eines Drucks benötigt. Hier nochmal eine grobe Übersicht, welche Schritte und welche Produkte notwendig sind.

Ich beschränke mich hier ausschließlich auf OpenSource Software.

Zeichnen

Grundlegend für einen 3D Drucke ist eine CAD Zeichnung, die man in einem x-beliebigen 3D CAD Programm erstellen kann.
Einige Beispiele sind:
Es gibt sicher noch etliche Programm die 3D Modelle erzeugen können, alle sollten aber zumindest die Möglichkeit haben eine Zeichnung im STL Format zu exportieren.
Die nicht CAD geübten sollten sich auf Thingiverse umschauen und fertige Zeichnungen suchen.

Slicen

Die vorhandene CAD Zeichnung im STL Format, kann noch nicht als Eingabe für den 3D Drucker gebraucht werden, da sie keinen Schichtenaufbau beschreibt. Die Aufgabe des Slicers besteht nun darin aus einem in der Zeichnung definierten Volumen einzelne Schichten zu extrahieren, und jede Schicht in GCODE zu übersetzen, der direkt als Eingabe für die Firmware verwendet werden kann.
Die gängigsten Programm sind
Als Ausgabe erhalten wir vom Slicer eine GCODE Datei. Wer sich dafür interessiert, sollte die Datei einfach mal mit einem Editor aufmachen. Die einzelnen Befehle beschreiben direkt die Bewegungen der einzelnen Achsen (X, Y, Z) und der Extruder (E) in Millimetern. Zusätzlich gibt es noch eine Fülle an M-Codes die spezielle Funktionen des Druckers, wie z.B. das Heatbed ausfzuheizen, auslösen.

Hostsoftware

Die Hostsoftware dient dazu die Gcode Befehle meist über eine virtuelle serielle Schnittstelle an die Firmware auf dem Controller zu senden. Diese Software verfügt meist aber auch noch über eine grafische Darstellung und Kontrollmöglichkeiten um die Motoren und den Extruder auch ohne GCODE zu steuern. Das ist wichtig um z.B. das Heatbed zu kalibrieren, oder einen Filament Stau zu beheben indem man einfach den Extruder einige Millimeter rückwärts fahren läßt.
Die Vertreter die ich kenne
Es wäre aber durchaus machbar einfach die bestehende GCODE Datei an die Serielle Schnittstelle zu schicken.


Firmware

Die Firmware ist am Microcontroller installiert und kommuniziert über die serielle Schnittstelle mit der Hostsoftware. Primäre Aufgabe der Firmware ist die Steuerung der 5 Motoren(X, Y, 2*Z, Extruder), des Hotends, des Heatbed, der Überwachung der Endstops und die Temperaturüberwachung.

Aus den empfangenen GCODES erzeugt die Firmware STEP + DIRECTION Impulse für die Stepper Motor Treiber, die Umrechnung ist nicht ganz trivial und der Interessierte sollte sich mal auf der GRBL Seite schlau machen.
Die gängigste Firmware bei REPRAP basierten Druckern ist wohl Marlin.

Wie man die Firmware auf den Arduino Controller bekommt beschreibe ich in einem anderen Artikel, das ist als Voraussetzung auch nur einmal zu erledigen und reicht dann für viele Drucke.

Samstag, 5. Juli 2014

Fehler: Ausdrucke sind zu nieder

Jetzt habe ich meinen Drucker soweit kalibriert, sodass eigentlich alles passen sollte, aber bei dem Versuch ein kleines Zahnrad zu drucken, habe ich immer das Problem, dass das Stück einfach zu klein rauskommt, irgendwie gequetscht.Zusätzlich macht mein Drucker beim Start eines Ausrucks komische Geräusche, die wahrscheinlich dadurch verursacht werden, dass die Z Achse zu schnell bewegt wird.
Wie beides zusammenhängt werde ich gleich noch erklären hier zuerst mal ein Bild von einem Zahnrad wie es nicht sein sollte.
Gestaucht, wäre wohl der richtige Ausdruck, aber warum.
Nach langem stöbern bin ich dann doch auf des Rätsels Lösung gekommen.

Da ich Merlin selbst installiert habe und damit auch die Basiskonfiguration verwendet, spricht die Firmware die Motoren mit einer zu hohen Bsschleunigung an, insbesondere die Z-Achse die beim Achatz bei weitem nicht dieses Tempo mithalten kann. Ich denke auch alle anderen 3D Drucker hätten mit diesen Werten ein Problem.

Hier der Diff zur Originalkonfiguration

+#define DEFAULT_AXIS_STEPS_PER_UNIT   {80, 80, 3970.588235294, 602.898453333}  // default steps per unit for Ultimaker
+#define DEFAULT_MAX_FEEDRATE          {300, 300, 3, 25}    // (mm/sec)
+#define DEFAULT_MAX_ACCELERATION      {1000,1000,5,10000}    // X, Y, Z, E maximum start speed for accelerated moves. E default values are good for Skeinforge 40+, for older v

-#define DEFAULT_AXIS_STEPS_PER_UNIT   {78.7402,78.7402,200.0*8/3,760*1.1}  // default steps per unit for Ultimaker
-#define DEFAULT_MAX_FEEDRATE          {500, 500, 5, 25}    // (mm/sec)
-#define DEFAULT_MAX_ACCELERATION      {9000,9000,100,10000}    // X, Y, Z, E maximum start speed for accelerated moves. E default values are good for Skeinforge 40+, for older
-
-#define DEFAULT_ACCELERATION          3000    // X, Y, Z and E max acceleration in mm/s^2 for printing moves
-#define DEFAULT_RETRACT_ACCELERATION  3000   // X, Y, Z and E max acceleration in mm/s^2 for retracts
+#define DEFAULT_ACCELERATION          500    // X, Y, Z and E max acceleration in mm/s^2 for printing moves
+#define DEFAULT_RETRACT_ACCELERATION  500   // X, Y, Z and E max acceleration in mm/s^2 for retracts


Insbesondere die DEFAULT_MAX_ACCELERATION muss drastisch verringert werden, damit alles klappt. Eigentlich hat mein 3D Drucker nicht das Werkstück gestaucht, sondern eigentlich nur Steps verloren, weil das Tempo nicht umgesetzt werden konnte.
Und als netter Nebeneffekt verschwand damit auch das komische Geräusch beim starten eines Druckes. Slic3r baut bei jedem Start standardmäßig eine Z +5 Bewegung ein, die bei dem Tempo einfach nicht richtig umgesetzt werden konnte.

So schaut meine Werkstücke nun aus:
Auch sie Maße passen jetzt +/- 0.2 mm, damit bin ich vorerst zufrieden.
Wer jetzt genau hinsieht, erkennt auch gleich noch ein zweites Problem, das ich gelöst habe, aber dazu mehr im nächsten Artikel.

Mittwoch, 11. Juni 2014

Prusa I3 Achatz Edition Kalibrieren - Extruder

Mein 3D Drucker von Achatz ist jetzt soweit fertigestellt, dass es an das Kalibrieren geht. Die Adresse von der die Informationen haben ist http://reprap.org/wiki/Calibration.
Heute nehme ich mir die Kalibrierung des Extruders/Hotends vor, lt. Anleitung Layer Width auf 0.2 mm und Layer Height auf 0.5 mm in Skeinforce -> Carve.

Mal sehen wie der Drucke des http://www.thingiverse.com/download:17273 Things klappt.

Folgendes habe ich bis in Sachen kalibrierung schon erledigt:
  • X, Y Achsen sind bestimmt durch die Anzahl der Zähne am Stepper Motor und der Abstände am Riemen, das haben ich als Parameter in der Merlin Firmware hinterlegt.
  • Z Achse gemessen und den Wert in der Firmware solange angepasst, bis das gemessene mit dem eingestellten zusammenpassen.
  • Extruder gemessen und angepasst.
  • HeatBeat in der Höhe nivelliert, sodass das Hotend immer denselben Abstand zum Heatbed besitzt.

Dazu gehört dann auch noch die Anbringung der Endstops, da vor jedem Print ein Home auf allen drei Achsen durchgeführt wird.

Vor dem Test noch auf der Seite neben dem Heatbed noch schnell mal den Extruder 30mm frei laufen lassen, sodass ich mir sicher bin, dass auch wirklich etwas rauskommt.

Hier das erste Ergebnis
Zwei Seiten schauen ganz gut aus, auf der Rückseite ist bei den letzen Layern aber die Ecke etwas eingebrochen. Lt. der Anleitung die im reprap Wiki gefunden habe, ist es für den ersten Versuch in Ordnung wenn nur eine Seite wirklich gut ausschaut.
Das ist jetzt etwas Subjektiv, aber ich denke eine Seite ist echt gut, die zweite geht so, die beiden anderen sind schlicht Sc....e.

Ein zweiter Versuch, diesmal mit aktiver Kühlung, da ich den Test mit PLA mache, mal sehen ob das etwas verändert.

Rechte der zweite Versuch, links der Erste. Man erkennt schön dass die obere Ecke beim zweiten Versuch wesentlich besser ist.


Zweiter Versuch war wirklich besser, ich vermesse nun das Objekt um die Dimensionen zu kontrollieren.

  • Wandstärke 0.86mm
  • Seitenlänge 22.38mm SOLL 22.5 mm
  • Höhe 9.85mm SOLL 10mm
 Ich denke die Dimensionen stimmen nicht schlecht.

Als nächstes Objekt drucke ich

Als Baseline mache ich einen Druck mit Skeinforge Standardeinstellung von 0.35.

Hier das Ergebnis


besser geasgt, das was vor meinem Abbruch davon zu sehen war.
Leider hat der Test m.M. überhaupt nicht geklappt, schon beim zweiten Layer hatte ich das Gefühl das das Hotend in den ersten Layer hineindruckt und mit jedem Layer wurde das schlimmer, das Plastik wurde hart, das Hotend kam nicht mehr vorbei und Y und X wurden versetzt -> Abbruch.

Als nächstes wie im Wiki vorgeschlagen mit dem Wert 1.0


Also abbrechen musste diesmal nicht sein, aber ih bemerkte, dass bei jedem Layer etwas zuviel Plastik aufgetragen wird, sodass bei den letzten Layern das Hotend eigentlich in den vorherigen Layer hinein Extrudiert.

Irgendwie bin ich heute einfach zu müde weiter zu machen, irgendwas ist hier nicht optimal eingestellt, aber was?