Seite 1 von 1

Miller Mode mit Fräser und Abtastplatte

Verfasst: Sa 25. Apr 2026, 07:16
von Dennis
SainSmart Z-Achsen-Messtaster mit Klipper: Anschluss, Offset & Makro

Der SainSmart CNC Z-Achsen-Messtaster (Touch Probe) ist eine leitfähige Messplatte mit zwei Drähten: Der schwarze Draht geht auf GND, der rote Draht auf den Signal-GPIO des Raspberry Pi. Berührt der Fräser die Platte, schließt sich der Stromkreis – Klipper erkennt dies als Endstop-Auslösung.


Schritt 1: Raspberry Pi als sekundäre MCU einrichten

Damit Klipper die GPIO-Pins des Pi nutzen kann, muss der klipper-mcu-Dienst installiert und gestartet werden.

Code: Alles auswählen

cd ~/klipper
sudo cp ./scripts/klipper-mcu.service /etc/systemd/system/
sudo systemctl enable klipper-mcu.service
sudo systemctl start klipper-mcu.service
Anschließend den Pi-Benutzer der GPIO-Gruppe hinzufügen:

Code: Alles auswählen

sudo usermod -a -G gpio $USER
Hinweis: Danach einmal neu einloggen (oder neu starten), damit die Gruppe aktiv wird.


Schritt 2: Verdrahtung am Raspberry Pi

Code: Alles auswählen

Roter Draht  (Signal) → GPIO5  (Pin 29) mit internem Pull-up
Schwarzer Draht (GND) → GND   (Pin 30 oder beliebiger GND-Pin)
Wichtig: Die Probe hat keine Polung – rot/schwarz bezieht sich nur auf Signal/GND, nicht auf Plus/Minus. Kein externer Widerstand nötig, der interne Pull-up des Pi übernimmt das.

Physische Pinbelegung Raspberry Pi (BCM):

Code: Alles auswählen

BCM (Klipper)   Physischer Pin
gpio2           Pin 3
gpio3           Pin 5
gpio5           Pin 29   → Roter Draht (Signal)
gpio17          Pin 11
gpio27          Pin 13
gpio22          Pin 15
gpio10          Pin 19

GND             Pin 30   → Schwarzer Draht
Vollständige Pinbelegung im Terminal anzeigen:

Code: Alles auswählen

pinout
(Paket: python3-gpiozero)

Klipper verwendet BCM-Nummern, nicht die physischen Pinnummern am Board!


Schritt 3: printer.cfg – MCU und Probe definieren

Code: Alles auswählen

# Raspberry Pi als zweite MCU einbinden
[mcu host]
serial: /tmp/klipper_host_mcu

# Z-Probe (SainSmart Messtaster)
[probe]
pin: ^!host:gpio5         # ^ = Pull-up aktiv, ! = aktiv LOW (Kontakt = GND)
x_offset: 0               # Probe sitzt direkt unter dem Fräser
y_offset: 0
z_offset: 14.19           # Plattendicke in mm – eigenen gemessenen Wert eintragen!
speed: 5                  # Anfahrgeschwindigkeit in mm/s
lift_speed: 10            # Rückzugsgeschwindigkeit
samples: 3                # Anzahl Messwiederholungen
samples_result: median    # Mittelwert aus den Messungen
sample_retract_dist: 2.0  # Z-Rückzug zwischen Messungen
samples_tolerance: 0.05   # Max. erlaubte Abweichung zwischen Messungen
samples_tolerance_retries: 3
Erklärung der Symbole:
  • ^ – aktiviert den internen Pull-up am GPIO-Pin
  • ! – invertiert die Logik: Pin wird auf LOW gezogen wenn Kontakt = ausgelöst

Schritt 4: Plattendicke messen

Die genaue Dicke der Messplatte ist der kritische Wert für den Offset. Mit einem Messschieber messen – der SainSmart-Taster hat ab Werk typisch 14,19 mm, aber jedes Exemplar kann leicht abweichen.

→ Immer selbst nachmessen und den eigenen Wert notieren!


Schritt 5: Z-Homing über Probe

Damit Klipper beim Homen die Probe als Z-Referenz nutzt:

Code: Alles auswählen

[stepper_z]
endstop_pin: probe:z_virtual_endstop   # Probe als virtueller Z-Endstop
position_min: -5                        # Negativwert erlauben (für Kalibrierung)
position_max: 100
homing_speed: 10

[safe_z_home]
home_xy_position: 150, 150             # Mitte des Arbeitsbereichs anpassen!
speed: 50
z_hop: 15                              # Z vor dem Homen anheben
z_hop_speed: 10

Schritt 6: Makro – Automatisches Z-Nullpunkt setzen mit Bestätigung

Das Makro fährt zunächst Z hoch, zeigt dann in Mainsail/Fluidd ein Popup-Fenster und wartet auf Bestätigung bevor es abtastet. So kann die Messplatte sicher unter den Fräser gelegt werden.

Voraussetzung: Mainsail ≥ 2.1 oder Fluidd ≥ 1.19 (beide unterstützen das Prompt-System nativ).

Code: Alles auswählen

# -------------------------------------------------------
# Hauptmakro: Z hochfahren + Popup anzeigen
# -------------------------------------------------------
[gcode_macro Z_PROBE_WERKZEUG]
description: Z-Nullpunkt mit SainSmart Messtaster – wartet auf Bestätigung
variable_probe_dicke: 14.19
variable_abfahrhoehe: 10
gcode:
    {% set PROBE_DICKE = params.DICKE|default(14.19)|float %}
    {% set ABFAHRHOEHE = params.HOEHE|default(10)|float %}

    # Parameter in Variablen speichern (für zweites Makro)
    SET_GCODE_VARIABLE MACRO=Z_PROBE_WERKZEUG VARIABLE=probe_dicke VALUE={PROBE_DICKE}
    SET_GCODE_VARIABLE MACRO=Z_PROBE_WERKZEUG VARIABLE=abfahrhoehe VALUE={ABFAHRHOEHE}

    # Z hochfahren damit Platte bequem untergelegt werden kann
    G91
    G1 Z{ABFAHRHOEHE} F600
    G90

    # Popup-Dialog in Mainsail/Fluidd anzeigen
    RESPOND TYPE=command MSG="action:prompt_begin Messtaster vorbereiten"
    RESPOND TYPE=command MSG="action:prompt_text Messplatte unter den Fraeser legen, dann bestaetigen!"
    RESPOND TYPE=command MSG="action:prompt_button_group_start"
    RESPOND TYPE=command MSG="action:prompt_button Ja, Platte liegt - Abtasten starten|PROBE_JETZT_AUSFUEHREN|primary"
    RESPOND TYPE=command MSG="action:prompt_button Abbrechen|RESPOND MSG=Abtasten abgebrochen.|warning"
    RESPOND TYPE=command MSG="action:prompt_button_group_end"
    RESPOND TYPE=command MSG="action:prompt_show"


# -------------------------------------------------------
# Wird automatisch durch den Ja-Button aufgerufen
# -------------------------------------------------------
[gcode_macro PROBE_JETZT_AUSFUEHREN]
description: Interner Aufruf nach Bestätigung – startet den Abtastvorgang
gcode:
    {% set PROBE_DICKE = printer["gcode_macro Z_PROBE_WERKZEUG"].probe_dicke %}
    {% set ABFAHRHOEHE = printer["gcode_macro Z_PROBE_WERKZEUG"].abfahrhoehe %}

    RESPOND MSG="Bestaetigt – starte Abtastvorgang mit {PROBE_DICKE} mm Plattendicke..."

    # Dreifach antasten
    PROBE SAMPLES=3 SAMPLE_RETRACT_DIST=2 SAMPLES_TOLERANCE=0.02

    # Z-Koordinate auf Werkstückoberfläche setzen
    G92 Z{PROBE_DICKE}

    # Fräser auf sichere Höhe fahren
    G1 Z{ABFAHRHOEHE} F600

    # Popup schließen
    RESPOND TYPE=command MSG="action:prompt_end"
    RESPOND MSG="Fertig! Z=0 liegt jetzt auf der Werkstuckoberflaeche."
