HyperCube 3D – Steuerung

Als Mainboard für den HyperCube 3D wird das SKR 1.4 Turbo von BigTreeTech mit dem Display TFT24 eingesetzt. Hier werde ich meine Belegung sowie die Konfiguration dokumentieren.

Mainboard

Steckerbelegung SKR 1.4

Als Mainboard wird ein SKR1.4Turbo von BigTreeTech eingesetzt.
Firmware : Marlin 2.0.6.1

Spannungsversorgung
Die Spannungsversorgung mit 12V erfolgt über ein bereinigtes ATX-Netzteil. Der Anschluss Der Versorgungsspannung (12V und GND) erfolgt an den beiden Schraubklemmen DCIN. Der Jumper für die Auswahl der Versorgungsspannung (USB oder 12V) wird auf VCD (12V) zum mittleren PIN gesteckt. Somit wird das Board vom ATX-Netzteil versorgt. Für die ersten Einstellungen ist es jedoch ausreichend den Jumper auf USB zu stecken.

Schrittmotoren
Die Schrittmotore werden wie folgt gesteckt:
XM = X-Achse
YM = Y-Achse
ZAM = Z-Achse
E0M = Extruder

Heizungen
HB = HeatBed / Heizbett
HEO = Extruderheizung

Lüfter
FAN0 = Lüfter für Bauteilkühlung
HE1 = Lüfter für Extruderkühlung

Display
EXP1 = LCD 12864 EXP1
EXP2 = LCD 12864EXP2
oder
TFT = TFT24

Endschalter
X-STOP = MIN X-Achse
Y-STOP = MIN Y-Achse

BLTouch
BLTOUCH = BL-Touch Sensor

Temperaturfühler
TB = Heizbett
TH0 = Extruder

Display

Als Display wird ein TFT24 V1.1 von BigTreeTech eingesetzt. Zum Testen oder dauerhaft kann aber auch nur ein LCD12864 angeschlossen werden.

12864 LCD Modus
Die beiden Flachbandleitungen werden am Mainboard an den beiden Steckleisten LCD EXP1 und EXP2 aufgesteckt. Am Display gehen diese dann auf EXP1 und EXP2.

TouchScreen Modus
Das TFT24 wird über eine Falchbandleitung mit der Steckleiste TFT verbunden. Am TFT24 kann das LCD12864 simuliert werden.

Schrittmotortreiber

Als Schrittmotortreiber werden die TMC2208UART V3.0 eingesetzt. Diese haben grundsätzlich zwei Betriebsmodi – „step / dir – Mode“ und „UART – Mode“. Hier wird der UART-Mode beschrieben. Die Module selbst werden an anderer Stelle detailliert beschrieben.

Marlin Firmware

Die Beschreibung bezieht sich auf die Marlinversion 2.0.6.1.

Folgende Bibliotheken installieren // wird automatisch installiert:
<Servo> 1.0.0
<U8glib-HAL> 0.4.1
<TMCStepper> 0.7.1

Grundeinstellungen
Die Grundeinstellungen müssen für das Mainboard SKR 1.4 und SKR1.4 turbo immer gemacht werden.

Beim SKR 1.4 – Board muss in der platformio.ini nach default_envs „mega2560“ gegen „LPC1768“ ersetzt werden. Dies gibt den Prozessortyp des verwendeten Boards an.
default_envs = mega2560 LPC1768

Beim SKR 1.4 turbo wird hier „LPC1769“ eingetragen.
default_envs = mega2560 LPC1769

In der Datei Marlin/Configuration.h werden in Zeile 107 mit
define SERIAL_PORT 0 -1
und in Zeile 113
//#define SERIAL_PORT_2 -1 0
die Kommunikationsschnittstellen eingestellt.

In Zeile 124 wird mit
#define BAUDRATE 250000 115200
die Kommunikationsgeschwindigkeit von 250000BAUD auf 115200Baud umgestellt.

