cartesian: Fix min_stop_interval calculation error
It is possible to have an acceleration greater than max_z_accel on XY+Z moves. That needs to be taken into account when calculating the min_stop_interval. This prevents spurious "No next step" MCU errors. Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
This commit is contained in:
parent
d3eb148cfa
commit
cc7c99a4a4
|
@ -21,11 +21,11 @@ class CartKinematics:
|
|||
self.need_motor_enable = True
|
||||
self.limits = [(1.0, -1.0)] * 3
|
||||
# Setup stepper max halt velocity
|
||||
max_xy_halt_velocity = toolhead.get_max_axis_halt(max_accel)
|
||||
self.steppers[0].set_max_jerk(max_xy_halt_velocity, max_accel)
|
||||
self.steppers[1].set_max_jerk(max_xy_halt_velocity, max_accel)
|
||||
max_z_halt_velocity = toolhead.get_max_axis_halt(self.max_z_accel)
|
||||
self.steppers[2].set_max_jerk(max_z_halt_velocity, self.max_z_accel)
|
||||
max_halt_velocity = toolhead.get_max_axis_halt()
|
||||
self.steppers[0].set_max_jerk(max_halt_velocity, max_accel)
|
||||
self.steppers[1].set_max_jerk(max_halt_velocity, max_accel)
|
||||
self.steppers[2].set_max_jerk(
|
||||
min(max_halt_velocity, self.max_z_velocity), max_accel)
|
||||
def set_position(self, newpos):
|
||||
for i in StepList:
|
||||
self.steppers[i].mcu_stepper.set_position(newpos[i])
|
||||
|
|
|
@ -23,12 +23,12 @@ class CoreXYKinematics:
|
|||
self.need_motor_enable = True
|
||||
self.limits = [(1.0, -1.0)] * 3
|
||||
# Setup stepper max halt velocity
|
||||
max_xy_halt_velocity = toolhead.get_max_axis_halt(max_accel)
|
||||
max_xy_halt_velocity *= math.sqrt(2.)
|
||||
max_halt_velocity = toolhead.get_max_axis_halt()
|
||||
max_xy_halt_velocity = max_halt_velocity * math.sqrt(2.)
|
||||
self.steppers[0].set_max_jerk(max_xy_halt_velocity, max_accel)
|
||||
self.steppers[1].set_max_jerk(max_xy_halt_velocity, max_accel)
|
||||
max_z_halt_velocity = toolhead.get_max_axis_halt(self.max_z_accel)
|
||||
self.steppers[2].set_max_jerk(max_z_halt_velocity, self.max_z_accel)
|
||||
self.steppers[2].set_max_jerk(
|
||||
min(max_halt_velocity, self.max_z_velocity), self.max_z_accel)
|
||||
def set_position(self, newpos):
|
||||
pos = (newpos[0] + newpos[1], newpos[0] - newpos[1], newpos[2])
|
||||
for i in StepList:
|
||||
|
|
|
@ -32,9 +32,9 @@ class DeltaKinematics:
|
|||
self.max_z_velocity = config.getfloat(
|
||||
'max_z_velocity', self.max_velocity,
|
||||
above=0., maxval=self.max_velocity)
|
||||
max_xy_halt_velocity = toolhead.get_max_axis_halt(self.max_accel)
|
||||
max_halt_velocity = toolhead.get_max_axis_halt()
|
||||
for s in self.steppers:
|
||||
s.set_max_jerk(max_xy_halt_velocity, self.max_accel)
|
||||
s.set_max_jerk(max_halt_velocity, self.max_accel)
|
||||
# Determine tower locations in cartesian space
|
||||
angles = [config.getsection('stepper_a').getfloat('angle', 210.),
|
||||
config.getsection('stepper_b').getfloat('angle', 330.),
|
||||
|
|
|
@ -381,11 +381,12 @@ class ToolHead:
|
|||
logging.exception("Exception in force_shutdown")
|
||||
def get_max_velocity(self):
|
||||
return self.max_velocity, self.max_accel
|
||||
def get_max_axis_halt(self, max_accel):
|
||||
def get_max_axis_halt(self):
|
||||
# Determine the maximum velocity a cartesian axis could halt
|
||||
# at due to the junction_deviation setting. The 8.0 was
|
||||
# determined experimentally.
|
||||
return math.sqrt(8. * self.junction_deviation * max_accel)
|
||||
return min(self.max_velocity,
|
||||
math.sqrt(8. * self.junction_deviation * self.max_accel))
|
||||
|
||||
def add_printer_objects(printer, config):
|
||||
printer.add_object('toolhead', ToolHead(printer, config))
|
||||
|
|
Loading…
Reference in New Issue