Skip to content

K1 Bltouch

Jason Pell edited this page Oct 21, 2024 · 36 revisions

Although the following instructions will allow you to use a BlTouch, 3DTouch or CrTouch with a K1 and Helper Script, its not an ideal situation trying to use a non creality probe with creality version of klipper and firmware. I encourage you to consider freeing your printer from the shackles of Creality and trying Simple AF

What is this about?

This guide is only for use with the Helper Script, it is not to be used with Simple AF.

The K1 has a cr touch mount point and a lidar mount point and a port on the nozzle pcb for a touch probe. With a 3d print you can mount a crtouch or a bltouch on the back, there is also a mount point to mount a crtouch on the side, I am sure the existing model could be remixed for bltouch as well.

Precautions

If you have physically installed your probe already and its not mounted on the side, if the printer insists on doing homing at any point, its very likely you will crash your probe into the z screw at the back, this is very very bad, you can skip the first time setup that sometimes seems to be forced upon a factory reset, but other than that be sure you do NOT do any homing of the printer until after the installation is complete and the probe is configured.

At least for the case where a first time setup process may be forced after a factory reset, you can skip this with a USB key trick, as documented here:

https://guilouz.github.io/Creality-Helper-Script-Wiki/firmwares/install-and-update-rooted-firmware-k1/#skip-the-startup-self-check

Gotchas

If you are on a recent version of the firmware there is actually a limitation (aka bug) in the service that drives the K1 display, it will crash if you have a mesh named 'default', with a mesh larger than 6x6, you can work around this by naming your mesh something other than default.

Or you can install guppyscreen :-)

Why would you do this?

By default on a k1, the nozzle and strain guages are used for leveling. In order to do accurate leveling, you need to heat the nozzle up, wipe the nozzle, cool the nozzle down so it does not ooze and then do the leveling. This process takes a long time, and I suspect the cooler nozzle might actually lead to some discrepancies in the leveling data too.

Much of the prtouch code in the creality klipper fork is not open source so we can't modify and tweak it. The binary blob also seems to rely on a specific order of gcode commands too, so trying to modify the custom macros and gcode_macro.cfg files is very frustrating.

What hardware do I need?

What if I have a cr-touch?

Even though throughout the config we reference bltouch, the config is almost exactly the same for a crtouch. The only things that will differ are the model and some offsets.

What if I have a BIQU Microprobe

This is not the guide you are looking for, you need to refer to https://github.com/pellcorp/creality/wiki/BIQU-MicroProbe-v2

Cable / connectors

The probe and the TOUCH port on the Nozzle MCU board both mate with a 5-pin Molex Picoblade connector. A 5-pin cable is needed to connect the probe to the TOUCH port.

Some sellers may call the connector "Micro JST SH 1.25" but that is incorrect. Several premade cables are compatible. Most notably the Creality cable for their CR Touch probe:

Alternatively, two pre-crimped cables can be soldered together:

Or a cable built from pre-crimped wires and connector housings:

image-1.png

image.png

Connect to TOUCH port on the nozzle MCU. it is accessible from the side left (LIDAR) side of the printhead and only the external cover of the printhead has to be removed.

image-2.png

350822478-cf895537-a1a1-449b-8456-1730aab4fe25

Mounting Adaptors

Bltouch

There are a few to choose from, I have used this one successfully:

I printed the model in ABS, according to the instructions on the printables page without supports. I do not know if ABS is required, but I have a printer setup for abs so it was easy to do.

I have not tried this one as yet: https://makerworld.com/en/models/403351

Crtouch

Full disclosure I have not tried any of these as I don't have a spare cr-touch

Do I need to root my k1?

Rooting your K1 is a prerequisite:

https://guilouz.github.io/Creality-Helper-Script-Wiki/firmwares/install-and-update-rooted-firmware-k1/#enable-root-access

Install moonraker and fluidd or mailsail

In order to make it possible to print from orcaslicer and edit printer.cfg files from a browser you need to install moonraker and fluidd or mainsail, you can do this via the Guilouz Helper script, check it out:

https://guilouz.github.io/Creality-K1-Series/helper-script/helper-script-installation/

