diff --git a/config/CreatBot_D1000/base.cfg b/config/CreatBot_D1000/base.cfg index 27667fcdc..946ba385a 100644 --- a/config/CreatBot_D1000/base.cfg +++ b/config/CreatBot_D1000/base.cfg @@ -338,6 +338,7 @@ minimum_pulse_width: 0.000900 maximum_pulse_width: 0.002100 initial_angle: 130 steps_decomposed: 60 +signal_duration: 0.1 # initial_pulse_width: [servo switch_nozzle] @@ -358,6 +359,7 @@ z_hop_speed: 10 gcode: SET_STEPPER_ENABLE STEPPER=stepper_x ENABLE=1 SET_STEPPER_ENABLE STEPPER=stepper_y ENABLE=1 + SET_STEPPER_ENABLE STEPPER=stepper_z ENABLE=1 SET_KINEMATIC_POSITION X=500 Y=500 Z=0 [gcode_macro T0] @@ -555,6 +557,7 @@ gcode: {% if not homing_cmd %} SET_STEPPER_ENABLE STEPPER=stepper_x ENABLE=1 SET_STEPPER_ENABLE STEPPER=stepper_y ENABLE=1 + SET_STEPPER_ENABLE STEPPER=stepper_z ENABLE=1 G4 P300 C28 _ACTIVATE_DEFAULT_EXTRUDER @@ -949,6 +952,8 @@ gcode: {% if hotend == "extruder1" %} {% set z_offset_total = z_offset_total + z_offset %} {% endif %} + SET_STEPPER_ENABLE STEPPER=stepper_z ENABLE=1 + G4 P300 M118 Recovery in progress, please wait RUN_SHELL_COMMAND CMD=_POWER_LOSS_RECOVERY PARAMS="{z_height} \"{last_file}\" \"{z_offset_total}\"" SDCARD_PRINT_FILE FILENAME=.plr/"{last_file}" diff --git a/config/CreatBot_D1000_V0/base.cfg b/config/CreatBot_D1000_V0/base.cfg index 144e14073..0e245940f 100644 --- a/config/CreatBot_D1000_V0/base.cfg +++ b/config/CreatBot_D1000_V0/base.cfg @@ -173,7 +173,7 @@ max_power: 1.0 pin:PC6 max_power: 1.0 kick_start_time: 0.5 -heater: extruder +heater: extruder, extruder1 off_below: 0.10 heater_temp: 100 @@ -274,6 +274,7 @@ minimum_pulse_width: 0.000900 maximum_pulse_width: 0.002100 initial_angle: 130 steps_decomposed: 60 +signal_duration: 0.1 # initial_pulse_width: [servo switch_nozzle] @@ -294,6 +295,7 @@ z_hop_speed: 10 gcode: SET_STEPPER_ENABLE STEPPER=stepper_x ENABLE=1 SET_STEPPER_ENABLE STEPPER=stepper_y ENABLE=1 + SET_STEPPER_ENABLE STEPPER=stepper_z ENABLE=1 SET_KINEMATIC_POSITION X=500 Y=500 Z=0 [gcode_macro T0] @@ -885,6 +887,8 @@ gcode: {% if hotend == "extruder1" %} {% set z_offset_total = z_offset_total + z_offset %} {% endif %} + SET_STEPPER_ENABLE STEPPER=stepper_z ENABLE=1 + G4 P300 M118 Recovery in progress, please wait RUN_SHELL_COMMAND CMD=_POWER_LOSS_RECOVERY PARAMS="{z_height} \"{last_file}\" \"{z_offset_total}\"" SDCARD_PRINT_FILE FILENAME=.plr/"{last_file}" diff --git a/config/CreatBot_D600Pro2/base.cfg b/config/CreatBot_D600Pro2/base.cfg index d7d171e09..c87325575 100644 --- a/config/CreatBot_D600Pro2/base.cfg +++ b/config/CreatBot_D600Pro2/base.cfg @@ -338,6 +338,7 @@ minimum_pulse_width: 0.000900 maximum_pulse_width: 0.002100 initial_angle: 130 steps_decomposed: 60 +signal_duration: 0.1 # initial_pulse_width: [servo switch_nozzle] @@ -358,6 +359,7 @@ z_hop_speed: 10 gcode: SET_STEPPER_ENABLE STEPPER=stepper_x ENABLE=1 SET_STEPPER_ENABLE STEPPER=stepper_y ENABLE=1 + SET_STEPPER_ENABLE STEPPER=stepper_z ENABLE=1 SET_KINEMATIC_POSITION X=300 Y=300 Z=0 [gcode_macro T0] @@ -660,7 +662,7 @@ gcode: {% set toolchange = client.change_runout|lower|default("") %} {% set extruder_filament = client.filament_state.extruder %} {% set extruder1_filament = client.filament_state.extruder1 %} - {% set resume_extruder = client.resume_extruder %} + {% set resume_extruder = client.resume_extruder|default("extruder") %} {% if autoshift_on == 'true' %} {% if extruder_filament and extruder1_filament %} @@ -772,7 +774,6 @@ gcode: {% set autoshift = printer.save_variables.variables.auto_change_nozzle|default(False) %} {% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %} {% set do_resume = False %} - {% set prompt_txt = [] %} {% set runout = True %} ##### end of definitions ##### _FILAMENT_UPDATE @@ -944,6 +945,8 @@ gcode: {% if hotend == "extruder1" %} {% set z_offset_total = z_offset_total + z_offset %} {% endif %} + SET_STEPPER_ENABLE STEPPER=stepper_z ENABLE=1 + G4 P300 M118 Recovery in progress, please wait RUN_SHELL_COMMAND CMD=_POWER_LOSS_RECOVERY PARAMS="{z_height} \"{last_file}\" \"{z_offset_total}\"" SDCARD_PRINT_FILE FILENAME=.plr/"{last_file}" diff --git a/config/CreatBot_D600Pro2_V0/base.cfg b/config/CreatBot_D600Pro2_V0/base.cfg index fd5845d8a..536808ca6 100644 --- a/config/CreatBot_D600Pro2_V0/base.cfg +++ b/config/CreatBot_D600Pro2_V0/base.cfg @@ -163,6 +163,7 @@ runout_gcode: _RUNOUT_HANDLE event_delay: 3.0 pause_delay: 0.5 switch_pin: ^PC15 + [fan] pin:PC7 kick_start_time: 0.5 @@ -173,7 +174,7 @@ max_power: 1.0 pin:PC6 max_power: 1.0 kick_start_time: 0.5 -heater: extruder +heater: extruder, extruder1 off_below: 0.10 heater_temp: 100 @@ -274,6 +275,7 @@ minimum_pulse_width: 0.000900 maximum_pulse_width: 0.002100 initial_angle: 130 steps_decomposed: 60 +signal_duration: 0.1 # initial_pulse_width: [servo switch_nozzle] @@ -294,6 +296,7 @@ z_hop_speed: 10 gcode: SET_STEPPER_ENABLE STEPPER=stepper_x ENABLE=1 SET_STEPPER_ENABLE STEPPER=stepper_y ENABLE=1 + SET_STEPPER_ENABLE STEPPER=stepper_z ENABLE=1 SET_KINEMATIC_POSITION X=300 Y=300 Z=0 [gcode_macro T0] @@ -708,7 +711,6 @@ gcode: {% set autoshift = printer.save_variables.variables.auto_change_nozzle|default(False) %} {% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %} {% set do_resume = False %} - {% set prompt_txt = [] %} {% set runout = True %} ##### end of definitions ##### _FILAMENT_UPDATE @@ -880,6 +882,8 @@ gcode: {% if hotend == "extruder1" %} {% set z_offset_total = z_offset_total + z_offset %} {% endif %} + SET_STEPPER_ENABLE STEPPER=stepper_z ENABLE=1 + G4 P300 M118 Recovery in progress, please wait RUN_SHELL_COMMAND CMD=_POWER_LOSS_RECOVERY PARAMS="{z_height} \"{last_file}\" \"{z_offset_total}\"" SDCARD_PRINT_FILE FILENAME=.plr/"{last_file}" diff --git a/config/CreatBot_F430NX/base.cfg b/config/CreatBot_F430NX/base.cfg index e340eb07b..1169e773a 100644 --- a/config/CreatBot_F430NX/base.cfg +++ b/config/CreatBot_F430NX/base.cfg @@ -338,6 +338,7 @@ minimum_pulse_width: 0.000900 maximum_pulse_width: 0.002100 initial_angle: 165 steps_decomposed: 60 +signal_duration: 0.1 # initial_pulse_width: @@ -419,6 +420,7 @@ z_hop:5 gcode: SET_STEPPER_ENABLE STEPPER=stepper_x ENABLE=1 SET_STEPPER_ENABLE STEPPER=stepper_y ENABLE=1 + SET_STEPPER_ENABLE STEPPER=stepper_z ENABLE=1 SET_KINEMATIC_POSITION X=200 Y=150 Z=0 [gcode_macro _RESTORE_DEFAULT_EXTRUDER] @@ -471,14 +473,15 @@ gcode: {% endif %} [gcode_macro _PARK_extruder1] +variable_x_offset: 0 gcode: - {% set svv = printer.save_variables.variables %} - {% set x_offset = svv.nozzle_x_offset_val|default(0)|float %} ACTIVATE_EXTRUDER EXTRUDER=extruder1 SET_DUAL_CARRIAGE CARRIAGE=1 SAVE_GCODE_STATE NAME=park_extruder1 G90 - G1 X{475 + (x_offset if x_offset >= 0 else -x_offset)} F6000 + G1 X{475 - (x_offset if x_offset >= 0 else 0)} F6000 + G91 + G1 X{0 if x_offset >= 0 else -x_offset} F6000 RESTORE_GCODE_STATE NAME=park_extruder1 [gcode_macro T1] @@ -502,7 +505,8 @@ gcode: SET_DUAL_CARRIAGE CARRIAGE=1 SAVE_GCODE_STATE NAME=park1 G90 - G1 X{455 + (x_offset if x_offset >= 0 else -x_offset)} F6000 + G1 X{455-x_offset} F6000 + SET_GCODE_VARIABLE MACRO=_PARK_extruder1 VARIABLE=x_offset VALUE="{x_offset}" RESTORE_GCODE_STATE NAME=park1 {% if "z" in printer.toolhead.homed_axes | lower %} SET_GCODE_OFFSET Z={z_offset} MOVE=1 @@ -1165,6 +1169,8 @@ gcode: {% if hotend == "extruder1" %} {% set z_offset_total = z_offset_total + z_offset %} {% endif %} + SET_STEPPER_ENABLE STEPPER=stepper_z ENABLE=1 + G4 P300 M118 Recovery in progress, please wait RUN_SHELL_COMMAND CMD=_POWER_LOSS_RECOVERY PARAMS="{z_height} \"{last_file}\" \"{z_offset_total}\"" SDCARD_PRINT_FILE FILENAME=.plr/"{last_file}" diff --git a/klippy/extras/servo.py b/klippy/extras/servo.py index e705e7eb8..99b5cb6e4 100644 --- a/klippy/extras/servo.py +++ b/klippy/extras/servo.py @@ -16,6 +16,7 @@ class PrinterServo: above=self.min_width, below=SERVO_SIGNAL_PERIOD) self.max_angle = config.getfloat('maximum_servo_angle', 180.) + self.signal_duration = config.getfloat('signal_duration', 0, minval=0.) self.steps_decomposed = config.getint('steps_decomposed', 0) self.angle_to_width = (self.max_width - self.min_width) / self.max_angle self.width_to_value = 1. / SERVO_SIGNAL_PERIOD @@ -34,6 +35,8 @@ class PrinterServo: self.mcu_servo.setup_max_duration(0.) self.mcu_servo.setup_cycle_time(SERVO_SIGNAL_PERIOD) self.mcu_servo.setup_start_value(self.initial_pwm, 0.) + # Register event handler + self.printer.register_event_handler("klippy:ready", self._handle_ready) # Register commands servo_name = config.get_name().split()[1] gcode = self.printer.lookup_object('gcode') @@ -49,11 +52,10 @@ class PrinterServo: self.mcu_servo.set_pwm(print_time, value) self.last_value = value self.last_value_time = print_time - - def get_s_curve_value(self, last_value, value, t): + self._handle_signal_duration(print_time) + def _get_s_curve_value(self, last_value, value, t): smooth_factor = t * t * (3 - 2 * t) return last_value + smooth_factor * (value - last_value) - def _set_low_pwm(self, print_time, value): if value == self.last_value: return @@ -62,12 +64,21 @@ class PrinterServo: steps = self.steps_decomposed for step in range(steps): t = step / (steps - 1) - current_value = self.get_s_curve_value(self.last_value, value, t) + current_value = self._get_s_curve_value(self.last_value, value, t) print_time = max(print_time, self.last_value_time + 0.02) self.mcu_servo.set_pwm(print_time, current_value) self.last_value_time = print_time self.last_value = value - + self._handle_signal_duration(print_time) + def _handle_signal_duration(self, print_time): + if self.signal_duration: + if abs(self.signal_duration / 0.02 - round(self.signal_duration / 0.02)) < 1e-9: + self.signal_duration -= 0.001 + print_time = max(print_time, print_time + self.signal_duration) + self.mcu_servo.set_pwm(print_time, 0) + def _handle_ready(self): + print_time = self.printer.lookup_object('toolhead').get_last_move_time() + self._handle_signal_duration(print_time) def _get_pwm_from_angle(self, angle): angle = max(0., min(self.max_angle, angle)) width = self.min_width + angle * self.angle_to_width