Mit der Zeile 131 wird das verwendete Motherboard angegeben. Beim SKR1.4
#define MOTHERBOARD BOARD_RAMPS_14_EFB BOARD_BTT_SKR_V1_4
und beim SKR1.4Turbo
#define MOTHERBOARD BOARD_RAMPS_14_EFB BOARD_BTT_SKR_V1_4_TURBO
Die Informationen zu den verschiedenen Motherbords findet man in /src/core/boards.h.

Mit diesen Grundeinstellungen ist das Board grundsätzlich funktionsfähig. Um etwas zu sehen sollte jedoch ein Display angeschlossen und in Betrieb gesetzt werden.

Druckername und Display
Dem Drucker kann in Zeile 135 ein individueller Name gegeben werden.
//#define CUSTOM_MACHINE_NAME "3D Printer" "HyperCube"

Spracheinstellungen werden in Zeile 1696 vorgenommen. Voreingestellt ist „en“. Mit
#define LCD_LANGUAGE en de
wird auf deutsch umgestellt.

In Zeile 1989 wird durch
//#define REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER
der „Full Graphic Smart Controller“ LCD 12864 aktiviert.

Der TouchScreen TFT 24 verlangt in seiner „config.ini“ an der „Configuration_adv.h“ folgende weitere Einstellungen:

In Zeile 3077 soll
//#define M115_GEOMETRY_REPORT
aktiviert werden.

in Zeile 3129 soll
//#define REPORT_FAN_CHANGE
aktiviert werden.

In Zeile 1911 soll
//#define EMERGENCY_PARSER
aktiviert werden.

In der config.ini des Displays können weitere interessante Einstellungen zum Display gemacht werden. Diese Einstellungen können mit einem Firmwareupdate vorgenommen werden. Hier können auch andere Icon-Sätze eingespielt werden. Die aktuelle FW gibt es bei github.com.

Erster Test
Ob das bisherige so weit funktioniert, soll nun getestet werden.
1. Display anschießen
2. Board auf USB-Spannungsversorgung umjumpern
3. Firmware mit VisualStudioCode erstellen
4. Die Datei .pio/build/LPC1768/firmware.bin wird auf die SD-Karte kopiert.
5. SD-Karte in das Board stecken
6. Board mit USB verbinden

Nun sollte kurz der Marlin-Startbildschirm kommen und danach „HyperCube bereit“

Temperaturfühler
Die Einstellungen für die Temperaturfühler werden ab Zeile 352 „Thermal Settings“ vorgenommen.

In Zeile 419 ist mit
#define TEMP_SENSOR_0 1
voreingestellt, dass am Board an der Steckleiste TH0 für den Extruder ein 100k Thermistor angeschlossen ist.

In Zeile 427 wird mit
#define TEMP_SENSOR_BED 0 1
eingestellt, dass am Board an der Steckleiste TB0 für das Heizbett ein 100k Thermistor angeschlossen ist.

Die Grenzbereiche der Temperaturen können ab Zeile 450 eingestellt werden. Diese Einstellungen bleiben vorerst so, werden aber bei den PID-Einstellungen noch mal behandelt.

Die Temperaturen werden nun, wenn eine neue Firmware erstellt wurde, im Display angezeigt. Mit einem entsprechenden Terminalprogramm z.B. Pronterface können mit M105 die aktuellen Temperaturen abgefragt werden. Auch sollte das Terminal die Temperaturen automatisch anzeigen.

Endschalter / Endstop
Hier werden die Endschalter für die X- und Y-Achse konfiguriert. Für die Z-Achse wird später ein BL-Touch verwendet. Die Einstellungen hierzu werden ab Zeile 620 „Endstop Settings“ vorgenommen.

Mit M119 kann der Status der Endschalter im Terminal abgefragt werden.

An den Endschaltern musste ich auf der Schalterseite +5V(rot) und GND (schwarz) tauschen. Offensichtlich sind die Schalter falsch eingelötet.

3D- / BL Touch
Die Einstellungen für die Z-Probe werden hauptsächlich ab Zeile 836 „Z Probe Options“ eingestellt.

