Skip to main content

Installing BDsensor

Connect the sensor cable to the mainboard or CAN bus toolhead board.

  • Please note that the SB2040 cannot use the BDsensor.
  • Please note that the SHT36 requires connecting the BDsensor's CLK/SCL (Input) to the high-voltage input port and installing the jumper.
  • The CLK and SDA wires of the BDsensor can be connected to any GPIO pins on the circuit board. You can also connect the BDsensor cable directly to the BLtouch port, for example:
BLtouch | BDsensor
5V --> 5V
GND --> GND
S --> CLK/SCL (Input)
GND --> GND
Zmin --> SDA (Input/Output)
  • Since some pins in the motherboard connector may not be directly connected to the MCU's GPIOs (e.g., they might have filter capacitors, or be isolated via MOSFETs, diodes, or optocouplers, but are acceptable if isolated via resistors or resistor pull-ups/pull-downs), they cannot be used with the BDsensor. The firmware will report a connection error. For example:

  • Fan and heater connectors are isolated via MOSFETs.

  • Connectors for thermistors and endstops/probes in some boards are often connected to GND via filter capacitors.

  1. Install the BD sensor close to the hotend as shown in the image below. STL of mount, STL_mount_VzBot_Goliath short

    Loading...

Install the Patch into the Marlin Firmware

The BD sensor has been integrated into Marlin 2.1.x (since 2022.8.27).

You can download the release version. However, it is currently recommended to download the latest bugfix version: https://github.com/MarlinFirmware/Marlin

What you need to do is modify the configuration files and pin files.

Edit Configuration.h

  1. Enable BD_SENSOR

    Uncomment

    #define BD_SENSOR`
    `#define Z_SAFE_HOMING
    #define BD_SENSOR_PROBE_NO_STOP //adding this new line for fast bed leveling without nozzle stop,

    Only BD_SENSOR_PROBE_NO_STOP

    Latest Marlin bugfix: https://github.com/MarlinFirmware/Marlin

    Description: https://github.com/MarlinFirmware/Marlin/pull/25847

  2. Homing with the Probe

    Ensure that Z_MIN_PROBE_USES_Z_MIN_ENDSTOP_PIN is disabled, and USE_PROBE_FOR_Z_HOMING should be enabled as shown below:

    //#define Z_MIN_PROBE_USES_Z_MIN_ENDSTOP_PIN
    // Force the use of the probe for Z-axis homing
    #define USE_PROBE_FOR_Z_HOMING
  3. Slow down the second homing Z speed

    #define Z_PROBE_FEEDRATE_SLOW (Z_PROBE_FEEDRATE_FAST / 16)

    Here, we must slow down the bump homing speed and Z homing speed, because the endstop reading from the BDsensor process is not real-time like a normal endstop.

    Edit Configuration_adv.h

    #define BABYSTEPPING Enable this for real-time leveling functionality.

    #define HOMING_BUMP_DIVISOR { 2, 2, 8 } // Re-Bump Speed Divisor (Divides the Homing Feedrate)

Edit pins_boardname.h

Configure the pins for the BDsensor's SDA and SCL in the pin file pins_boardname.h (e.g., pins_PANDA_PI_V29.h) by adding the following 3 lines:

#define I2C_BD_SDA_PIN PC6 // Please change to the actual number which the SDA wire is connected to your mainboard
#define I2C_BD_SCL_PIN PB2 // Please change to the actual number which the SLK wire is connected to your mainboard
#define I2C_BD_DELAY 20 // default value is 20, should be in the range [20,50].

If you want to perform automatic bed level probing (G29) before printing, like a regular BLtouch, uncomment:

#define AUTO_BED_LEVELING_BILINEAR

And edit the values as shown below:

#define Z_CLEARANCE_DEPLOY_PROBE 0 // Z Clearance for Deploy/Stow
#define Z_CLEARANCE_BETWEEN_PROBES 1 // Z Clearance between probe points
#define Z_CLEARANCE_MULTI_PROBE 1 // Z Clearance between multiple probes

Display BD Sensor Value on LCD Screen

  • For printers with status display (supporting gcode M117), such as LCD12864 or some UART screens like Ender 3 V2...

Calibration

  1. Clean the nozzle, then move the Z axis via the console until the nozzle just touches the bed (the BDsensor will use this position as the zero point, so z_offset is not needed; set the value to 0).

  2. Send the gcode command M102 S-6. The printer will slowly move the Z axis up by 0.1mm each time until it reaches 4mm. Do not run M102 S-6 before installing the sensor, and do not turn off the printer power during calibration, otherwise the old calibration data will be deleted. If this happens, simply calibrate again.

  3. You can send M102 S-5 to check if the BD sensor has been calibrated successfully. This will return the raw calibration data stored in the BD sensor.

There is also a calibration tool available for this: https://github.com/markniu/Bed_Distance_sensor/raw/new/marlin/BD_Config_Tool_Marlin.zip

Note: A data value of 1015 or > 1010 indicates it is out of sensor range. If the first 5 points (0~0.5mm) or more have values in the range of 0 to 1000, and the increasing value delta is >= 10, it indicates successful calibration. Like the chart shown above.

If the first raw calibration data returned by M102 S-5 is greater than 400, it means the sensor is mounted too high and needs to be reinstalled closer to the bed. Also ensure the second data value is more than 10 units greater than the first.

Testing and Printing

Menu Bed

Auto Bed Level

There are two ways to automatically level the bed:

1. Use M102 for real-time leveling in the first few layers

We can easily enable or disable this automatic level by sending gcode commands or adding gcode to the gcode file.

To enable bed leveling in Cura, add the M102 S2 G-code right below the G28 (Home all axes) G-code in the "Start G-code" section of the printer machine settings. For example, located below G28, this means it will perform bed leveling only when the Z height is below 0.2mm.

Sending M102 S0 or M102 S-1 will disable the BD sensor bed leveling. By the way, it is disabled by default. G28 M18

M102 S-1 //Read sensor information, and we can use this for connection checking.
M102 S-2 //Read current distance value
M102 S-5 //Read raw Calibrate data
M102 S-6 //Start Calibrate,before that make sure the nozzle is just touched the bed,and then the printer restarted. don't home z axis before this.
M102 S4 //Set the adjustable Z height value,e.g. M102 S4 means it will do adjusting while the Z height <=0.4mm , disable it by M102 S0.

2. G29 Auto Bed Leveling

Another method for auto bed leveling is similar to G29 for BLtouch, simply add a line G29 below G28.

Installation Video

Chris' Basement Installation Video

Check Z Endstop M119

Do not home Z before checking this step, otherwise the nozzle might crash into the print bed.

This is the returned message after sending the M119 command (report endstop states).

Send: M119
Recv: x:open y:open z:open

If z min is not open, check your configuration. #define Z_MAX_ENDSTOP_HIT_STATE HIGH

  • Ensure the Z motor is disabled/unlocked.
  • Move the Z axis down by hand until the nozzle touches the bed.
  • Send M102 S-2, the return value should be 0.00mm, then send M119 again. You can see the z endstop is now triggered.
Send: M119
Recv: x:open y:open z:TRIGGERED

Check Connection

Check the connection using M102 S-1. Here is an example of the return message. Please check the connection and wire order ensure it returns a blank or other string.

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

If all the steps above are correct, you can now home the Z axis.

Loading...