#Design VORON2 250/300/350mm SKR 1.3 TMC2209 UART config ## *** THINGS TO CHANGE/CHECK: *** ## MCU paths [mcu] section ## Thermistor types [extruder] and [heater_bed] sections - See https://www.klipper3d.org/Config_Reference.html#common-thermistors for common thermistor types ## Z Endstop Switch location [safe_z_home] section ## Homing end position [gcode_macro G32] section ## Z Endstop Switch offset for Z0 [stepper_z] section ## Probe points [quad_gantry_level] section ## Min & Max gantry corner postions [quad_gantry_level] section ## PID tune [extruder] and [heater_bed] sections ## Fine tune E steps [extruder] section ##========================== Pin Definitions ======================== ## X_STEP_PIN 2.2 ## X_DIR_PIN 2.6 ## X_ENABLE_PIN 2.1 ## X_MIN_PIN 1.29 ## X_MAX_PIN 1.28 ## X_UART_RX 1.17 ## X_UART_TX 4.29 ## Y_STEP_PIN 0.19 ## Y_DIR_PIN 0.20 ## Y_ENABLE_PIN 2.8 ## Y_MIN_PIN 1.27 ## Y_MAX_PIN 1.26 ## Y_UART_RX 1.15 ## Y_UART_TX 1.16 ## Z_STEP_PIN 0.22 ## Z_DIR_PIN 2.11 ## Z_ENABLE_PIN 0.21 ## Z_MIN_PIN 1.25 ## Z_MAX_PIN 1.24 ## Z_UART_RX 1.10 ## Z_UART_TX 1.14 ## E0_STEP_PIN 2.13 ## E0_DIR_PIN 0.11 ## E0_ENABLE_PIN 2.12 ## E0_UART_RX 1.8 ## E0_UART_TX 1.9 ## E1_STEP_PIN 0.1 ## E1_DIR_PIN 0.0 ## E1_ENABLE_PIN 0.10 ## E1_UART_RX 1.1 ## E1_UART_TX 1.4 ## HE1 2.4 ## HE0 2.7 ## BED 2.5 ## TH1 (H1 Temp) 0.25 ## TH0 (H0 Temp) 0.24 ## TB (Bed Temp) 0.23 ## FAN 2.3 ## SERVO 2.0 ##=================================================================== ## include mainsail config [include mainsail.cfg] ## enable exclude object [exclude_object] ## MCU for X/Y/E steppers main MCU ## [X in X] - B Motor ## [Y in Y] - A Motor ## [E in E0] - Extruder [mcu] ## Obtain definition by "ls /dev/serial/by-id/*" then unplug to verify ##-------------------------------------------------------------------- serial: /dev/serial/by-id/usb-Klipper_lpc1768_22B00012658C48AFD115345DC12000F5-if00 ##-------------------------------------------------------------------- ## MCU for Z steppers ## [Z in X] - Front Left ## [Z1 in Y] - Rear Left ## [Z2 in Z] - Rear Right ## [Z3 in E0]- Front Right [mcu z] ## Obtain definition by "ls /dev/serial/by-id/*" then unplug to verify ##-------------------------------------------------------------------- serial: /dev/serial/by-id/usb-Klipper_lpc1768_0260000E648C48AF0B98335DC12000F5-if00 ##-------------------------------------------------------------------- [printer] kinematics: corexy max_velocity: 300 max_accel: 40000 max_z_velocity: 25 #Max 15 for 12V TMC Drivers, can increase for 24V max_z_accel: 350 square_corner_velocity: 5.0 ##################################################################### # X/Y Stepper Settings ##################################################################### ## Connected to X on mcu_xye (B Motor) [stepper_x] step_pin: P2.2 dir_pin: P2.6 enable_pin: !P2.1 rotation_distance: 40 microsteps: 32 full_steps_per_rotation:200 #set to 400 for 0.9 degree stepper endstop_pin: P1.28 position_min: 0 ##-------------------------------------------------------------------- ## Uncomment below for 250mm build #position_endstop: 250 #position_max: 250 ## Uncomment for 300mm build #position_endstop: 300 #position_max: 300 ## Uncomment for 350mm build position_endstop: 350 position_max: 350 ##-------------------------------------------------------------------- homing_speed: 25 #Max 100 homing_retract_dist: 5 homing_positive_dir: true ## Make sure to update below for your relevant driver (2208 or 2209) [tmc2209 stepper_x] uart_pin: P1.17 interpolate: False run_current: 1.0 sense_resistor: 0.110 stealthchop_threshold: 0 ## Connected to Y on mcu_xye (A Motor) [stepper_y] step_pin: P0.19 dir_pin: P0.20 enable_pin: !P2.8 rotation_distance: 40 microsteps: 32 full_steps_per_rotation:200 #set to 400 for 0.9 degree stepper endstop_pin: P1.26 position_min: 0 ##-------------------------------------------------------------------- ## Uncomment for 250mm build #position_endstop: 250 #position_max: 250 ## Uncomment for 300mm build #position_endstop: 300 #position_max: 300 ## Uncomment for 350mm build position_endstop: 355 position_max: 355 ##-------------------------------------------------------------------- homing_speed: 25 #Max 100 homing_retract_dist: 5 homing_positive_dir: true ## Make sure to update below for your relevant driver (2208 or 2209) [tmc2209 stepper_y] uart_pin: P1.15 interpolate: False run_current: 1.0 sense_resistor: 0.110 stealthchop_threshold: 0 ##################################################################### # Z Stepper Settings ##################################################################### ## Z MCU - In X Position ## Z0 Stepper - Front Left [stepper_z] step_pin: z:P2.2 dir_pin: !z:P2.6 enable_pin: !z:P2.1 rotation_distance: 40 gear_ratio: 80:16 microsteps: 32 #endstop_pin: z:P1.25 endstop_pin: probe:z_virtual_endstop ## Z-position of nozzle (in mm) to z-endstop trigger point relative to print surface (Z0) ## (+) value = endstop above Z0, (-) value = endstop below ## Increasing position_endstop brings nozzle closer to the bed ## After you run Z_ENDSTOP_CALIBRATE, position_endstop will be stored at the very end of your config #position_endstop = -1.436 ##-------------------------------------------------------------------- ## Uncomment below for 250mm build #position_max: 210 ## Uncomment below for 300mm build #position_max: 260 ## Uncomment below for 350mm build position_max: 310 ##-------------------------------------------------------------------- position_min: -5 homing_speed: 8 second_homing_speed: 3 homing_retract_dist: 3 ## Make sure to update below for your relevant driver (2208 or 2209) [tmc2209 stepper_z] uart_pin: z:P1.17 interpolate: False run_current: 1.0 sense_resistor: 0.110 stealthchop_threshold: 0 ## Z MCU - In Y Position ## Z1 Stepper - Rear Left [stepper_z1] step_pin: z:P0.19 dir_pin: z:P0.20 enable_pin: !z:P2.8 rotation_distance: 40 gear_ratio: 80:16 microsteps: 32 ## Make sure to update below for your relevant driver (2208 or 2209) [tmc2209 stepper_z1] uart_pin: z:P1.15 interpolate: False run_current: 1.0 sense_resistor: 0.110 stealthchop_threshold: 0 ## Z MCU - In Z Position ## Z2 Stepper - Rear Right [stepper_z2] step_pin: z:P0.22 dir_pin: !z:P2.11 enable_pin: !z:P0.21 rotation_distance: 40 gear_ratio: 80:16 microsteps: 32 ## Make sure to update below for your relevant driver (2208 or 2209) [tmc2209 stepper_z2] uart_pin: z:P1.10 interpolate: False run_current: 1.0 sense_resistor: 0.110 stealthchop_threshold: 0 ## Z MCU - In E0 Position ## Z3 Stepper - Front Right [stepper_z3] step_pin: z:P2.13 dir_pin: z:P0.11 enable_pin: !z:P2.12 rotation_distance: 40 gear_ratio: 80:16 microsteps: 32 ## Make sure to update below for your relevant driver (2208 or 2209) [tmc2209 stepper_z3] uart_pin: z:P1.8 interpolate: False run_current: 1.0 sense_resistor: 0.110 stealthchop_threshold: 0 ##################################################################### # Extruder ##################################################################### # E0 on MCU X/Y [extruder] step_pin: P2.13 dir_pin: P0.11 enable_pin: !P2.12 ## Update value below when you perform extruder calibration ## If you ask for 100mm of filament, but in reality it is 98mm: ## rotation_distance = * / 100 ## 22.6789511 is a good starting point rotation_distance: 22.6789511 #Bondtech 5mm Drive Gears ## Update Gear Ratio depending on your Extruder Type ## Use 50:10 for Stealthburner/Clockwork 2 ## Use 50:17 for Afterburner/Clockwork (BMG Gear Ratio) ## Use 80:20 for M4, M3.1 gear_ratio: 50:17 microsteps: 32 full_steps_per_rotation: 200 #200 for 1.8 degree, 400 for 0.9 degree nozzle_diameter: 0.400 filament_diameter: 1.75 heater_pin: P2.7 ## Check what thermistor type you have. See https://www.klipper3d.org/Config_Reference.html#common-thermistors for common thermistor types. ## Use "Generic 3950" for NTC 100k 3950 thermistors sensor_type: Generic 3950 sensor_pin: P0.24 min_temp: 10 max_temp: 270 max_power: 1.0 min_extrude_temp: 170 control = pid pid_kp = 22.780 pid_ki = 1.298 pid_kd = 99.947 max_extrude_only_distance = 101 ## Try to keep pressure_advance below 1.0 pressure_advance: 0.055 ## Default is 0.040, leave stock #pressure_advance_smooth_time: 0.040 ## E0 on MCU X/Y ## Make sure to update below for your relevant driver (2208 or 2209) [tmc2209 extruder] uart_pin: P1.9 interpolate: false run_current: 0.5 sense_resistor: 0.110 stealthchop_threshold: 0 ##################################################################### # Bed Heater ##################################################################### ## SSR Pin - Z board, Fan Pin [heater_bed] heater_pin: z:P2.3 ## Check what thermistor type you have. See https://www.klipper3d.org/Config_Reference.html#common-thermistors for common thermistor types. ## Use "Generic 3950" for Keenovo heaters sensor_type: Generic 3950 sensor_pin: z:P0.23 pullup_resistor: 6000 ## Adjust max_power so it doesn't exceed the SSR rating. The Omron G3NA-210B-DC5 SSR is rated at 4 amps without a heatsink. ## The formula is "4 / (Wattage_of_bed_heater / Mains_voltage) = max_power" ## If max_power is greater than 1.0, use 1.0 max_power: 1.0 min_temp: 0 max_temp: 120 control = pid pid_kp = 39.695 pid_ki = 1.478 pid_kd = 266.452 ##################################################################### # Probe ##################################################################### ## Inductive Probe ## This probe is not used for Z height, only Quad Gantry Leveling ## Z_MAX on mcu_z ## If your probe is NO instead of NC, add change pin to !z:P1.24 [probe] pin: z:P1.24 x_offset: 0 y_offset: 19.75 z_offset: 7.773 speed: 5.0 samples: 3 samples_result: median sample_retract_dist: 2.0 samples_tolerance: 0.01 samples_tolerance_retries: 3 ##################################################################### # Fan Control ##################################################################### ## Hotend Fan - XYE board, HE1 Connector [heater_fan hotend_fan] pin: P2.4 max_power: 0.5 shutdown_speed: 0 kick_start_time: 0.5 heater: extruder heater_temp: 50.0 ## If you are experiencing back flow, you can reduce fan_speed #fan_speed: 1.0 ## Print Cooling Fan - XYE board, Fan Pin [fan] pin: P2.3 max_power: 1.0 shutdown_speed: 0 kick_start_time: 0.5 ## Depending on your fan, you may need to increase this value ## if your fan will not start. Can change cycle_time (increase) ## if your fan is not able to slow down effectively off_below: 0.10 ## Controller fan - Z board, HE1 Connector [heater_fan controller_fan] pin: z:P2.4 max_power: 0.5 shutdown_speed: 0 kick_start_time: 0.5 heater: heater_bed heater_temp: 45.0 ## Exhaust fan - Z board, HE0 Connector [heater_fan exhaust_fan] pin: z:P2.7 max_power: 0.25 shutdown_speed: 0.0 kick_start_time: 5.0 heater: heater_bed heater_temp: 80 fan_speed: 1.0 ##################################################################### # LED Control ##################################################################### # Chamber Lighting - Bed Connector (Optional) #[output_pin caselight] #pin: P2.5 #pwm:true #shutdown_value: 0 #value:1 #cycle_time: 0.01 ##################################################################### # Homing and Gantry Adjustment Routines ##################################################################### [idle_timeout] timeout: 1800 #[safe_z_home] ## XY Location of the Z Endstop Switch ## Update -10,-10 to the XY coordinates of your endstop pin ## (such as 157,305) after going through Z Endstop Pin ## Location Definition step. #home_xy_position: 232,355 #speed:100 #z_hop:10 ## Use QUAD_GANTRY_LEVEL to level a gantry. ## Min & Max gantry corners - measure from nozzle at MIN (0,0) and ## MAX (250, 250), (300,300), or (350,350) depending on your printer size ## to respective belt positions [quad_gantry_level] #-------------------------------------------------------------------- ## Gantry Corners for 250mm Build ## Uncomment for 250mm build #gantry_corners: # -60,-10 # 310, 320 ## Probe points #points: # 50,25 # 50,175 # 200,175 # 200,25 ## Gantry Corners for 300mm Build ## Uncomment for 300mm build #gantry_corners: # -60,-10 # 360,370 ## Probe points #points: # 50,25 # 50,225 # 250,225 # 250,25 ## Gantry Corners for 350mm Build ## Uncomment for 350mm build gantry_corners: -60,-10 410,420 ## Probe points points: 50,25 50,275 300,275 300,25 #-------------------------------------------------------------------- speed: 100 horizontal_move_z: 10 retries: 5 retry_tolerance: 0.0075 max_adjust: 15 #[z_calibration] #nozzle_xy_position: 232,355 # #switch_xy_offsets: -4,-24 # #bed_xy_position: 180,180 # #switch_offset: 0.5 # #start_gcode: Attach_Probe # #before_switch_gcode: #end_gcode: Dock_Probe # ##################################################################### # Displays ##################################################################### ## Uncomment the display that you have. Display connects to Z MCU #-------------------------------------------------------------------- ## RepRapDiscount 128x64 Full Graphic Smart Controller #[display] #lcd_type: st7920 #cs_pin: z:P1.19 #sclk_pin: z:P1.20 #sid_pin: z:P1.18 #menu_timeout: 40 #encoder_pins: ^z:P3.26, ^z:P3.25 #click_pin: ^!z:P0.28 #[output_pin beeper] #pin: z:P1.30 #-------------------------------------------------------------------- ## mini12864 LCD Display [display] lcd_type: uc1701 cs_pin: z:P1.18 a0_pin: z:P1.19 encoder_pins: ^z:P3.25,^z:P3.26 click_pin: ^!z:P0.28 contrast: 56 ## To control Neopixel RGB in mini12864 display [neopixel fysetc_mini12864] pin: z:P1.21 chain_count: 3 initial_RED: 0.1 initial_GREEN: 0.5 initial_BLUE: 0.2 color_order: RGB ## Set RGB values on boot up for each Neopixel. ## Index 1 = display, Index 2 and 3 = Knob [delayed_gcode setdisplayneopixel] initial_duration: 1 gcode: SET_LED LED=fysetc_mini12864 RED=1 GREEN=1 BLUE=1 INDEX=1 TRANSMIT=0 SET_LED LED=fysetc_mini12864 RED=1 GREEN=0 BLUE=0 INDEX=2 TRANSMIT=0 SET_LED LED=fysetc_mini12864 RED=1 GREEN=0 BLUE=0 INDEX=3 #-------------------------------------------------------------------- ##################################################################### # Macros ##################################################################### [include klicky-probe.cfg] [gcode_macro PARK] gcode: {% set th = printer.toolhead %} G0 X{th.axis_maximum.x//2} Y{th.axis_maximum.y//5} Z100 F2000 [gcode_macro G32] gcode: SAVE_GCODE_STATE NAME=STATE_G32 G90 G28 QUAD_GANTRY_LEVEL G28 PARK RESTORE_GCODE_STATE NAME=STATE_G32 [gcode_macro PRINT_START] # Use PRINT_START for the slicer starting script - please customise for your slicer of choice gcode: # This part fetches data from your slicer. Such as bed temp, extruder temp, chamber temp and size of your printer. {% set target_bed = params.BED|int %} {% set target_extruder = params.EXTRUDER|int %} {% set target_chamber = params.CHAMBER|default("40")|int %} {% set x_wait = printer.toolhead.axis_maximum.x|float / 2 %} {% set y_wait = printer.toolhead.axis_maximum.y|float / 2 %} {% set FL_SIZE = params.SIZE|default("0_0_0_0")|string %} # Homes the printer, sets absolute positioning and updates the Stealthburner leds. #STATUS_HOMING # Sets SB-leds to homing-mode G28 # Full home (XYZ) G90 # Absolut position ## Uncomment for bed mesh (1 of 2) #BED_MESH_CLEAR # Clears old saved bed mesh (if any) SET_DISPLAY_TEXT MSG="Bed: {target_bed}c" # Displays info #STATUS_HEATING # Sets SB-leds to heating-mode M106 S255 # Turns on the PT-fan # ## Uncomment if you have a Nevermore. # #SET_PIN PIN=nevermore VALUE=1 # Turns on the nevermore G1 X{x_wait} Y{y_wait} Z15 F9000 # Goes to center of the bed M190 S{target_bed} # Sets the target temp for the bed {% if target_bed|int > 90 %} SET_DISPLAY_TEXT MSG="Soak for 5min" # Displays info G4 P60000 # Waits 5 min for the bedtemp to stabilize SET_DISPLAY_TEXT MSG="Soak for 4min" # Displays info G4 P60000 # Waits 5 min for the bedtemp to stabilize SET_DISPLAY_TEXT MSG="Soak for 3min" # Displays info G4 P60000 # Waits 5 min for the bedtemp to stabilize SET_DISPLAY_TEXT MSG="Soak for 2min" # Displays info G4 P60000 # Waits 5 min for the bedtemp to stabilize SET_DISPLAY_TEXT MSG="Soak for 1min" # Displays info G4 P60000 # Waits 5 min for the bedtemp to stabilize {% endif %} {% if printer.extruder.temperature < 160|float %} # Heating nozzle to 150 degrees. This helps with getting a correct Z-home SET_DISPLAY_TEXT MSG="Hotend: 150c" # Displays info M109 S150 # Heats the nozzle to 150c {% endif %} # Uncomment for V2 (Quad gantry level AKA QGL) SET_DISPLAY_TEXT MSG="QGL" # Displays info #STATUS_LEVELING # Sets SB-leds to leveling-mode QUAD_GANTRY_LEVEL # Levels the buildplate via QGL CLEAN_NOZZLE ## Uncomment for Klicky auto-z SET_DISPLAY_TEXT MSG="Z-offset" # Displays info CALIBRATE_Z # Calibrates Z-offset with klicky ## Uncomment for bed mesh (2 of 2) #SET_DISPLAY_TEXT MSG="Bed mesh" # Displays info #STATUS_MESHING # Sets SB-leds to bed mesh-mode #BED_MESH_CALIBRATE ADAPTIVE=1 # Starts bed mesh #ADAPTATIVE_BED_MESH SIZE={FL_SIZE} # Adaptative bed mesh from here: https://github.com/The-Conglomerate/Voron-Klipper-Common/blob/main/macros/adaptive_bed_mesh.cfg # Heats up the nozzle up to target via data from slicer SET_DISPLAY_TEXT MSG="Hotend: {target_extruder}c" # Displays info #STATUS_HEATING # Sets SB-leds to heating-mode G1 Z15 F9000 G1 X{x_wait} Y{y_wait} # Goes to center of the bed M107 # Turns off partcooling fan M109 S{target_extruder} # Heats the nozzle to printing temp # get rid of any ooze during heating CLEAN_NOZZLE # enable filament sensor SFS_ENABLE # Gets ready to print by doing a purge line and updating the SB-leds SET_DISPLAY_TEXT MSG="Printer goes brr" # Displays info #STATUS_PRINTING # Sets SB-leds to printing-mode G0 X{x_wait - 50} Y4 F10000 # Moves to starting point G0 Z0.4 # Raises Z to 0.4 G92 E0 ; Reset Extruder G1 Z2.0 F3000 ; Move Z Axis up little to prevent scratching of Heat Bed G1 X2.5 Y20 Z0.3 F5000.0 ; Move to start position G1 X2.5 Y200.0 Z0.3 F1500.0 E15 ; Draw the first line G1 X2.9 Y200.0 Z0.3 F5000.0 ; Move to side a little G1 X2.9 Y20 Z0.3 F1500.0 E15 ; Draw the second line G92 E0 ; Reset Extruder [gcode_macro PRINT_END] # Use PRINT_END for the slicer ending script - please customise for your slicer of choice gcode: # safe anti-stringing move coords {% set th = printer.toolhead %} {% set x_safe = th.position.x + 20 * (1 if th.axis_maximum.x - th.position.x > 20 else -1) %} {% set y_safe = th.position.y + 20 * (1 if th.axis_maximum.y - th.position.y > 20 else -1) %} {% set z_safe = [th.position.z + 2, th.axis_maximum.z]|min %} SAVE_GCODE_STATE NAME=STATE_PRINT_END M400 ; wait for buffer to clear G92 E0 ; zero the extruder G1 E-8.0 F1800 ; retract filament TURN_OFF_HEATERS SFS_DISABLE G90 ; absolute positioning G0 X{x_safe} Y{y_safe} Z{z_safe} F20000 ; move nozzle to remove stringing G0 X{th.axis_maximum.x//2} Y{th.axis_maximum.y - 2} F3600 ; park nozzle at rear M107 ; turn off fan BED_MESH_CLEAR # The purpose of the SAVE_GCODE_STATE/RESTORE_GCODE_STATE # command pair is to restore the printer's coordinate system # and speed settings since the commands above change them. # However, to prevent any accidental, unintentional toolhead # moves when restoring the state, explicitly set MOVE=0. RESTORE_GCODE_STATE NAME=STATE_PRINT_END MOVE=0 [input_shaper] shaper_freq_x: 46.08 # frequency for the X mark of the test model shaper_freq_y: 40.16 # frequency for the Y mark of the test model shaper_type: mzv # first recommended shaper [bed_mesh] speed: 120 horizontal_move_z: 10 mesh_min: 25, 25 mesh_max: 325, 325 probe_count: 6, 6 zero_reference_position: 180, 180 [filament_motion_sensor SFS_T0] detection_length: 10.00 ; This can be adjusted to your desired level of sensitivity. 10 is a recommended value to prevent flow dropoff false triggers. extruder: extruder switch_pin: ^P1.25 pause_on_runout: True ; This can be set to false to debug false positives putting the sensor in "monitor mode". The printer will not pause but it will run the runout_gcode below. event_delay: 3.0 pause_delay: 0.5 runout_gcode: M117 Runout Detected! [delayed_gcode DISABLEFILAMENTSENSOR] ; This will disable the SFS 1 second after klipper starts initial_duration: 1 gcode: SET_FILAMENT_SENSOR SENSOR=SFS_T0 ENABLE=0 ; Put your filament sensor's name after SENSOR= [gcode_macro SFS_ENABLE] ; Add this to PRINT_START description: Enable smart filament sensor gcode: M117 ENABLING the Smart Filament Sensor G92 E0 SET_FILAMENT_SENSOR SENSOR=SFS_T0 ENABLE=1 ; Put your filament sensor's name after SENSOR= [gcode_macro SFS_DISABLE] ; Add this to PRINT_END and PRINT_CANCEL description: Disable smart filament sensor gcode: M117 DISABLING the Smart Filament Sensor G92 E0 SET_FILAMENT_SENSOR SENSOR=SFS_T0 ENABLE=0 ; Put your filament sensor's name after SENSOR= [gcode_macro TEST_SPEED] # Home, get position, throw around toolhead, home again. # If MCU stepper positions (first line in GET_POSITION) are greater than a full step different (your number of microsteps), then skipping occured. # We only measure to a full step to accomodate for endstop variance. # Example: TEST_SPEED SPEED=300 ACCEL=5000 ITERATIONS=10 description: Test for max speed and acceleration parameters for the printer. Procedure: Home -> ReadPositionFromMCU -> MovesToolhead@Vel&Accel -> Home -> ReadPositionfromMCU gcode: # Speed {% set speed = params.SPEED|default(printer.configfile.settings.printer.max_velocity)|int %} # Iterations {% set iterations = params.ITERATIONS|default(5)|int %} # Acceleration {% set accel = params.ACCEL|default(printer.configfile.settings.printer.max_accel)|int %} # Minimum Cruise Ratio {% set min_cruise_ratio = params.MIN_CRUISE_RATIO|default(0.5)|float %} # Bounding inset for large pattern (helps prevent slamming the toolhead into the sides after small skips, and helps to account for machines with imperfectly set dimensions) {% set bound = params.BOUND|default(20)|int %} # Size for small pattern box {% set smallpatternsize = SMALLPATTERNSIZE|default(20)|int %} # Large pattern # Max positions, inset by BOUND {% set x_min = printer.toolhead.axis_minimum.x %} {% if x_min < 0 %} {% set x_min = 0 %} {% endif %} {% set y_min = printer.toolhead.axis_minimum.y %} {% if y_min < 0 %} {% set y_min = 0 %} {% endif %} {% set x_min = x_min + bound %} {% set x_max = printer.toolhead.axis_maximum.x - bound %} {% set y_min = y_min + bound %} {% set y_max = printer.toolhead.axis_maximum.y - bound %} # Small pattern at center # Find X/Y center point {% set x_center = (printer.toolhead.axis_minimum.x|float + printer.toolhead.axis_maximum.x|float ) / 2 %} {% set y_center = (printer.toolhead.axis_minimum.y|float + printer.toolhead.axis_maximum.y|float ) / 2 %} # Set small pattern box around center point {% set x_center_min = x_center - (smallpatternsize/2) %} {% set x_center_max = x_center + (smallpatternsize/2) %} {% set y_center_min = y_center - (smallpatternsize/2) %} {% set y_center_max = y_center + (smallpatternsize/2) %} # Save current gcode state (absolute/relative, etc) SAVE_GCODE_STATE NAME=TEST_SPEED # Output parameters to g-code terminal { action_respond_info("TEST_SPEED: starting %d iterations at speed %d, accel %d" % (iterations, speed, accel)) } # Home and get position for comparison later: M400 # Finish moves - https://github.com/AndrewEllis93/Print-Tuning-Guide/issues/66 G28 # QGL if not already QGLd (only if QGL section exists in config) {% if printer.configfile.settings.quad_gantry_level %} {% if printer.quad_gantry_level.applied == False %} QUAD_GANTRY_LEVEL G28 Z {% endif %} {% endif %} # Move 50mm away from max position and home again (to help with hall effect endstop accuracy - https://github.com/AndrewEllis93/Print-Tuning-Guide/issues/24) G90 G1 X{printer.toolhead.axis_maximum.x-50} Y{printer.toolhead.axis_maximum.y-50} F{30*60} M400 # Finish moves - https://github.com/AndrewEllis93/Print-Tuning-Guide/issues/66 G28 X Y G0 X{printer.toolhead.axis_maximum.x-1} Y{printer.toolhead.axis_maximum.y-1} F{30*60} G4 P1000 GET_POSITION # Go to starting position G0 X{x_min} Y{y_min} Z{bound + 10} F{speed*60} # Set new limits {% if printer.configfile.settings.printer.minimum_cruise_ratio is defined %} SET_VELOCITY_LIMIT VELOCITY={speed} ACCEL={accel} MINIMUM_CRUISE_RATIO={min_cruise_ratio} {% else %} SET_VELOCITY_LIMIT VELOCITY={speed} ACCEL={accel} ACCEL_TO_DECEL={accel / 2} {% endif %} {% for i in range(iterations) %} # Large pattern diagonals G0 X{x_min} Y{y_min} F{speed*60} G0 X{x_max} Y{y_max} F{speed*60} G0 X{x_min} Y{y_min} F{speed*60} G0 X{x_max} Y{y_min} F{speed*60} G0 X{x_min} Y{y_max} F{speed*60} G0 X{x_max} Y{y_min} F{speed*60} # Large pattern box G0 X{x_min} Y{y_min} F{speed*60} G0 X{x_min} Y{y_max} F{speed*60} G0 X{x_max} Y{y_max} F{speed*60} G0 X{x_max} Y{y_min} F{speed*60} # Small pattern diagonals G0 X{x_center_min} Y{y_center_min} F{speed*60} G0 X{x_center_max} Y{y_center_max} F{speed*60} G0 X{x_center_min} Y{y_center_min} F{speed*60} G0 X{x_center_max} Y{y_center_min} F{speed*60} G0 X{x_center_min} Y{y_center_max} F{speed*60} G0 X{x_center_max} Y{y_center_min} F{speed*60} # Small pattern box G0 X{x_center_min} Y{y_center_min} F{speed*60} G0 X{x_center_min} Y{y_center_max} F{speed*60} G0 X{x_center_max} Y{y_center_max} F{speed*60} G0 X{x_center_max} Y{y_center_min} F{speed*60} {% endfor %} # Restore max speed/accel/accel_to_decel to their configured values {% if printer.configfile.settings.printer.minimum_cruise_ratio is defined %} SET_VELOCITY_LIMIT VELOCITY={printer.configfile.settings.printer.max_velocity} ACCEL={printer.configfile.settings.printer.max_accel} MINIMUM_CRUISE_RATIO={printer.configfile.settings.printer.minimum_cruise_ratio} {% else %} SET_VELOCITY_LIMIT VELOCITY={printer.configfile.settings.printer.max_velocity} ACCEL={printer.configfile.settings.printer.max_accel} ACCEL_TO_DECEL={printer.configfile.settings.printer.max_accel_to_decel} {% endif %} # Re-home and get position again for comparison: M400 # Finish moves - https://github.com/AndrewEllis93/Print-Tuning-Guide/issues/66 G28 # This is a full G28 to fix an issue with CoreXZ - https://github.com/AndrewEllis93/Print-Tuning-Guide/issues/12 # Go to XY home positions (in case your homing override leaves it elsewhere) G90 G0 X{printer.toolhead.axis_maximum.x-1} Y{printer.toolhead.axis_maximum.y-1} F{30*60} G4 P1000 GET_POSITION # Restore previous gcode state (absolute/relative, etc) RESTORE_GCODE_STATE NAME=TEST_SPEED [gcode_macro CLEAN_NOZZLE] variable_start_x: 115 variable_start_y: 355 variable_start_z: 1 variable_wipe_dist: -35 variable_wipe_dy: 3 variable_wipe_qty: 10 variable_wipe_spd: 200 variable_raise_distance: 30 gcode: {% if "xyz" not in printer.toolhead.homed_axes %} G28 {% endif %} G90 ; absolute positioning ## Move nozzle to start position G1 X{start_x} Y{start_y} F6000 G1 Z{start_z} F1500 ## Wipe nozzle {% for wipes in range(1, (wipe_qty + 1)) %} G1 X{start_x + wipe_dist} Y{start_y - wipes*wipe_dy/wipe_qty} F{wipe_spd * 60} G1 X{start_x} Y{start_y - wipes*wipe_dy/wipe_qty} F{wipe_spd * 60} {% endfor %} ## Raise nozzle G1 Z{raise_distance} #*# <---------------------- SAVE_CONFIG ----------------------> #*# DO NOT EDIT THIS BLOCK OR BELOW. The contents are auto-generated. #*# #*# [stepper_z] #*# position_endstop = -0.8 #*# #*# [probe] #*# z_offset = 2.375