Durch aktivieren der Zeile 909 wird mitgeteilt das ein Sensor vorhanden ist. Marlin ist es egal ob ein 3D-, BL_Touch oder sonst ein Clone angeschlossen ist.
//#define BLTOUCH

In Zeile 996 muss der Offset des Sensors zur Düse (Nozzle) angegeben werden. Da der Sensor bei mir rechts von der Düse montiert ist, ist der Offset positiv
#define NOZZLE_TO_PROBE_OFFSET { 10 28, 10 12, 0 }

Weitere Werte werden in den folgenden Zeilen geändert:
Zeile 1159//#define MIN_SOFTWARE_ENDSTOP_Z
Zeile 669 #define Z_MIN_PROBE_ENDSTOP_INVERTING false true
Zeile 852 //#define Z_MIN_PROBE_USES_Z_MIN_ENDSTOP_PIN
Zeile 855 #define USE_PROBE_FOR_Z_HOMING
Zeile 1120 #define Z_HOMING_HEIGHT  4 
Zeile 1123 #define Z_AFTER_HOMING  10 

Ab Zeile 1204 „Bed Leveling“ werden die eigentlichen Einstellungen zum ABL gemacht.

Durch aktivieren der Zeile 1244 wird die Levelingmethode „BILINEAR“ ausgewählt.
//#define AUTO_BED_LEVELING_BILINEAR

Damit die ABL-Daten nach einem Homing automatisch wieder hergestellt werden, kann die Zeile 1252 aktiviert werden.
//#define RESTORE_LEVELING_AFTER_G28

Die Anzahl der Levelingpunkte wird hier mit 3 x 3 Punkten
#define GRID_MAX_POINTS_X 3  
#define GRID_MAX_POINTS_Y GRID_MAX_POINTS_X

festgelegt.

In Zeile 1395 wird noch das Z-Safe-homing aktiviert
//#define Z_SAFE_HOMING

Der Sensor kann mit folgenden Befehlen im Terminal getestet werden:
M280 P0 S10 = Pin ausfahren
M280 P0 S90 = Pin einfahren
M280 P0 S120 = Selbsttest starten
M280 P0 S160 = Alarm zurücksetzen (wenn er blinkt)

G28 = homing starten
G29 = autoleveling (ABL) starten
M851 Z… = Offset speichern
M850 = Werte im EEProm speichern

M420 V1 = Abrufen und anzeigen der Mesh-Daten

Netzteil anklemmen
Wichtig: Da ab jetzt größere Verbraucher dazu kommen muss ab jetzt auf die Versorgung vom Netzteil umgestellt werden.

Der Jumper für die Auswahl der Versorgungsspannung (USB oder 12V) wird auf VCD (12V) zum mittleren PIN gesteckt. Somit wird das Board vom ATX-Netzteil versorgt.

Lüfter
Der Extruderlüfter wird an HE1 angeklemmt. Damit der Lüfter automatisch ab einer Temperatur von 50 Grad am Hotend einschaltet, wird in der Configuration.adv in Zeile 451 der entsprechende Anschluss bekannt gemacht.
#define E0_AUTO_FAN_PIN -1 FAN1_ PIN
Die Geschwindigkeit mit der der Lüfter laufen soll wird in Zeile 464 eingestellt.
#define EXTRUDER_AUTO_FAN_SPEED 255 150 // 255 == full speed

Der Lüfter für die Bauteilkühlung wird an +FAN0 aufgesteckt. Weitere Einstellungen sind nicht nötig.

M106 = Lüftergeschwindigkeit setzen
M106 [I<Index>] [P<Lüfterindex>] [S<Geschwindigkeit>] [T<secondary>]
I<Index>
P<Lüfterindex>
S<Geschwindigkeit> 0-255
T<secondary>

… aktive Kühlung am Extruder …

Heizbett und Extruder
Bettgröße
Temperaturen
Siehe hierzu auch bei den Temperaturfühlern.
Die minimale und maximale Extrusionstemeratur kann ab Zeile 574 eingestellt werden.
M302 = …
M104 = Setze Hotendtemperatur
M104 [B<temp>] [F<flag>] [I<index>] [S<Temperatur>] [T<index>]

