The XY table boasts Hall effect limit switches with a repeatability of ±2.5 μm so I should have no problem getting a repeatable homing position to the nearest 6 μm step. They do however have quite a lot of hysteresis and activate some distance from the actual physical end stop. In my first cut of the code the homing routine steps quickly until it sees the negative limit and then steps slowly forward until it sees the limit go away. It sets the position at this point and then ignores the limit from then on so it can achieve the full range of travel. I am not sure whether both positive and negative edges of the limit signal have the same accuracy. I will get more idea when I write the shaft encoder software. These have an index pulse so, no matter how inaccurate the limit switch is, I will be able to get an absolute fix on the position to within one shaft encoder step, which is the same as one stepper microstep.
I haven't used the positive limits yet and I can't think of a reason for needing them except for possibly an automated self-test. I will use the shaft encoders to check that the table is where I think it should be and halt if I find a significant discrepancy. That would indicate a firmware bug, tool crash or hardware failure.
The z-axis did not come with limit switches so I had to improvise. I wanted repeatability to within one half step, i.e. 50 μm. The software knows what the shaft position modulo 8 is because it knows the phase pattern applied to the motor. That means it only needs a limit switch with repeatability better than 0.4 mm. I decided to try a micro switch to see if I could find one good enough. As you can see I have managed to amass quite an extensive collection!
I picked one of the small ones on the bottom right and it seems to do the trick. Again it has significant hysteresis as one would expect. My homing routine steps upwards at speed until it activates the switch and then steps down slowly until the switch opens again. At this point I AND the motor position with 7.
Once the homing was sorted out I was ready to test the accuracy.