stepper: Check if the motor needs to be enabled in the kinematic classes

Check for motor enable in the kinematic classes so it doesn't need to
be checked on every move.

Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
This commit is contained in:
Kevin O'Connor 2016-11-14 13:40:35 -05:00
parent 9ad8153d33
commit 5a1ec817d4
4 changed files with 55 additions and 29 deletions

View file

@ -11,6 +11,7 @@ class PrinterExtruder:
self.heater = heater.PrinterHeater(printer, config)
self.stepper = stepper.PrinterStepper(printer, config)
self.pressure_advance = config.getfloat('pressure_advance', 0.)
self.need_motor_enable = True
self.stepper_pos = 0
self.extrude_pos = 0.
def build_config(self):
@ -19,6 +20,7 @@ class PrinterExtruder:
self.stepper.build_config()
def motor_off(self, move_time):
self.stepper.motor_enable(move_time, 0)
self.need_motor_enable = True
def check_move(self, move):
if not self.heater.can_extrude:
raise homing.EndstopError(move.end_pos, "Extrude below minimum temp")
@ -28,6 +30,9 @@ class PrinterExtruder:
# Extrude only move - limit accel and velocity
move.limit_speed(self.stepper.max_velocity, self.stepper.max_accel)
def move(self, move_time, move):
if self.need_motor_enable:
self.stepper.motor_enable(move_time, 1)
self.need_motor_enable = False
axis_d = move.axes_d[3]
extrude_r = axis_d / move.move_d
inv_accel = 1. / (move.accel * extrude_r)
@ -92,7 +97,8 @@ class PrinterExtruder:
stepper_pos = self.stepper_pos
inv_step_dist = self.stepper.inv_step_dist
step_dist = self.stepper.step_dist
mcu_time, so = self.stepper.prep_move(move_time)
mcu_stepper = self.stepper.mcu_stepper
mcu_time = mcu_stepper.print_to_mcu_time(move_time)
step_offset = stepper_pos - start_pos * inv_step_dist
# Acceleration steps
@ -102,7 +108,7 @@ class PrinterExtruder:
accel_time_offset = start_v * inv_accel
accel_sqrt_offset = accel_time_offset**2
accel_steps = accel_d * inv_step_dist
count = so.step_sqrt(
count = mcu_stepper.step_sqrt(
mcu_time - accel_time_offset, accel_steps, step_offset
, accel_sqrt_offset, accel_multiplier)
stepper_pos += count
@ -113,7 +119,7 @@ class PrinterExtruder:
#t = pos/cruise_v
cruise_multiplier = step_dist / cruise_v
cruise_steps = cruise_d * inv_step_dist
count = so.step_factor(
count = mcu_stepper.step_factor(
mcu_time, cruise_steps, step_offset, cruise_multiplier)
stepper_pos += count
step_offset += count - cruise_steps
@ -124,7 +130,7 @@ class PrinterExtruder:
decel_time_offset = decel_v * inv_accel
decel_sqrt_offset = decel_time_offset**2
decel_steps = decel_d * inv_step_dist
count = so.step_sqrt(
count = mcu_stepper.step_sqrt(
mcu_time + decel_time_offset, decel_steps, step_offset
, decel_sqrt_offset, -accel_multiplier)
stepper_pos += count
@ -136,7 +142,7 @@ class PrinterExtruder:
accel_time_offset = retract_v * inv_accel
accel_sqrt_offset = accel_time_offset**2
accel_steps = -retract_d * inv_step_dist
count = so.step_sqrt(
count = mcu_stepper.step_sqrt(
mcu_time - accel_time_offset, accel_steps, step_offset
, accel_sqrt_offset, accel_multiplier)
stepper_pos += count