I have a Ender3 V2 with dual Z motors/screws. I’m in the process of upgrading the electronics to support independent drives to the dual Z motors (to auto square/level the gantry X axis rail), and upgrading from the stock marlin to Klipper. I have already added a probe for auto bed leveling (which works fine under marlin).
It looks like the klipper Z_Tilt command will come close to what I want to do (more on that and a question later) but first a question about Z Tilt in general (something I don’t understand about the whole concept)…
The bed on my Ender3 is manually adjustable with spring loaded screws on each corner, so it can be quite level or quite tilted. It makes a lot of sense to use the probe on the moving head to move to each end of the X axis travel, probe the bed and use those positions, and the bed pivit points to calculate how much to independently move one or both Z motors to level the X rail (or synchronise the Z motors to make the X rail square to Z.
BUT, here is the part I don’t understand, so hopefully someone can explain what I’m missing here. This whole plan is based on the assumption? that the build plate is level and orthogonal to the Z axis? I would have thought that is a bad assumption. An auto bed level routine can fix this, but if the Z motors are not corrected for tilt, the leveled bed will be level to the X axis but not orthogonal to Z. Hence we need Z-Tilt to fix this, but isn’t there a chicken and egg problem here? Which one comes first.
That’s my puzzle, and now to my technical question about Z_Tilt and if it can do what I imagined was my solution to Z motor sync/tilt. I have a similar solution for gantry squaring on my home build CNC Y axis that has dual ballscrews.
I imagined 2 sensors (microswitch or prox sensors) at the top of each Z axis rail. The squaring routine (Z-Tilt?) just needs to move both motors UP to the sensors and stop each one interdependently based on the sensors, and perhaps apply an offset to allow for different triggering ranges and slightly different mounting positions of the sensors on each side.
Then you could have a perfectly square X rail (to the Z Axis), and proceed to probe the bed as usual to check / compensate for any tiny irregularities.
So the only thing I can’t see in the Z_Tilt to make this scheme work is the probing direction needs to be the opposite to normal bed leveling, and there needs to be support for independent probes for each motor.
Am I correct that these things really are not there? Is it possible to do what I did for my CNC, and develop fully custom code to drive the motors to do the probing/squaring?
Or is there a better way?
One workaround I thought of (to make the Z_Tilt work with a potentially out of square bed) is to make a alloy ‘bridge’ U shaped piece that sits on the Y axis rails and provides a perfectly square (to Z) flat rail that can be probed at each end using the bed leveling probe the way the Z_Tilt routine intends.
The only problem I see with that is it needs to be manually placed/removed.
A similar scheme with fixed probing pads on each end of the X travel limits could work too, and they could stay in place as long as they don’t get in the way of normal printing movements.
Anyhow, that’s a very long (1st) post here. Hopefully some folks made it to the end and have some comments/thoughts to share.