Skip to main content

Current Config | 20240227

##################Creality Ender 3 S1 Pro Klipper Config - 3DPrintBeginner###############
######Full guide: https://3dprintbeginner.com/how-to-install-klipper-on-ender-3-s1/######

[include mainsail.cfg]

[stepper_x]
step_pin: PC2
dir_pin: PB9
enable_pin: !PC3
microsteps: 16
rotation_distance: 40
endstop_pin: !PA5
position_endstop: -5
position_min: -5
position_max: 255
homing_speed: 50

[stepper_y]
step_pin: PB8
dir_pin: PB7
enable_pin: !PC3
microsteps: 16
rotation_distance: 40
endstop_pin: !PA6
position_endstop: -2
position_min: -2
position_max: 241
homing_speed: 50

[stepper_z]
step_pin: PB6
dir_pin: !PB5
enable_pin: !PC3
microsteps: 16
rotation_distance: 8
endstop_pin: probe:z_virtual_endstop
position_max: 270
position_min: -5

[extruder]
max_extrude_only_distance: 100.0
step_pin: PB4
dir_pin: PB3
enable_pin: !PC3
microsteps: 16
rotation_distance: 7.581
nozzle_diameter: 0.400
filament_diameter: 1.750
heater_pin: PA1
sensor_type: EPCOS 100K B57560G104F
sensor_pin: PC5
#control: pid
#pid_Kp: 21.761
#pid_Ki: 1.261
#pid_Kd: 93.844
min_temp: 0
max_temp: 300
pressure_advance = 0.07

[filament_switch_sensor RunoutSensor]
pause_on_runout: False
runout_gcode: PAUSE
insert_gcode: RESUME
switch_pin: !PC15

[heater_bed]
heater_pin: PA7
sensor_type: EPCOS 100K B57560G104F
sensor_pin: PC4
#control: pid
#pid_Kp: 68.385
#pid_Ki: 1.093
#pid_Kd: 1069.370
min_temp: 0
max_temp: 130


[heater_fan hotend_fan]
pin: PC0
heater: extruder
heater_temp: 50.0
fan_speed: 0.6

[fan]
pin: PA0

[mcu]
serial: /dev/serial/by-id/usb-1a86_USB_Serial-if00-port0
restart_method: command

[printer]
kinematics: cartesian
max_velocity: 500
max_accel: 3000
max_accel_to_decel: 3000
max_z_velocity: 5
square_corner_velocity: 5.0
max_z_accel: 100

[bltouch]
sensor_pin: ^PC14 
control_pin: PC13 
x_offset: -48
y_offset: 0
#z_offset: 2.900
speed:10
samples:1
samples_result:average
probe_with_touch_mode: true
stow_on_each_sample: false

[safe_z_home]
home_xy_position: 165, 116
speed: 100
z_hop: 10
z_hop_speed: 5

[bed_mesh]
speed: 120
mesh_min: 20, 20
# Make sure X,Y for mesh_max below meets these conditions (X+(bltouch+x_offset) < bed X) and (Y+(bltouch+y_offset) < Bed Y)
mesh_max: 200, 200
probe_count: 6,5
mesh_pps: 2,2
algorithm: bicubic
bicubic_tension: 0.2
fade_start: 1
fade_end: 10
fade_target: 0

[bed_screws]
screw1: 29, 201
screw1_name: back_left
screw2: 204, 201
screw2_name: back_right
screw3: 204, 32
screw3_name: front_right
screw4: 28, 32
screw4_name: front_left

[screws_tilt_adjust]
screw1: 76, 200
screw1_name: back left
screw2: 252, 200
screw2_name: back right
screw3: 251, 31
screw3_name: front right
screw4: 76, 31
screw4_name: front left
horizontal_move_z: 5
speed: 50
screw_thread: CW-M3

[temperature_sensor Raspberry_Pi]
sensor_type: temperature_host
min_temp: 0
max_temp: 100

[virtual_sdcard]
path: ~/printer_data/gcodes
on_error_gcode: CANCEL_PRINT

[display_status]

