I have a 3DTouch with my Ender 3 3D printer with the Creality 4.2.2 Board. It is running a custom build of Marlin As I have been watching my prints, I noticed that the Z-axis lead screw does not turn at all as the print head traverses the bed.

With the 3DTouch and a mesh of the print bed, the Z-axis lead screw should very slightly turn to move the X-axis gantry up or down to compensate for deviations and irregularities in the print bed as the print head moves around.

I will add that these print head movements travel across a decent portion of the bed. My bed definitely is irregular, and so I would definitely expect the Z-axis screw to adjust the x-axis gantry appropriately.

Here is my start G-code in Cura:

; Ender 3 Custom Start G-code
M140 S{material_bed_temperature_layer_0} ; Set Heat Bed temperature
M190 S{material_bed_temperature_layer_0} ; Wait for Heat Bed temperature
M104 S160; start warming extruder to 160
G28 ; Home all axes
G29 ; Auto bed-level (BL-Touch)
G92 E0 ; Reset Extruder
M104 S{material_print_temperature_layer_0} ; Set Extruder temperature
G1 X0.1 Y20 Z0.3 F5000.0 ; Move to start position
M109 S{material_print_temperature_layer_0} ; Wait for Extruder temperature
; G1 Z2.0 F3000 ; Move Z Axis up little to prevent scratching of Heat Bed
G1 X0.1 Y200.0 Z0.3 F1500.0 E15 ; Draw the first line
G1 X0.4 Y200.0 Z0.3 F5000.0 ; Move to side a little
G1 X0.4 Y20 Z0.3 F1500.0 E30 ; Draw the second line
G92 E0 ; Reset Extruder
G1 Z2.0 F3000 ; Move Z Axis up little to prevent scratching of Heat Bed
; End of custom start GCode

Here are my Configuration.h and Configuration_adv.h files.

I wasn't able to paste my entire configuration file here, so I have provided it in the link above.

What have I done wrong?

To be more concise, here is a list of everything I changed in the default configuration file.

  1. I ensured #define PDITEMP is not commented so that I can do PID tuning of the nozzle.
  2. Similar to #1, I ensured that #define PIDTEMPBED is not commented so that I can do PID tuning of the bed.
  3. I commented #define Z_MIN_PROBE_USES_Z_MIN_ENDSTOP_PIN since I will be using the 5-pin BLTouch port that is on my 4.2.2. board.
  4. I uncommented #define USE_PROBE_FOR_Z_HOMING since I removed my z-axis endstop and want to use my 3DTouch as the Z endstop.
  5. Uncommented #define BLTOUCH since the 3DTouch is a BLTouch clone.
  6. Changed my x and y offsets in the setting #define NOZZLE_TO_PROBE_OFFSET { -42, -8, 0 }. I left the Z-offset 0, since I will be using the tuning tool to adjust that and observe the squish. For the X and Y, I measured the distance between my probe and the nozzle using a digital caliper.
  7. I adjusted the probe margin from 10 to 15, since I have clips that previously would interfere with the 3DTouch. 15 should give more distance. #define PROBING_MARGIN 15
  8. I enabled and set MULTIPLE_PROBING to 3. I'm paranoid about the current accuracy and am willing to see if that improves anything at the expense of a few additional minutes. #define MULTIPLE_PROBING 3. I think 2 should be fine for general use.
  9. Uncommented #define Z_MIN_PROBE_REPEATABILITY_TEST. I want to test my 3DTouch and uncommenting allows the use of M48 to test it.
  10. Uncommented #define PROBING_FANS_OFF, #define PROBING_ESTEPPERS_OFF, #define PROBING_STEPPERS_OFF, #define DELAY_BEFORE_PROBING 200. The documentation this may improve probing results. I'm all in.
  11. Uncommented #define NO_MOTION_BEFORE_HOMING and #define HOME_AFTER_DEACTIVATE.
  12. Uncommented #define AUTO_BED_LEVELING_BILINEAR
  13. Uncommented #define RESTORE_LEVELING_AFTER_G28. This is to ensure the mesh is applied even after G28, which disables the mesh otherwise.
  14. Ensures that this setting was 10. #define DEFAULT_LEVELING_FADE_HEIGHT 10.0
  15. I set the following: #define GRID_MAX_POINTS_X 7. Ensures a 7x7 mesh grid is created. This could be more or less. 49 points is an improvement over Creality's 9, although a bit much. Worthwhile in my case.
  16. Uncommented #define EXTRAPOLATE_BEYOND_GRID. I was actually wondering if this was causing some of the inconsistent prints near the edge.
  17. Uncommented #define LCD_BED_LEVELING. This is to unlock more options for ABL in the menu.
  18. Uncommented #define LEVEL_BED_CORNERS. This should make moving between corners for manual leveling easier.
  19. Uncommented #define LEVEL_CORNERS_USE_PROBE. This is to achieve exactly what I was doing with G30 in Pronterface. I changed to tolerance with #define LEVEL_CORNERS_PROBE_TOLERANCE 0.03
  20. Uncommented #define Z_SAFE_HOMING, which is important for the BLTouch.
  21. Changed my PLA profile according to what I have determined to be best with #define PREHEAT_1_TEMP_HOTEND 200 and #define PREHEAT_1_TEMP_BED 60
  • $\begingroup$ It should not be necessary but try a M420 S1 after the G29 to see if it has effect (G29 should enable the mesh...). I have had to add that in an older version of Marlin once. Everything else you describe seems correct. $\endgroup$
    – 0scar
    Jan 4, 2022 at 12:00
  • $\begingroup$ Thanks, I will try that. I'm quite certain that it is with the Firmware, since Creality's pre-built firmware for the BLTouch does work with G29 and the above start g-code. The problem only occurs with my firmware $\endgroup$
    – geekgeek4
    Jan 5, 2022 at 6:36

1 Answer 1


My firmware actually was working just fine, in terms of probing with G29 before a print and then the Z-axis would adjust during the print.

The way I tested this was by putting an object underneath my probe at only a few of the probing locations at the start of the print G29.

The purpose of this was to simulate very significant deviations in the bed.

Then, when the print was printing its first layer, I would observe the Z-axis and the nozzle, and the printer did definitely make a very obvious motion near the probing points where I put the object underneath the probe.

Looks like when I am printing, it just doesn't seem to make any adjustments at all. I would expect it to make adjustments during the print since my bed is not perfectly level, but I guess it's how things are.

The purpose of this post was to evaluate whether or not my firmware was correctly interfacing with the BLTouch and applying the mesh to my print, and it seems like it is. The question of why it isn't making more noticeable adjustments for my print bed during normal printing is another question.

  • $\begingroup$ One full turn of the lead screw is a whole 8mm of movement, so to correct for fractions of the layer height (something on the order of 0.05 mm) in the bed, you're looking at turning the lead screw about 2˚. That's going to be hard to see. Even full layer Z motion is hard to see, IMO. $\endgroup$ Jan 8, 2022 at 17:14
  • $\begingroup$ I fully agree. Thanks for mentioning that. It's just that my first layer is still uneven. I have some places where there is more squish and less squish. It prints pretty much the same way as without a 3DTouch, which is why I was questioning whether or not it even works. I have been disappointed with this method of ABL. It hasn't done anything for me. And my bed has been manually adjusted to be quite level. But imperfections are not corrected in my case $\endgroup$
    – geekgeek4
    Jan 8, 2022 at 18:55
  • $\begingroup$ I should also mention that I tested my 3DTouch with M48, and the accuracy is within BLTouch specifications. $\endgroup$
    – geekgeek4
    Jan 8, 2022 at 18:57

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .