Adam Adam D. Reynolds will probably be able to answer this best.
I have tried using the spintac position controller for many motors with different number of poles and different encoder counts per rev (cpr). What i have observed is that things work pretty well when the number of poles is small and encoder cpr is really high. But motors with high pole count and encoder cpr low its really hard to have well tuned stable position controller hold position. The motion profile from point A to point B works great but while holding position, it keeps jittering. changing bandwidth doesn't really help, it just makes the jitter more vigorous while amplitude of jitter stays low. i managed to make things little better by changing the inertia and friction values compared to what was estimated, but it didn't make sense to change the current controller gain or inertia or friction too much from what was estimated.
Let's say its a case where my encoder resolution is 0.5 degree, which isnt very high cpr. What that means is that if i want it to get to Point B , its ok if the final destination is at PointB + - 0.5 degrees. The rotor should just get to the best closest position close to PointB and call it mission accomplished and just stay there ie hold position and not move a lot on its own unless some external force moves it. But, i have not been able to make that happen.
I have tuned pid position controllers before for high pole count motors and low cpr encoders and by tuning the p, i and d gains i have managed to make it less jittery while holding position but with the spintac controller i dont have much parameters to play with.
I always think that there should be a "good enough position" criteria which may be 1 encoder tick or more because mechanical systems will never ever be able to attain a perfect encoder count . So, that if the rotor reached a point that is good enough close to the desired destination it will stop trying hard and be perfect.
so, is there a place in the spintac position code where i can define such a criteria so that if the difference between the current encoder count and desired encoder count is less that n, it will stop position control or may be reduce the torque ( Iq_ref) down to zero. and when something moves the rotor out of this window such that the difference becomes greater than n, the position controller kicks in and determines the iq_ref desired to bring it back into the window?
I think that will help reduce jitter and hold position well in cases if high pole count and low encoder cpr.