А документация что-то говорит, как например "ноль" энкодера
соотносится с положением якоря относительно статора? В общем
случае, шаговый двигатель наверное можно рассматривать как тот же
BLDC. Вращать вал можно вращая электрическую фазу, но не быстрей,
чтоб не обогнать фактическую больше чем на пол шага (иначе будет
пропуск). У вала, нагрузки и якоря есть собственная значительная
инерция, поэтому при остановках всегда будет выбег и колебания.
Нужен какой-то регулятор. Который на основе разницы между расчётным текущим положением и фактически текущим (показания энкодера) выдаст сигнал ошибки и пропорционально ему сформирует управляющий сигнал, с учётом ограничений (разница не больше полушага), и провернёт электрическую фазу на нужный угол. Этот регулятор должен работать в цикле, постоянно. Потом нужна система управления, которая будет смещать "расчётное положение" с учётом ограничений системы управления в целом. Например, осуществлять движение из точки A в точку B с поддержкой постоянного ускорения не превышающего заданного (иначе из-за инерции сил не хватит затормозить, будет выбег). Это второй алгоритм, который тоже должен запускаться периодически. Первый алгоритм, это например PID-регулятор. Второй -- разгон-торможение как с обычным ШД, с разомкнутой системой управления. Есть наверное ньюансы, которые лучше узнавать в спец. литературе.
PS: вдогонку, наверное не важно синхронизирован ли энкодер с положением якоря: можно просто прокрутить вперёд, условно, на три шага, он и выставится по магнитному полю так или иначе. Потом докрутить до нуля/риски на энкодере на низкой скорости и получить синхронизацию энкодера с магнитным полем, но лишь при условии отсутствующей на валу статической нагрузки...
PPS: http://caxapa.ru/1005266