Commit Graph
9 Commits
Author SHA1 Message Date
mangavalkandClaude Opus 5.5 93ae8795b8 PA calibration reads Spoolman first; guard resets a sensor left in PA mode
- LANE_CALIBRATE_PA: when a calibration will run, assign the lane's spool
  again (SET_SPOOL_ID) so AFC reads the Spoolman temperature now; AFC
  only reads it at spool assignment and Klipper start (TPU calibrated at
  210C after Spoolman was set to 230C). The calibration moved to
  _LANE_CALIBRATE_PA_RUN, rendered after the refresh.
- bdp_guard: an emergency stop during PA_CALIBRATE leaves the sensor in
  PA mode (FIRMWARE_RESTART does not reset it). When arming, read the
  mode register and switch the sensor back to probe mode with a fresh
  baseline before watching it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-19 16:04:40 +02:00
mangavalkandClaude Opus 5.5 0b1b2a6947 Purge check: accept load-check firmware v2; chamber load levels first
- bdpressure_check.py accepted only extension version 1. The sensor now
  runs firmware version 2 (bytes 54-65 unchanged, diagnostics added), so
  every purge check reported bd_pressure as not answering. Accept 1 and 2.
- _LOAD_FOR_CHAMBER: the Blobifier only purges with the QGL applied, so
  the load before the chamber soak skipped its purge (0.0 mm extruded).
  Level the gantry and home Z first when the QGL is not applied.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-19 12:12:25 +02:00
mangavalkandClaude Opus 5.5 8eef0ee298 bdp_guard: one lock for all I2C transfers of the bd_pressure
The guard's timer read the sensor while G28 ran; bdpressure.py writes the
probe mode at every homing move, and Klipper allows only one I2C request
at a time per device: KeyError ('i2c_response', 1), Klipper shut down
during HOME. The guard now wraps the sensor's i2c in a reactor mutex at
connect; bdpressure and bdpressure_check (now looks up sensor.i2c at
every use) go through it too.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-18 23:06:49 +02:00
mangavalkandClaude Opus 5.5 61fa8acb05 Print start: contact homing, nozzle guard, Z check, purge before chamber heat
- HOME always homes Z with Beacon contact and recalibrates, also when the
  printer is already homed (home_method_when_homed = proximity used the
  model of an earlier print without touching the bed). PRINT_START homes
  Z again after QGL, before the brush takes the nozzle below Z0.
- _Z_CHECK: after the soak, compare Klipper's Z with a BEACON_QUERY
  reading at Z3 over the bed centre and stop the print above 1 mm.
  Warns and continues when BEACON_QUERY leaves no new
  printer.beacon.last_sample.
- Nozzle guard (extras/bdp_guard.py, print/nozzle_guard.cfg): reads the
  bd_pressure force over I2C every 20 ms while armed and, in stop mode,
  shuts Klipper down on a touch. Armed for HOME X/Y, QGL, Z homing, brush,
  mesh and the Z check; starts in log mode to collect peaks per phase.
- Chamber prints: load and purge the first tool before the chamber heats
  (_LOAD_FOR_CHAMBER replaces _UNLOAD_FOR_CHAMBER). A cut unload leaves a
  piece of PLA in the extruder that softened in the hot chamber and jammed
  the ASA load.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-18 22:39:26 +02:00
mangavalkandClaude Opus 5.5 25891640b8 Reject PA calibrations with no result or bad sensor data
bdpressure.py leaves the extruder at the last PA_CALIBRATE test value
(0.098) when it finds no result, and _PA_AFTER_CALIBRATE saved that as
the calibrated PA (lane1 after an AFC pause, lane5 after the sensor went
silent). A run is now rejected, with nothing cached or written to
Spoolman, when the PA is still at the end of the scan, the printer
paused during the test, or bd_pressure gave too few or too few different
readings. The previous valid PA (or fallback_pa) is applied instead.

bdpressure_check reports pa_points and pa_distinct from the bdpressure
module's last PA_CALIBRATE data for this.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 21:10:06 +02:00
mangavalkandClaude Opus 5.5 93f00c87a7 Stop using bdwidth while printing, work without it
bdwidth's motion reading stays at 0, its per-reading width compensation
made the flow jump between 77 and 119%, and a USB dropout shut down
Klipper. PRINT_START no longer enables it. _PRINT_CLEANUP,
BLOBIFIER_CHECKED and PURGE_UNTIL_EMPTY only send bdwidth commands when
[bdwidth fila_width_0] exists, and bdwidth_status reports present: False
with neutral values when it is not configured, so the section can be
removed from printer.cfg.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 18:18:40 +02:00
mangavalkandClaude Opus 5.5 76172fbc4f Remove committed __pycache__, ignore Python bytecode
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 18:03:25 +02:00
mangavalkandClaude Opus 5.5 e4d2230a57 bdwidth_status: keep a bdwidth USB dropout from shutting down Klipper
bdwidth reads its CH340 from a reactor timer without error handling, so
"write failed: [Errno 5] Input/output error" shut down Klipper mid print.
bdwidth_status now wraps the sensor's Read_bdwidth (bdwidth.py itself
unchanged): on a USB error it closes the port, reports once and returns
False, so bdwidth retries every 10 s; the port is reopened when the
device is back. New status fields usb_ok and usb_errors.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 18:03:18 +02:00
mangavalkandClaude Opus 5.5 6dbb4ca3fb Initial import of my Klipper macros, modules and scripts
Macros as they run on the printer (Voron 2.4 + AFC Box Turtle +
Blobifier + Beacon + bd_pressure + bdwidth + iHeater), the Klipper
modules they need (xy_drift, bdwidth_status, bdpressure_check), MCU
firmware update scripts, install.sh with Moonraker update manager
support, and READMEs.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 13:45:11 +02:00