Install BDsensor-m-m
Connect the sensor cable to the EXP1 interface of the mainboard
*If the sensor cable is not long enough, use the extension cable included in the package
- The CKL and SDA lines of BDsensor-m-m can be connected to any GPIO pins on the board. You can also directly connect the BD sensor cable to the Bltouch port, for example:
BLtouch | BDsensor-m
5V --> 5V
GND --> GND
S --> CLK/SCL (Input)
GND --> GND
Zmin --> SDA (Input/Output)
-
Due to some pins in the mainboard connectors might not be directly connected to the MCU's GPIOs (e.g., they might have filtering capacitors or be isolated through MOSFETs, diodes, or optocouplers, but if they are isolated through resistors or resistor pull-ups/pull-downs, they can be used), they cannot be used with BDsensor-m, and the firmware will report a connection error. For example:
-
Fan and heater connectors are isolated through MOSFETs,
-
Some boards have connectors for thermistors and limit switches/probes typically connected to GND through filtering capacitors,
-
Install the BD sensor near the hotend as shown in the figure below. STL of mount, STL_mount_VzBot_Goliath short
Apply the patch to the Marlin firmware
The BD sensor has been integrated into Marlin2.1.x (since 2022.8.27),
You can download the release version. However, it's now recommended to download the latest bug fix version: https://github.com/MarlinFirmware/Marlin
What you need is to change the configuration files and pin files.
Edit configuration.h
-
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 bug fix: https://github.com/MarlinFirmware/Marlin
Description: https://github.com/MarlinFirmware/Marlin/pull/25847
-
Use probe for homing
Ensure
Z_MIN_PROBE_USES_Z_MIN_ENDSTOP_PIN
is disabled, andUSE_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 -
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 read from the BDsensor-m process is not real-time like a normal endstop.
Edit Configuration_adv.h
Enable
#define BABYSTEPPING
for real-time leveling feature#define HOMING_BUMP_DIVISOR { 2, 2, 8 } // Re-Bump Speed Divisor (Divides the Homing Feedrate)
Edit pins_boardname.h
Configure the SDA and SCL pins for BDsensor-m in the pin file pins_boardname.h by adding the following 3 lines (for example):pins_PANDA_PI_V29.h
#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 do an automatic bed leveling probe (G29) before printing like a regular BLtouch, uncomment:
#define AUTO_BED_LEVELING_BILINEAR
and edit the following values:
#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 values on the LCD screen
- For printers with status display (supporting gcode M117), like LCD12864 or some UART screens, like ender3V2 ...
Calibration
-
Clean the nozzle, then move the Z-axis via the console until the nozzle just touches the bed (BDsensor-m will use this position as the 0 point, so no z_offset is needed, we set the value to 0).
-
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, just recalibrate again. -
You can send
M102 S-5
to check if the BD sensor has been successfully calibrated, which will return the raw calibration data stored in the BD sensor.
There's also a calibration tool that can do 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 out of sensor range. If the first 5 points (0~0.5mm) or more are within the range of 0 to 1000, and the delta value increases by >=10, then the calibration is successful. Just 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 installed too high and needs to be reinstalled closer to the bed. Also, ensure the second data is more than 10 greater than the first value.
Test and Print
Menu bed leveling
Auto bed leveling
There are two ways to automatically level the bed:
1. Use M102 for real-time leveling of the first few layers
We can easily enable or disable this auto-leveling by sending gcode commands or adding gcode to the gcode file.
To enable bed leveling in Cura, add the M28 gcode just below the G102 (home all axes) gcode in the "Start G-code" section of the printer machine settings. For example, below G28, this means it will only do bed leveling below 0.2mm of Z-axis height. M102 S2
Send or add this to disable bed leveling with the BD sensor, by the way, it's disabled by default. M102 S0``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 the 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 way to automatically level the bed is like the G29 of BLtouch, just add a line G28 below G29.
Chris's Basement Installation Video
Check Z Endstop M119
Before checking this step, do not home Z, otherwise the nozzle might touch the printer bed.
This is the return message after sending the M119 command (report endstop status).
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 Z motor is off/unlocked
- Move the Z-axis by hand down 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 with M102 S-1
. Here is an example of the return message, please check if the connection and wire order return blank or other strings.
Send: M102 S-1
Recv: V1.0 pandapi3d.com