diff options
author | Kevin O'Connor <kevin@koconnor.net> | 2019-06-12 23:28:22 -0400 |
---|---|---|
committer | KevinOConnor <kevin@koconnor.net> | 2019-06-28 16:59:26 -0400 |
commit | 7702f0a027686ccba4d45417c79c353c00e8c712 (patch) | |
tree | b48a98efea6a4fd1b4f135b60028ade58cb14e27 /klippy/extras/tmc.py | |
parent | 041831f93a50426efc103a13917a7cdbef99a56e (diff) | |
download | kutter-7702f0a027686ccba4d45417c79c353c00e8c712.tar.gz kutter-7702f0a027686ccba4d45417c79c353c00e8c712.tar.xz kutter-7702f0a027686ccba4d45417c79c353c00e8c712.zip |
tmc: Add support for virtual enable pins
Add support for enabling the stepper via the communication channel.
This improves support for boards with a shared enable line.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Diffstat (limited to 'klippy/extras/tmc.py')
-rw-r--r-- | klippy/extras/tmc.py | 40 |
1 files changed, 34 insertions, 6 deletions
diff --git a/klippy/extras/tmc.py b/klippy/extras/tmc.py index f0a9ad38..5b606e26 100644 --- a/klippy/extras/tmc.py +++ b/klippy/extras/tmc.py @@ -155,7 +155,7 @@ class TMCCommandHelper: ###################################################################### -# TMC virtual endstops +# TMC virtual pins ###################################################################### # Endstop wrapper that enables "sensorless homing" @@ -187,8 +187,30 @@ class TMCVirtualEndstop: self.mcu_tmc.set_register("TCOOLTHRS", 0) self.mcu_endstop.home_finalize() -class TMCEndstopHelper: - def __init__(self, config, mcu_tmc, diag_pin): +# Digital output wrapper for virtual enable +class TMCVirtualEnable: + def __init__(self, printer, mcu_tmc): + self.reactor = printer.get_reactor() + self.mcu_tmc = mcu_tmc + self.fields = mcu_tmc.get_fields() + self.toff = self.fields.get_field("toff") + self.fields.set_field("toff", 0) + def setup_max_duration(self, max_duration): + pass + def _do_set_digital(self, print_time, value): + toff_val = 0 + if value: + toff_val = self.toff + print_time -= 0.100 # Schedule slightly before deadline + val = self.fields.set_field("toff", toff_val) + reg_name = self.fields.lookup_register("toff") + self.mcu_tmc.set_register(reg_name, val, print_time) + def set_digital(self, print_time, value): + self.reactor.register_callback( + (lambda ev: self._do_set_digital(print_time, value))) + +class TMCVirtualPinHelper: + def __init__(self, config, mcu_tmc, diag_pin=None): self.printer = config.get_printer() self.mcu_tmc = mcu_tmc self.diag_pin = diag_pin @@ -197,12 +219,18 @@ class TMCEndstopHelper: ppins.register_chip("%s_%s" % (name_parts[0], name_parts[-1]), self) def setup_pin(self, pin_type, pin_params): ppins = self.printer.lookup_object('pins') + if pin_params['pin'] not in ('virtual_endstop', 'virtual_enable'): + raise ppins.error("Unknown tmc virtual pin") + if pin_params['invert'] or pin_params['pullup']: + raise ppins.error("Can not pullup/invert tmc virtual pin") + if pin_params['pin'] == 'virtual_enable': + if pin_type != 'digital_out': + raise ppins.error("tmc virtual enable only useful for enable") + return TMCVirtualEnable(self.printer, self.mcu_tmc) if self.diag_pin is None: raise ppins.error("tmc virtual endstop requires diag pin config") - if pin_type != 'endstop' or pin_params['pin'] != 'virtual_endstop': + if pin_type != 'endstop': raise ppins.error("tmc virtual endstop only useful as endstop") - if pin_params['invert'] or pin_params['pullup']: - raise ppins.error("Can not pullup/invert tmc virtual endstop") mcu_endstop = ppins.setup_pin('endstop', self.diag_pin) return TMCVirtualEndstop(self.mcu_tmc, mcu_endstop) |