On my Mendel90 machine I repeatedly had problems with bed leveling and z calibration. As I run a 0.35 mm nozzle and therefore 0.25mm layer heights, uneven and unleveled beds are pretty critical, and this was the main reason, why the machine was not used much for quite some time.
So I decided to take a proper look into it. So first I designed a bracket to fasten a dial indicatior to my x carriage. This allowed me to measure the flat- and evenness of the build surface with an accuracy of a few hundreds of a millimeter.
However, I couldn't get it to be even enough. One of the corners was always off, adjustments were strangely uneffective, measurements unreapetable. I suspected that my build surface support is mechanically unstable. The setup consistent of a 5mm acrylic plate that is fixed to the linear bearings, connected by 4 hexagon standoffs to a thin steel plate, on which I clamped a glass plate.
So my first attempt was to replace the thin metal sheet by a 4mm aluminum plate I had lying around, that has been used as a heat spreader in a former setup. However, this didn't help.
Then I tried to even out the aluminum plate, as it was slightly bent. However, this didn't help.
Then I suspected that there were tensions caused by not perfectly matching hole patterns in the acrylic and aluminum plates. One had to slightly nudge the hex standoffs to align them with the holes, so I bored them out to a larger size. However, this didn't help.
Then I suspected thermal effects and tried long cooling periods between measurements where I switched the printer off. However, this didn't help.
Then I thought I go crazy, when I by chance discovered that the z endstop was not properly tightened, which could have explained the unreliable measurements. However, this didn't help.
After that I was convinced that no thermal or mechanical effects caused the strange behaviour. I investigated more careful, and found that the distance of one side of the bed surface increased monotonously between measurements, even without any mechanical adjustments. So I came to the conclusion that the two motors run uneven, but only by a tiny bit, to make it much more difficult to find.
So I put some more grease on the z threaded rods. However, this didn't help.
Then I played with the z current. However, this didn't help.
Then I rewired the z motors in series. They had been in parallel, but I found a post in the reprap forums suggesting that running them in series gives a higher torque. However, this didn't help.
Then I took apart the full z axis, cleaned it and put it back together. I found that the threaded rods and nuts are still in good shape, but it didn't help with the step skipping.
Then I found that limiting the maximum z speed to a slightly lower value allowed me to get repeatable measurements without drift. I don't know what I had thought, when I originally put in the values in the firmware. I believe that this issue was present from the very beginning, but the fact that the z axis has a huge steps per mm value and only a step or so is lost by one motor every now and then allowed it to go unnoticed for so long. But it might be the reason why I had so many troubles with z and bed calibration.
I even was able to reliable measure the effect of turning of the z motors while they were in between full steps with microstepping, as discussed by whosawhatsis in his article Taxonomy of Z Axis artifacts in extrusion-based 3d printing which only amounts to a few thousands of a millimeter.
After that issue was found and fixed, I started again. However it turned out that there were also some mechanical issues. The measurements were repeatable now, but adjusting the height of one corner had strange effects on the height of the other corners. I suspected that the acrylic base plate was not stiff enough and flexed when adjusting the corners.
So I replaced it by a sheet of 10mm phenolic coated plywood, which is extremely stiff. Instead of the hexagon standoffs, I tapped the holes in the plywood and put springs between it and the aluminum plate. Now the height of the corners can be easily adjusted by turning a screw and the springs make the setup a bit more forgiving against crashing the nozzle into the bed. This works very well, and I was able to even out the bed to only a few hundreds of a millimeter. And it seems that this remains good also over time, as I had no problems on that front since this change.
This work extended over several weeks, and at times I was mightily frustrated. On the other hand I am very happy that I figured it out in the end, and even happier that the printer runs now much more reliable than before. So to sum up:
- Make sure to limit z axis velocity to a low enough value.
- Make sure the mechanical setup is stable.