aboutsummaryrefslogtreecommitdiffstats
path: root/klippy/extruder.py
diff options
context:
space:
mode:
authorKevin O'Connor <kevin@koconnor.net>2017-02-22 10:09:25 -0500
committerKevin O'Connor <kevin@koconnor.net>2017-02-22 15:20:22 -0500
commit6a53eaefc03a5643e73619672a2fb522e593a519 (patch)
tree1b9387b9c2b9f1201e90fc0cfc83807f887f83cb /klippy/extruder.py
parent4bc114336cd70662e99e1fd39461bc0e0fbd3c06 (diff)
downloadkutter-6a53eaefc03a5643e73619672a2fb522e593a519.tar.gz
kutter-6a53eaefc03a5643e73619672a2fb522e593a519.tar.xz
kutter-6a53eaefc03a5643e73619672a2fb522e593a519.zip
extruder: Allow configuration of pressure advance lookahead time
Instead of defaulting the pressure advance lookahead time to be the same as the pressure_advance variable, allow it to be configured. Default the new config setting (pressure_advance_lookahead_time) to 10ms. Also, make the setting more accurate if a future move is accelerating in the middle of the lookahead window. Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Diffstat (limited to 'klippy/extruder.py')
-rw-r--r--klippy/extruder.py21
1 files changed, 15 insertions, 6 deletions
diff --git a/klippy/extruder.py b/klippy/extruder.py
index fc20ccf8..1c64fbf2 100644
--- a/klippy/extruder.py
+++ b/klippy/extruder.py
@@ -22,6 +22,10 @@ class PrinterExtruder:
self.max_e_dist = config.getfloat('max_extrude_only_distance', 50.)
self.max_e_velocity = self.max_e_accel = None
self.pressure_advance = config.getfloat('pressure_advance', 0.)
+ self.pressure_advance_lookahead_time = 0.
+ if self.pressure_advance:
+ self.pressure_advance_lookahead_time = config.getfloat(
+ 'pressure_advance_lookahead_time', 0.010)
self.need_motor_enable = True
self.extrude_pos = 0.
def set_max_jerk(self, max_xy_halt_velocity, max_velocity, max_accel):
@@ -62,8 +66,8 @@ class PrinterExtruder:
move.extrude_r = prev_move.extrude_r
return move.max_cruise_v2
def lookahead(self, moves, flush_count, lazy):
- pressure_advance = self.pressure_advance
- if not pressure_advance:
+ lookahead_t = self.pressure_advance_lookahead_time
+ if not lookahead_t:
return flush_count
# Calculate max_corner_v - the speed the head will accelerate
# to after cornering.
@@ -73,14 +77,19 @@ class PrinterExtruder:
continue
cruise_v = move.cruise_v
max_corner_v = 0.
- sum_t = pressure_advance
+ sum_t = lookahead_t
for j in range(i+1, flush_count):
fmove = moves[j]
if not fmove.max_start_v2:
break
- max_corner_v = max(max_corner_v, fmove.cruise_v)
- if max_corner_v >= cruise_v:
- break
+ if fmove.cruise_v > max_corner_v:
+ if sum_t >= fmove.accel_t:
+ max_corner_v = fmove.cruise_v
+ else:
+ max_corner_v = max(
+ max_corner_v, fmove.start_v + fmove.accel * sum_t)
+ if max_corner_v >= cruise_v:
+ break
sum_t -= fmove.accel_t + fmove.cruise_t + fmove.decel_t
if sum_t <= 0.:
break