aboutsummaryrefslogtreecommitdiffstats
path: root/klippy/extras/tmc.py
diff options
context:
space:
mode:
authorKevin O'Connor <kevin@koconnor.net>2021-10-28 17:10:10 -0400
committerKevin O'Connor <kevin@koconnor.net>2021-11-04 12:06:27 -0400
commit689231df3a6c1ed606d227cce7115703b153193b (patch)
tree28c550dfb5d9140403ee3b5b13e081d8906ad873 /klippy/extras/tmc.py
parent4acfd8d7c8973f6cc7b8a3eaa8ea9e82a92b018b (diff)
downloadkutter-689231df3a6c1ed606d227cce7115703b153193b.tar.gz
kutter-689231df3a6c1ed606d227cce7115703b153193b.tar.xz
kutter-689231df3a6c1ed606d227cce7115703b153193b.zip
stepper: Add support for stepping on both edges of a step pulse
Add an optimized step function for drivers that support stepping on both rising and falling edges of the step pin. Enable this optimization on 32bit ARM micro-controllers. Automatically detect this capability in the host code and enable on TMC drivers running in SPI/UART mode. Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Diffstat (limited to 'klippy/extras/tmc.py')
-rw-r--r--klippy/extras/tmc.py15
1 files changed, 12 insertions, 3 deletions
diff --git a/klippy/extras/tmc.py b/klippy/extras/tmc.py
index 7a6b4fa5..6a59bbfb 100644
--- a/klippy/extras/tmc.py
+++ b/klippy/extras/tmc.py
@@ -224,6 +224,8 @@ class TMCCommandHelper:
self.stepper_enable = self.printer.load_object(config, "stepper_enable")
self.printer.register_event_handler("stepper:sync_mcu_position",
self._handle_sync_mcu_pos)
+ self.printer.register_event_handler("klippy:mcu_identify",
+ self._handle_mcu_identify)
self.printer.register_event_handler("klippy:connect",
self._handle_connect)
# Set microstep config options
@@ -345,6 +347,12 @@ class TMCCommandHelper:
self.echeck_helper.stop_checks()
except self.printer.command_error as e:
self.printer.invoke_shutdown(str(e))
+ def _handle_mcu_identify(self):
+ # Lookup stepper object
+ force_move = self.printer.lookup_object("force_move")
+ self.stepper = force_move.lookup_stepper(self.stepper_name)
+ # Note pulse duration and step_both_edge optimizations available
+ self.stepper.setup_default_pulse_duration(.000000100, True)
def _handle_stepper_enable(self, print_time, is_enable):
if is_enable:
cb = (lambda ev: self._do_enable(print_time))
@@ -352,9 +360,10 @@ class TMCCommandHelper:
cb = (lambda ev: self._do_disable(print_time))
self.printer.get_reactor().register_callback(cb)
def _handle_connect(self):
- # Lookup stepper object
- force_move = self.printer.lookup_object("force_move")
- self.stepper = force_move.lookup_stepper(self.stepper_name)
+ # Check if using step on both edges optimization
+ pulse_duration, step_both_edge = self.stepper.get_pulse_duration()
+ if step_both_edge:
+ self.fields.set_field("dedge", 1)
# Check for soft stepper enable/disable
enable_line = self.stepper_enable.lookup_enable(self.stepper_name)
enable_line.register_state_callback(self._handle_stepper_enable)