Ender 6 Triple Z tile moves in the wrong direction but Z Home is correct on all 3 steppers

Basic Information:

Printer Model: Ender 6
MCU / Printerboard: Manta M8P
klippy.log

Fill out above information and in all cases attach your klippy.log file. Pasting your printer.cfg is not needed
Be sure to check our Knowledge Base and in particular this and this post

Describe your issue:

EDITED
I’ve ordered 2 new leadscrews identical to the original
I’ll update this post if this fixes the problem

I have an Ender 6 that I’ve converted to Triple Z with a Manta M8P board and 3 new identical Z motors
Everything works perfectly, including the Z Homing

but when I try and use Z_Tilt stepper Z2 goes the wrong direction

I am using the original Creality leadscrew which is a T8 4 start and my Z1 and Z2 screws are T8 2 start screws
Pitch 2mm Lead 4mm

I have already tried the “fixes” I found online including swapping My Z motors around in the config and it doesn’t make a difference

Also I’m not certain I understand the Z_tilt section in the Klipper help
This is my printer layout in the picture


Can anyone tell me if I have the Z_tilt in the config correct and is this the cause of my issues:?
I don’t think so because Z homing all steppers move in the correct direction

klippy.log (198.0 KB)

Shouldn’t the rotation distance for Z be 4 instead of 8 if the lead is 4 too?

Normally 0,0 is in the front left corner but this is contrary to your definition and could cause mirrored prints if I’m not wrong.
If homing otherwise works fine does it work fine when you move the bed up and down?
It is very important to define exact points of the joints otherwise the calculation is wrong.
Maybe you can correct the above points and test again. Safe the old values though.

@lew247, you might want to look at Voron Trident setups for reference, your setup sounds very close.

Only look at the items involved with Z leveling and tilt; some items are commented out and require the removal of the # for a matching size bed.

Please don’t copy any pins since they are for the BTT Octopus board.

0,0 is back right it’s an Ender 6 CoreXY

I tried 4 for the rotation distance but the motors don’t move at the correct speed
Sorry they were 2mm not 4mm

Thanks
I did go through all that and My steppers are correct
I changed the Z_tilt values slightly but ALL steppers are moving down when doing Z_tilt
Z moves at normal speed
Z1 moves slightly faster
Z2 moves quite a bit faster as can be seen here


15:33
No trigger on probe after full movement
15:33
probe at 215.000,216.000 is z=3.541456
15:33
probe at 123.000,1.000 is z=-2.193544
15:33
Retries: 1/20 Probed points range: 7.107500 tolerance: 0.007500
15:33
Making the following Z adjustments:
stepper_z = 1.065450
stepper_z1 = -2.876456
stepper_z2 = 6.723081
15:33
probe at 27.000,222.000 is z=-4.748109
15:33
probe at 215.000,216.000 is z=2.359391
15:32
probe at 123.000,1.000 is z=-1.700609
15:32
Retries: 0/20 Probed points range: 4.427500 tolerance: 0.007500
15:32
Making the following Z adjustments:
stepper_z = 0.092071
stepper_z1 = -0.314391
stepper_z2 = 5.829162
15:32
probe at 27.000,222.000 is z=-1.770000
15:32
probe at 215.000,216.000 is z=2.657500
15:32
probe at 123.000,1.000 is z=-1.650000
15:32
Z_TILT_ADJUST
15:31
G28
15:31
Klipper state: Disconnect
15:31
FIRMWARE_RESTART
15:27
No trigger on probe after full movement
15:27
probe at 150.000,245.000 is z=1.350000
15:26
probe at 30.000,5.000 is z=-3.845000
15:26
Z_TILT_ADJUST
15:26
G28
15:26
Klipper state: Disconnect
15:26
FIRMWARE_RESTART

I added homing_positive_dir: false in the z stepper section as it homes towards the endstop
The Z home still works correct but the Z_Tilt the steppers go the wrong direction
When Klipper measures it calculates the wrong distance
Why?

