Skip to content

Commit 7d52a68

Browse files
committed
Allow using stallguard instead of toolhead sensor
The TMC2209 has stallguard which can be used for sensorless homing of steppers. Rather than just ramming the filament into the extruder and watching for skipping, instead, use the stallguard feature to be a little more delicate.
1 parent f351c2e commit 7d52a68

File tree

1 file changed

+51
-0
lines changed

1 file changed

+51
-0
lines changed

Klipper_Files/Extra module/ercf.py

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,7 @@ def __init__(self, config):
104104
self.enable_clog_detection = config.getint('enable_clog_detection', 1)
105105
self.enable_endless_spool = config.getint('enable_endless_spool', 0)
106106
self.endless_spool_groups = config.getintlist('endless_spool_groups')
107+
self.toolhead_use_stallguard = config.getint('toolhead_use_stallguard', 0)
107108

108109
if self.enable_endless_spool == 1 and len(self.endless_spool_groups) != len(self.selector_offsets):
109110
raise config.error(
@@ -212,6 +213,8 @@ def __init__(self, config):
212213
self.gcode.register_command('ERCF_SELECT_TOOL',
213214
self.cmd_ERCF_SELECT_TOOL,
214215
desc = self.cmd_ERCF_SELECT_TOOL_help)
216+
self.gcode.register_command('_ERCF_HOME_FILAMENT_TO_EXTRUDER',
217+
self.cmd__ERCF_HOME_FILAMENT_TO_EXTRUDER)
215218

216219
def handle_connect(self):
217220
self.toolhead = self.printer.lookup_object('toolhead')
@@ -959,6 +962,13 @@ def _load_to_end_of_bowden(self, length):
959962
return
960963

961964
def _home_to_extruder(self, length, step):
965+
if not self.toolhead_use_stallguard:
966+
return self._home_to_extruder_without_stallguard(length, step)
967+
968+
return self._home_to_extruder_with_stallguard(length)
969+
970+
971+
def _home_to_extruder_without_stallguard(self, length, step):
962972
self._servo_down()
963973

964974
self._log_debug("Homing to extruder with %1.fmm moves" % (step))
@@ -979,6 +989,47 @@ def _home_to_extruder(self, length, step):
979989
self._log_info("Failed to reach extruder after moving %.1fmm, pausing" % length)
980990
self._pause()
981991

992+
def _home_to_extruder_with_stallguard(self, max_length):
993+
self._servo_down()
994+
self.toolhead.dwell(0.2)
995+
self.toolhead.wait_moves()
996+
997+
self._log_debug("Homing to extruder with stallguard, up to %.1fmm" % max_length)
998+
999+
self.gear_stepper.do_set_position(0.)
1000+
1001+
pre_move_position = self._counter.get_distance()
1002+
self.gear_stepper.do_homing_move(max_length, 5, self.gear_stepper_accel, True, True)
1003+
self.toolhead.dwell(0.2)
1004+
self.toolhead.wait_moves()
1005+
post_move_position = self._counter.get_distance()
1006+
distance_moved = post_move_position - pre_move_position
1007+
if distance_moved >= max_length:
1008+
self._log_info("Failed to reach extruder after moving %.1fmm, pausing" % distance_moved)
1009+
self._pause()
1010+
else:
1011+
self._log_debug("Extruder reached after %.1fmm" % distance_moved)
1012+
return post_move_position
1013+
1014+
1015+
def cmd__ERCF_HOME_FILAMENT_TO_EXTRUDER(self, params):
1016+
"""Test command to home the filament to the extruder from
1017+
the end of the fast moves down the reverse bowden.
1018+
1019+
Intended to be used for calibrating the stallguard threshold.
1020+
"""
1021+
return_after = params.get_int('RETURN_AFTER', 0, minval=0, maxval=1)
1022+
self.toolhead.wait_moves()
1023+
pre_home_position = self._counter.get_distance()
1024+
position = self._home_to_extruder(self.extruder_homing_max, self.extruder_homing_step)
1025+
dist_moved = position - pre_home_position
1026+
self._log_info("Filament homed to extruder, moved %.1fmm" % dist_moved)
1027+
if return_after:
1028+
self.gear_stepper.do_set_position(0.)
1029+
self.gear_stepper.do_move(-dist_moved, 5, self.gear_stepper_accel)
1030+
self._log_debug("Returning to original position after homing")
1031+
self._servo_up()
1032+
9821033
def _load_to_nozzle(self):
9831034
if (self.is_paused):
9841035
return

0 commit comments

Comments
 (0)