Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 11 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -1069,6 +1069,17 @@ INDX's own `M104` and `M109` (in `indx-tc-macros.cfg`) enforce this: with no too

Warnings that are dangerous to ignore (`! ...`, for example a failed homing or `clearance_y` too close to a dock) and moments when you need to act (`> ...`, for example docks not calibrated yet) are also shown with `M117` on the printer display. The console keeps the full message. An INDX alert clears itself after the next successful `G28`, and never clears your own `M117` text.

#### Pickup and park checks

INDX checks every pickup and every park with the load cell. This is on by default (`seat_check_enabled: True` in `indx.cfg`) and is separate from the homing [seat check](#seat-check) above. Each check compares two readings taken standing still a few seconds apart, so the tare and the load cell's drift with temperature do not affect it.

- **Pickup.** The head reads the load cell at the trigger line with the head empty, picks up the tool, and reads it again. A seated tool adds its latch spring preload, so the two readings must differ by at least `seat_min_force_g` (default 680 g). If they don't and the difference is below `seat_empty_max_g` (default 230 g), the head is empty: the console says so, X and Y are homed again, and the tool is parked and picked up once more. In sport mode INDX first switches to normal tool change speed, says so on the console and the display, and stays in normal (also after a restart) until you run `MODE_SPORT` again. If the second try fails too, the heater is turned off and no tool is recorded. A difference between `seat_empty_max_g` and `seat_min_force_g` means the tool may be half seated on the head. INDX never assumes the head is empty, so there is no retry: the heater is turned off, the tool stays recorded as on the head, the latch is left as it is, and the display shows `T<n> may be on the head`. Until the head has been checked, `G28` (when it homes Z), `CHANGE_TOOL` and `PARK_TOOL` refuse to run, also after a restart. Check the head by hand, then run `MANUAL_TOOL_REMOVE` (take the tool off and put it in its dock) or `MANUAL_TOOL_SEAT TOOL=<n>` (it is fully on). Either one, or `MANUAL_TOOLHEAD_RESET`, clears the refusal. Either way, during a print the print pauses, with nothing moved or retracted: get the tool back in its dock with the head empty, run the `CHANGE_TOOL` command the console gives you, then `RESUME`. Outside a print, and during the T0 fetch of a `G28`, INDX stops with an error.
- **Park.** The head reads the load cell with the tool still seated, parks it, and reads it again after leaving the dock. The readings must differ by at least `park_min_change_g` (default 425 g). If they don't, the tool is probably still on the head: INDX stops with an error before driving anywhere else, turns the heater off, and keeps the tool recorded as on the head. Check the head. If the heater also reported a model divergence, a blob from a detached print may be stuck on the nozzle.

Successful pickups print the reading in the console, for example `T1 seated: load cell -1650 g against the empty head`, which is useful when tuning `seat_min_force_g`. A failed check also shows a short alert on the printer display.

Without a calibrated load cell the checks are skipped, with one line in the console after each restart. To turn them off, set `variable_seat_check_enabled: False` in `indx.cfg`. Tool changes then work as they did before the checks existed. If you keep your own `indx.cfg`, the checks are on with the defaults above until you add these settings.

#### RRF (RepRapFirmware)

Configure the Bondtech INDX PCB in RRF following the [Duet INDX Toolboard documentation](https://docs.duet3d.com/en/Duet3D_hardware/Duet_3_family/INDX_Toolboard).
Expand Down
5 changes: 5 additions & 0 deletions macros/homing.cfg
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,11 @@ gcode:
or (home_x and "y" not in printer.toolhead.homed_axes) %}
{% set tp = printer["gcode_macro TOOL_POSITIONS"] %}
_INDX_CHECK_CLEARANCE
# A failed pickup may have left a tool half seated on the head: no Z home
# until the head has been checked by hand
{% if home_z %}
_INDX_CHECK_SUSPECT
{% endif %}
# In the first seconds after a restart INIT_STATE has not built the tools
# list yet; the T0 fetch below needs it
{% if tp.tools|length == 0 %}
Expand Down
3 changes: 3 additions & 0 deletions macros/indx-cal.cfg
Original file line number Diff line number Diff line change
Expand Up @@ -1107,6 +1107,7 @@ gcode:
M400
SET_GCODE_VARIABLE MACRO=_TOOLCHANGE_VARS VARIABLE=toolhead_state VALUE=2
SAVE_VARIABLE VARIABLE=toolhead_state VALUE=2
SAVE_VARIABLE VARIABLE=seat_suspect VALUE=-1
_INDX_SET_ACTIVE_TOOL TOOL=-1
RESPOND MSG="⚠️ WARNING! Toolhead latch OPEN! Be sure to REMOVE any tools by hand!!! The toolhead status & active tool have been RESET to OPEN & EMPTY!!"

Expand Down Expand Up @@ -1149,6 +1150,7 @@ gcode:

SET_GCODE_VARIABLE MACRO=_TOOLCHANGE_VARS VARIABLE=toolhead_state VALUE=0
SAVE_VARIABLE VARIABLE=toolhead_state VALUE=0
SAVE_VARIABLE VARIABLE=seat_suspect VALUE=-1
_INDX_SET_ACTIVE_TOOL TOOL={t}
RESPOND MSG="Latch locked, T{t} claimed. G28 Z will now probe with it. If this is not the tool that is physically on the head, run MANUAL_TOOL_REMOVE and start again."

Expand All @@ -1157,6 +1159,7 @@ description: ⚠️ Resets toolhead macro status to OPEN & EMPTY - USE WITH CAUT
gcode:
SET_GCODE_VARIABLE MACRO=_TOOLCHANGE_VARS VARIABLE=toolhead_state VALUE=2
SAVE_VARIABLE VARIABLE=toolhead_state VALUE=2
SAVE_VARIABLE VARIABLE=seat_suspect VALUE=-1
_INDX_SET_ACTIVE_TOOL TOOL=-1
M400
TOOL_STATUS
Expand Down
Loading
Loading