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

Dienstag, 17. März 2015

Druckfehler Tutorial: Fehler im Toplayer


Im Toplayer finden sich manchmal Artefakte, Defekte und Fehler, die sich sonst im übrigen Druck nicht oder nur selten wieder finden.
Die Ursache kann der stark verkleinerte Querschnitt im Vergleich zum Gesamtobjekt sein, den Toplagen üblicherweise haben.
Eien Pyramide druckt man ja üblicherweise mit der Spitze oben und der Grundfläche unten. Im Laufe des Druckvorgangs sinkt also der Objektquerschnitt und somit die abzufahrenden Strecken.
Rechenbeispiel:

Ein Auto bewegt sich zum Zeitpunkt t_1=0\,\mathrm s mit einer Geschwindigkeit von v_1=10\,\mathrm{\tfrac{m}{s}} im Vergleich zur Straße (das sind 36 km/h). Zehn Sekunden später, zum Zeitpunkt t_2=10\,\mathrm s besitzt es eine Geschwindigkeit von v_2=30\,\mathrm{\tfrac{m}{s}} (das sind 108 km/h). Die durchschnittliche Beschleunigung des Autos ist dann:




Dieser Wert der Beschleunigung bedeutet, dass die Geschwindigkeit des Autos pro Sekunde um 2 m/s (also um 7,2 km/h) zunimmt. (Wikipedia: Beschleunigung)


Da V= s/t ist, ist klar, dass bei kleinerer zurückzulegender Strecke s, die durchschnittliche Beschleunigung a höher und die zur Verfügung stehende Zeit t für das Abfahren der Strecke niedriger ausfallen muss um die durch den Slic3r vorgegegbener Endgeschwindigkeit erreichen zu können. 
Bei wesentlich höherer Beschleunigung, besteht jedoch die Gefahr, dass der Extruder das notwendige Material nicht mehr schnell genug nachfördern kann. Es entstehen dann Defekte (Löcher oder Material Ansammlungen oder beides).
Einfluß nehmen kann man im Slic3r auf diese Faktoren entweder global, indem man die gesamte Druckgeschwindigkeit reduziert, bis auch auf dem Toplayer keine Fehler mehr auftreten, oder selektiv (aber nur mit begrenztem Umfang) durch die beiden Einstellungen:
(Anmerkung: bei Bild 1 ist fälschlicherweise die Einstellung External Parameters markiert, es geht aber um Small Perimeters!)

Speed->Small Perimeters
Speed->Top solid Infill

Bild 1: Leider ist die Vorgabe, wie groß ein Small Perimeter ist, festgelegt (Radius 6.5 mm)

Bild 2: Einstellung beeinflußt nur die äußeren, sichtbaren Toplayer
Wem das alles noch zu schulbuchmäßig war, hier eine grafische Darstellung des Themas:
Wie man an obiger Grafik erkennen kann, hängt die aktuelle  Beschleunigung des X/Y Achsen Systems von der voreingestellten maximalen Beschleunigung, der Druckgeschwindigkeit, aber auch von der abzufahrenden Strecke ab.
Bei der ersten Linie hat der Extruder im Vergleich zur unteren roten Linie eine doppelt so lange Wegstrecke um die maximalen 100 mm/s zu erreichen.
Im unteren Fall muss er doppelt so stark beschleunigen um am Ende der Strecke ebenfalls auf den Wert von 100 mm/s zu kommen. Je kürzer die Strecke also ist, desto mehr beansprucht sie die Förderfähigkeit des Extruders. Bei sehr kurzen Wegen kann es also zu Problemen mit dem Nachschub kommen, da der Extruder sich sehr schnell vom Startpunkt weg bewegt und das zu fördernde Material nicht schnell genug durch die Düse gepresst werden kann. Ob das nun mechanisch scheitert (durchdrehen des hobbed bolt) oder notwendige Temperatur nicht schnell genug nachgeregelt werden kann - oder beides zusammen sei mal dahin gestellt. Die Versuchung, die Arbeitstemperatur zu erhöhen ist natürlich da, aber dieser Vorgang spielt sich im Berecih von Millisekunden ab, daher dürfte eher die Mechanik versagen und ein höherer Anpressdruck an das Filament dürfte eher Wirkung zeigen. Soweit die Theorie.

Zusammenfassung:

