mirror of https://github.com/Desuuuu/klipper.git
extruder: Consistently use extrude distance in calculations
Avoid mixing the travel distance of the head (and its associated velocity and acceleration) with the distance the filament moves. Instead, use the filament travel distance. Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
This commit is contained in:
parent
9d7aa1e155
commit
a201385008
|
@ -28,20 +28,23 @@ class PrinterExtruder:
|
||||||
# Extrude only move - limit accel and velocity
|
# Extrude only move - limit accel and velocity
|
||||||
move.limit_speed(self.stepper.max_velocity, self.stepper.max_accel)
|
move.limit_speed(self.stepper.max_velocity, self.stepper.max_accel)
|
||||||
def move(self, move_time, move):
|
def move(self, move_time, move):
|
||||||
move_d = move.move_d
|
axis_d = move.axes_d[3]
|
||||||
inv_accel = 1. / move.accel
|
extrude_r = axis_d / move.move_d
|
||||||
|
inv_accel = 1. / (move.accel * extrude_r)
|
||||||
|
|
||||||
start_v, cruise_v, end_v = move.start_v, move.cruise_v, move.end_v
|
start_v = move.start_v * extrude_r
|
||||||
|
cruise_v = move.cruise_v * extrude_r
|
||||||
|
end_v = move.end_v * extrude_r
|
||||||
accel_t, cruise_t, decel_t = move.accel_t, move.cruise_t, move.decel_t
|
accel_t, cruise_t, decel_t = move.accel_t, move.cruise_t, move.decel_t
|
||||||
accel_d = move.accel_r * move_d
|
accel_d = move.accel_r * axis_d
|
||||||
cruise_d = move.cruise_r * move_d
|
cruise_d = move.cruise_r * axis_d
|
||||||
decel_d = move.decel_r * move_d
|
decel_d = move.decel_r * axis_d
|
||||||
|
|
||||||
retract_t = retract_d = retract_v = 0.
|
retract_t = retract_d = retract_v = 0.
|
||||||
decel_v = cruise_v
|
decel_v = cruise_v
|
||||||
|
|
||||||
# Update for pressure advance
|
# Update for pressure advance
|
||||||
if (move.axes_d[3] >= 0. and (move.axes_d[0] or move.axes_d[1])
|
if (axis_d >= 0. and (move.axes_d[0] or move.axes_d[1])
|
||||||
and self.pressure_advance):
|
and self.pressure_advance):
|
||||||
# Increase accel_d and start_v when accelerating
|
# Increase accel_d and start_v when accelerating
|
||||||
extra_accel_d = (cruise_v - start_v) * self.pressure_advance
|
extra_accel_d = (cruise_v - start_v) * self.pressure_advance
|
||||||
|
@ -71,14 +74,13 @@ class PrinterExtruder:
|
||||||
decel_d -= extra_decel_d
|
decel_d -= extra_decel_d
|
||||||
|
|
||||||
# Determine regular steps
|
# Determine regular steps
|
||||||
extrude_r = move.axes_d[3] / move_d
|
|
||||||
forward_d = accel_d + cruise_d + decel_d
|
forward_d = accel_d + cruise_d + decel_d
|
||||||
start_pos = self.extrude_pos
|
start_pos = self.extrude_pos
|
||||||
end_pos = start_pos + forward_d * extrude_r
|
end_pos = start_pos + forward_d
|
||||||
inv_step_dist = self.stepper.inv_step_dist
|
inv_step_dist = self.stepper.inv_step_dist
|
||||||
new_step_pos = int(end_pos*inv_step_dist + 0.5)
|
new_step_pos = int(end_pos*inv_step_dist + 0.5)
|
||||||
if new_step_pos != self.stepper_pos:
|
if new_step_pos != self.stepper_pos:
|
||||||
steps = forward_d * extrude_r * inv_step_dist
|
steps = forward_d * inv_step_dist
|
||||||
step_offset = self.stepper_pos - start_pos * inv_step_dist + 0.5
|
step_offset = self.stepper_pos - start_pos * inv_step_dist + 0.5
|
||||||
self.stepper_pos = new_step_pos
|
self.stepper_pos = new_step_pos
|
||||||
sdir = 0
|
sdir = 0
|
||||||
|
@ -119,10 +121,10 @@ class PrinterExtruder:
|
||||||
|
|
||||||
# Determine retract steps
|
# Determine retract steps
|
||||||
start_pos = end_pos
|
start_pos = end_pos
|
||||||
end_pos -= retract_d * extrude_r
|
end_pos -= retract_d
|
||||||
new_step_pos = int(end_pos*inv_step_dist + 0.5)
|
new_step_pos = int(end_pos*inv_step_dist + 0.5)
|
||||||
if new_step_pos != self.stepper_pos:
|
if new_step_pos != self.stepper_pos:
|
||||||
steps = retract_d * extrude_r * inv_step_dist
|
steps = retract_d * inv_step_dist
|
||||||
step_offset = start_pos * inv_step_dist - self.stepper_pos + 0.5
|
step_offset = start_pos * inv_step_dist - self.stepper_pos + 0.5
|
||||||
self.stepper_pos = new_step_pos
|
self.stepper_pos = new_step_pos
|
||||||
mcu_time, so = self.stepper.prep_move(
|
mcu_time, so = self.stepper.prep_move(
|
||||||
|
|
Loading…
Reference in New Issue