Klipper configuration

There are a bunch of changes required for klipper, both config but also adding a couple of new python files and modifying one python file.

Python stuff

Extra python files

You need the bltouch.py and probe.py at least, the screws_tilt_adjust.py is needed to use the very helpful screw tilt adjust diagnostic tool to check your bed is trammed, but it's not compulsory. Because the Bltouch is mounted with a y offset, it is important to take advantage of the klipper axis twist compensation to help fix any issues with axis twist and bed meshes.

cd /usr/share/klipper/klippy/extras/
wget --no-check-certificate "https://raw.githubusercontent.com/Klipper3d/klipper/v0.12.0/klippy/extras/bltouch.py" -O /usr/share/klipper/klippy/extras/bltouch.py
wget --no-check-certificate "https://raw.githubusercontent.com/Klipper3d/klipper/v0.12.0/klippy/extras/probe.py" -O /usr/share/klipper/klippy/extras/probe.py
wget --no-check-certificate "https://raw.githubusercontent.com/Klipper3d/klipper/v0.12.0/klippy/extras/screws_tilt_adjust.py" -O /usr/share/klipper/klippy/extras/screws_tilt_adjust.py
wget --no-check-certificate "https://raw.githubusercontent.com/Klipper3d/klipper/v0.12.0/klippy/extras/axis_twist_compensation.py" -O /usr/share/klipper/klippy/extras/axis_twist_compensation.py
mv /usr/share/klipper/klippy/extras/custom_macro.py /usr/share/klipper/klippy/extras/custom_macro.py.orig
wget --no-check-certificate "https://raw.githubusercontent.com/pellcorp/creality/main/guide/klippy/extras/custom_macro.py" -O /usr/share/klipper/klippy/extras/custom_macro.py

Note: We are replacing the creality provided custom_macro.py file as this allows us to redefine some creality macros without prtouch so that existing start print macros should work out of the box.

Fix bltouch/crtouch timeout issue

Due to the fact the bltouch / crtouch is connected to the tool head pcb, there is the potential for a timeout to occur, its easy enough to fix this with the following command, unfortunately klipper does not expose this as a config property!

sed -i 's/TRSYNC_TIMEOUT = 0.025/TRSYNC_TIMEOUT = 0.050/g' /usr/share/klipper/klippy/mcu.py

You need to restart klipper for the python changes to take affect:

/etc/init.d/S55klipper_service restart

printer.cfg changes

Some changes are required to printer.cfg, this can be done from mainsail or fluidd, or if you are inclined from the command line.

Remove sections

Comment out or delete the [prtouch_v2] and [bedmesh] sections

Add sections

Add [bltouch]:

[bltouch]
sensor_pin: ^nozzle_mcu: PA9
control_pin: nozzle_mcu: PA8
pin_move_time: 0.500
x_offset: 0.0
y_offset: 25.25 
z_offset: 1.925
speed: 10
lift_speed: 20
samples: 3
probe_with_touch_mode: true
samples_result: average
stow_on_each_sample: false
samples_tolerance: 0.1
samples_tolerance_retries: 5
sample_retract_dist: 3

Important: The exact y_offset you need to use might be slightly different depending on the combination of crtouch or bltouch and the model you choose to use. Most of the models should include this information so you should refer to that. The y_offset will affect your max and min mesh in the bed mesh section too!!!

Warning: The y_offset is only relevant for a rear mounted probe, if you have using a side mounted cr-touch you will need to define a x_offset instead and make changes to your bed_mesh min and max mesh setting.

Add [bedmesh]:

[bed_mesh]
speed: 100
horizontal_move_z: 8
mesh_min: 5,30
mesh_max: 210,209
probe_count: 12,12
algorithm: bicubic
bicubic_tension: 0.1

Note: These are the defaults as taken from the discord, but if you need to do a large print probing the bed, even with adaptive bed mesh is going to take longer than the old prtouch code, so you should experiment with probe_count, speed, lift_speed and samples. There is a trade off between speed and accuracy, I actually have changed the speed and lift_speed to 10, samples to 2, and probe count to 6,6, but you need to experiment to find the optimal combination for your use case.

Modify sections

