Ender 3 X axis not level
I've been aware ever since I got it that my Ender 3's X-axis isn't level. Measuring from the top of it to the top of the frame, the right-hand (positive) side is about 4.7mm higher than the left.
During assembly, the vertical rails were not entirely parallel, and had to be pulled together to get the X axis on and to bolt the cross beam on the top. I suspect this is related, but I'm not sure.
Anyway, aside from the bed having to be tilted to be level with respect to the X axis, this never seemed to cause any problem, so I've left it alone until now. However I have measured almost exactly a 1% dimensional error in the X direction that I've now compensated for by setting the steps per mm, and wonder if the tilted axis could be the cause. Doing the trig, that doesn't make sense - a 4.7 mm error across the width of the bed should translate to something like one part in 2000, not 1%. But maybe something's wrong in my analysis so I'd like second opinions.
Aside from that, is this something I should try to correct, or just let be? I suspect it's the base that's warped or tapped/cut incorrectly where the vertical rails bolt on, in which case it seems unlikely there's any way to fix it without replacing that part, which is something I'd rather not get into as long as the printer is working. But if there are other possibilities that are non-invasive to try, I might.
Further update: if this is the cause of the dimensional error (which turned out to be more like 0.41% than 1%, thus closer to plausible) I probably need to fix it. Using firmware steps/mm adjustment is not viable because it produces aliasing patterns in skin layers presumably due to step width no longer dividing nozzle size/line width.
0scar: Yes, I think it's sufficiently visibly obvious that I can take a good pic. Will do soon.
So I disassembled the printer and first found something very suspicious: the left (Z-motor side) vertical rail was not mounted flush against the base, because the edge of the control board cover panel was under the edge of it. Fixing this made the vertical rails parallel and made the X-axis unit easily slide back on, but it did not fix the issue; the X-axis was still non-level.
Next, I started playing with eccentric nuts, which was probably a mistake. They were already the appropriate tightness, and I might have messed them up, in which case I'll have to go back and tune them more later. I then found a second point of adjustment: the attachment of the roughly-triangular bracket that holds the three roller wheels on the right side to the X-axis aluminum extrusion rail. I as soon as I loosened the bolts, I was able to get a plenty play to level the axis. In order to get it level, with the top beam mounted, I raised both sides so that the top outer wheels would hit the plastic end caps of the top beam. This relied on a dubious assumption that the triangular roller wheel arrangements on both sides are symmetric, but it seems correct, and after re-tightening the bracket, lowering it to the bed, and re-leveling the bed, everything seems fully level.
Further, after the fix, my dimensional accuracy test piece is 119.6 mm instead of 119.5 mm, which works out to the difference before the fix being undersized by 0.084%, very close to my "1 part in 2000" estimate of the error that the non-level axis should cause. Sadly it still wasn't 120.0 mm like it should be, so I went looking for another source of the inaccuracy. Tensioning the X-axis belt seems to have done the job, and I'm now getting 120.0 mm.
I took some pictures in the process, which I'll try to attach later to improve this answer for others who may hit the same problem.
Caveats: In the process of doing this, I badly messed up the Z axis. I was getting prints coming out almost 1mm shorter than they should be and having to relevel the bed continually. The whole system is "over-constrained" by all the points at which it can be tightened, so if anything is inconsistent when it's tightened, everything goes catastrophically wrong. This entry on Maker Steve's blog was very helpful in figuring out how to get it back in order. After making the adjustments, however, I still had a problem: a horrible grinding squeal whenever the Z motor moved in the negative direction. It turned out I'd also over-tightened the screws holding the Z lead screw nut on the carriage (after mistakenly removing it during all this), forgetting that the assembly instructions specify that it shouldn't be tightened down. loosening both screws by about half a turn finally got everything working right again.
0.4 mm indeed sounds like it missed part of the movement from the slop in the belt.