PID Regelung
configuration.h
486 // #define PID_AUTOTUNE_MENU 
526 // #define PIDTEMPBED

Antriebe / Schrittmotore
Um was für eine Art / Verfahren sich bei dem Drucker handelt wird ab Zeile 605 bekannt gemacht. Der CoreXY wird in Zeile 613 aktiviert.
//#define COREXY

An den Schrittmotortreibern TMC2208 V3 UART muss nichts mehr umgelötet werden.
Die Treiber für den „Extruder“ und die Achsen „X“, „Y“ und „Z“ werden ab Zeile 687 bekannt gemacht.
//#define X_DRIVER_TYPE  A4988 TMC2208
//#define Y_DRIVER_TYPE  A4988 TMC2208
//#define Z_DRIVER_TYPE  A4988 TMC2208
...
//#define E0_DRIVER_TYPE A4988 TMC2208

Weitere Einstellungen werden in der PDF zum TMC2208 beschrieben …

Configuration.h
750 #define DEFAULT_AXIS_STEPS_PER_UNIT   { 80, 80, 4000 400, 500 100}
757 #define DEFAULT_MAX_FEEDRATE          { 300, 300, 5 15, 25 }
770 #define DEFAULT_MAX_ACCELERATION      { 3000 1000, 3000 1000, 100 1000, 10000 5000 }
Hier gibt es auch weitere Werte zum einstellen

Die Bettgröße / Bauraumgröße kann ab Zeile 1133 angegeben werden.

Die Drehrichtungen der Schrittmotoren kann ab Zeile 1098 angepasst werden.
#define INVERT_X_DIR true
#define INVERT_Y_DIR true
#define INVERT_Z_DIR true


Ab Zeile 1105 kann die Förderrichtung der Extruder bestimmt werden
#define INVERT_E0_DIR false true

Configuration_adv.h
Ab Zeile 2208 können die über UART mit den Schrittmotortreibern vorgegebenen Werte eingestellt werden. Insbesondere für jede Achse
Motorstrom in mA
Motorstrom beim sensorlosen Homing in mA
Microsteps 0…256
RSENSE ???
CHAI_POS ???


2455 //#define MONITOR_DRIVER_STATUS aktiviert
M906 – Set or get motor current in milliamps using axis codes X, Y, Z, E. Report values if no axis codes given.
M911 – Report stepper driver overtemperature pre-warn condition.
M912 – Clear stepper driver overtemperature pre-warn condition flag.
M122 – Report driver parameters (Requires TMC_DEBUG)

Configuration_adv.h
2550 //#define TMC_DEBUG aktiviert
Muss laut github-Diskusion seit Marlin 2.0.6. nicht mehr zwingend umgestellt werden. Wenn umgestellt ist gibt der G-Code M122 jedoch mehr Infos aus.

3D-Drucker – CuraEngine

Hier möchte ich festhalten welche Einstellungen was bewirken.

Beschrieben wird die Version der CuraEngine die in Repetier-Host V2.1.6 enthalten ist.

Geschwindigkeit und Qualität

Geschwindigkeit

Qualität
Default-Qualität

Gewählte Qualitätseinstellung
Name
Layerhöhe [mm]
Höhe erster Layer [mm]
Extrusionsbreite erste Lage [%]

Strukturen

Füllung

Hüllendicke [mm]
Boden-/Deckendicke [mm]
Überlappung der Füllung [%]
Füllmuster
Dichte Decke
Dichter Boden

Stützstruktur

Skirt und Brim

Skirt = Umrandung

Der Skirt dient dazu, den Filamentfluss vor dem eigentlichen Druck etwas in Fahrt zu bringen. Manche Drucker benötigen direkt nach dem Start erst mal ne kurze Zeit um ausrechend Filament zu fördern.



Anzahl der Skirt-Linien die um das Druckobjekt gezogen werden
Skirt-Distanz in [mm] der Skirt-Linien zum Druckobjekt
Minimale Skirt-Länge in [mm]