[pause_resume]
  
[gcode_macro START_PRINT]
gcode:
    {% set BED_TEMP = params.BED_TEMP|default(60)|float %}
    {% set EXTRUDER_TEMP = params.EXTRUDER_TEMP|default(190)|float %}
    BED_MESH_PROFILE LOAD=default ; Load existing mesh
	
	G90 ; use absolute coordinates
	M83 ; extruder relative mode
	
	G92 E0 ; Reset Extruder
	M140 S{BED_TEMP} ; Heat the bed for probing and move on to next command
	M104 S{EXTRUDER_TEMP} ; Heat the nozzle to printing temperature and move on to next command
	
	G28 ; Home the printer
	G1 Z10.0 F3000 ; Move Z Axis up little to prevent scratching of Heat Bed
	G1 X0 Y0 ; Move to front left of bed in preperation for purge line
	
	M190 S{BED_TEMP} ; Heat the bed for probing and wait
    M109 S{EXTRUDER_TEMP} ; Heat the nozzle to printing temperature and wait

	#Purge line
	G1 X0.1 Y20 Z0.3 F5000.0 ; Move to start position
	G1 X0.1 Y200.0 Z0.3 F1500.0 E15 ; Draw the first line
	G1 X0.4 Y200.0 Z0.3 F5000.0 ; Move to side a little
	G1 X0.4 Y20 Z0.3 F1500.0 E30 ; Draw the second line
	G92 E0 ; Reset Extruder
	G1 Z2.0 F3000 ; Move Z Axis up little to prevent scratching of Heat Bed
	G1 X5 Y20 Z0.3 F5000.0 ; Move over to prevent blob squish
	
    # If you are using Z-Tilt:
    #Z_TILT_ADJUST
    # If you are generating a new bed mesh:
    #BED_MESH_CALIBRATE ADAPTIVE=1
    ## NOTE:    The adaptive meshing feature requires exclude_object     ##
    ##      and may require 'Label Objects' to be enabled in the slicer  ##
    ##           To mesh without it just use BED_MESH_CALIBRATE          ##

# Enable exclude_object for adaptive meshing
[exclude_object]

[gcode_macro END_PRINT]
gcode:
    G91 ; Relative positioning - Move nozzle away from print while retracting
	G1 E-2 F2700 ;Retract a bit
	G1 E-2 Z0.2 F2400 ;Retract and raise Z
	G1 X5 Y5 F3000 ;Wipe out
	G1 Z10 ;Raise Z more
	G90 ;Absolute positioning
	
	G1 X0 Y230 ; Present print
	M140 S0 ; Turn off heatbed
    M104 S0 ; Turn off hotend
    M106 S0 ; Turn off fan
	
    M84 X Y E ; Disable all steppers but Z

[gcode_macro PAUSE]
description: Pause the actual running print
rename_existing: PAUSE_BASE
# change this if you need more or less extrusion
variable_extrude: 1.0
gcode:
  ##### read E from pause macro #####
  {% set E = printer["gcode_macro PAUSE"].extrude|float %}
  ##### set park positon for x and y #####
  # default is your max posion from your printer.cfg
  {% set x_park = printer.toolhead.axis_maximum.x|float - 5.0 %}
  {% set y_park = printer.toolhead.axis_maximum.y|float - 5.0 %}
  ##### calculate save lift position #####
  {% set max_z = printer.toolhead.axis_maximum.z|float %}
  {% set act_z = printer.toolhead.position.z|float %}
  {% if act_z < (max_z - 2.0) %}
      {% set z_safe = 2.0 %}
  {% else %}
      {% set z_safe = max_z - act_z %}
  {% endif %}
  ##### end of definitions #####
  PAUSE_BASE
  G91
  {% if printer.extruder.can_extrude|lower == 'true' %}
    G1 E-{E} F2100
  {% else %}
    {action_respond_info("Extruder not hot enough")}
  {% endif %}
  {% if "xyz" in printer.toolhead.homed_axes %}
    G1 Z{z_safe} F900
    G90
    G1 X{x_park} Y{y_park} F6000
  {% else %}
    {action_respond_info("Printer not homed")}
  {% endif %} 

