aboutsummaryrefslogtreecommitdiffstats
path: root/klippy
diff options
context:
space:
mode:
Diffstat (limited to 'klippy')
-rw-r--r--klippy/extruder.py27
1 files changed, 22 insertions, 5 deletions
diff --git a/klippy/extruder.py b/klippy/extruder.py
index 22fb5f76..b1f6c4aa 100644
--- a/klippy/extruder.py
+++ b/klippy/extruder.py
@@ -10,6 +10,7 @@ EXTRUDE_DIFF_IGNORE = 1.02
class PrinterExtruder:
def __init__(self, printer, config):
+ self.printer = printer
shared_heater = config.get('shared_heater', None)
if shared_heater is None:
self.heater = heater.PrinterHeater(printer, config)
@@ -39,12 +40,13 @@ class PrinterExtruder:
self.deactivate_gcode = config.get('deactivate_gcode', '')
self.pressure_advance = config.getfloat(
'pressure_advance', 0., minval=0.)
- self.pressure_advance_lookahead_time = 0.
- if self.pressure_advance:
- self.pressure_advance_lookahead_time = config.getfloat(
- 'pressure_advance_lookahead_time', 0.010, minval=0.)
+ self.pressure_advance_lookahead_time = config.getfloat(
+ 'pressure_advance_lookahead_time', 0.010, minval=0.)
self.need_motor_enable = True
self.extrude_pos = 0.
+ self.printer.lookup_object('gcode').register_command(
+ "SET_PRESSURE_ADVANCE", self.cmd_SET_PRESSURE_ADVANCE,
+ desc=self.cmd_SET_PRESSURE_ADVANCE_help)
def get_heater(self):
return self.heater
def set_active(self, print_time, is_active):
@@ -104,7 +106,7 @@ class PrinterExtruder:
return move.max_cruise_v2
def lookahead(self, moves, flush_count, lazy):
lookahead_t = self.pressure_advance_lookahead_time
- if not lookahead_t:
+ if not self.pressure_advance or not lookahead_t:
return flush_count
# Calculate max_corner_v - the speed the head will accelerate
# to after cornering.
@@ -220,6 +222,21 @@ class PrinterExtruder:
step_const(move_time, start_pos, -retract_d, retract_v, accel)
start_pos -= retract_d
self.extrude_pos = start_pos
+ cmd_SET_PRESSURE_ADVANCE_help = "Set pressure advance parameters"
+ def cmd_SET_PRESSURE_ADVANCE(self, params):
+ self.printer.lookup_object('toolhead').get_last_move_time()
+ gcode = self.printer.lookup_object('gcode')
+ if 'ADVANCE' in params:
+ v = gcode.get_float('ADVANCE', params)
+ self.pressure_advance = v if v > 0. else 0.
+ if 'ADVANCE_LOOKAHEAD_TIME' in params:
+ v = gcode.get_float('ADVANCE_LOOKAHEAD_TIME', params)
+ self.pressure_advance_lookahead_time = v if v > 0. else 0.
+ gcode.respond_info(
+ "pressure_advance: %.6f\n"
+ "pressure_advance_lookahead_time: %.6f\n" % (
+ self.pressure_advance,
+ self.pressure_advance_lookahead_time))
# Dummy extruder class used when a printer has no extruder at all
class DummyExtruder: