Nozzle guard in stop mode (brush log-only), wait for the nozzle before HOME

Test print start: guard peaks 1-8 in every phase except the brush scrub
(peak 47, 4 reads above 30 in a row), 0 I2C errors; a light finger push
gives 41. Stop mode for all phases, the brush stays log-only.

The contact homing in HOME restarted 6 times (sample spread too large)
while the nozzle was still heating to 150C; PRINT_WARMUP now waits for a
steady contact temperature first, as PRINT_START does.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
mangavalkandClaude Opus 5.5 committed 2026-10-18 23:25:28 +02:00
1 parent a16b57a0a9
commit b9d2f3a062
4 files changed
+17 -10

No files matched your search

+4 -2
View File
@@ -97,8 +97,10 @@ detection, `filament_error_sensitivity`), iHeater chamber heater.
13-18 s, peak 64-181; empty nozzle about 30 ms. A real failed load in a
print start (AFC reported the lane loaded, nothing reached the nozzle):
longest 1915 ms, peak 45, caught by the 5000 ms limit.
- Nozzle guard (bdp_guard): reading at rest and in travel peaks about 2; a
light finger push on the cold nozzle gives 41 (threshold 30).
- Nozzle guard (bdp_guard): peaks 1-8 in home_xy, QGL, Z homing, mesh and
the Z check; the brush scrub 47 (4 reads above 30 in a row, so it runs
in log mode); a light finger push on the cold nozzle gives 41
(threshold 30).
- Z check after a contact homing: Beacon vs Klipper Z about 0.06 mm.
- XY drift check: endstop noise about 0.01-0.02 mm; limit 0.1 mm (one motor
skipping one cycle = 0.4 mm shows as 0.2 mm in X and Y).
+1 -1
View File
@@ -25,7 +25,7 @@ everything below, grouped by topic. Comment out what you do not use there.
| `pause_resume.cfg` | `PAUSE`, `RESUME`, `CANCEL_PRINT`, `M600` (RESUME also handles a running `HEAT_SOAK`, and after a PAUSE purges 40 mm with `BLOBIFIER_CHECKED` first: a failed check keeps the print paused, `RESUME PURGE=0` skips the purge; CANCEL_PRINT runs the same cleanup as `PRINT_END`) | `heating/heat_soak.cfg`, `leds/`, `blobifier/`, `afc/purge_check.cfg` |
| `filament.cfg` | `LOAD_FILAMENT`, `UNLOAD_FILAMENT` | — |
| `homing.cfg` | `HOME`: X/Y, then Z always with Beacon contact (also when already homed); `_Z_CHECK`: stops the print when Klipper's Z and the Beacon reading differ (run in `PRINT_START` after the soak) | Beacon |
| `nozzle_guard.cfg` | `[bdp_guard]`, `_GUARD_ON PHASE=<name>`, `_GUARD_OFF`: bd_pressure watches the nozzle force during print-start moves where nothing should touch it (QGL, Z homing, mesh); `mode: log` only reports the peak per phase, `mode: stop` shuts Klipper down on a touch | `extras/bdp_guard.py` + bd_pressure load-check firmware |
| `nozzle_guard.cfg` | `[bdp_guard]`, `_GUARD_ON PHASE=<name>`, `_GUARD_OFF`: bd_pressure watches the nozzle force during print-start moves where nothing should touch it (QGL, Z homing, mesh); `mode: stop` shuts Klipper down on a touch (the brush runs log-only), `mode: log` only reports the peak per phase | `extras/bdp_guard.py` + bd_pressure load-check firmware |
| `test_speed.cfg` | `TEST_SPEED`: skipped-steps test for speed and acceleration | — |
| `idle_timeout.cfg` | `[idle_timeout]`: heaters, chamber heater and motors off | iHeater macros |
| **heating/** | | |
+6 -4
View File
@@ -2,13 +2,15 @@
# that must not touch anything (needs extras/bdp_guard.py and the bd_pressure
# load-check firmware). See extras/bdp_guard.py.
#
# mode: log only measures and reports each phase (console and klippy.log,
# "bdp_guard:"). Run a few print starts in log mode, set threshold well
# above the peaks the phases show, then switch to mode: stop.
# mode: stop shuts Klipper down on a touch; log only measures and reports
# each phase (console and klippy.log, "bdp_guard:"). A phase can override it
# with _GUARD_ON MODE=log (the brush does).
# Measured 2026-10-18: peaks 1-8 in all phases except the brush (47); a
# light finger push on the cold nozzle gives 41.
[bdp_guard]
sensor: bd_pa
mode: log
mode: stop
threshold: 30
samples: 3
interval: 0.02
+6 -3
View File
@@ -49,7 +49,9 @@ gcode:
# Only to get the toolhead over the bed for the soak; the Z that counts
# is the contact calibration in PRINT_START on the soaked bed
_STATUS STATE=homing
_NOZZLE_CONTACT_TEMP
# HOME homes Z with Beacon contact: wait for a steady nozzle temperature,
# a nozzle still heating spreads the contact samples (6 restarts seen)
_NOZZLE_CONTACT_TEMP WAIT=1
RESPOND MSG="homing"
HOME
{% if target_chamber > 30 %}
@@ -193,8 +195,9 @@ gcode:
_GUARD_ON PHASE=z_home
G28 Z
# Own phase: the bristles press on the nozzle too
_GUARD_ON PHASE=brush
# Own phase, log only: the bristles press on the nozzle (peak 47,
# 4 reads above 30 in a row), stop mode would shut down every start
_GUARD_ON PHASE=brush MODE=log
BLOBIFIER_CLEAN
_GUARD_OFF
_STATUS STATE=calibrating_z