-
Notifications
You must be signed in to change notification settings - Fork 13
BIQU MicroProbe v2
This guide is a work in progress and tries to account for many variations in configuration files and printer hardware. Since you may have already installed other mods or have a different firmware version installed, keep in mind that your configuration files may not be exactly as this guide expects them to be.
Please be aware that while this guide aims to provide assistance, it does not offer any guarantees. Any configuration modifications should be approached with caution, as improper implementation may result in damage to your printer. We do not accept responsibility for any errors. By using this guide, you accept full responsibility for any modifications you choose to make. It's recommended to thoroughly read both the Klipper and manufacturer documentation to make informed decisions on integrating your BIQU MicroProbe.
This is a barebones guide focused on how to install a BIQU MicroProbe on a Creality K1 series printer. Other topics like adaptive meshing are deliberately excluded to make the guide easier to follow. For reasons of simplicity, this guide also focuses on the side mount by Mr. Ferro. Side mounts that keep the probing pin in line with the nozzle are warmly recommended since they keep the probe cooler, eliminate the need for axis twist compensation as well as protect the probe from mechanical damage after a potential future factory reset.
The factory Creality PRTouch v2 implementation provides a probing accuracy of about 0.02mm. A MicroProbe has shown a probe accuracy of 0.0003mm at temperatures below 60C and 0.002mm at 100C.
Your printer will need to be rooted. This guide works best for a clean factory configuration. It can be applied to modded configurations but will require a more skilled and informed operator.
Manufacturer's product listing:
https://biqu.equipment/products/microprobe-v1-0-for-b1-printers-h2-extruders-ender-3
It is not important which MicroProbe package you purchase. The provided mounting kits cannot be used on the K1 series of printers. Please note that the package usually does not include the 150mm cable listed as part of the delivery, with the correct connectors needed for the K1 installation.
- Mr. Ferro's side mount that fits in the LIDAR mount points - recommended.
- Chinstrap's mount for Bootycalljones Linear Rail Gantry v1.1
- BIGTREETECH MicroProbe GitHub repos with the manuals and firmware
- BIQU Micro Probe review video by Stacking Layers
- How to configure the BIQU Microprobe for Klipper video by Stacking Layers
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:
- https://www.aliexpress.us/item/1005004960067376.html
- https://www.amazon.com/dp/B0BKPFY24M/
- https://www.bastelgarage.ch/0-1m-creality-cr-touch-bl-touch-adapterkabel-sprite-extruder
Alternatively, two pre-crimped cables can be soldered together:
Or a cable built from pre-crimped wires and connector housings:
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.
-
Make sure the build plate is at a low position, to allow a safe probe trigger test after installation of the probe.
-
Add/update Klippy modules. Some of them may already be present in the Creality firmware. Updating them will give you the latest functionality.
Files:
- probe.py Needed for BIQU Microprobe and other z-height probes
- screws_tilt_adjust.py Tool to help adjust bed screws tilt using Z probe
- axis_twist_compensation.py If your probe has a y-offset from the nozzle this will help correct for a twist in the x-axis
- safe_z_home Can be used to define how to use the probe for z-homing
cd /usr/share/klipper/klippy/extras/
mv probe.py probe.py.orig
wget --no-check-certificate https://raw.githubusercontent.com/Klipper3d/klipper/v0.12.0/klippy/extras/probe.py -O probe.py
mv screws_tilt_adjust.py screws_tilt_adjust.py.orig
wget --no-check-certificate https://raw.githubusercontent.com/Klipper3d/klipper/v0.12.0/klippy/extras/screws_tilt_adjust.py -O screws_tilt_adjust.py
mv axis_twist_compensation.py axis_twist_compensation.py.orig
wget --no-check-certificate https://raw.githubusercontent.com/Klipper3d/klipper/v0.12.0/klippy/extras/axis_twist_compensation.py -O axis_twist_compensation.py
- Remove/comment out [prtouch_v2] and [bed_mesh] config sections in printer.cfg
- Add the following config sections to printer.cfg. A copy-paste of this config should work for a Microprobe v2 on a Creality K1 Series motherboard. Please note that only one probe device can be configured at a time (remove any other bltouch, probe, cartographer, ... configurations).
Probe and mesh configuration for all K1 series printers:
# Hardware declaration and initialisation of the initial state: probe pin up
[gcode_macro PROBE_DOWN]
gcode:
SET_PIN PIN=probe_enable VALUE=1
[gcode_macro PROBE_UP]
gcode:
SET_PIN PIN=probe_enable VALUE=0
[output_pin probe_enable]
pin: nozzle_mcu: PA8 # Set to the control pin on your board
value: 0
[probe]
# Use only one pin line and comment out the other one
#pin: ^nozzle_mcu: PA9 # MicroProbe V1 users should use this line to trigger on high
pin: ^!nozzle_mcu: PA9 # MicroProbe V2 users should use this line to trigger on low
deactivate_on_each_sample: False
x_offset: -36.0 # microprobe is 36mm to the left from the nozzle in the original bracket design by Mr. Ferro
y_offset: 0.0
z_offset: 0.0
speed: 1 # Speed (in mm/s) of the Z axis when probing. The default is 5mm/s.
lift_speed: 20 # Speed (in mm/s) of the Z axis when lifting the probe between samples. The default is to use the same value as the 'speed' parameter.
#sample_retract_dist: 2.0 # Not defined by default. The distance (in mm) to lift the toolhead between each sample (if sampling more than once). The default is 2mm.
samples: 3
samples_tolerance: 0.05
samples_tolerance_retries: 3
activate_gcode:
PROBE_DOWN
G4 P500
deactivate_gcode:
PROBE_UP
- Replace/update the mesh config sections in printer.cfg.
Mesh configuration for K1 printers with bed size 220x220:
[bed_mesh]
#speed: 150
speed: 20
mesh_min: 5,5
mesh_max: 184,215
probe_count: 10,10
fade_start: 1.0
fade_end: 10.0
horizontal_move_z: 5 # how high will the head rise between probing points
algorithm: bicubic
bicubic_tension: 0.5
Mesh configuration for K1 Max with bed size 300x300mm:
[bed_mesh]
#speed: 150
speed: 20
mesh_min: 5,5
mesh_max: 262,295
probe_count: 15,15
fade_start: 1.0
fade_end: 10.0
adaptive_margin: 5 # used by Klipper's Native Adaptive Meshing (comment out if using KAMP)
horizontal_move_z: 5 # how high will the head rise between probing points
algorithm: bicubic
bicubic_tension: 0.5
Other reference configurations.
- Modify [stepper_z] config section
[stepper_z]
#position_endstop: 0
endstop_pin: probe:z_virtual_endstop
- Comment out the nozzle-cleaning-fan-control.cfg include
#[include Helper-Script/nozzle-cleaning-fan-control.cfg]
- Modify gcode_macro.cfg
[gcode_macro PRINTER_PARAM]
variable_z_safe_g28: 10.0 # original value: 3.0
[gcode_macro START_PRINT]
#CX_NOZZLE_CLEAR
- To prevent the error "Communication timeout during homing z" run the following command to update the /usr/share/klipper/klippy/mcu.py and change the value of TRSYNC_TIMEOUT from 0.025 to 0.050.
sed -i 's/TRSYNC_TIMEOUT = 0.025/TRSYNC_TIMEOUT = 0.050/g' /usr/share/klipper/klippy/mcu.py
- Restart Klipper for the changes to take effect:
/etc/init.d/S55klipper_service restart
- Issue G28 command to home Z-axis and when the build plate starts moving, trigger the probe with a finger. If the build plate doesn't stop moving turn off power!
- Calibrate Z-offset:
- Issue G28 command and make sure the plate stops at the probe. Be ready to cut power in case it doesn't.
- Lower the build plate by a few cm, and issue the PROBE_CALIBRATE command. The probe will deploy, do a few sample detects and then retract the probe tip and raise the nozzle a bit.
- Place an A4 sheet or a PostIt under the nozzle
- Use Mainsail UI (on your phone/tablet for convenience) to control the nozzle height using negative values to lower the nozzle or positive values to raise it.
- Move the nozzle down until it just presses against the paper with some friction but does not damage the paper.
- Click ACCEPT then issue the command SAVE_CONFIG.
- Calibrate (measure) the X and Y offset using a PostIt (its glue strip helps prevent it from moving around the plate) and update x_offset and y_offset values
- Correct START_PRINT and END_PRINT macros in gcode_macro.cfg (to be reviewed!) :
[gcode_macro START_PRINT]
variable_prepare: 0
gcode:
WAIT_TEMP_END
CLEAR_PAUSE
{% set g28_extruder_temp = printer.custom_macro.g28_ext_temp %}
{% set bed_temp = printer.custom_macro.default_bed_temp %}
{% set extruder_temp = printer.custom_macro.default_extruder_temp %}
{% if 'BED_TEMP' in params|upper and (params.BED_TEMP|float) %}
{% set bed_temp = params.BED_TEMP %}
{% endif %}
{% if 'EXTRUDER_TEMP' in params|upper and (params.EXTRUDER_TEMP|float) %}
{% set extruder_temp = params.EXTRUDER_TEMP %}
{% set g28_extruder_temp = extruder_temp|float * 0.7 %}
{% endif %}
{% if printer['gcode_macro START_PRINT'].prepare|int == 0 %}
{action_respond_info("print not prepared\n")}
PRINT_PREPARE_CLEAR
SAVE_GCODE_STATE NAME=myMoveState
M190 S{bed_temp}
M109 S{g28_extruder_temp}
G28 # Home all axis
BED_MESH_CALIBRATE # Measure bed mesh
G90 # use absolute coordinates
M82 # absolute extrusion mode
G0 X12 Y12 Z40 F9000 # homing position
M109 S{extruder_temp} # full extruder temp
G92 E0 # Reset Extruder
PRINT_DRAW_ONE_LINE
RESTORE_GCODE_STATE NAME=myMoveState
{% else %}
PRINT_PREPARE_CLEAR
{% endif %}
[gcode_macro END_PRINT]
gcode:
Qmode_exit # Exit quiet mode if it was enabled
EXCLUDE_OBJECT_RESET
{% set act_z = printer.toolhead.position.z|float %}
{% set max_z = printer["gcode_macro PRINTER_PARAM"].max_z_position|float %}
PRINT_PREPARE_CLEAR
M220 S100
M204 S500
TURN_OFF_HEATERS
M107 P1
M107 P2
G91 # relative positioning
G1 E-1.0 F180 # short retract at 1mm/s
G1 E-4.0 F4000 # fast retract at 2mm/s
G1 F360 Z+2 # short and fast move up
G90 # absolute positioning
{% set y_park = printer.toolhead.axis_maximum.y/2 %}
{% set x_park = printer.toolhead.axis_maximum.x|float - 10.0 %}
{action_respond_info("y_park = %s \n" % (y_park))}
{action_respond_info("x_park = %s \n" % (x_park ))}
G1 X{x_park} Y{y_park} F500 # moving towards the side blower fan and smoothly approach it :)
{% if act_z < (max_z / 2) %}
G91 # relative positioning
{action_respond_info("act_z = %s \n" % (act_z))}
{action_respond_info("max_z = %s \n" % (max_z / 2))}
G1 Z{max_z / 2}
G90 # absolute positioning
{% endif %}
SET_VELOCITY_LIMIT ACCEL=5000 ACCEL_TO_DECEL=2500
; BEEP
END_PRINT_POINT
WAIT_TEMP_START
M84 # disable motors
[gcode_macro PRINT_DRAW_ONE_LINE]
description: Print a 0.3mm thick 180mm vertical line on the left edge of the build surface.
gcode:
{% set start_x = params.X|default(-1.0)|float %}
{% set start_y = params.Y|default(20.0)|float %}
{% set len = params.LEN|default(180.0)|float %}
{% set end_x = end_x %}
{% set end_y = start_y + len %}
G90 # use Absolute Positioning
G1 Z2.0 F3000 # Move Z-Axis up a little to prevent scratching of the build surface
G1 X{ start_x + 0.1 } Y{ start_y } Z0.3 F5000.0 # Move to start position
G1 X{ start_x + 0.1 } Y{ end_y } Z0.3 F1500.0 E15 # Draw the first line
G1 X{ start_x + 0.4 } Y{ end_y } Z0.3 F5000.0 # Move to the side a little
G1 X{ start_x + 0.4 } Y{ start_y } Z0.3 F1500.0 E30 # Draw the second line
G92 E0 # Reset Extruder
G1 Z2.0 F3000 # Move Z-Axis up a little to prevent scratching of the build surface
G1 X5 Y20 Z0.3 F5000.0 # Move over to prevent blob squish
- Probing speed
On a K1/Max a faster lift_speed may counter the backlash on the Z-axis belts. Going too fast is likely making the bed bounce back in the opposite direction. Find the best speeds for probing by varying the probe_speed and lift_speed parameters. BIQU Microprobe is an optical probe and as a rule slow probe_speed will give better results. Start with probe_speed=1 and vary the lift_speed values to find the optimal lift_speed first.
PROBE_ACCURACY probe_speed=1 lift_speed=15
In this case, lift_speed of 15mm/s seems optimal.
After determining the optimal lift_speed, different probe_speed values can be tested until the sweet spot is found. Here 1.0mm/s works most reliably, however, the slow speed will make the meshing process take longer.
- Probing and heat saturation
The standard K1/Max bed is made of relatively thin aluminium and may have internal stress from the manufacturing process. This means that during heating the bed will change shape as the material adjusts to the new temperature. The K1 Max bed has been shown to take about 10 minutes to settle after it has reached the print temperature. After 8 minutes the centre of the bed can still fluctuate by as much as 0.5mm. Probing a bed that has not settled will yield a poor bed mesh that does not reflect the actual state of the bed during printing. This will cause the first layer to not have a well controlled flow and will yield unstable first layer results. It is recommended to let the bed settle for about 15 minutes.
- msg: "Probe triggered prior to movement"
lower the bed by 1mm before probing. Note: probably can be fixed by configuring safe_homing or some other probe parameter - not sure which one.
- msg: "Move out of range: 237.000 5.000 5.000 [0.000]"
The mesh_max parameter in the [bed_mesh] config must be adjusted to your bed size and probe x and y-offset. See: bed_mesh
- msg: "Communication timeout during homing z"
Increase the timeout in /usr/share/klipper/klippy/mcu.py as per installation instructions and restart the printer (not just klippy).
- msg:"Internal error during ready callback: 'ProbeEndstopWrapper' object has no attribute 'set_fan_speed"
Comment out the nozzle-cleaning-fan-control.cfg include from printer.cfg according to installation instructions.
- "msg":"Internal error on command:CX_ROUGH_G28"
When the prtouch_v2 section is removed from the printer.cfg this also makes some Creality provided macros like the CX_ROUGH_G28 not available. Please replace your START_PRINT and END_PRINT macros in gcode_macro.cfg according to installation instructions.
- Large prints that include the edge of the bed have holes / waves in the first layer
Make sure the bed_mesh is configured to use the bicubic algorithm and try increasing the bicubic_tension up to 0.5. Higher values will make the mesh more flat, lower values will better follow a very irregular (not flat) print surface.
- Can I have a bltouch or another probe configured at the same time as well
Unfortunately, bltouch is a type of probe, and Klipper can only make use of one probe at a time. The same holds true for any other probe (prtouch, crtouch, cartographer 3D, ...) Please leave only one probe configuration in your printer.cfg and comment out any other probe configurations.
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
This guide was provided by Ales Omahen (@Havoc on discord). With many thanks to the guys Dramler, Mr.Ferro (aka StarCom) and ZeyHex as pioneers of this topic! This guide and media are based on the original instructions provided by Mr.Ferro.
This is left intentionally blank