15:42
Making the following Z adjustments:
stepper_z = 1.308398
stepper_z1 = -1.435599
stepper_z2 = 3.293713
15:42
probe at 27.000,222.000 is z=-2.260000
15:42
probe at 215.000,216.000 is z=1.287500
15:42
probe at 123.000,1.000 is z=-0.065000

Klipper seems to think that the distance between 0.065 and 2.260 is 3.293713 and between 0.065 and 1.287500 is 1.435599
I’m no maths genius but I can see that is wrong

I think at least your z_tilt z_positions are wrong.
Look here: Configuration reference - Klipper documentation

Your rear right bed corner is 0,0 so the Z joint position has to be negative in Y coordinate.
And referring to your first screenshot the Z2 X position needs to be negative as well.
Measure all z_positions referencing 0,0 and enter them in your config.
Then define the points where the BLTouch goes to during the z_tilt process.

Other question as you say the spindles are moving with different speeds: when homing do all Z mounts move at the same speed so that the bad in total moves parallel to its previous origin or is it tilting during homing?

Edit: maybe you can make a photo showing the Z mounts attached to the bed and respective spindles. Depending on those mounts maybe your z_positions are right.

Why don’t you use the same thread pitch on all axes for your z-axis?

Kiss? (not the band :wink:)

Good luck, hcet14

Because I didn’t know the difference when I ordered the screws for the extra motors.

That can’t be the problem than all though because when I home, raise or lower the Z axis all 3 leadscrews move the same amount in the correct direction.

The only problem is when I I’m using z_tilt

I’ve ordered 2 new leadscrews identical to the original
I’ll update this post if this fixes the problem

If the rotation distance is properly set this would not affect the movement.
Maybe with higher rotation distance the spindle is not that accurate compared to the others but it moves the same distance.
I can only imagine that some settings are still wrong and the z_tilt algorithm tries to compensate this with those strange values.
Can you please post a photo of the bed mount with its z joints?

1 Like

So for my understanding the z_positions need to be as follows respectively for each of the three joints:


All in reference to the rear right corner of the bed with 0,0.

And the points under the z_tilt section specify the bed coordinates for each of the Z mounts the BLTouch is able to move to for measuring.
Those points should be as close as possible to the respective joints.

That’s what I I did in the Z_tilt section

Can you post your current z_tilt section using preformatted text tags?
You klippy.log does not reflect that.

Edit:
For illustration in red the bed corner points/limits and in blue estimated z_positions:

If I’m not wrong the z_positions are the coordinates where the XY plane (heat bed) turns around the z axes and not where the actual mount at the bed is located, except this is the same point as the actual joint.

# Motor1
[stepper_x]
step_pin: PE2
dir_pin: !PB4
enable_pin: !PC11
microsteps: 16
rotation_distance: 40
endstop_pin: ^can0:PB7
homing_retract_dist: 0
position_endstop: 0
position_max: 270
homing_speed: 60

# Motor1
[tmc2209 stepper_x]
uart_pin: PC10
run_current: 1.200
interpolate: true
run_current:  0.8
sense_resistor: 0.110
stealthchop_threshold: 0

# Motor2
[stepper_y]
step_pin: PF12
dir_pin: !PF11
enable_pin: !PB3
microsteps: 16
rotation_distance: 40
endstop_pin: ^PF3
homing_retract_dist: 0
position_endstop: 0
position_max: 266
homing_speed: 60

# Motor2
[tmc2209 stepper_y]
uart_pin: PF13
run_current: 1.200
interpolate: true
run_current:  0.8
sense_resistor: 0.110
stealthchop_threshold: 0

# Motor3
[stepper_z]
step_pin: PD7
dir_pin: !PD6
enable_pin: !PF10
rotation_distance: 8
microsteps: 16
endstop_pin: probe:z_virtual_endstop
position_max: 380
position_min: -5.0
homing_speed: 8
second_homing_speed: 0.5
homing_positive_dir: false

