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.

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
???? = Extruderlüfter

Display
LCD = Display
TFT = ???

Endschalter
= MIN X-Achse
= MIN Y-Achse

BLTouch
BLTOUCH = BL-Touch Sensor

Temperaturfühler
= Heizbett
= Extruder

Display

Als Display wird ein TFT24 V1.1 von BigTreeTech eingesetzt.

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

TouchScreen Modus

Schrittmotortreiber

Als Schrittmotortreiber werden die TMC2208UART V3.0 eingesetzt. Die Module selbst werden an anderer Stelle detailliert beschrieben.

Marlin Firmware

platformio.ini
Bei SKR 1.4 turbo
default_envs = mega2560 LPC1769

configuration.h
113 // #define SERIAL_PORT_2 -1
124 #define BAUDRATE 250000 115200
131 #define MOTHERBOARD BOARD_RAMPS_14_EFB BOARD_BTT_SKR_V1_4_TURBO
427 #define TEMP_SENSOR_BED 0 1
486 // #define PID_AUTOTUNE_MENU 
526 // #define PIDTEMPBED
613 //#define COREXY
687 //#define X_DRIVER_TYPE  A4988 TMC2208
688 //#define Y_DRIVER_TYPE  A4988 TMC2208
689 //#define Z_DRIVER_TYPE  A4988 TMC2208
687 //#define E0_DRIVER_TYPE  A4988 TMC2208
750 #define DEFAULT_AXIS_STEPS_PER_UNIT   { 80, 80, 4000 400, 500 100 }


configuration_adv.h

3D-Drucker – CuraEngine

Hier möchte ich festhalten welche Einstellungen was bewirken.

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. NEMA 17 Schrittmotor
1 Stk. Extruderzahnrad, Länge 12mm, Durchmesser 8mm, Bohrung 5mm
1 Stk. Kugellager F623ZZ
2 Stk. Schraube M5 x 10mm
2 Stk. Hammermutter M5 T-Slot
4 Stk. Schraube M3 x 10mm
2 Stk. Schraube M3 x 20mm
2 Stk. Mutter M3

gedruckte Teile
1 Stk. Bowden_Motor_v1.1
1 Stk. Bowden_Idler
1 Stk. 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.