[gcode_macro RESUME]
description: Resume the actual running print
rename_existing: RESUME_BASE
gcode:
  ##### read E from pause macro #####
  {% set E = printer["gcode_macro PAUSE"].extrude|float %}
  #### get VELOCITY parameter if specified ####
  {% if 'VELOCITY' in params|upper %}
    {% set get_params = ('VELOCITY=' + params.VELOCITY)  %}
  {%else %}
    {% set get_params = "" %}
  {% endif %}
  ##### end of definitions #####
  {% if printer.extruder.can_extrude|lower == 'true' %}
    G91
    G1 E{E} F2100
  {% else %}
    {action_respond_info("Extruder not hot enough")}
  {% endif %}  
  RESUME_BASE {get_params}

[gcode_macro CANCEL_PRINT]
description: Cancel the actual running print
rename_existing: CANCEL_PRINT_BASE
gcode:
  TURN_OFF_HEATERS
  CANCEL_PRINT_BASE
  
#[gcode_macro PURGE]
#description: Extrudes filament, used to clean out previous filament
#gcode:
#  {% if printer.extruder.temperature < 180 %}
#    {action_respond_info("Extruder temperature too low")}
#  {% else %}
#  {% set PURGE_AMOUNT = params.PURGE_AMOUNT|default(40)|float %}
#    SAVE_GCODE_STATE NAME=PURGE_state
#    G91                   # relative coords
#    G1 E{PURGE_AMOUNT} F{ 5 * 60 }  # purge
#    RESTORE_GCODE_STATE NAME=PURGE_state
#  {% endif %}

#*# <---------------------- SAVE_CONFIG ---------------------->
#*# DO NOT EDIT THIS BLOCK OR BELOW. The contents are auto-generated.
#*#
#*# [bltouch]
#*# z_offset = 2.575
#*#
#*# [extruder]
#*# control = pid
#*# pid_kp = 19.822
#*# pid_ki = 0.951
#*# pid_kd = 103.322
#*#
#*# [heater_bed]
#*# control = pid
#*# pid_kp = 66.721
#*# pid_ki = 0.969
#*# pid_kd = 1148.437
#*#
#*# [bed_mesh default]
#*# version = 1
#*# points =
#*# 	  0.242500, 0.105000, 0.087500, 0.095000, 0.147500, 0.192500
#*# 	  0.090000, -0.015000, -0.037500, -0.037500, 0.007500, 0.072500
#*# 	  0.127500, 0.015000, -0.012500, 0.010000, 0.062500, 0.125000
#*# 	  0.165000, 0.050000, 0.030000, 0.017500, 0.097500, 0.147500
#*# 	  0.220000, 0.107500, 0.075000, 0.070000, 0.122500, 0.180000
#*# x_count = 6
#*# y_count = 5
#*# mesh_x_pps = 2
#*# mesh_y_pps = 2
#*# algo = bicubic
#*# tension = 0.2
#*# min_x = 20.0
#*# max_x = 200.0
#*# min_y = 20.0
#*# max_y = 200.0
For the life of me, I cannot get prints to be centered on the bed after installing Klipper. First of all, here is my printer.cfg.
  • I followed the steps outlined here to set position_min, position_max, and position_endstop. After this, 0,0 is correct and is in the very front left corner of the bed.
  • In Prusa Slicer, I updated the bed shape settings in the printer settings. My bed shape size is 233,226 and the origin is 0,0.
  • I am using this fan duct with this hotend cooling duct, which offsets the probe. I followed these steps to set the x_offset and the y_offset to account for the new probe location. My x_offset = -48 and my y_offset = 0.
  • I followed these steps to set the home_xy_position in [safe_z_home]. My home_xy_position = 165, 116.
  • I have printed this bed center calibration model (200mm variant) and this bed center finder model.
I'm at a loss at to what to do next. I have tried everything I can think of. The only information I can find from my searching is related to setting the position_min, position_max, and position_endstop, which I have already done.