Skip to main content

Installing BDsensor-m

Connect the sensor cable to the EXP1 port on the mainboard

  • If the sensor cable length is insufficient, you can use the extension cable included in the package.
  • The CLK and SDA wires of the BDsensor-m can be connected to any GPIO pins on the board. You can also connect the BD sensor cable directly to the BLtouch port, for example:
BLtouch    |    BDsensor-m
5V --> 5V
GND --> GND
S --> CLK/SCL (Input)
GND --> GND
Zmin --> SDA (Input/Output)
  • Some pins in the mainboard connectors may not be directly connected to the MCU's GPIOs (e.g., they might have filtering capacitors or be isolated via MOSFETs, diodes, or optocouplers, though isolation via resistors or pull-up/down resistors is acceptable). These pins cannot be used with the BDsensor-m, and the firmware will report a connection error. For example:
  • Fan and heater connectors are isolated via MOSFETs.
  • Connectors for temperature thermistors and endstops/probes on some boards are often connected to GND through filtering capacitors.
  1. Install the BD sensor near the hotend as shown in the image below. STL of mount, STL_mount_VzBot_Goliath short

    Loading...

Apply the patch to the Klipper firmware

  • Do not perform any steps not mentioned in this tutorial.

  • Discard any previously modified Klipper files and update Klipper.

    cd
    cd ~/klipper
    git checkout .
    git pull
  • Execute the following git command in the user directory to clone the latest BD sensor code.

    cd && git clone https://github.com/markniu/Bed_Distance_sensor.git
  • Then execute the following command to install.

    cd  ~/Bed_Distance_sensor/klipper/
    ./install_BDsensor.sh

Compile the firmware here only if prompted about firmware version mismatch between host and MCU.

  • Compile the firmware by following your specific firmware compilation tutorial, then flash it.

  • Compile the firmware:

    cd ~/klipper/  # Navigate to the klipper directory
    make menuconfig # Command to enter the Klipper compilation interface
    make clean # Clean command
    make # Compile command
  • Flash the firmware to the mainboard connected to the BD sensor.

If your printer runs Moonraker, add the following section to moonraker.conf. This will allow you to update the BDsensor with one click via the web interface or KlipperScreen.

[update_manager BDsensor]
type: git_repo
primary_branch: new
channel: dev
path: ~/Bed_Distance_sensor
origin: https://github.com/markniu/Bed_Distance_sensor.git
install_script: ./klipper/install_BDsensor.sh
is_system_service: False
managed_services: klipper
info_tags:
desc=Bed Distance Sensor

Edit printer.cfg

  • Copy this section into your printer.cfg and edit the [BDsensor] sda_pin and scl_pin. Also, remember to disable other probe sections like BLtouch. You can connect the BD sensor to the mainboard or a toolhead CAN module.

  • In [BDsensor], change speed to 0.8. This only applies to Z tilt and the PROBE_ACCURACY command. A smaller value increases probing accuracy because the MCU reads the BD sensor in the main loop during homing, not in real-time like a normal endstop.

  • To use the BD sensor as a limit switch during Z-axis homing, change the endstop_pin in [stepper_z] to endstop_pin: probe:z_virtual_endstop.

  • Ensure printer.cfg contains [safe_z_home].

  • Change the horizontal_move_z value in [bed_mesh] and [z_tilt] or [quad_gantry_level] to 1 (recommended 0.7-1.0mm). Klipper's default is 5mm, which can easily exceed the sensor's range.

  • Nozzle height should only be adjusted using z_adjust:. Positive values move the nozzle closer to the bed, negative values move it away. Other nozzle height adjustments may cause bugs.

  • To enable fast bed mesh scanning, remove the # before no_stop_probe:true.

  • Below is a configuration example.

    [BDsensor]
    scl_pin:PC6 # Servo signal port
    sda_pin:PC3 # Limit signal port
    delay: 20 # 20us per pulse, this value should be >=20 but must be below 50
    z_offset:0 # this `z_offset` must be set to 0.
    z_adjust:0.0 # z axis adjustment, replace the z_offset function. within -0.3 to 0.3mm
    x_offset: -34
    y_offset: 0
    #no_stop_probe:true # enable this for fast probe, the toolhead will not stop at the probe point.
    position_endstop: 0.8 # the Z axis will stop at this position (mm) while homing z, recommend value is 0.4~1.0
    #speed:0.8 # this speed only works for the z tilt and PROBE_ACCURACY command.

    [stepper_z]
    endstop_pin: probe:z_virtual_endstop
    #position_endstop: 0.5
    homing_speed: 5
    second_homing_speed: 0.8

    [bed_mesh]
    speed: 200
    horizontal_move_z:1
    algorithm: bicubic

    [quad_gantry_level]
    horizontal_move_z:1

After installation, check by sending the following G-code commands

M102   S-1     # Read sensor information
M102 S-2 # Read a distance value

Check the connection

  • Send M102 S-1 via the console. Here is an example of the returned message. If it returns blank or other strings, check the connection and wire order.

    Send: M102 S-1
    Recv: V1.0 pandapi3d.com

Calibration

  • Clean the nozzle, then move the Z-axis via the console until the nozzle just touches the bed (the BDsensor-m will use this position as the zero point, so z_offset is not needed. This is why it's set to 0 in the [BDsensor-m] section).
  • Send the G-code command M102 S-6 via the console. The printer will slowly raise the Z-axis by 0.1mm each time until it reaches 4mm. Do not run M102 S-6 before installing the sensor, and do not power off the printer during calibration, or the old calibration data will be lost. If this happens, simply recalibrate.
  • Afterwards, you can check if the BD sensor has been successfully calibrated by using M102 S-5, which returns the raw calibration data stored in the BD sensor.

Notes:

  • The Z-axis homing speed is best set to 5.

  • If the first raw calibration data returned by M102 S-5 is greater than 400, it means the sensor is installed too high and needs to be reinstalled closer to the bed. The recommended value for the first data point is 100. Also, ensure the second data point's value is at least 10 greater than the first.

    • FAQ: What does it mean if the calibration data starts with 1, the second value is 9, and the third is 24?
    • This means the resolution between 0-0.1mm is only 9, and between 0.1-0.2mm it's 15. It is recommended to recalibrate so that the first resolution (0-0.1mm) is greater than 10.
  • Do not forget to adjust the Z-axis height after running G28 or for commands like Z_tilt and quad_gantry_level.

  • Section names must be correctly capitalized; otherwise, Klipper will report Unknown pin chip name 'probe'.

Loading...