So I might have been wrong about the Enable pin part.
Here is what I tried today.
I used the same motor and firmware setup(which was having no missing steps, at no load conditons) as yesterday. I mounted it on my mechanical system with a ball screw arrangement with a 1mm pitch. I am using a high quality C3 grade ball screw. I connected an optical encoder on the axis next to it to measure the linear motion.
There are two mechanical arrangements which I am testing it on, one is a vertical shaft with Motor mounted on the top and another is one with a horizontal shaft. Torque requirement is larger for the vertically mounted motor because of what is connected on the shaft perpendicular to it.
I moved the motor with the forward command 'F', three times, and backward command 'B', three times, to return back to the initial position. A, B, C, D, E, F, G are the corresponding position labels.
In the firmware, I had three options with the Enable pin.
- Global Enable: Where I make the enable pin go low in setup() and the driver is always energized and drawing a constant current
- Individual Step Enable: Where I make the enable pin low just before each step is moved and then make it high again. It has low power requirement and timing is done as per the driver's datasheet
- Batch Enable: Where I enable the driver when the motor is doing a set of steps in one single go and then deactivates it (Not in every step though) till next batch of step signals come.
Following are the readings with different parameters for the vertically mount motor.

What I am seeing is that, reading at intermediate positions (A-G) are not coming perfectly. There is always a significant error even when I change various parameters. I got a proper reading only once(SlNo 14) when I was using a particular section of the ball screw for the movement. So I might be inclined to think there was wear tear and that is causing me to not travel correct distances? There has been a lot of movement on those threads. But I dont think it has reached its end of life though based on it usage.
So when a larger load is placed(Because of the vertical mount) Its not properly moving correct distances. Any other explanations possible?
Now for the horizontal axis motor, following are the readings

This ball screw hasn't suffered the same amount of motion on it as the vertical mount motor ball screw. I am getting acceptable readings of error. But its seems to be working only in the Global Enable mode, not in any of the other modes.
Any idea on why its working only in the global enable mode and not in other ones? I cant use the global enable in the final design because of constant power draw constraints, hum of the motor and switching noise its inducing. So I have to get it working in one of the other enable modes and also achieve good accuracy. I cant seem to think of a reasonable explanation as to why it is stepping only in Global enable mode.