Damit eine Umrandung überhaupt geslicet wird, muss in den Qualitätseinstellungen die Höhe des ersten Layers (z.B. 0.0101mm) größer wie die Hälfte der Layerhöhe (z.B. 0.2mm) sein.

Brim = Rand

Es wird einfach ein Rand mit einer wählbaren Anzahl zusätzlicher Linien um das Druckobjekt herum gelegt.

Brim-Breite [mm]

Raft

Extrusion

G-Codes

Erweitert

HyperCube 3D – Extruder

Extruderbau nach Tech2C

Material

Kaufteile

1 Stk.Schrittmotor NEMA17
1 Stk.Extruderzahnrad / Rändelrad
Länge 12mm, Durchmesser 8mm, Bohrung 5mm
1 Stk.Flanschkugellager F623ZZ
2 Stk.Schnellkupplung PTFE 1,75
2 Stk.Schraube M5 x 10mm
2 Stk.Hammermutter M5 T-Slot
2 Stk.Schraube M3 x 10mm
2 Stk.Schraube M3 x 20mm
1 Stk.Schraube M3 x 16mm
1 Stk.Schraube M3 x 8mm mit Sechskantkopf
1 Stk.Mutter M3
1 Stk.Stoppmutter M3

gedruckte Teile

Bowden_Motor_v1.1
Bowden_Idler
Bowden_Knob

HyperCube 3D – Z-Achse

HyperCube 3D – Z-Achse mit 8mm Wellen

In meinem bisherigen Aufbau sind noch die 8mm Linearwellen für die Z-Achse verbaut. Tech2C hat hier aus Gründen der besseren Stabilität mittlerweile 12mm Wellen verbaut.

Erforderliches Material

Kaufteile
2 Stk. Linearwelle 12mm
2 Stk. Linearlager LM12LUU
xx Stk. Schraube M3x20mm
xx Stk. Mutter M3
xx Stk. Schraube (Befestigung an Aluprofil)
xx Stk. Hammermutter M …

Gedruckte Teile
2 Stk. Z_Carriage_v1.1
4 Stk. Z_Carriage_clamp_v1.1
4 Stk. Z_Shaft_Clamp_v1.2
1 Stk. Z_EndStop_v1.2
1 Stk. Z_EndStop_Adjust_v1.1

Zusammenbau

HyperCube 3D – X Achse

X-Achse am HyperCube

Meine Schlitten auf der X-Achse läuft recht schlecht. Deshalb werde ich die X-Achse auf Stahlwellen 8mm umbauen.

Vermutung weshalb der Schlitten schlecht läuft:
Die Druckteile, vor allem der Schlitten aus meinem Mendel sind zu ungenau.

Material

Kaufteile
8 Stk. Schraube M3x20mm
4 Stk. Mutter M3
4 Stk. Stopmutter M3
16 Stk. U-Scheibe für M3
8 Stk. Kugellager F623ZZ mit Flansch 3x10x4mm
2 Stk. Linearlager LM8UU
2 Stk. Linearwelle Linearführung 8 mm x 330 mm

Gedruckte Teile
2 x XY-Joiner für 8mm Linearwelle
1 x X-Carriage (Wagen)

Zusammenbau

Bibliothek Wire.h

Die Wire-Bibliothek ermöglicht dem Arduino, mit Geräten zu kommunizieren, die das I²C-Protokoll verwenden. Der Vorteil gegenüber der Kommunikation über die serielle Schnittstelle ist, dass über den I²C-Bus mehr als zwei Geräte miteinander kommunizieren können.

Selbstverständlich kann man nicht nur spezielle I²C-Geräte, sondern auch mehrere Arduinos an den I²C-Bus anschließen. Jedes am Bus angeschlossene Gerät erhält eine eigene Adresse. Da die Adresse 7 Bit breit ist, können bis zu 112 Geräte an einen I²C-Bus angeschlossen werden (16 der 128 möglichen Adressen sind für Sonderzwecke reserviert).

Der I²C-Bus ist eine Entwicklung von Philips (heute NXP Semiconductors). Wer mehr darüber wissen möchte, sollte sich den entsprechenden Eintrag in der Wikipedia ansehen.

