Alright, I mounted a depth gauge to the platform and tried again.
The Hall-O mount I made seems to have an accuracy of ~0.1mm, possibly because there is a small amount of sideways play. I learned this by observing successive bed probes - it dumps the Z height for each point, each time. 0.1mm of accuracy is about 1/5 as good as it needs to be, so that's not good enough. Printing it with a slightly higher filament multiplier might solve the problem. The SeeMe probe is probably better since it uses an endstop switch.
I resolved the issue with the carriages moving upward after G29 by changing some of the endstop settings. However, because of the accuracy issue, running G29 actually made positioning LESS accurate than it was already. There was still the odd behavior near the X axis, whether I ran G29 or not. G29
did make the head track at an angle if I propped the print surface up on one side, so it is doing its job - it just needs a better sensor.
With the autolevel matrix cleared, I tried mathematically moving towers again. I started by adding SIN_59, COS_59, SIN_61, and COS_61 to Configuration.h where it defines the three towers:
Code: Select all
// Effective X/Y positions of the three vertical towers.
#define SIN_59 0.85716730070211228747
#define COS_59 0.51503807491005421008
#define SIN_60 0.8660254037844386
#define COS_60 0.5
#define SIN_61 0.87461970713939580028
#define COS_61 0.48480962024633702908
#define DELTA_TOWER1_X -SIN_60*DELTA_RADIUS // front left (X) tower
#define DELTA_TOWER1_Y -COS_60*DELTA_RADIUS
#define DELTA_TOWER2_X SIN_61*DELTA_RADIUS // front right (Y) tower
#define DELTA_TOWER2_Y -COS_61*DELTA_RADIUS
#define DELTA_TOWER3_X 0.0 // back middle (Z) tower
#define DELTA_TOWER3_Y DELTA_RADIUS
Wherever the printer screwed up on height, I looked at the tower it was near and I watched how fast each carriage moved as the effector moved in and out of the trouble area. I did this for a good ten or fifteen minutes, just to get an intuitive sense of what the printer was doing and where it was probably going wrong. It was OK near the Y axis, but near the X axis it would lift. I noticed that in the problem area, the X tower carriage doesn't move much but the Y and Z do, especially the Y. Eventually I came to believe that the Y tower was slightly counterclockwise to where it's supposed to be, reasoning that if I mathematically pushed it in that direction that the firmware would compensate by pushing or pulling it just a little bit more during moves near the X tower. The increased push would bring the nozzle closer to the surface.
I ran several tests. I set DELTA_TOWER2_X and DELTA_TOWER2_Y to the sin/cos of 59, 60, and 61, and each time I did this I probed near each tower and made a note of how high or low each one was relative to the reference (Z tower in my case.) With three sampling points, I could see the effect of rotating the tower clockwise and counterclockwise. Sure enough, 59 degrees made it worse and 61 degrees made it better, so I left it at 61. I was then able to print the Onyx bed leveling aid successfully for the first time, ever.
Long story short: IF you have a sufficiently accurate Z probe, and IF you have your printer properly aligned (which may involve mathematically moving one or more towers around), Marlin's bed probing routine will automatically level the bed. I haven't tried Repetier's endstop leveling with the rotated Y tower yet, but I'm assuming it's probably the same story. As long as the geometry is solid, it's worth it to have a Z probe so you don't have to worry about manually setting the height or fiddling with the endstop screws.