diff options
author | Kevin O'Connor <kevin@koconnor.net> | 2017-02-22 10:09:25 -0500 |
---|---|---|
committer | Kevin O'Connor <kevin@koconnor.net> | 2017-02-22 15:20:22 -0500 |
commit | 6a53eaefc03a5643e73619672a2fb522e593a519 (patch) | |
tree | 1b9387b9c2b9f1201e90fc0cfc83807f887f83cb /klippy | |
parent | 4bc114336cd70662e99e1fd39461bc0e0fbd3c06 (diff) | |
download | kutter-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')
-rw-r--r-- | klippy/extruder.py | 21 |
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 |