Um Überhänge und Brücken und Umkippen zu vermeiden, werden die meisten Objekte so beim Druck ausgerichtet, dass sie unten einen größeren Querschnitt (und damit auch längere Fahrstrecken) haben als weiter oben an der Spitze. Extrembeispiele sind der Eiffelturm oder eine Pyramide.
Daher nimmt gegen Ende des Drucks die Beschleunigung des X/Y Koordinatensystems stark zu. Das kann man auch optisch und akustisch feststellen. Diese starken Beschleunigungen können Ursache für Druckfehler durch Fadenabriß in oberen Layern oder kleinen Strukturen in unteren Layern sein.
Das "Problem" ist ein Softwarethema und kann durch intelligente Algorithmen gelöst werden. Derzeit stehen nur einige Einstellungen zur Verfügung, die helfen können. Als letze Maßnahme ist eine (erhebliche) Herabsetzung der Druckgeschwindigkeit(en) eine Lösung, allerdings zu Lasten der Druckzeit.
Allerdings gibt es beim RepRap FDM Drucken keine einfachen Lösungen, da viele Probleme vielschichtig sind und multiple, sich gegenseitig beinflußende Ursachen haben können. FDM ist ein komplexer Regelkreis, bei dem es in Extremfällen passieren kann, dass unbedenkliche Prozeßparameter, wie beispielsweise die Drucktemperatur, mechanische Schwingungen oder deren Resonanzen, das Filament selbst und andere Effekte lawinenartig so starken Einfluß auf das Ergebnis haben, dass man beim Verstellen einer Größe, andere Parameter so beeinflußt, dass neue Probleme auftauchen. Die Ausführungen hier sind also ein Ansatzpunkt, müssen aber nicht generell und universell die Lösung schaffen. Dies zumal jeder RepRap Drucker anders aufgebaut ist.

Test und Kalibrierobjekte zum Problem:

Hohle Pyramide. Insbesondere die letzten Lagen auf Defekte kontrollieren! Bestimmte Fehler an der Spitze könne auch an einer zu geringen X/Y Riemenspannung oder losem Extruder , so wie Z-Wobble liegen.

http://www.thingiverse.com/thing:29429

Stufenpyramide. Niedriger Infill (wegen Dauer und da interne Qualität nicht wichtig ). Mit hohem Tempo starten. Oberen Bereich vermessen und kontrollieren.
http://www.thingiverse.com/thing:628023

Würde mich freuen, wenn ihr mal eure Druckergebnisse hier postet und erzählt ob die Änderungen der o.g.  Einstellungen etwas gebracht haben.

Hinweis: Dies ist ein Ausschnitt aus dem kommenden RepRap Praxis Handbuch. Registrierte Leser des Blogs können es kostenlos und vorab als ebook erhalten. Links zum Newsletter oder Google+ gibt es am rechten Rand. Also, ab geht´s! 

Samstag, 2. November 2013

Firmware und Slicer beim Rostock einstellen

Seit mehreren Tagen kämpfe ich mich durch die Einstellungen der Firmware und danach über Repetier-Host durch die Einstellungen.
Zunächst einmal zur Firmware:
Hier muss das verwendete Controllerboard angegeben werden. In meinem Fall war es das Sanguino. Alle geänderten Werte sind rot markiert:


// This determines the communication speed of the printer
#define BAUDRATE 250000
//#define BAUDRATE 115200

//// The following define selects which electronics board you have. Please choose the one that matches your setup
// 10 = Gen7 custom (Alfons3 Version) "https://github.com/Alfons3/Generation_7_Electronics"
// 11 = Gen7 v1.1, v1.2 = 11
// 12 = Gen7 v1.3
// 13 = Gen7 v1.4
// 3  = MEGA/RAMPS up to 1.2 = 3
// 33 = RAMPS 1.3 / 1.4 (Power outputs: Extruder, Fan, Bed)
// 34 = RAMPS 1.3 / 1.4 (Power outputs: Extruder0, Extruder1, Bed)
// 35 = RAMPS 1.3 / 1.4 (Power outputs: Extruder, Fan, Fan)
// 4  = Duemilanove w/ ATMega328P pin assignment
// 5  = Gen6
// 51 = Gen6 deluxe
// 6  = Sanguinololu < 1.2
// 62 = Sanguinololu 1.2 and above
// 63 = Melzi
// 64 = STB V1.1
// 65 = Azteeg X1
// 66 = Melzi with ATmega1284 (MaKr3d version)
// 7  = Ultimaker
// 71 = Ultimaker (Older electronics. Pre 1.5.4. This is rare)
// 77 = 3Drag Controller
// 8  = Teensylu
// 80 = Rumba
// 81 = Printrboard (AT90USB1286)
// 82 = Brainwave (AT90USB646)
// 9  = Gen3+
// 70 = Megatronics
// 701= Megatronics v2.0
// 702= Minitronics v1.0
// 90 = Alpha OMCA board
// 91 = Final OMCA board
// 301 = Rambo
// 21 = Elefu Ra Board (v3)

