devmaker.net
start/ 3d-druck/ print-in-place-schichthoehe-gelenke
3D Druck

Print-in-Place: Schichthöhe entscheidet über die Gelenke

Ein Kettenoktopus mit achtzig beweglichen Gelenken, alle in einem Stück gedruckt: Ob die Gelenke beweglich bleiben oder verschweißen, hängt nicht an der Präzision des Druckers, sondern an einer Rasterfrage. Der gedruckte Spalt ist immer genau eine Schichthöhe breit – vorausgesetzt, überhaupt eine Schnittebene fällt in das konstruierte Spiel. Dieser Artikel zeigt, warum dünnere Schichten dabei nicht sicherer sind, wie man die richtige Kombination aus Schichthöhe und erster Schicht vorher berechnet, und warum bei diesem Modell kein Brim möglich ist. Mit dem Python-Prüfskript und der Geometrie-Änderung, die die Aufstandsfläche verdoppelt hat.

Harry_im_Homelab31 (Portrait)
Harald
2026-09-26 · ~7 Min. Lesezeit
Der Kettenoktopus während des Drucks: acht Arme, achtzig Glieder – jedes Gelenk genau eine Schichthöhe breit
Der Kettenoktopus während des Drucks: acht Arme, achtzig Glieder – jedes Gelenk genau eine Schichthöhe breit

Das Modell ist ein Kettenoktopus: acht Arme aus je zehn Gliedern, alle beweglich, alle in einem Stück gedruckt. Jedes Glied hängt auf einem Querstab, und zwischen Glied und Stab liegt ein konstruiertes Spiel von 0,305 mm. Achtzig solcher Spiele, und keines darf verschweißen.

Hier steckt die Erkenntnis, die den ganzen Ansatz gedreht hat: der gedruckte Spalt ist immer genau eine Schichthöhe breit – vorausgesetzt, überhaupt eine Schnittebene fällt in das Spiel. Fällt keine hinein, gibt es keinen Spalt, und das Gelenk ist massiv.

Gegenintuitiv: feiner ist nicht sicherer

Dünnere Schichten machen die Gelenke enger, nicht sicherer. Sicher ist nur, dass jedes der achtzig Spiele von mindestens einer Schnittebene getroffen wird – und das hängt an Schichthöhe und erster Schicht gemeinsam, weil die erste Schicht die Phase des ganzen Rasters verschiebt.

Das falsche Kriterium und seine Korrektur

Ich hatte zuerst das falsche Kriterium: Ich verlangte, dass ein ganzes Schichtband in das Spiel passt, und schloss daraus, dass bei 0,34 mm alle achtzig Gelenke verschweißen würden. Der Drucker sagte etwas anderes – ein Druck mit 0,34 war beweglich. Das Kriterium war zu streng: Es reicht, wenn die Ebene im Spiel liegt.

python
# tools/gapcheck.py — das richtige Kriterium
def resolved(a, b, h, first):
    """die bestplatzierte Schnittebene in (a, b)"""
    best = None
    cand = [first / 2.0]
    n = 2
    while True:
        z = first + (n - 1.5) * h
        if z >= b:
            break
        cand.append(z)
        n += 1
    for z in cand:
        if a < z < b:
            c = (z - a, b - z)
            if best is None or min(c) > min(best):
                best = c
    return best

Damit wird aus einer Vermutung eine Prüfung. Das Skript rechnet alle 80 Gelenkspiele an den vierzig Querstäben für jede Kombination aus Schichthöhe und erster Schicht durch. Jede Zelle der Tabelle enthält zwei Werte:

  • vorne: wie viele der 80 Spiele von keiner Schnittebene getroffen werden – diese Gelenke verschweißen. Eine 0 heißt: alle beweglich.
  • hinten: die kleinste Reserve in mm – wie nah die knappste Schnittebene an der Kante ihres Spiels liegt. Je größer, desto mehr Toleranz bleibt für Ungenauigkeiten des Druckers.
Schichthöhe1. Schicht 0,220,260,280,300,32
0,28 mm0 · 0,0340 · 0,0180 · 0,0140 · 0,0310 · 0,027
0,30 mm0 · 0,0030 · 0,0080 · 0,0280 · 0,0100 · 0,010
0,32 mm6 verschweißt0 · 0,0146 verschweißt0 · 0,0110 · 0,031

0,32 mm ist die schnellste brauchbare Schichthöhe – aber nur mit passender erster Schicht. Mit 0,22 oder 0,28 fallen sechs Querstäbe genau zwischen zwei Ebenen und werden massiv. Die Kombination 0,32 / 0,32 hat mit 0,031 mm dieselbe Reserve wie der vorherige Stand bei 0,28 / 0,22 – bei 14 % weniger Schichten.

Warum kein Brim möglich ist

Der naheliegende Reflex bei Haftungsproblemen ist ein Brim. Beim Kettenoktopus ist er ausgeschlossen, und das lässt sich beziffern: Zwischen zwei aufeinanderfolgenden Gliedern desselben Arms liegen auf dem Bett 1,01 mm. Bei vierzig solcher Paare.

