tmc: Do not override tcoolthrs if it is configured

If tcoolthrs is configured (not the default 0), then do not force
the value of tcoolthrs=0xfffff during homing. This way, tcoolthrs
can be set to a custom value during homing.

`tpwmthrs` and `en_pwm_mode`/`en_spreadcycle` are now also
correctly restored if they were changed after startup.

Signed-off-by: Alex Voinea <voinea.dragos.alexandru@gmail.com>
This commit is contained in:
Alex Voinea 2023-03-11 18:20:32 +01:00 committed by KevinOConnor
parent fd167894a0
commit a9feeaa9eb
1 changed files with 8 additions and 10 deletions

View File

@ -452,13 +452,6 @@ class TMCVirtualPinHelper:
if self.diag_pin is None: if self.diag_pin is None:
raise ppins.error("tmc virtual endstop requires diag pin config") raise ppins.error("tmc virtual endstop requires diag pin config")
# Setup for sensorless homing # Setup for sensorless homing
reg = self.fields.lookup_register("en_pwm_mode", None)
if reg is None:
self.en_pwm = not self.fields.get_field("en_spreadcycle")
self.pwmthrs = self.fields.get_field("tpwmthrs")
else:
self.en_pwm = self.fields.get_field("en_pwm_mode")
self.pwmthrs = 0
self.printer.register_event_handler("homing:homing_move_begin", self.printer.register_event_handler("homing:homing_move_begin",
self.handle_homing_move_begin) self.handle_homing_move_begin)
self.printer.register_event_handler("homing:homing_move_end", self.printer.register_event_handler("homing:homing_move_end",
@ -468,19 +461,24 @@ class TMCVirtualPinHelper:
def handle_homing_move_begin(self, hmove): def handle_homing_move_begin(self, hmove):
if self.mcu_endstop not in hmove.get_mcu_endstops(): if self.mcu_endstop not in hmove.get_mcu_endstops():
return return
self.pwmthrs = self.fields.get_field("tpwmthrs")
self.coolthrs = self.fields.get_field("tcoolthrs")
reg = self.fields.lookup_register("en_pwm_mode", None) reg = self.fields.lookup_register("en_pwm_mode", None)
if reg is None: if reg is None:
# On "stallguard4" drivers, "stealthchop" must be enabled # On "stallguard4" drivers, "stealthchop" must be enabled
self.en_pwm = not self.fields.get_field("en_spreadcycle")
tp_val = self.fields.set_field("tpwmthrs", 0) tp_val = self.fields.set_field("tpwmthrs", 0)
self.mcu_tmc.set_register("TPWMTHRS", tp_val) self.mcu_tmc.set_register("TPWMTHRS", tp_val)
val = self.fields.set_field("en_spreadcycle", 0) val = self.fields.set_field("en_spreadcycle", 0)
else: else:
# On earlier drivers, "stealthchop" must be disabled # On earlier drivers, "stealthchop" must be disabled
self.en_pwm = self.fields.get_field("en_pwm_mode")
self.fields.set_field("en_pwm_mode", 0) self.fields.set_field("en_pwm_mode", 0)
val = self.fields.set_field(self.diag_pin_field, 1) val = self.fields.set_field(self.diag_pin_field, 1)
self.mcu_tmc.set_register("GCONF", val) self.mcu_tmc.set_register("GCONF", val)
tc_val = self.fields.set_field("tcoolthrs", 0xfffff) if self.coolthrs == 0:
self.mcu_tmc.set_register("TCOOLTHRS", tc_val) tc_val = self.fields.set_field("tcoolthrs", 0xfffff)
self.mcu_tmc.set_register("TCOOLTHRS", tc_val)
def handle_homing_move_end(self, hmove): def handle_homing_move_end(self, hmove):
if self.mcu_endstop not in hmove.get_mcu_endstops(): if self.mcu_endstop not in hmove.get_mcu_endstops():
return return
@ -493,7 +491,7 @@ class TMCVirtualPinHelper:
self.fields.set_field("en_pwm_mode", self.en_pwm) self.fields.set_field("en_pwm_mode", self.en_pwm)
val = self.fields.set_field(self.diag_pin_field, 0) val = self.fields.set_field(self.diag_pin_field, 0)
self.mcu_tmc.set_register("GCONF", val) self.mcu_tmc.set_register("GCONF", val)
tc_val = self.fields.set_field("tcoolthrs", 0) tc_val = self.fields.set_field("tcoolthrs", self.coolthrs)
self.mcu_tmc.set_register("TCOOLTHRS", tc_val) self.mcu_tmc.set_register("TCOOLTHRS", tc_val)