#ifndef MOTHERBOARD
#define MOTHERBOARD 62
#endif

Einschalten sollte man auch unbedingt den Schreib/Lesezugriff auf das EEPROM. Hier werden wichtige Grundwerte gespeichert, die man später mit der Repetiersoftware auslesen und neu setzen kann. Aber Vorsicht! Wenn man später
neu flasht, werden diese Werte gemäß den Angaben aus der Arduino IDE neu gesetzt. Hat man also etwas im direkten Zugriff auf das EEPROM mit der Repetier-Host Software korrigiert, muss man es ebenfalls in seiner MARLIN Firmware ändern, da es sonst immer wieder zurück gesetzt wird.

// EEPROM
// the microcontroller can store settings in the EEPROM, e.g. max velocity...
// M500 - stores paramters in EEPROM
// M501 - reads parameters from EEPROM (if you need reset them after you changed them temporarily).
// M502 - reverts to the default "factory settings".  You still need to store them in EEPROM afterwards if you want to.
//define this to enable eeprom support
#define EEPROM_SETTINGS
//to disable EEPROM Serial responses and decrease program space by ~1700 byte: comment this out:
// please keep turned on if you can.
#define EEPROM_CHITCHAT


Weiterhin muss der Deltamodus eingeschaltet werden:

// Enable DELTA kinematics
#define DELTA

Um dies zu erzielen, müssen die vorangestellten // Zeichen entfernt werden. Sie sind Marker für Kommentare, die zwar im Skript stehen, aber nicht ausgeführt werden. Löscht man die beiden Schrägstriche, werden die Zeilen, denen sie vorangestellt sind  also aktiviert.

Weiterhin müssen Angaben zu den mechanischen Abmessungen gemacht werden. Dies tut man unter:

// Make delta curves from many straight lines (linear interpolation).
// This is a trade-off between visible corners (not enough segments)
// and processor overload (too many expensive sqrt calls).
#define DELTA_SEGMENTS_PER_SECOND 200

// Center-to-center distance of the holes in the diagonal push rods.
#define DELTA_DIAGONAL_ROD 285.0 // mm

// Horizontal offset from middle of printer to smooth rod center.
#define DELTA_SMOOTH_ROD_OFFSET 145.0 // mm

// Horizontal offset of the universal joints on the end effector.
#define DELTA_EFFECTOR_OFFSET 33.0 // mm

// Horizontal offset of the universal joints on the carriages.
#define DELTA_CARRIAGE_OFFSET 23.0 // mm

Die Werte hier gelten natürlich nur für meinen Drucker. Wer wissen will, wie man was ausmisst, kann über diese Zeichnung einen ganz guten Überblick gewinnen:


von: Link zur Abbildung

Allerdings handelt es sich bei der Abbildung um eine Variante mit Profilen und die Abmessungen sind etwas anders. Also selber nachmessen! Bei der Centerline bin ich mir nicht ganz sicher ob das stimmt, denn sie sitzt nicht in der Mitte bei dieser Abbildung.

Weiterhin sind die Einstellungen der Endschalter wichtig. Handelt es sich um Schalter die öffnen oder schließen?
In meinem Fall habe ich Mikroschalter verwendet, die bei Kontakt öffnen.

// coarse Endstop Settings
#define ENDSTOPPULLUPS // Comment this out (using // at the start of the line) to disable the endstop pullup resistors

   // fine Enstop settings: Individual Pullups. will be ignored if ENDSTOPPULLUPS is defined

#ifdef ENDSTOPPULLUPS
  #define ENDSTOPPULLUP_XMAX
  #define ENDSTOPPULLUP_YMAX
  #define ENDSTOPPULLUP_ZMAX
  #define ENDSTOPPULLUP_XMIN
  #define ENDSTOPPULLUP_YMIN
  #define ENDSTOPPULLUP_ZMIN
