Hi, and thanks for coming back so promptly. I think I need to give you some more information - sorry if it turns into a long post!
The system behaviour when it 'misbehaves' is that it starts the anomolous behaviour well clear of any home or limit switch (>6"). When it 'goes wrong', it then slews one or both axes to the zero position. Having arrived at the zero position, it then carries on with the next blend without killing the motor.
The initialisation functions include a seek to home switch, a search for the nearest index point, and a zeroing of the encoder count at the index pulse: hence the zero point is a little displaced from the home microswitch.
I believe that once the system has 'gone wrong', it is stopping at the zero point *not* the home switch.
I have carried out some further tests that may be of help:
If I place a large (1 sec) inter-blend delay in the calling functions, the anomalous behaviour is not noticed. However, the start/stop nature of each move means that this test is knocking the bejezus out of a rather fragile prototype machine, so I can't do this too often!
The encoder positions are being read back on each move cycle and monitored, and they are not showing any anomolous behaviour, so I don't think they are the culprit. I have placed a 'scope on the quadrature encoder inputs and the edges are good and sharp with no real indications of noise.
I could test with a blend factor other than -1 if you think that might be illuminating?