# Motor3
[tmc2209 stepper_z]
uart_pin: PF9
run_current: 1.200
interpolate: true
run_current:  0.8
stealthchop_threshold: 0

#Motor4
[stepper_z1]
step_pin: PD3
dir_pin: !PD2
enable_pin: !PD5
rotation_distance: 2
microsteps: 16
endstop_pin: probe:z_virtual_endstop


[tmc2209 stepper_z1]
uart_pin: PD4
run_current: 1.200
interpolate: true
run_current:  0.8
stealthchop_threshold: 0

# Motor5
[stepper_z2]
step_pin: PC9
dir_pin: !PC8
enable_pin: !PD1
rotation_distance: 2
microsteps: 16
endstop_pin: probe:z_virtual_endstop


# Motor5
[tmc2209 stepper_z2]
uart_pin: PD0
run_current: 1.200
interpolate: true
run_current:  0.8
stealthchop_threshold: 0

[bltouch]
sensor_pin: ^PB2
control_pin: PB1
x_offset: -36.5
y_offset: 0
z_offset: 0.0
stow_on_each_sample: false
probe_with_touch_mode: True
#pin_up_reports_not_triggered: True
#pin_up_touch_mode_reports_triggered: True

[z_tilt]
##  Use Z_TILT_ADJUST to level the bed .
##  z_positions: Location of toolhead
z_positions:
  #  123, 18
   159.5, 1
  #  1, 256
    37.5, 256
  #  256, 268
    290, 268
points:
    123,1 #back centre
    215, 216 #front left
    27, 222 # front right
speed: 200
horizontal_move_z: 10
retries: 5
retry_tolerance: 0.0075

[safe_z_home]
home_xy_position: 135, 133
speed = 50
z_hop = 10
z_hop_speed = 5

The bed itself is 290x290

The movement of X and Y is limited by the conversion to linear rails and the new limits are
X 270 Y 266

The centre of the bed and postion Z motor is 133

The pivot points of the Bed are
133, 0 for Z
290, 290 for Z1
290, 0 for Z2

but the maximum movement is 270,266 or do I change the maximum movement to more than it can move?

it’s really confusing

Even if the bed shown in the photo is 290x290 the respective z joints are outside this area!
So if you have X=0 and Y=0 in the rear right corner of the bed then just measure always on the x and y axis the distance to the joints. That is what I showed you in your picture in my last post.

(For Z the x coordinate can’t be 133 if the overall bed size is 290 and the spindle is in the middle of the X axis. So this must be 290/2=145.)
If you can’t reach all corners of the bed with your hotend/BLTouch and the usable area is smaller then of course you have to adjust the points/coordinates. But then 0,0 is not in the rear right corner of the bed but a bit indented towards the center of the bed.
But as the “ball” joint is behind the bed its y coordinate must be negative!

Maybe this will help a bit although a bit confusing:


Each x or y value that points towards a Z spindle is used for the respective coordinates.
If an x value goes to the right it will be negative same for a y value that goes to the back.
Always measure parallel to the x or y axis!

You sir are a genious Retries: 5/20 Probed points range: 0.005000 tolerance: 0.007500
The drawing you did was perfect to get me to understand it
My Z_tilt settings are now
z 135, 85
z1 125, 270
z2 -68, 280

if anyone else has this problem please refer to the drawing in the post above this

1 Like

I’m happy if I could help but I still think your values are wrong.
If your bed is 290*290 mm (square with solid black line) and all joints are outside the bed the values for Z1 must be bigger than this and for Z2 the y value must be bigger as well.
For Z the y value must be negative as noted in the picture.

Just for your understanding: the reference point of all those x and y coordinates is the location of the nozzle on the bed when the print head is moved to 0,0!
This point should be a bit indented from the rear right bed corner if the limits are more or less symmetrical. This point is the rear right corner of the square with the black dotted line.

Somehow the pictures are confusing me, or it is too late. In my printer world, the origin (0,0) is in the lower left corner for all Cartesian-like printers, i.e. except the deltas.
Exactly as defined in a Cartesian coordinate system