commit f784e3b47f6e9d015085c48d466959c67c90f46d Author: Thomas Schmid Date: Thu Jan 6 12:06:41 2022 +0100 Initial commit Signed-off-by: Thomas Schmid diff --git a/printer.cfg b/printer.cfg new file mode 100644 index 0000000..fe2d2f3 --- /dev/null +++ b/printer.cfg @@ -0,0 +1,846 @@ +# This file contains common pin mappings for the BigTreeTech Octopus V1. +# To use this config, the firmware should be compiled for the STM32F446 with a "32KiB bootloader" +# Enable "extra low-level configuration options" and select the "12MHz crystal" as clock reference + +# after running "make", copy the generated "klipper/out/klipper.bin" file to a +# file named "firmware.bin" on an SD card and then restart the OctoPus with that SD card. + +# See docs/Config_Reference.md for a description of parameters. + +## Voron Design VORON2 250/300/350mm BigTreeTech OctoPus V1 TMC2209 UART config + +## *** THINGS TO CHANGE/CHECK: *** +## MCU paths [mcu] section +## Thermistor types [extruder] and [heater_bed] sections - See 'sensor types' list at end of file +## 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 +## Thermistor types [extruder] and [heater_bed] sections +## Probe pin [probe] section +## Fine tune E steps [extruder] section + +[mcu rpi] +serial: /tmp/klipper_host_mcu + +[adxl345] +cs_pin: rpi:None + +[resonance_tester] +accel_chip: adxl345 +probe_points: + 175, 175, 50 + +[mcu] +## Obtain definition by "ls -l /dev/serial/by-id/" then unplug to verify +##-------------------------------------------------------------------- +serial: /dev/serial/by-id/usb-Klipper_stm32f446xx_4A0028000250534E4E313120-if00 +restart_method: command +##-------------------------------------------------------------------- + +[printer] +kinematics: corexy +max_velocity: 350 +max_accel: 3000 #Max 4000 +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 +##################################################################### + +## B Stepper - Left +## Connected to MOTOR_0 +## Endstop connected to DIAG_0 +[input_shaper] +shaper_freq_x: 59.6 +shaper_type_x: mzv +shaper_freq_y: 45 +shaper_type_y: mzv + +[stepper_x] +step_pin: PF13 +dir_pin: PF12 +enable_pin: !PF14 +rotation_distance: 40 +microsteps: 32 +full_steps_per_rotation:400 #set to 400 for 0.9 degree stepper +endstop_pin: PG6 +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: PC4 +interpolate: false +run_current: 0.8 +sense_resistor: 0.110 +stealthchop_threshold: 0 + +## A Stepper - Right +## Connected to MOTOR_1 +## Endstop connected to DIAG_1 +[stepper_y] +step_pin: PG0 +dir_pin: PG1 +enable_pin: !PF15 +rotation_distance: 40 +microsteps: 32 +full_steps_per_rotation:400 #set to 400 for 0.9 degree stepper +endstop_pin: PG9 +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: 358 +position_max: 358 + +##-------------------------------------------------------------------- +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: PD11 +interpolate: false +run_current: 0.8 +sense_resistor: 0.110 +stealthchop_threshold: 0 + +##################################################################### +# Z Stepper Settings +##################################################################### + +## Z0 Stepper - Front Left +## Connected to MOTOR_2 +## Endstop connected to DIAG_2 +[stepper_z] +step_pin: PF11 +dir_pin: PG3 +enable_pin: !PG5 +rotation_distance: 40 +gear_ratio: 80:16 +microsteps: 32 +endstop_pin: PG10 +## 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: -0.5 +##-------------------------------------------------------------------- + +## Uncomment below for 250mm build +#position_max: 230 + +## Uncomment below for 300mm build +#position_max: 280 + +## Uncomment below for 350mm build +position_max: 330 + +##-------------------------------------------------------------------- +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: PC6 +interpolate: false +run_current: 0.8 +sense_resistor: 0.110 +stealthchop_threshold: 0 + +## Z1 Stepper - Rear Left +## Connected to MOTOR_3 +[stepper_z1] +step_pin: PG4 +dir_pin: !PC1 +enable_pin: !PA0 +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: PC7 +interpolate: false +run_current: 0.8 +sense_resistor: 0.110 +stealthchop_threshold: 0 + +## Z2 Stepper - Rear Right +## Connected to MOTOR_4 +[stepper_z2] +step_pin: PF9 +dir_pin: PF10 +enable_pin: !PG2 +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: PF2 +interpolate: false +run_current: 0.8 +sense_resistor: 0.110 +stealthchop_threshold: 0 + +## Z3 Stepper - Front Right +## Connected to MOTOR_5 +[stepper_z3] +step_pin: PC13 +dir_pin: !PF0 +enable_pin: !PF1 +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: PE4 +interpolate: false +run_current: 0.8 +sense_resistor: 0.110 +stealthchop_threshold: 0 + + +##################################################################### +# Extruder +##################################################################### + +## Connected to MOTOR_6 +## Heater - HE0 +## Thermistor - T0 +[extruder] +step_pin: PE2 +dir_pin: PE3 +enable_pin: !PD4 +## 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.536398 #Bondtech 5mm Drive Gears +## Update Gear Ratio depending on your Extruder Type +## Use 50:17 for Afterburner/Clockwork (BMG Gear Ratio) +## Use 80:20 for M4, M3.1 +gear_ratio: 50:17 #BMG Gear Ratio +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: PA2 +## Validate the following thermistor type to make sure it is correct +## See https://www.klipper3d.org/Config_Reference.html#common-thermistors for additional options +sensor_type: MAX31865 +sensor_pin: PF8 +# The chip select line for the sensor chip. This parameter must be +# provided. +spi_speed: 2000000 +# The SPI speed (in hz) to use when communicating with the chip. +# The default is 4000000. +spi_software_sclk_pin: EXP2_2 +spi_software_mosi_pin: EXP2_6 +spi_software_miso_pin: EXP2_1 +# See the "common SPI settings" section for a description of the +# above parameters. +#tc_type: K +#tc_use_50Hz_filter: False +#tc_averaging_count: 1 +# The above parameters control the sensor parameters of MAX31856 +# chips. The defaults for each parameter are next to the parameter +# name in the above list. +rtd_nominal_r: 100 +rtd_reference_r: 430 +rtd_num_of_wires: 4 +#rtd_use_50Hz_filter: False +# The above parameters control the sensor parameters of MAX31865 +# chips. The defaults for each parameter are next to the parameter +# name in the above list. +min_temp: 0 +max_temp: 480 +max_power: 1.0 +min_extrude_temp: 170 +#control = pid +#pid_kp = 26.213 +#pid_ki = 1.304 +#pid_kd = 131.721 +## Try to keep pressure_advance below 1.0 +pressure_advance: 0.038 +## Default is 0.040, leave stock +pressure_advance_smooth_time: 0.040 + +## E0 on MOTOR6 +## Make sure to update below for your relevant driver (2208 or 2209) +[tmc2209 extruder] +uart_pin: PE1 +interpolate: false +run_current: 0.5 +sense_resistor: 0.110 +stealthchop_threshold: 0 + + +##################################################################### +# Bed Heater +##################################################################### + +[heater_bed] +## SSR Pin - HE1 +## Thermistor - TB +heater_pin: PA3 +## Validate the following thermistor type to make sure it is correct +## See https://www.klipper3d.org/Config_Reference.html#common-thermistors for additional options +sensor_type: Generic 3950 +sensor_pin: PF3 +## Adjust Max Power so your heater doesn't warp your bed. Rule of thumb is 0.4 watts / cm^2 . +max_power: 0.6 +# tba: test --> 0 +min_temp: 0 +max_temp: 120 +#control: pid +#pid_kp: 58.437 +#pid_ki: 2.347 +#pid_kd: 363.769 + +##################################################################### +# Probe +##################################################################### + +[probe] +## Inductive Probe +## This probe is not used for Z height, only Quad Gantry Leveling + +## Select the probe port by type: +## For the PROBE port. Will not work with Diode. May need pull-up resistor from signal to 24V. +#pin: ~!PB7 +## For the DIAG_7 port. NEEDS BAT85 DIODE! Change to !PG15 if probe is NO. +#pin: PG15 +## For Octopus Pro PROBE port; NPN and PNP proximity switch types can be set by jumper +pin: ~PC5 + +#-------------------------------------------------------------------- + +x_offset: 0 +y_offset: 25.0 +z_offset: 0 +speed: 10.0 +samples: 3 +samples_result: median +sample_retract_dist: 3.0 +samples_tolerance: 0.006 +samples_tolerance_retries: 3 + +##################################################################### +# Fan Control +##################################################################### + +[fan] +## Print Cooling Fan - FAN0 +pin: PA8 +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 + +[heater_fan hotend_fan] +## Hotend Fan - FAN1 +pin: PE5 +max_power: 1.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 + +[controller_fan controller_fan] +## Controller fan - FAN2 +pin: PD12 +kick_start_time: 0.5 +heater: heater_bed + +[heater_fan exhaust_fan] +## Exhaust fan - FAN3 +pin: PD13 +max_power: 1.0 +shutdown_speed: 0.0 +kick_start_time: 5.0 +heater: heater_bed +heater_temp: 60 +fan_speed: 1.0 + +##################################################################### +# LED Control +##################################################################### + +## Chamber Lighting - HE2 Connector (Optional) +#[output_pin caselight] +#pin: PB10 +#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.45, 358 +speed:100 +z_hop:10 + +[quad_gantry_level] +## 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 + +#-------------------------------------------------------------------- +## 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: 350 +horizontal_move_z: 5 +retries: 5 +retry_tolerance: 0.0075 +max_adjust: 10 + +######################################## +# EXP1 / EXP2 (display) pins +######################################## + +[board_pins] +aliases: + # EXP1 header + EXP1_1=PE8, EXP1_2=PE7, + EXP1_3=PE9, EXP1_4=PE10, + EXP1_5=PE12, EXP1_6=PE13, # Slot in the socket on this side + EXP1_7=PE14, EXP1_8=PE15, + EXP1_9=, EXP1_10=<5V>, + + # EXP2 header + EXP2_1=PA6, EXP2_2=PA5, + EXP2_3=PB1, EXP2_4=PA4, + EXP2_5=PB2, EXP2_6=PA7, # Slot in the socket on this side + EXP2_7=PC15, EXP2_8=, + EXP2_9=, EXP2_10=<5V> + + +#################################################################### +# Virtual SD Card +#################################################################### + +# Print files without octoprint + +[virtual_sdcard] +path: ~/.octoprint/uploads/ + +[menu __main __sdcard] +type: vsdlist +enable: {('virtual_sdcard' in printer)} +name: Print Files +##################################################################### +# Displays +##################################################################### + +## Uncomment the display that you have +#-------------------------------------------------------------------- + +#[display] +## RepRapDiscount 128x64 Full Graphic Smart Controller +#lcd_type: st7920 +#cs_pin: EXP1_4 +#sclk_pin: EXP1_5 +#sid_pin: EXP1_3 +#menu_timeout: 40 +#encoder_pins: ^EXP2_5, ^EXP2_3 +#click_pin: ^!EXP1_2 + +[output_pin beeper] +pin: EXP1_1 + +#-------------------------------------------------------------------- + +[display] +# mini12864 LCD Display +lcd_type: uc1701 +cs_pin: EXP1_3 +a0_pin: EXP1_4 +rst_pin: EXP1_5 +encoder_pins: ^EXP2_5, ^EXP2_3 +click_pin: ^!EXP1_2 +contrast: 63 +spi_software_miso_pin: EXP2_1 +spi_software_mosi_pin: EXP2_6 +spi_software_sclk_pin: EXP2_2 + +[neopixel btt_mini12864] +# To control Neopixel RGB in mini12864 display +pin: EXP1_6 +chain_count: 3 +initial_RED: 0.1 +initial_GREEN: 0.5 +initial_BLUE: 0.0 +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=btt_mini12864 RED=0 GREEN=0.2 BLUE=1 INDEX=1 TRANSMIT=0 + SET_LED LED=btt_mini12864 RED=1 GREEN=1 BLUE=1 INDEX=2 TRANSMIT=0 + SET_LED LED=btt_mini12864 RED=0 GREEN=0.2 BLUE=1 INDEX=3 + +### menu move 10mm ### +[menu __main __control __move_10mm] +type: list +enable: {not printer.idle_timeout.state == "Printing"} +name: Move 10mm + +[menu __main __control __move_10mm __axis_x] +type: input +name: Move X:{'%05.1f' % menu.input} +realtime: True +input: {printer.gcode_move.gcode_position.x} +input_min: {printer.toolhead.axis_minimum.x} +input_max: {printer.toolhead.axis_maximum.x} +input_step: 10.0 +gcode: + SAVE_GCODE_STATE NAME=__move__axis + G90 + G1 X{menu.input} + RESTORE_GCODE_STATE NAME=__move__axis + +[menu __main __control __move_10mm __axis_y] +type: input +name: Move Y:{'%05.1f' % menu.input} +realtime: True +input: {printer.gcode_move.gcode_position.y} +input_min: {printer.toolhead.axis_minimum.y} +input_max: {printer.toolhead.axis_maximum.y} +input_step: 10.0 +gcode: + SAVE_GCODE_STATE NAME=__move__axis + G90 + G1 Y{menu.input} + RESTORE_GCODE_STATE NAME=__move__axis + +[menu __main __control __move_10mm __axis_z] +type: input +enable: {not printer.idle_timeout.state == "Printing"} +name: Move Z:{'%05.1f' % menu.input} +realtime: True +input: {printer.gcode_move.gcode_position.z} +input_min: 0 +input_max: {printer.toolhead.axis_maximum.z} +input_step: 10.0 +gcode: + SAVE_GCODE_STATE NAME=__move__axis + G90 + G1 Z{menu.input} + RESTORE_GCODE_STATE NAME=__move__axis + +[menu __main __control __move_10mm __axis_e] +type: input +enable: {not printer.idle_timeout.state == "Printing"} +name: Move E:{'%+06.1f' % menu.input} +realtime: True +input: 0 +input_min: -{printer.configfile.config.extruder.max_extrude_only_distance|default(50)} +input_max: {printer.configfile.config.extruder.max_extrude_only_distance|default(50)} +input_step: 10.0 +gcode: + SAVE_GCODE_STATE NAME=__move__axis + M83 + G1 E{menu.input} F240 + RESTORE_GCODE_STATE NAME=__move__axis + +### menu move 1mm ### +[menu __main __control __move_1mm] +type: list +enable: {not printer.idle_timeout.state == "Printing"} +name: Move 1mm + +[menu __main __control __move_1mm __axis_x] +type: input +name: Move X:{'%05.1f' % menu.input} +realtime: True +input: {printer.gcode_move.gcode_position.x} +input_min: {printer.toolhead.axis_minimum.x} +input_max: {printer.toolhead.axis_maximum.x} +input_step: 1.0 +gcode: + SAVE_GCODE_STATE NAME=__move__axis + G90 + G1 X{menu.input} + RESTORE_GCODE_STATE NAME=__move__axis + +[menu __main __control __move_1mm __axis_y] +type: input +name: Move Y:{'%05.1f' % menu.input} +realtime: True +input: {printer.gcode_move.gcode_position.y} +input_min: {printer.toolhead.axis_minimum.y} +input_max: {printer.toolhead.axis_maximum.y} +input_step: 1.0 +gcode: + SAVE_GCODE_STATE NAME=__move__axis + G90 + G1 Y{menu.input} + RESTORE_GCODE_STATE NAME=__move__axis + +[menu __main __control __move_1mm __axis_z] +type: input +enable: {not printer.idle_timeout.state == "Printing"} +name: Move Z:{'%05.1f' % menu.input} +realtime: True +input: {printer.gcode_move.gcode_position.z} +input_min: 0 +input_max: {printer.toolhead.axis_maximum.z} +input_step: 1.0 +gcode: + SAVE_GCODE_STATE NAME=__move__axis + G90 + G1 Z{menu.input} + RESTORE_GCODE_STATE NAME=__move__axis + +[menu __main __control __move_1mm __axis_e] +type: input +enable: {not printer.idle_timeout.state == "Printing"} +name: Move E:{'%+06.1f' % menu.input} +realtime: True +input: 0 +input_min: -{printer.configfile.config.extruder.max_extrude_only_distance|default(50)} +input_max: {printer.configfile.config.extruder.max_extrude_only_distance|default(50)} +input_step: 1.0 +gcode: + SAVE_GCODE_STATE NAME=__move__axis + M83 + G1 E{menu.input} F240 + RESTORE_GCODE_STATE NAME=__move__axis + +### menu move 0.1mm ### +[menu __main __control __move_01mm] +type: list +enable: {not printer.idle_timeout.state == "Printing"} +name: Move 0.1mm + +[menu __main __control __move_01mm __axis_x] +type: input +name: Move X:{'%05.1f' % menu.input} +realtime: True +input: {printer.gcode_move.gcode_position.x} +input_min: {printer.toolhead.axis_minimum.x} +input_max: {printer.toolhead.axis_maximum.x} +input_step: 0.1 +gcode: + SAVE_GCODE_STATE NAME=__move__axis + G90 + G1 X{menu.input} + RESTORE_GCODE_STATE NAME=__move__axis + +[menu __main __control __move_01mm __axis_y] +type: input +name: Move Y:{'%05.1f' % menu.input} +realtime: True +input: {printer.gcode_move.gcode_position.y} +input_min: {printer.toolhead.axis_minimum.y} +input_max: {printer.toolhead.axis_maximum.y} +input_step: 0.1 +gcode: + SAVE_GCODE_STATE NAME=__move__axis + G90 + G1 Y{menu.input} + RESTORE_GCODE_STATE NAME=__move__axis + +[menu __main __control __move_01mm __axis_z] +type: input +enable: {not printer.idle_timeout.state == "Printing"} +name: Move Z:{'%05.1f' % menu.input} +realtime: True +input: {printer.gcode_move.gcode_position.z} +input_min: 0 +input_max: {printer.toolhead.axis_maximum.z} +input_step: 0.1 +gcode: + SAVE_GCODE_STATE NAME=__move__axis + G90 + G1 Z{menu.input} + RESTORE_GCODE_STATE NAME=__move__axis + +[menu __main __control __move_01mm __axis_e] +type: input +enable: {not printer.idle_timeout.state == "Printing"} +name: Move E:{'%+06.1f' % menu.input} +realtime: True +input: 0 +input_min: -{printer.configfile.config.extruder.max_extrude_only_distance|default(50)} +input_max: {printer.configfile.config.extruder.max_extrude_only_distance|default(50)} +input_step: 0.1 +gcode: + SAVE_GCODE_STATE NAME=__move__axis + M83 + G1 E{menu.input} F240 + RESTORE_GCODE_STATE NAME=__move__axis + +#-------------------------------------------------------------------- + + +##################################################################### +# Macros +##################################################################### + +[gcode_macro G32] +gcode: + BED_MESH_CLEAR + G28 + QUAD_GANTRY_LEVEL + G0 X340 Y340 F18000 + G28 + ## Uncomment for for your size printer: + #-------------------------------------------------------------------- + ## Uncomment for 250mm build + #G0 X125 Y125 Z30 F3600 + + ## Uncomment for 300 build + #G0 X150 Y150 Z30 F3600 + + ## Uncomment for 350mm build + #G0 X175 Y175 Z30 F3600 + G0 Z20 + #-------------------------------------------------------------------- + +[gcode_macro PURGE_LINE] +gcode: + G0 X0 Y0 F18000 ; move to print bed corner + G92 E0 + G0 Z0.2 F3000 ; move to bed + G1 X100 E20 F1000 ; intro line + G92 E0 + + G1 E-0.5 F3600 + +[gcode_macro PRINT_START] +# Use PRINT_START for the slicer starting script - please customise for your slicer of choice +gcode: + G32 ; home all axes + G1 Z20 F3000 ; move nozzle away from bed + + PURGE_LINE + +[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-2.0 F3600 ; retract filament + + TURN_OFF_HEATERS + + 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 + RESTORE_GCODE_STATE NAME=STATE_PRINT_END + +#*# <---------------------- SAVE_CONFIG ----------------------> +#*# DO NOT EDIT THIS BLOCK OR BELOW. The contents are auto-generated. +#*# +#*# [extruder] +#*# control = pid +#*# pid_kp = 30.421 +#*# pid_ki = 2.386 +#*# pid_kd = 96.965 +#*# +#*# [heater_bed] +#*# control = pid +#*# pid_kp = 41.377 +#*# pid_ki = 0.857 +#*# pid_kd = 499.625 +#*# +#*# [stepper_z] +#*# position_endstop = -0.8