aboutsummaryrefslogtreecommitdiffstats
path: root/klippy/stepper.py
diff options
context:
space:
mode:
authorKevin O'Connor <kevin@koconnor.net>2019-11-12 12:49:21 -0500
committerKevin O'Connor <kevin@koconnor.net>2019-11-12 17:32:18 -0500
commit0e30b862c7e94a9e259f213dd25ec1671ca560c9 (patch)
treeecb7c1e7326b6c88447aab4984dda9d005a64e80 /klippy/stepper.py
parentbfb34e07017248268474281dc6678a8d141458ad (diff)
downloadkutter-0e30b862c7e94a9e259f213dd25ec1671ca560c9.tar.gz
kutter-0e30b862c7e94a9e259f213dd25ec1671ca560c9.tar.xz
kutter-0e30b862c7e94a9e259f213dd25ec1671ca560c9.zip
stepper_enable: Move enable tracking from stepper.py to stepper_enable.py
Move the enable line tracking out of the main stepper.py code. This simplifies the main kinematic code. Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Diffstat (limited to 'klippy/stepper.py')
-rw-r--r--klippy/stepper.py75
1 files changed, 7 insertions, 68 deletions
diff --git a/klippy/stepper.py b/klippy/stepper.py
index 2f403a0a..cd354fbe 100644
--- a/klippy/stepper.py
+++ b/klippy/stepper.py
@@ -8,50 +8,6 @@ import homing
######################################################################
-# Stepper enable pins
-######################################################################
-
-# Tracking of shared stepper enable pins
-class StepperEnablePin:
- def __init__(self, mcu_enable, enable_count=0):
- self.mcu_enable = mcu_enable
- self.enable_count = enable_count
- def set_enable(self, print_time, enable):
- if enable:
- if not self.enable_count:
- self.mcu_enable.set_digital(print_time, 1)
- self.enable_count += 1
- else:
- self.enable_count -= 1
- if not self.enable_count:
- self.mcu_enable.set_digital(print_time, 0)
-
-class StepperMultiEnablePin:
- def __init__(self, enable_list):
- self.enable_list = enable_list
- def set_enable(self, print_time, enable):
- for en in self.enable_list:
- en.set_enable(print_time, enable)
-
-def lookup_enable_pin(ppins, pin_list):
- if pin_list is None:
- return StepperEnablePin(None, 9999)
- enable_list = []
- for pin in pin_list.split(','):
- pin_params = ppins.lookup_pin(pin, can_invert=True,
- share_type='stepper_enable')
- enable = pin_params.get('class')
- if enable is None:
- mcu_enable = pin_params['chip'].setup_pin('digital_out', pin_params)
- mcu_enable.setup_max_duration(0.)
- pin_params['class'] = enable = StepperEnablePin(mcu_enable)
- enable_list.append(enable)
- if len(enable_list) == 1:
- return enable_list[0]
- return StepperMultiEnablePin(enable_list)
-
-
-######################################################################
# Steppers
######################################################################
@@ -60,7 +16,6 @@ class PrinterStepper:
def __init__(self, config):
printer = config.get_printer()
self.name = config.get_name()
- self.need_motor_enable = True
# Stepper definition
ppins = printer.lookup_object('pins')
step_pin = config.get('step_pin')
@@ -70,19 +25,12 @@ class PrinterStepper:
mcu_stepper.setup_dir_pin(dir_pin_params)
step_dist = config.getfloat('step_distance', above=0.)
mcu_stepper.setup_step_distance(step_dist)
- # Enable pin handling
- stepper_enable = printer.try_load_module(config, 'stepper_enable')
- stepper_enable.register_stepper(self)
- mcu_stepper.add_active_callback(self._stepper_active)
- self.enable = lookup_enable_pin(ppins, config.get('enable_pin', None))
- # Register STEPPER_BUZZ command
- force_move = printer.try_load_module(config, 'force_move')
- force_move.register_stepper(self)
# Wrappers
self.setup_itersolve = mcu_stepper.setup_itersolve
self.generate_steps = mcu_stepper.generate_steps
self.set_trapq = mcu_stepper.set_trapq
self.set_stepper_kinematics = mcu_stepper.set_stepper_kinematics
+ self.add_active_callback = mcu_stepper.add_active_callback
self.calc_position_from_coord = mcu_stepper.calc_position_from_coord
self.set_position = mcu_stepper.set_position
self.get_commanded_position = mcu_stepper.get_commanded_position
@@ -90,6 +38,12 @@ class PrinterStepper:
self.get_mcu_position = mcu_stepper.get_mcu_position
self.get_step_dist = mcu_stepper.get_step_dist
self.is_dir_inverted = mcu_stepper.is_dir_inverted
+ # Enable pin handling
+ stepper_enable = printer.try_load_module(config, 'stepper_enable')
+ stepper_enable.register_stepper(self, config.get('enable_pin', None))
+ # Register STEPPER_BUZZ command
+ force_move = printer.try_load_module(config, 'force_move')
+ force_move.register_stepper(self)
def get_name(self, short=False):
if short and self.name.startswith('stepper_'):
return self.name[8:]
@@ -109,17 +63,6 @@ class PrinterStepper:
2. * step_dist, max_halt_velocity, max_accel)
min_stop_interval = second_last_step_time - last_step_time
self.mcu_stepper.setup_min_stop_interval(min_stop_interval)
- def _stepper_active(self, active_time):
- self.motor_enable(active_time, 1)
- def motor_enable(self, print_time, enable=0):
- if self.need_motor_enable != (not enable):
- self.enable.set_enable(print_time, enable)
- self.need_motor_enable = not enable
- if not enable:
- # Enable stepper on future stepper movement
- self.mcu_stepper.add_active_callback(self._stepper_active)
- def is_motor_enabled(self):
- return not self.need_motor_enable
######################################################################
@@ -136,7 +79,6 @@ class PrinterRail:
self.steppers = [stepper]
self.name = stepper.get_name(short=True)
self.get_commanded_position = stepper.get_commanded_position
- self.is_motor_enabled = stepper.is_motor_enabled
# Primary endstop and its position
printer = config.get_printer()
ppins = printer.lookup_object('pins')
@@ -232,9 +174,6 @@ class PrinterRail:
def set_position(self, coord):
for stepper in self.steppers:
stepper.set_position(coord)
- def motor_enable(self, print_time, enable=0):
- for stepper in self.steppers:
- stepper.motor_enable(print_time, enable)
# Wrapper for dual stepper motor support
def LookupMultiRail(config):