#endif

// The pullups are needed if you directly connect a mechanical endswitch between the signal and ground pins.
const bool X_MIN_ENDSTOP_INVERTING = false; // set to true to invert the logic of the endstop.
const bool Y_MIN_ENDSTOP_INVERTING = false; // set to true to invert the logic of the endstop.
const bool Z_MIN_ENDSTOP_INVERTING = false; // set to true to invert the logic of the endstop.
const bool X_MAX_ENDSTOP_INVERTING = false; // set to true to invert the logic of the endstop.
const bool Y_MAX_ENDSTOP_INVERTING = false; // set to true to invert the logic of the endstop.
const bool Z_MAX_ENDSTOP_INVERTING = false; // set to true to invert the logic of the endstop.
//#define DISABLE_MAX_ENDSTOPS
//#define DISABLE_MIN_ENDSTOPS

// For Inverting Stepper Enable Pins (Active Low) use 0, Non Inverting (Active High) use 1
#define X_ENABLE_ON 0
#define Y_ENABLE_ON 0
#define Z_ENABLE_ON 0
#define E_ENABLE_ON 0 // For all extruders

Weiterhin müssen die Achsrichtungen umgekehrt werden.
Beim Extruder kommt es darauf an, welchen man verwendet. Bei Direktantrieb ist es ebenfalls bei E= auf TRUE zu setzen. Hat der Extruder ein Getriebe, dann bleibt es bei FALSE.

#define INVERT_X_DIR true   // for Mendel set to false, for Orca set to true
#define INVERT_Y_DIR true    // for Mendel set to true, for Orca set to false
#define INVERT_Z_DIR true     // for Mendel set to false, for Orca set to true
#define INVERT_E0_DIR true   // for direct drive extruder v9 set to true, for geared extruder set to false
#define INVERT_E1_DIR false    // for direct drive extruder v9 set to true, for geared extruder set to false
#define INVERT_E2_DIR false   // for direct drive extruder v9 set to true, for geared extruder set to false


Weiter:

Die nächste Einstellung beschreibt, ob beim Erreichen des Endschalters die maximale oder minimale Bauhöhe des Rostock/Deltadrucker erreicht wurde. Sofern man die Endschalter also oben am Drucker plaziert hat, ist dies der maximale Punkt. Die Z-Koordinate 0 entspricht also dem Druckbett, während alle Werte größer 0 über dem Druckbett schweben. Die Bauhöhe des Rostock kann sich ja jeder selbst bestimmen bzw. messen. Hier an dieser Stelle muss der vorgegebene Wert von -1 auf 1 geändert werden. (Wenn man die Endschalter OBEN am Gerät plaziert hat!)

// ENDSTOP SETTINGS:
// Sets direction of endstops when homing; 1=MAX, -1=MIN
#define X_HOME_DIR 1
#define Y_HOME_DIR 1
#define Z_HOME_DIR 1

Nach dem Anfahren der Endschalter muss der maximale Weg definiert werden, der ab diesem Punkt zurück gelegt werden kann. Dieser hängt natürlich von der Bauhöhe bzw. dem Bauraum ab, den man gebaut hat. Der Wert von 390 bzw 395 ist also entsprechend abzuändern. Es ist der Abstand der Düse zum Druckbett. Am besten man tastet sich hier heran. Nach dem Laden der Firmware startet man hierzu Repetier Host und versucht einen Probedruck. Dabei achtet man auf die korrekte Höhe über dem Druckbett und reguliert evtl. nach.

Die Angaben hier unterhalb, dienen dazu die Größe des Druckbetts zu bestimmen (90 mm - -90 mm =180 mm = Durchmesser des Kreises der bedruckbar ist)

#define min_software_endstops true // If true, axis won't move to coordinates less than HOME_POS.
#define max_software_endstops true  // If true, axis won't move to coordinates greater than the defined lengths below.
// Travel limits after homing
#define X_MAX_POS 90
#define X_MIN_POS -90
#define Y_MAX_POS 90
#define Y_MIN_POS -90
#define Z_MAX_POS 90
#define Z_MIN_POS -90

Geschwindigkeit der Achsen beim "Homing":
Hier ist es wichtig, die dritte (Z-) Achse auf die selben Geschwindigkeit einzustellen, wie die beiden anderen. Sonst zieht der Delta die "Z" Achse nach.