Z Axis configuration

In the [stepper_z], you need to replace the endstop_pin: tmc2209_stepper_z:virtual_endstop with endstop_pin: probe:z_virtual_endstop and disable the position_endstop:, so it should look like this:

[stepper_z]
step_pin: PB6
dir_pin: !PB5
enable_pin: !PC3
microsteps: 16
rotation_distance:8
gear_ratio: 64:20
#endstop_pin: tmc2209_stepper_z:virtual_endstop
endstop_pin: probe:z_virtual_endstop
#position_endstop: 0
position_max: 255
position_min: -5

Y Axis tweaks to avoid bltouch/crtouch crashing into the z screw

In the [stepper_y] section I modified the position_max to avoid the probe crashing into the z-rod, I actually reduced the area I can print by 4mm, is a reasonable trade off, I figured this out by slowly, 1mm at a time moving the print head back towards the back, while having it positioned in the middle of the x axis, and I arrived at a change of:

position_max: 215

gcode_macro.cfg changes

The variable_z_safe_g28 variable needs to be changed in the PRINTER_PARAM gcode section

From: variable_z_safe_g28: 8.0 to variable_z_safe_g28: 10.0

Screw Tilt Adjust Configuration

As a diagnostic, I added screw tilt adjust config so I can easily determine if my z axis is skewed, you need to add a config section:

[screws_tilt_adjust]
screw1: 25,-5
screw1_name: front left screw
screw2: 195,-5
screw2_name: front right screw
screw3: 195,165
screw3_name: rear right screw
screw4: 25,165
screw4_name: rear left screw
speed: 100
horizontal_move_z: 5
screw_thread: CW-M4

Warning: This configuration is specific to the bltouch rear mounted which has a 25.25 y offset, it's of utmost importance that you tweak the screw tilt adjust configuration to match the offset of your probe.

Guilouz Helper Script changes

Nozzle Cleaning Fan Control

if you applied the fan control feature from Guilouz script, you now need to comment it out :-)

https://guilouz.github.io/Creality-K1-Series/helper-script/nozzle-cleaning-fan-control/

You need to disable the [prtouch_v2_fan] section

Restart klipper from fluidd or mainsail for all these changes

Klipper Adaptive Mesh support

If you absolutely must have ADAPTIVE=1 klipper support, you will need to copy the bed_mesh.py onto your K1, be aware that this will conflict with Guilouz KAMP, so do NOT try and enable both at once.

You can enable access to klipper adaptive mesh with this command:

mv bed_mesh.py bed_mesh.py.orig 
wget --no-check-certificate "https://raw.githubusercontent.com/Klipper3d/klipper/v0.12.0/klippy/extras/bed_mesh.py" -O /usr/share/klipper/klippy/extras/bed_mesh.py

You will then need to restart klipper again, you can do this via fluidd or mainsail.

To make use of the adaptive meshing for all prints a parameter needs to be provided to the BED_MESH_CALIBRATE command. Look for the BED_MESH_CALIBRATE command in the START_PRINT g-code macro:

BED_MESH_CALIBRATE

and append the ADAPTIVE=1 parameter:

BED_MESH_CALIBRATE ADAPTIVE=1

What's next

You need to do z offset, use the Calibrate Probe tool from Fluidd or Mainsail for this and make sure it gets saved to the bottom of the printer.cfg file.

References

Special Thanks

Special thanks to everyone in the mod discord, but special thanks to Mr.Ferro, Fernando, StarCom, Dramler and ZeyHex for their investigation of pins and recommended config.

Mr.Ferro (aka as StarCom) also provided the bltouch images I have used in this guide.

Simple AF

Simple AF Cartographer

Simple AF Beacon EXPERIMENTAL

Simple AF BTT Eddy

Simple AF Microprobe

Simple AF Bltouch, CrTouch and 3dTouch

Donations

If you are looking for a way to support the project, and its entirely optional, this is my preferred approach. I am conducting a fundraiser to purchase a K1M printer, just so I can push out fixes and new features a bit faster, but also specifically test the K1M as well as the K1.

If you can't donate via go fund me directly, I have also added a kofi account.

Clone this wiki locally