delta: Support limiting the maximum velocity of z moves

On a delta printer, z moves require the mcu to support the greatest
number of steps per second.  However, z moves are rare, so it makes
sense to limit the velocity of z moves separately from the velocity of
normal xy moves.

Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
This commit is contained in:
Kevin O'Connor 2016-12-01 16:04:48 -05:00
parent c49d3fdb17
commit 71b4923208
2 changed files with 9 additions and 1 deletions

View File

@ -79,8 +79,13 @@ pin_map: arduino
[printer] [printer]
kinematics: delta kinematics: delta
# This option must be "delta" for linear delta printers # This option must be "delta" for linear delta printers
max_velocity: 200 max_velocity: 300
max_accel: 3000 max_accel: 3000
max_z_velocity: 200
# For delta printers this limits the maximum velocity (in mm/s) of
# moves with z axis movement. This setting can be used to reduce the
# maximum speed of up/down moves (which require a higher step rate
# than other moves on a delta printer).
delta_arm_length: 333.0 delta_arm_length: 333.0
# Length (in mm) of the diagonal rods that connect the linear axes # Length (in mm) of the diagonal rods that connect the linear axes
# to the print head # to the print head

View File

@ -14,6 +14,7 @@ class DeltaKinematics:
printer, config.getsection('stepper_' + n), n) printer, config.getsection('stepper_' + n), n)
for n in ['a', 'b', 'c']] for n in ['a', 'b', 'c']]
self.need_motor_enable = True self.need_motor_enable = True
self.max_z_velocity = config.getfloat('max_z_velocity', 9999999.9)
radius = config.getfloat('delta_radius') radius = config.getfloat('delta_radius')
arm_length = config.getfloat('delta_arm_length') arm_length = config.getfloat('delta_arm_length')
self.arm_length2 = arm_length**2 self.arm_length2 = arm_length**2
@ -122,6 +123,8 @@ class DeltaKinematics:
if end_pos[2] > self.limit_z: if end_pos[2] > self.limit_z:
if end_pos[2] > self.max_z or xy2 > (self.max_z - end_pos[2])**2: if end_pos[2] > self.max_z or xy2 > (self.max_z - end_pos[2])**2:
raise homing.EndstopMoveError(end_pos) raise homing.EndstopMoveError(end_pos)
if move.axes_d[2]:
move.limit_speed(self.max_z_velocity, 9999999.9)
def move_z(self, move_time, move): def move_z(self, move_time, move):
if not move.axes_d[2]: if not move.axes_d[2]:
return return