//// MOVEMENT SETTINGS
#define NUM_AXIS 4 // The axis order in all axis related arrays is X, Y, Z, E
#define HOMING_FEEDRATE {50*60, 50*60, 50*60, 0}  // set the homing speeds (mm/min)

Wenn man die Firmware hochgeladen hat, kann man damit beginnen mit der Repetier-Host Software die Einstellungen zu überprüfen.
Wichtige Kommandos:
G28 -> Fährt ganz nach oben gegen die Endschalter
M119-> Gibt unten in der Statuszeile die Zustand der Endschalter aus. So kann man auch rausfinden was X,Y und Z Achse in dem System ist.
ECHO muss dafür in der Repetiersoftware aktiviert sein.

Wichtig ist es auch, dass alle drei Achsen die selbe Verfahrgeschwindigkeit haben.
Dazu müssen alle drei Achsen die selben Werte für maximale Geschwindigkeit, Beschleunigung und Schritte pro Umdrehung aufweisen.
Wie viele Schritte der Schrittmotor für eine Umdrehung benötigt (#define DEFAULT_AXIS_STEPS_PER_UNIT), richtet sich nach den verwendeten Bauteilen (Pulley/Riemenscheibe), die Riementeilung und die Anzahl der Zähne, sowie welches Microstepping eingestellt ist. Ein praktische Rechenhilfe findet sich hier: http://calculator.josefprusa.cz/#MotorStuffSPMB.
Das Microstepping ist bei meinem Sanguino Board so geschaltet so dass ich 1/16 Schritte dort verwende. Die Einstellung erfolgt mithilfe dreier Jumper, die jeweils unter jedem einzelnen Pololu Schrittmotortreiber sitzen.

Hier ein Beispiel der Jumpersettings aus dem Wiki:

Somit führt dies zu:

#define DEFAULT_AXIS_STEPS_PER_UNIT {80, 80, 80, 172.222}  // default steps per unit for Rostock
#define DEFAULT_MAX_FEEDRATE          {200, 200, 200, 25}    // (mm/sec)
#define DEFAULT_MAX_ACCELERATION      {2000,2000,2000,10000}    // X, Y, Z, E maximum start speed for accelerated moves. E default values are good for skeinforge 40+, for older versions raise them a lot.

Sonst kommt es zu einem Fehler bei dem eine Achse schneller verfährt als die anderen und daher der Delta scheinbar in eine bevorzugte Richtung läuft.

Slic3r


Ändern sollte man natürlich auch die Konfiguration des Slic3r in Repetier Host. Dieses schneidet wie der Name bereits sagt, die CAD Daten in handliche Scheiben, die dann gedruckt werden können. Wichtigste Änderung ist die Mitteilung, dass das Zentrum beim Rostock bei 0,0 liegt. Weiterhin der Durchmesser des Filaments und der der Düse.

Unter dem Reiter "printersettings" habe ich bed size auf x= 100 und y=100 gesetzt. Vorher wollte der Drucker immer alles in eine Ecke drucken statt in der Mitte.


Wie man rechts sehen kann habe ich die Konfiguration als "Rostock-2" abgespeichert. So kann man schnell verschiedene Setups erzeugen und damit ausprobieren, wie alles klappt.

Dienstag, 24. September 2013

Ardunios endlich wieder zum Laufen gebracht

Ich hatte mir drei Arduinos (2x UNO 1 x Leonardo) bei Saintsmart besorgt und alle drei wurden unter Windows 7 nicht erkannt. Ich habe wirklich alles gemacht was man so verlangen kann. Reset,neustart,Neuinstallation, Kabel tauschen, Arduino tauschen, anderer Rechner mit Win XP, Wackler gesucht usw. nichts half.
Nach einem Hinweis im RepRap Forum habe ich mir das Kabel nochmals genauer angeschaut und den Mini USB Stecker zerlegt. Und siehe da: Die Lötsstellen waren allesamt matt, beim Löten roch es nach Wismut. Scheinbar war das oxidiert und hatte den Kontaktwiderstand so weit erhöht dass nix mehr ging. Da alle Kabel aus China kamen, kam ich nicht dahinter. Jetzt geht alles wunderbar. Blink! Blink!
Arduino wird nicht erkannt? USB Mini Ummantlung ab und Verbindungen nachlöten!