@@ -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