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