From cc6736c3e35cb6f6e660d973be67ab4cef78ffb9 Mon Sep 17 00:00:00 2001 From: Dmitry Butyugin Date: Wed, 7 May 2025 00:06:36 +0200 Subject: kinematics: Generic Cartesian kinematics implementation (#6815) * tests: Added a regression test for generic_cartesian kinematics * kinematics: An intial implementation of generic_cartesian kinematics * generic_cartesian: Refactored kinematics configuration API * generic_cartesian: Use stepper instead of kinematic_stepper in configs * generic_cartesian: Added SET_STEPPER_KINEMATICS command * generic_cartesian: Fixed parsing of section names * docs: Generic Caretsian kinematics documentation and config samples * generic_cartesian: Implemented multi-mcu homing validation * generic_cartesian: Fixed typos in docs, minor fixes * generic_cartesian: Renamed `kinematics` option to `carriages` * generic_cartesian: Moved kinematic_stepper.py file * idex_modes: Internal refactoring of handling dual carriages * stepper: Refactored the code to not store a reference to config object * config: Updated example-generic-cartesian config * generic_cartesian: Restricted SET_STEPPER_CARRIAGES and exported status * idex_modes: Fixed handling stepper kinematics with input shaper enabled * config: Updated configs and tests for SET_DUAL_CARRIAGE new params * generic_cartesian: Avoid inheritance in the added classes Signed-off-by: Dmitry Butyugin --- config/example-generic-caretesian.cfg | 138 ++++++++++++++++++++++++++ config/sample-corexyuv.cfg | 177 ++++++++++++++++++++++++++++++++++ 2 files changed, 315 insertions(+) create mode 100644 config/example-generic-caretesian.cfg create mode 100644 config/sample-corexyuv.cfg (limited to 'config') diff --git a/config/example-generic-caretesian.cfg b/config/example-generic-caretesian.cfg new file mode 100644 index 00000000..2d6b3994 --- /dev/null +++ b/config/example-generic-caretesian.cfg @@ -0,0 +1,138 @@ +# This file is an example config file for cartesian style printers. +# One may copy and edit this file to configure a new printer with +# a generic cartesian kinematics. + +# DO NOT COPY THIS FILE WITHOUT CAREFULLY READING AND UPDATING IT +# FIRST. Incorrectly configured parameters may cause damage. + +# See docs/Config_Reference.md for a description of parameters. + +[carriage x] +position_endstop: 0 +position_max: 300 +homing_speed: 50 +endstop_pin: ^PE5 + +[carriage y] +position_endstop: 0 +position_max: 200 +homing_speed: 50 +endstop_pin: ^PJ1 + +[extra_carriage y1] +primary_carriage: y +endstop_pin: ^PB6 + +[carriage z] +position_endstop: 0.5 +position_max: 100 +endstop_pin: ^PD3 + +[dual_carriage u] +primary_carriage: x +position_endstop: 300 +position_max: 300 +homing_speed: 50 +endstop_pin: ^PE4 + +[stepper my_stepper_x] +carriages: x+y +step_pin: PF0 +dir_pin: PF1 +enable_pin: !PD7 +microsteps: 16 +rotation_distance: 40 + +[stepper my_stepper_u] +carriages: u-y1 +step_pin: PH1 +dir_pin: PH0 +enable_pin: !PA1 +microsteps: 16 +rotation_distance: 40 + +[stepper my_stepper_y0] +carriages: y +step_pin: PF6 +dir_pin: !PF7 +enable_pin: !PF2 +microsteps: 16 +rotation_distance: 40 + +[stepper my_stepper_y1] +carriages: y1 +step_pin: PE3 +dir_pin: !PH6 +enable_pin: !PG5 +microsteps: 16 +rotation_distance: 40 + +[stepper my_stepper_z0] +carriages: z +step_pin: PL3 +dir_pin: PL1 +enable_pin: !PK0 +microsteps: 16 +rotation_distance: 8 + +[stepper my_stepper_z1] +carriages: z +step_pin: PG1 +dir_pin: PG0 +enable_pin: !PH3 +microsteps: 16 +rotation_distance: 8 + +[extruder] +step_pin: PA4 +dir_pin: PA6 +enable_pin: !PA2 +microsteps: 16 +rotation_distance: 33.5 +nozzle_diameter: 0.400 +filament_diameter: 1.750 +heater_pin: PB4 +sensor_type: EPCOS 100K B57560G104F +sensor_pin: PK5 +control: pid +pid_Kp: 22.2 +pid_Ki: 1.08 +pid_Kd: 114 +min_temp: 0 +max_temp: 250 + +[extruder1] +step_pin: PC1 +dir_pin: PC3 +enable_pin: !PC7 +microsteps: 16 +rotation_distance: 33.5 +nozzle_diameter: 0.400 +filament_diameter: 1.750 +heater_pin: PB5 +sensor_type: EPCOS 100K B57560G104F +sensor_pin: PK7 +control: pid +pid_Kp: 22.2 +pid_Ki: 1.08 +pid_Kd: 114 +min_temp: 0 +max_temp: 250 + +[heater_bed] +heater_pin: PH5 +sensor_type: EPCOS 100K B57560G104F +sensor_pin: PK6 +control: watermark +min_temp: 0 +max_temp: 110 + +[mcu] +serial: /dev/ttyACM0 + +[printer] +kinematics: generic_cartesian +max_velocity: 500 +max_accel: 3000 +max_z_velocity: 20 +max_z_accel: 100 diff --git a/config/sample-corexyuv.cfg b/config/sample-corexyuv.cfg new file mode 100644 index 00000000..368b6464 --- /dev/null +++ b/config/sample-corexyuv.cfg @@ -0,0 +1,177 @@ +# This file contains a configuration snippet for a CoreXYUV +# printer with an independent dual extruder moving over X and Y axes. + +# See docs/Config_Reference.md for a description of parameters. + +[carriage x] +position_endstop: 0 +position_max: 300 +homing_speed: 50 +endstop_pin: ^PE5 + +[carriage y] +position_endstop: 0 +position_max: 200 +homing_speed: 50 +endstop_pin: ^PJ1 + +[dual_carriage u] +primary_carriage: x +safe_distance: 70 +position_endstop: 300 +position_max: 300 +homing_speed: 50 +endstop_pin: ^PE4 + +[dual_carriage v] +primary_carriage: y +safe_distance: 50 +position_endstop: 200 +position_max: 200 +homing_speed: 50 +endstop_pin: ^PD4 + +[stepper a] +carriages: x+y +step_pin: PF0 +dir_pin: PF1 +enable_pin: !PD7 +microsteps: 16 +rotation_distance: 40 + +[stepper b] +carriages: u-v +step_pin: PH1 +dir_pin: PH0 +enable_pin: !PA1 +microsteps: 16 +rotation_distance: 40 + +[stepper c] +carriages: x-y +step_pin: PF6 +dir_pin: !PF7 +enable_pin: !PF2 +microsteps: 16 +rotation_distance: 40 + +[stepper d] +carriages: u+v +step_pin: PE3 +dir_pin: !PH6 +enable_pin: !PG5 +microsteps: 16 +rotation_distance: 40 + +[extruder] +step_pin: PA4 +dir_pin: PA6 +enable_pin: !PA2 +microsteps: 16 +rotation_distance: 33.5 +nozzle_diameter: 0.400 +filament_diameter: 1.750 +heater_pin: PB4 +sensor_type: EPCOS 100K B57560G104F +sensor_pin: PK5 +control: pid +pid_Kp: 22.2 +pid_Ki: 1.08 +pid_Kd: 114 +min_temp: 0 +max_temp: 250 + +[gcode_macro PARK_extruder] +gcode: + SET_DUAL_CARRIAGE CARRIAGE=x + SET_DUAL_CARRIAGE CARRIAGE=y + G90 + G1 X0 Y0 + +[gcode_macro T0] +gcode: + PARK_{printer.toolhead.extruder} + ACTIVATE_EXTRUDER EXTRUDER=extruder + SET_DUAL_CARRIAGE CARRIAGE=x + SET_DUAL_CARRIAGE CARRIAGE=y + +[extruder1] +step_pin: PC1 +dir_pin: PC3 +enable_pin: !PC7 +microsteps: 16 +rotation_distance: 33.5 +nozzle_diameter: 0.400 +filament_diameter: 1.750 +heater_pin: PB5 +sensor_type: EPCOS 100K B57560G104F +sensor_pin: PK7 +control: pid +pid_Kp: 22.2 +pid_Ki: 1.08 +pid_Kd: 114 +min_temp: 0 +max_temp: 250 + +[gcode_macro PARK_extruder1] +gcode: + SET_DUAL_CARRIAGE CARRIAGE=u + SET_DUAL_CARRIAGE CARRIAGE=v + G90 + G1 X300 Y200 + +[gcode_macro T1] +gcode: + PARK_{printer.toolhead.extruder} + ACTIVATE_EXTRUDER EXTRUDER=extruder1 + SET_DUAL_CARRIAGE CARRIAGE=u + SET_DUAL_CARRIAGE CARRIAGE=v + +# A helper script to activate copy mode +[gcode_macro ACTIVATE_COPY_MODE] +gcode: + SET_DUAL_CARRIAGE CARRIAGE=x MODE=PRIMARY + SET_DUAL_CARRIAGE CARRIAGE=y MODE=PRIMARY + G1 X0 Y0 + ACTIVATE_EXTRUDER EXTRUDER=extruder + SET_DUAL_CARRIAGE CARRIAGE=u MODE=PRIMARY + SET_DUAL_CARRIAGE CARRIAGE=v MODE=PRIMARY + G1 X150 Y100 + SET_DUAL_CARRIAGE CARRIAGE=u MODE=COPY + SET_DUAL_CARRIAGE CARRIAGE=v MODE=COPY + SYNC_EXTRUDER_MOTION EXTRUDER=extruder1 MOTION_QUEUE=extruder + +# A helper script to activate mirror mode +[gcode_macro ACTIVATE_MIRROR_MODE] +gcode: + SET_DUAL_CARRIAGE CARRIAGE=x MODE=PRIMARY + SET_DUAL_CARRIAGE CARRIAGE=y MODE=PRIMARY + G1 X0 Y0 + ACTIVATE_EXTRUDER EXTRUDER=extruder + SET_DUAL_CARRIAGE CARRIAGE=u MODE=PRIMARY + SET_DUAL_CARRIAGE CARRIAGE=v MODE=PRIMARY + G1 X300 Y100 + SET_DUAL_CARRIAGE CARRIAGE=u MODE=MIRROR + SET_DUAL_CARRIAGE CARRIAGE=v MODE=COPY + SYNC_EXTRUDER_MOTION EXTRUDER=extruder1 MOTION_QUEUE=extruder + +[printer] +kinematics: generic_cartesian +max_velocity: 300 +max_accel: 3000 +max_z_velocity: 5 +max_z_accel: 100 + +## An optional input shaper support +#[input_shaper] +## The section is intentionally empty +# +#[delayed_gcode init_shaper] +#initial_duration: 0.1 +#gcode: +# SET_DUAL_CARRIAGE CARRIAGE=u +# SET_DUAL_CARRIAGE CARRIAGE=v +# SET_INPUT_SHAPER SHAPER_TYPE_X= SHAPER_FREQ_X= SHAPER_TYPE_Y= SHAPER_FREQ_Y= +# SET_DUAL_CARRIAGE CARRIAGE=x MODE=PRIMARY +# SET_DUAL_CARRIAGE CARRIAGE=y MODE=PRIMARY +# SET_INPUT_SHAPER SHAPER_TYPE_X= SHAPER_FREQ_X= SHAPER_TYPE_Y= SHAPER_FREQ_Y= -- cgit v1.2.3-70-g09d2