Ab und zu wird der I²C-Bus als Two-Wire-Interface oder TWI bezeichnet.

Ein I²C-Bus benötigt zwei Leitungen: SCL für ein Taktsignal und SDA für Daten. Da ältere Arduinos für diese beiden Leitungen keine separaten Anschlüsse haben, verwendet man bei diesen Boards die Leitungen A4=SDA und A5=SCL

Der Schaltplan eines aktuellen Arduinos zeigt, dass SDA- und SCL-Anschluss weitergeführte A4- bzw. A5-Anschlüsse sind.

Wenn ein Arduino an einen I²C-Bus angeschlossen ist, stehen die analogen Eingänge A4 und A5 nicht mehr für andere Dinge zur Verfügung.

Die Busleitungen müssen mit Pull-up-Widerständen ausgestattet werden.

Um diese Bibliothek in eigenem Code zu verwenden, muss sie mittels

#include <Wire.h>

eingebunden werden.

Die Wire-Bibliothek stellt folgende Befehle zur Verfügung:

begin()

Beschreibung
Initialisiert die Bibliothek und meldet den Arduino mit der angegebenen Adresse am I²C-Bus an. Soll der Arduino als Busmaster angemeldet werden, entfällt die Adresse.
Syntax
Wire.begin()
Wire.begin(Adresse)
Parameter
Adresse = the 7-bit slave address (optional); if not specified, join the bus as a master.
Rückgabe
keine

requestFrom()

Beschreibung
Fordert vom angegebenen Gerät die angegebene Anzahl von Bytes an. Der dritte (optionale) Parameter gibt an, ob der I²C-Bus nach dem Senden der Anforderung wieder freigegeben wird: true (default) bedeutet, dass der Bus wieder freigegeben wird, false sorgt dafür, dass der Bus „besetzt“ bleibt. Sinnvoll ist zweiteres dann, wenn man mehrfach Daten abfragen und verhindern möchte, dass ein anderer Busteilnehmer „dazwischenfunkt“.
Syntax
Wire.requestFrom(address, quantity)
Wire.requestFrom(address, quantity, stop)
Parameter
address: the 7-bit address of the device to request bytes from
quantity: the number of bytes to request
stop : boolean. true will send a stop message after the request, releasing the bus. false will continually send a restart after the request, keeping the connection active.
Rückgabe
byte : the number of bytes returned from the slave device

beginTransmission()

Beschreibung
Bereitet eine Datenübertragung an das Gerät mit der angegebenen Adresse vor. Anschließend werden die zu übertragenden Daten mit einem oder mehreren Wire.write()-Befehl(en) in einen Puffer geschrieben. Mit dem Aufruf von Wire.endTransmission() werden die Daten übertragen.
Syntax
Wire.beginTransmission(address)
Parameter

address: the 7-bit address of the device to transmit to
Rückgabe

Keine

endTransmission()

Beschreibung
Überträgt die gepufferten Daten an das mit Wire.beginTransmission() angegebene Gerät.
Syntax
Wire.endTransmission()
Wire.endTransmission(stop)
Parameter

stop : boolean. true will send a stop message, releasing the bus after transmission. false will send a restart, keeping the connection active.
Rückgabe

byte, which indicates the status of the transmission:
0 : success
1 : data too long to fit in transmit buffer
2 : received NACK on transmit of address
3 : received NACK on transmit of data
4 : other error

write()

Beschreibung:
Mit diesem Befehl befüllt man den Sendepuffer mit den Dingen, die beim Aufruf von Wire.endTransmittion() gesendet werden sollen.
Syntax:
Wire.write(value)
Wire.write(string)
Wire.write(data, length)
Parameter:

value: a value to send as a single byte
string: a string to send as a series of bytes
data: an array of data to send as bytes
length: the number of bytes to transmit
Rückgabe
:
byte: write() will return the number of bytes written, though reading that number is optional
Beispiele:
Wire.write(5); // schreibt die Zahl 5 in den Puffer.
Wire.write(„Hallo“); // schreibt „Hallo“ in den Puffer.

