Calibrate a Ender 3 V2 running Klipper1 with the following tests.
Calibrate movement
Run the following tests to ensure the hotend and bed are moving correctly and can reach all points of the bed.
Check endstops
This ensures the endstops are connected and configured correctly.
-
Check that all endstops are open
QUERY_ENDSTOP
All endstops should be in the
open
state# x:open y:open z:open
-
Push the
x
endstop and queryQUERY_ENDSTOP
The
x
endstop should be in theTRIGGERED
state# x:TRIGGERED y:open z:open
Repeat for the
y
andz
endstops
Check stepper motors
This ensure the motor pins are connected and configured correctly.
-
Give the motors room to move back and forth by ensuring each axis can move in either direction freely
-
Buzz the
x
stepper motorSTEPPER_BUZZ stepper=stepper_x
The hotend should repeatedly move from the left to the right.
-
Buzz the
y
stepper motorSTEPPER_BUZZ stepper=stepper_y
The bed should repeatedly move to the front and back.
-
Buzz the
z
stepper motorSTEPPER_BUZZ stepper=stepper_z
The hotend should repeatedly move up and down.
Check homing
This checks the nozzle can reach all four corners of the bed.
The bed is of size 235x235mm with corner coordinates of:
Corner | x | y |
---|---|---|
Front left | 0 | 0 |
Front right | 235 | 0 |
Back left | 0 | 235 |
Back right | 235 | 235 |
-
Home all axis
G28
-
Go into absolute positioning mode2
G90
-
Move to the front left corner
G1 X0 Y0 Z10 F3000
-
Move to the front right corner
G1 X235 Y0 Z10 F3000
-
Move to the back left corner
G1 X0 Y235 Z10 F3000
-
Move to the back left corner
G1 X235 Y235 Z10 F3000
Bed levelling
With a BLTouch3 probe installed, we can perform the following to ensure a level bed.
Configure BLTouch
Add the following to the printer.cfg
4:
[bltouch]
sensor_pin: ^PB1
control_pin: PB0
x_offset: -42
y_offset: -10
z_offset: 0
[safe_z_home]
home_xy_position: 117.5, 117.5
z_hop: 10
x_offset
, y_offset
, z_offset
are how far the BLTouch probe is from the nozzle. The z-offset
will be adjusted later to ensure the nozzle is the perfect distance from the bed for a perfect first layer.
The above values are for the standard mount provided by BLTouch kit for the Ender 3 V2.
Adjust screws
Before we perform a bed mesh levelling, we should ensure our bed is as flat as possible by adjusting the screws under the bed. Klipper has automated tools for determining how much each screw needs to be adjusted5.
-
Add the following to the
printer.cfg
to configure where each screw is located beneat the bed (screws on an Ender 3 V2 are offset by 32mm from the edges of the bed)[screws_tilt_adjust] screw1: 74, 42 screw1_name: Front left screw2: 245, 42 screw2_name: Front right screw3: 245, 213 screw3_name: Back right screw4: 74, 213 screw4_name: Back left screw_thread: CW-M4 horizontal_move_z: 10
The location for each screw is calculated as follows:
Screw x y Front left 0 + screw_x_offset - bltouch.x_offset
0 + screw_y_offset - bltouch.y_offset
Front right 235 - screw_x_offset - bltouch.x_offset
0 + screw_y_offset - bltouch.y_offset
Back left 0 + screw_x_offset - bltouch.x_offset
235 - screw_y_offset - bltouch.y_offset
Back right 235 - screw_x_offset - bltouch.x_offset
235 - screw_y_offset - bltouch.y_offset
The above values are for the standard mount provided by BLTouch kit for the Ender 3 V2.
-
Calculate how much each screw needs to be adjusted
SCREWS_TILT_CALCULATE
Each screw will be probed by the printer to produce a readout similar to the following where adjustments to each screw is displayed:
# Front left (base) : x=74.0, y=42.0, z=-0.11500 # Front right : x=245.0, y=42.0, z=-0.10000 : adjust CCW 00:30 # Back right : x=245.0, y=213.0, z=-0.16500 : adjust CW 00:42 # Back left : x=74.0, y=213.0, z=-0.17000 : adjust CW 00:22
The adjustments are based on a clock, where
CW
is clockwise andCCW
is counter clock-wise. The amount of adjustment is in minutes. So for example,CCW 0:30
means to turn the screw 180 degrees counter clockwise. -
Repeat the above step until the adjustments are no more than 6 minutes each
Perform bed mesh levelling
We need to generate a height map for a series of points across the bed to cater for warped bed surfaces. Klipper has an auto bed levelling procedure to automate this6.
-
Add the following to
printer.cfg
[bed_mesh] speed: 120 horizontal_move_z: 10 mesh_min: 15, 15 mesh_max: 205, 205 probe_count: 5,5 algorithm: bicubic fade_start: 1 fade_end: 10 fade_target: 0
probe_count
sets the size of the mesh, in this case 5 by 5, resulting in 25 points to be probed. -
Run the auto bed levelling procedure
BED_MESH_CALIBRATE
-
When complete, save the mesh
SAVE_CONFIG
The mesh will be saved to the
printer.cfg
like so:#*# [bed_mesh default] #*# version = 1 #*# points = #*# -0.122500, -0.097500, -0.062500, -0.042500, 0.002500 #*# -0.047500, -0.030000, 0.017500, 0.032500, 0.072500 #*# -0.055000, -0.030000, 0.020000, 0.040000, 0.087500 #*# -0.070000, -0.062500, -0.017500, 0.000000, 0.045000 #*# -0.130000, -0.132500, -0.102500, -0.082500, -0.052500 #*# tension = 0.2 #*# min_x = 15.0 #*# algo = bicubic #*# y_count = 5 #*# mesh_y_pps = 2 #*# min_y = 15.0 #*# x_count = 5 #*# max_y = 205.0 #*# mesh_x_pps = 2 #*# max_x = 205.0
z_offset
Adjust the This ensures the nozzle is the perfect distance from the bed for a perfect first layer.
-
Find a piece of paper and place it under the nozzle. I have found a Post-it note7 to be a good thickness.
-
Start the calibration
PROBE_CALIBRATE
-
Adjust the nozzle height until there is friction on the paper To go down:
TESTZ Z=--
To go up:
TESTZ Z=++
-
Once the nozzle is at the correct height, save the
z_offset
SAVE_CONFIG
This will appear in the
printer.cfg
like so:#*# [bltouch] #*# z_offset = 5.063
Run a calibration print
After going through the above configuration we can confirm everything by running a calibration print.
-
Use SuperSlicer8 to generate the calibration G-code
The content within the dialog describes what a successful print should look like.
-
A successful print should look like the following
Calibrate temperate
This ensures the nozzle and bed heaters are able to keep the temperature stable9.
-
Turn the part fan to 100% to simulate real cooling
M106 S255
-
Tune the extruder
PID_CALIBRATE HEATER=extruder TARGET=200
The
TARGET
should be close to the typical printing temperature for the filament. 200 is good for PLA. -
Save the config
SAVE_CONFIG
This will appear in the
printer.cfg
like so:#*# [extruder] #*# control = pid #*# pid_kp = 20.237 #*# pid_ki = 1.054 #*# pid_kd = 97.138
-
Tune the heater bed
PID_CALIBRATE HEATER=heater_bed TARGET=60
The
TARGET
should be close to the typical printing temperature for the filament. 60 is good for PLA. -
Save the config
SAVE_CONFIG
This will appear in the
printer.cfg
like so:#*# [heater_bed] #*# control = pid #*# pid_kp = 70.405 #*# pid_ki = 1.025 #*# pid_kd = 1209.203
Footnotes
-
https://www.klipper3d.org/BLTouch.html#connecting-bl-touch ↩
-
https://www.klipper3d.org/Manual_Level.html#adjusting-bed-leveling-screws ↩
-
https://www.post-it.com.au/3M/en_AU/post-it-au/products/~/Post-it-Super-Sticky-Notes-76-x-76-mm-Neon-Pink-5-Pads-Pack-654-5SSNP/?N=4327+3291610975+3294529197&preselect=5927575+3293786499&rt=rud ↩