发布1.1.1版本

优化外置驱动问题
优化零位舵机信号不连续发送
优化其他已知Bug

# Conflicts:
#	config/CreatBot_D1000/base.cfg   resolved by fd1a6a37cc2149b4ff9f56609dc5f96d8882cb71 version
#	config/CreatBot_D1000_V0/base.cfg   resolved by fd1a6a37cc2149b4ff9f56609dc5f96d8882cb71 version
#	config/CreatBot_D600Pro2/base.cfg   resolved by fd1a6a37cc2149b4ff9f56609dc5f96d8882cb71 version
#	config/CreatBot_D600Pro2_V0/base.cfg   resolved by fd1a6a37cc2149b4ff9f56609dc5f96d8882cb71 version
#	config/CreatBot_F430NX/base.cfg   resolved by fd1a6a37cc2149b4ff9f56609dc5f96d8882cb71 version
#	klippy/extras/servo.py   resolved by fd1a6a37cc2149b4ff9f56609dc5f96d8882cb71 version
This commit is contained in:
张开科 2025-01-17 14:47:28 +08:00
parent 44ef802508
commit 2c72822ef0
6 changed files with 47 additions and 14 deletions
config
CreatBot_D1000
CreatBot_D1000_V0
CreatBot_D600Pro2
CreatBot_D600Pro2_V0
CreatBot_F430NX
klippy/extras

@ -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}"

@ -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}"

@ -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}"

@ -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}"

@ -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}"

@ -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