Важно. Получается, если у энкодера нет нуля (его система координат
не связана с магнитопроводом), то энкодер невозможно использовать
для формирования тока фаз. Следовательно описанный мною алгоритм
(где два автомата, условно, один вычисляет ошибку между заданным
положением и фактическим и устанавливает ток фаз для минимизации
ошибки, а другой меняет заданное положение по закону постоянного
ускорения) -- не годится в первой его части. Ток фаз не может быть установлен в зависимости от положения ротора, он должен устанавливаться независимо (с оговоркой, что мол если на двигатель никакие силы вообще не воздействуют, что маловероятно, то можно программно связать координаты энкодера с магнитопроводом, но то такое...)
Так, как это происходит в разомкнутой системе управления. Зачем тогда энкодер? Какова стратегия его применения? Формирование признака ошибки (фактическое положение сильно разошлось с фактическим) и торможение? А в остальном всё та же разомкнутая система управления? Туповато.
Или микрошаг. Хочется удерживание позиции по энкодеру, а не без обратной связи вообще. Можно наверное принять, что есть две системы координат. Одна связана с концевиком и энкодером, и другая, которая в нуле совпадает с первой (потому, что там искали и нашли сигнал нуля), а в остальных точках имеет некоторые расхождения (в целом не больше полного шага). И перемещение всегда ведётся по такому алгоритму: вначале быстрая (с разгоном и торможением) фаза движения во второй системе координат (энкодер используется только для проверки корректности -- ошибка в любой момент времени не должна превышать несколько полных шагов), потом медленная фаза движения, когда электрическая фаза доворачивается в нужную сторону до минимизации ошибки. Для этого в быстрой фазе всегда останавливаются за пару шагов до точки назначения.
Если это робот-манипулятор, то сложно будет. Проблема в том, что если на двигателе большая масса навешана, то он колеблется вокруг точки останова ещё длительное время. Если система разомкнутая: то просто останавливаемся и держим под током. И хорошо, если есть какой-то механически демпфер, чтоб колебания затухали. Ждать нужно сотни миллисекунд, например. Но в этот момент бессмысленно читать энкодер и ловить шаги. В итоге цикл остановка, ожидание, докручивание -- долгий. А работать-то должно быстро. Если бы обратная связь так же моментально отрабатывала (по сигналу энкодера) и активно гасила колебания -- другое дело. Но чтоб это работало надо иметь представление о том насколько расходится электрическая фаза с фактическим положнением ротора относительно статора. А это мы не знаем, т.к. система координат энкодера к магнитопроводу не привязана.