Aufruf im Terminal oder als Button in Mainsail/Fluidd:

Code: Alles auswählen

Z_PROBE_WERKZEUG                        # Standard: 14.19 mm Plattendicke
Z_PROBE_WERKZEUG DICKE=14.35           # Eigene gemessene Dicke übergeben
Z_PROBE_WERKZEUG DICKE=14.35 HOEHE=15  # Mit angepasster Sicherheitshöhe
Ablauf:
  • Makro startet → Fräser fährt Z hoch
  • Popup erscheint: „Messplatte unter den Fräser legen"
  • Platte unterlegen, dann „Ja, Platte liegt – Abtasten starten" klicken
  • Klipper tastet 3x ab, setzt Z=0 auf Werkstückoberfläche, fährt hoch
  • Meldung: „Fertig! Z=0 liegt jetzt auf der Werkstückoberfläche."

Schritt 7: Offset einmalig kalibrieren (empfohlen)

Nach dem ersten Aufbau den z_offset fein kalibrieren:

Code: Alles auswählen

G28                  # Alle Achsen homen
PROBE_CALIBRATE      # Klipper-Kalibrierungsassistent starten
Klipper führt einen automatischen Abtastvorgang durch und leitet dann einen manuellen Papiertest an. Am Ende:

Code: Alles auswählen

SAVE_CONFIG          # Offset dauerhaft speichern
Der ermittelte Wert wird automatisch in die printer.cfg unter #*# <---------------------- SAVE_CONFIG ----------------------> geschrieben und überschreibt den manuellen z_offset-Wert.


Probe testen

Zustand des Endstops abfragen:

Code: Alles auswählen

QUERY_ENDSTOPS
  • Ohne Berührung → open
  • Fräser liegt auf Platte → TRIGGERED
Einzelne Messung ausführen und Z-Position anzeigen:

Code: Alles auswählen

PROBE
GET_POSITION

Häufige Fehler & Lösungen

Fehler: Unable to open port: /tmp/klipper_host_mcu
  • Dienst läuft nicht → prüfen mit: [icode]sudo systemctl status klipper-mcu.service[/icode]
Fehler: gpio5: permission denied
  • Benutzer nicht in der gpio-Gruppe → [icode]sudo usermod -a -G gpio $USER[/icode] + neu einloggen
Endstop zeigt dauerhaft TRIGGERED:
  • Polung prüfen – roten und schwarzen Draht tauschen
  • ! aus dem Pin-Namen entfernen und testen
Endstop reagiert gar nicht:
  • ^ (Pull-up) nicht vergessen
  • GND-Verbindung prüfen – Multimeter im Durchgangsprüfer-Modus zwischen Fräser und schwarzem Draht
Popup erscheint nicht:
  • Mainsail/Fluidd Version prüfen – mindestens Mainsail 2.1 oder Fluidd 1.19 erforderlich
  • Als Workaround: [icode]PROBE_JETZT_AUSFUEHREN[/icode] direkt in die Konsole tippen nach manuellem Unterlegen der Platte
samples_tolerance Fehler:
  • Fräser schlecht leitend (Oxidation, Schmutz) → Kontaktfläche reinigen
  • [icode]speed[/icode] in der printer.cfg auf 2–3 mm/s reduzieren
  • [icode]samples_tolerance[/icode] auf 0.05 erhöhen
Z-Nullpunkt zu hoch oder zu tief:
  • Plattendicke nachmessen und [icode]DICKE=[/icode] Wert anpassen
  • Kalibrierung mit [icode]PROBE_CALIBRATE[/icode] + [icode]SAVE_CONFIG[/icode] wiederholen

Getestet mit: Klipper v0.11 · Raspberry Pi 4 · SainSmart Z-Touch Probe (101-60-386) · Mainsail 2.4 · Fluidd 1.21

Fragen und Ergänzungen gerne in die Kommentare! Wer seinen eigenen gemessenen Dickenwert hat – einfach posten.