available()

Beschreibung;
Gibt die Anzahl der Bytes zurück, die sich im Empfangspuffer befinden. Man kann diesen Befehl zum Beispiel im Kopf einer while-Schleife benutzen. Die Schleife wird dann durchlaufen, so lange sich etwas im Empfangspuffer befindet.
Syntax:
Wire.available()
Parameter:
Rückgabe
:
Beispiel:
while(Wire.available())
{ Serial.print(Wire.read()); }

read()

Beschreibung
Liest ein Zeichen aus dem Empfangspuffer
Syntax:
Wire.read()
Parameter:

keine
Rückgabe
:
Gibt das empfangene Byte zurück.
Beispiel:
Siehe das Beispiel bei Wire.available().

SetClock()

Beschreibung:
Syntax:
Parameter:
Rückgabe
:
Beispiel:

onReceive()

Wire.onReceive(Funktion)
Beschreibung
Bestimmt die angegebene Funktion als diejenige Funktion, die aufgerufen wird, wenn Daten über den I²C-Bus empfangen wurden. Die Funktionsdefinition kann einen Parameter enthalten, mit dem die Zahl der eingetroffenen Bytes übergeben werden kann.
Syntax
Parameter
Rückgabe

Beispiel:
Wire.onReceive(I2C_receive);
Die Definition dieser Funktion beginnt dann beispielsweise mit void I2C_receive(int num_bytes) {…
Achtung:
Der Typ des Parameters der Funktion muss int sein, sonst gibt es beim Compilieren eine Fehlermeldung.

onRequest()

Wire.onRequest(Funktion)
Beschreibung:
Bestimmt die angegebene Funktion als diejenige Funktion, die aufgerufen wird, wenn Daten angefordert werden (siehe Wire.requestFrom()). Diese Funktion erhält keine Daten und gibt auch nichts zurück.
Syntax:
Parameter:
Rückgabe
:
Beispiel:
Wire.onRequest(requestHandler);
Die Definition dieser Funktion sieht dann beispielsweise so aus:
void requesthandler() {…}

3D Drucker – Extruder einstellen

Der Extruder sollte ja die exakte Menge an Material fördern. Wie wird es gemacht.

Da an meinem FranzisMender der Extruder vom Hotend getrennt ist (Long Distanz) beschreibe ich hier die Version wie ich die Fördermenge am Extruder einstelle.

Formel für die Berechnung:
SollLänge / IstLänge * eingestellte Schritte = neue Schritte

Werkzeug und Hilfsmittel

Teflonschlauch (Kann auch der vorhandene verwendet werden)

Scharfer Seitenschneider / Elektronikseitenschneider
Digitale Schieblehre

Vorbereitung

Eingestellte Schritte ermitteln:
In der Marlin-Firmware ist in der configuration.h bei
#define DEFAULT_AXIS_STEPS_PER_UNIT (40, 40, 400, 92.75);
an vierter Stelle der aktuelle Wert für den Extruder in steps/mm eingetragen (bei mir 92.75) Dieser Wert wird für die spätere Neuberechnung benötigt.

SollLänge festlegen:
Für die zu fördernde Sollmenge lege ich 100mm fest.

IstLänge ermitteln:
Düse bei PLA auf ca. 200°C aufheizen
Teflonschlauch und Filament aus dem Kühlkörper vom HotEnd ziehen,
Filament vorne am Teflonschlauch mit einem Schafen Seitenschneider bündig abschneiden,
100mm Filament fördern (G92 E0 und dann G1 E100),
gefördertes Filament messen (97mm).

Neue Schritte berechnen:
Bei 92,75 Steps/mm wurden 97mm gefördert, gewollt sind aber 100mm also

92,75 Steps/mm / 97 mm * 100 mm = 95,62 Steps / mm

Somit ergibt sich für NeueSchritte der Wert 95,62 Steps/mm. Dieser Wert wird nun in Marlin bei

#define DEFAULT_AXIS_STEPS_PER_UNIT (40, 40, 400, 95.62);

eingetragen.