Ein Brim würde diese vierzig Lücken überbrücken – und damit genau die Gelenke zusammenkleben, die beweglich bleiben sollen. Er würde die Haftung verbessern und das Objekt gleichzeitig zerstören. Zwischen benachbarten Armen sind es dagegen 6,11 mm; dort wäre er unproblematisch, aber dort hilft er auch nicht.

Öhrchen oder andere Opferflächen kamen ebenfalls nicht in Frage – das Modell soll ohne Nachbearbeitung vom Bett kommen. Blieb also nur, die Aufstandsfläche der Glieder selbst zu vergrößern.

Die Tonne wird zum Zelt

Jedes Kettenglied ist eine liegende Tonne. Eine liegende Tonne berührt das Bett auf einem schmalen Streifen – beim schwächsten Glied waren es 17,5 mm² bei 3,9 mm Breite. Das ist zu wenig für ein Teil, das darüber vierzig Millimeter hoch wird.

Der erste Reflex, die Unterseite tiefer abzuflachen, war schnell erschöpft: Der Parameter bed_flat lässt sich von 0,80 auf höchstens 0,92 anheben (+6 % Breite), danach frisst die Planung den Ring unter der Bohrung an – und dieser Ring trägt den Arm.

Die Lösung war, den Querschnitt in y zu strecken statt in z zu planen: unten breit aufliegend, mit geraden Flanken schräg hoch, oben weiter rund. Ein Zelt statt einer Tonne.

javascript
// Die Sohle, auf die die Tonne gehüllt wird. Ihre Kontur ist die
// EIGENE Bettberührung der Tonne, in y verbreitert – sie läuft also
// genau dort aus, wo die Tonne das Bett verlässt. Die Aufstandsfläche
// wird breiter, ohne einen Millimeter länger zu werden. Genau das
// schützt die 1,01 mm zum nächsten Glied.
function foot_half(d, u, s) =
    let (zax = d/2 - bed_flat, r = barrel_r(d, u))
    r > zax ? s*sqrt(r*r - zax*zax) : 0;

module barrel(len, d) {
    // ...
    if (arm_spread <= 1 + eps) core();
    else hull() { core(); barrel_sole(len, d, arm_spread); }
}

Schwächstes Glied, arm_spread 1,00 → 1,80:

GrößevorhernachherFaktor
Aufstandsfläche17,5 mm²35,1 mm²2,00×
Aufstandsbreite3,9 mm8,2 mm2,10×
Abstand im selben Arm1,01 mm1,01 mmunverändert
Abstand zum Nachbararm6,11 mm6,11 mmunverändert

Weil die Streckung nur in y erfolgt, taucht die Tonne bei exakt demselben x unter das Bett – die Fläche wird breiter, nie länger. Die kritischen 1,01 mm bleiben unangetastet. Als Nebeneffekt verschwindet ein Überhang: Die untere Flanke einer liegenden Tonne wächst beim Steigen nach außen; gestreckt neigt sie sich nach innen.

Kippsicherheit skaliert mit dem Quadrat der Auflagebreite. Aus 2,1× Breite werden damit rund 4,4× Widerstand gegen das Abkippen.

Ein formalisiertes Kriterium fühlt sich sicherer an, als es ist

Beim ersten Anlauf verlangte ich ein ganzes Schichtband im Gelenkspiel statt nur der Schnittebene. Das Ergebnis war eine saubere, überzeugende, falsche Tabelle – widerlegt durch einen bereits gedruckten, beweglichen Oktopus.

Die Rechnung war korrekt. Nur die Annahme darunter stimmte nicht, und das sieht man einer sauberen Tabelle nicht an.

Prüfstand und Geltungsbereich

Modell: parametrischer Kettenoktopus in OpenSCAD, Prüfwerkzeuge in Python. Drucker: HevORT, Klipper v0.13.0-743, 0,4-mm-Düse. Slicer: OrcaSlicer 2.4.2.

Geprüfte Modellkennwerte: Volumen 29,6 cm³, Bettkontakt gesamt 2262 mm², kleinste Einzelfläche 35,1 mm², Gelenkspiel 0,305 mm, dünnste Wand 1,39 mm, Überhanganteil 11,1 %.

Diese Serie

Ein Abend Fehlersuche an einem Kettenoktopus hat vier Themen ergeben, die sich unabhängig voneinander lesen lassen:

  1. Klipper Bed Mesh: fehlender Nullbezug kostet 0,14 mm
  2. Print-in-Place: Schichthöhe entscheidet über die Gelenke – dieser Artikel
  3. OrcaSlicer & Klipper: 34 % weniger Druckzeit (erscheint in Kürze)
  4. Sieben Fehlschlüsse bei der Klipper-Fehlersuche (erscheint in Kürze)

// verwandte beiträge

> echo "your thoughts" >> print-in-place-schichthoehe-gelenke.responses

Schreibe einen Kommentar

Wird für die Bestätigung benötigt