Это уже третья статья, рассказывающая о квадратурных декодерах, на сей раз с применением к управлению бесколлекторными двигателями.


Задача: есть обычный китайский бесколлекторник, нужно его подключить к контроллеру Copley Controls 503. В отличие от копеечных коптерных контроллеров, 503й хочет сигнал с датчиков холла, которых на движке нет. Давайте разбираться, для чего нужны датчики и как их ставить.

Ликбез: принцип работы бесколлекторного двигателя


В качестве иллюстрации я возьму очень распространённый двигатель с двенадцатью катушками в статоре и четырнадцатью магнитами в роторе. Вариантов намотки и количества катушек/магнитов довольно много, но суть всегда остаётся одной и той же. Вот фотография моего экземпляра с двух сторон, отлично видны и катушки, и магниты в роторе:



Чтобы было ещё понятнее, я нарисовал его схему, полюса магнитов ротора обозначены цветом, красный для северного и синий для южного:



На датчики холла пока не обращайте внимания, их всё равно нет :)

Что будет, если подать плюс на вывод V, а минус на вывод W (вывод U не подключаем ни к чему)? Очевидно, будет течь ток в катушках, намотанных зелёным проводом. Катушки намотаны в разном направлении, поэтому верхние две катушки будут притягиваться к магнитам 1 и 2, а нижние две к магнитам 8 и 9. Остальные катушки и магниты в такой конфигурации роли практически не играют, поэтому я выделил именно магниты 1,2,8 и 9. При такой запитке мотора он очевидно крутиться не будет, и будет иметь семь устойчивых положений ротора, равномерно распределённых по всей окружности (левая верхняя зелёная катушка статора может притягивать магниты 1, 3, 5, 7, 9, 11, 13).

Давайте записывать наши действия вот в такую табличку:
Угол поворота ротора U V W
n.c. + -

А что будет, если теперь подать плюс на U и минус на W? Красные катушки притянут к себе магниты 3,4,10 и 11, таким образом чуть-чуть повернув ротор (я по-прежнему выделяю магниты, за которые ротор тянет):



Давайте посчитаем, на сколько повернётся ротор: между щелями магнитов 1-2 и 3-4 у нас 51.43° (=360°*2/7), а между соответствующими щелями в статоре 60° (=360°/12*2). Таким образом, ротор провернётся на 8.57°. Обновим нашу табличку:
Угол поворота ротора U V W
8.57° + n.c. -

Теперь сам бог велел подать + на U и — на V!


Угол поворота ротора U V W
17.14° + - n.c.

Теперь опять пора выровнять магниты с зелёными катушками, поэтому подаём напряжение на них, но красный и синий магниты поменялись местами, поэтому теперь нужно подать обратное напряжение:


Угол поворота ротора U V W
25.71° n.c. - +

C оставшимися двумя конфигурациями всё ровно так же:


Угол поворота ротора U V W
34.29° - n.c. +


Угол поворота ротора U V W
42.85° - + n.c.

Если мы снова повторим самый первый шаг, то наш ротор провернётся ровно на одну седьмую оборота. Итак, всего у нашего мотора три вывода, мы можем подать напряжение на два из них шестью разными способами 6 = 2*C23, причём мы их все уже перебрали. Если подавать напряжение не хаотично, а в строгом порядке, который зависит от положения ротора, то двигатель будет вращаться.

Запишем ещё раз всю последовательность для нашего двигателя:
Угол поворота ротора U V W
n.c. + -
8.57° + n.c. -
17.14° + - n.c.
25.71° n.c. - +
34.29° - n.c. +
42.86° - + n.c.

Есть один нюанс: у обычного коллекторного двигателя за переключение обмоток отвечают щётки, а тут нам надо определять положение ротора самим.

Датчики Холла


Теперь давайте поставим три датчика холла в те чёрные точки, обозначенные на схеме. Давайте договоримся, что датчик выдаёт логическую единицу, когда он находится напротив красного магнита. Всего существует шесть (сюрприз!) возможных состояний трёх датчиков: 23 — 2. Всего возможных состояний 8, но в силу расстояния между датчиками они не могут все втроём быть в логическом нуле или в логической единице:



Обратите внимание, что они генерируют три сигнала, сдвинутые друг относительно друга на 1/3 периода. Кстати, электрики используют слово градусы, говоря про 120°, чем окончательно запутывают нубов типа меня. Если мы хотим сделать свой контроллер двигателя, то достаточно читать сигнал с датчиков, и соответственно переключать напряжение на обмотках.

Для размещения датчиков я использовал вот такую платку, дизайн которой взял тут. По ссылке лежит проект eagle, так что я просто заказал у китайцев сразу много подобных платок:



Эти платки несут на себе только три датчика холла, больше ничего. Ну, по вкусу можно поставить конденсаторы, я не стал заморачиваться. Очень удобно сделаны длинные прорези для регулировки положения датчиков относительно статора.

Постойте, но ведь это очень похоже на квадратурный сигнал с обычного инкрементального энкодера!


Ещё бы! Единственная разница, что инкрементальные энкодеры дают два сигнала, сдвинутые друг относительно друга на 90°, а у нас три сигнала, сдвинутые на 120°. Что будет, если завести любые два из них на обычный квадратурный декодер, например, той же самой синей таблетки? Мы получим возможность определять положение вала с точностью до четырёх отсчётов на одну седьмую оборота, или 28 отсчётов на оборот. Если вы не поняли, о чём я, прочтите принцип работы квадратурного декодера в первой статье.

Я долго думал, как же мне использовать все три сигнала, ведь у нас происходит шесть событий на одну седьмую оборота, мы должны иметь возможность получить 42 отсчёта на оборот. В итоге решил пойти грубой силой, так как синяя таблетка имеет кучу аппаратных квадратурных декодеров, поэтому я решил в ней завести три счётчика:



Видно, что при каждом событии у нас увеличиваются два из них, поэтому сложив три счётчика, и поделив на два, мы получим равномерно тикающий определитель положения вала, с точностью до 6*7 = 42 отсчёта на оборот!

Вот так выглядит макет подключения датчиков Холла к синей таблетке:



А почему на двигателе сразу нет датчиков?


В некоторых приложениях (например, для коптеров) все эти заморочки не нужны. Контроллеры пытаются угадать происходящее с ротором по току в катушках. С одной стороны, это меньше заморочек, но с другой стороны, иногда приводит к проблемам с моментом старта двигателя, поэтому слабоприменимо, например, в робототехнике, где нужны околонулевые скорости. Давайте попробуем запитать наш движок от обычного китайского коптерного ESC (electronic speed controller).

Мой контроллер хочет на вход PPM сигнал: это импульс с частотой 50Гц, длина импульса задаёт обороты: 1мс — останов, 2мс — максимально возможные обороты (считается как KV двигателя * напряжение).

Вот здесь я выложил исходный код и кубовские файлы для синей таблетки. Таймер 1 генерирует PWM для ESC, таймеры 2,3,4 считают соответствующие квадратурные сигналы. Поскольку в прошлой статье я крайне подробно расписал, где и что кликать, то здесь только даю ссылку на исходный код.

На вход моему ESC я даю пилообразное задание скорости, посмотрим, как он его отработает. Вывод синей таблетки лежит тут, а код, который рисует график, тут.

Поскольку у меня двигатель имеет номинал 400KV, а питание я подал 10В, то максимальные обороты должны быть в районе 4000 об/мин = 419 рад/с. Ну а вот и график подоспел:



Видно, что реальные обороты соответствуют заданию весьма приблизительно, что терпимо для коптеров, но совершенно неприменимо во многих других ситуациях, почему, собственно, я и хочу использовать более совершенные контроллеры, которым нужны сигналы с датчиков холла. Ну и бонусом я получаю угол поворота ротора, что бывает крайне полезно.

Подводим итог


Я провёл детство в обнимку с этой книжкой, но раскурить принципы работы бесколлекторников довелось только сейчас.



Оказывается, что шаговые моторы и вот такое коптерные моторчики — это (концептуально) одно и то же. Разница лишь в количестве фаз: шаговики (обычно, бывают исключения) управляются двумя фазами, сдвинутыми на 90°, а бесколлекторники (опять же, обычно) тремя фазами, сдвинутыми на 120°.

Разумеется, есть и другие, чисто практические отличия: шаговики рассчитаны на увеличение удерживающего момента и повторяемость шагов, в то время как коптерные движки на скорость и плавность вращения, что сказывается на количестве обмоток, подшипниках и т.п. Но в итоге обычный бесколлекторник можно использовать в шаговом режиме, а шаговик в постоянном вращении, управление у них будет одинаковым.

Update: красивая анимация от Arastas:

Комментарии (35)


  1. Arastas
    23.04.2018 18:42
    +1

    Вот, например, иллюстрация для плавного вращения 12/14 при синусоидальном сигнале (что-то не получилось gif прямо сюда вставить).
    А здесь код, который рисует такие иллюстрации.


  1. golf2109
    23.04.2018 19:24

    а про преобразования Кларка и Парка будет?


    1. romixlab
      23.04.2018 20:12

      Вот очень хорошая лекция, в т.ч. на эту тему — www.youtube.com/watch?v=cdiZUszYLiA


  1. Sly_tom_cat
    23.04.2018 20:30

    С одной стороны, это меньше заморочек, но с другой стороны, иногда приводит к проблемам с моментом старта двигателя, поэтому слабоприменимо, например, в робототехнике, где нужны околонулевые скорости.


    Много имел дела с модельными безколлекторниками (само собой с соответствующими контроллерами).
    Ни разу не наблюдал проблем с запуском.

    Там все дело в том, что железо без напряжения само чуточку цепляется за магниты на определенных углах. И углы эти — не являются мертвыми точками. Поэтому там все нормально запускается.

    Проблемы с запуском возможны только при «козах» в обмотках ye или уж очень кривая прошивка контроллера.

    На околонулевых скоростях работать адекватно можно через редуктор, или шаговиком.

    Не спорю — у моторов с датчиком холла — есть своя ниша. Но делать из силового мотора недошаговый двигатель — не очень понятное занятие…


    1. romixlab
      23.04.2018 21:03

      Это без нагрузки они стартуют, а вот под нагрузкой уже не факт… Актуально для электро скейтов, самокатов и т.д.


      1. Nick_Shl
        23.04.2018 22:36
        +1

        И для автомоделей — они используют движки с датчиками холла потому что нужен крутящий момент с низов. А вот авиамодели используют бездатчиковые двигатели с обратной связью по ЭДС наведенной в неиспользуемых обмотках, потому что на старте сопротивления практически нет и их рабочий диапазон оборотов лежит гораздо выше — крутнул поле наугад в катушках, получил обратную связь и пошел крутить используя её.


  1. Gryphon88
    23.04.2018 23:37

    Меня всегда клинило, что число магнитов в статоре и роторе в идеале должно быть взаимно простым, тогда движение будет наиболее плавным. Я прав?


    1. haqreu
      23.04.2018 23:46

      Я бы сказал, что важна не взаимная простота, а просто иметь как можно больше полюсов :)


      1. Arastas
        24.04.2018 14:00

        Не уверен. Например, калькулятор говорит, что с 12 катушками и 18 магнитами работать не будет. А там ведь ещё и разные варианты обмотки.


    1. alexey_prokopyev
      24.04.2018 04:22

      У Japan Servo читал, что минимальный зубцовый момент (cogging torque) будет тем меньше, чем больше наименьшее общее кратное


    1. Danik-ik
      24.04.2018 06:28

      Проблема в том, что никто и никогда не мог получить нечётное количество парных полюсов. Вы парами, парами считайте! И да, тут 6 и 7 пар.


  1. opencloser
    24.04.2018 08:26

    Было бы интересно узнать, почему когда катушки в роторе, то добиться более высокого КПД легче, нежели когда катушки в статоре? Хотя (мне кажется) конструкция катушки в статоре, а магниты в роторе значительно проще в реализации. Какую литературу по данной теме посоветуете?


    1. Sly_tom_cat
      24.04.2018 10:40

      А откуда информация про «почему когда катушки в роторе, то добиться более высокого КПД легче, нежели когда катушки в статоре»?

      Смысл ставить катушку на статоре — просто убрать вращение обмоток и с-но щеточный механизм (для передачи энергии на эти обмотки). А щеточный механизм не столько на КПД влияет (хотя и это есть) сколько на долговечность мотора. Бесколлекторные — практически вечные (первыми там умирают подшипники при нормальной эксплуатации).


      1. opencloser
        24.04.2018 11:44

        Я не силён в этих вопросах, поэтому и просил подсказать, помнится что сила взаимодействия движущего магнита с неподвижной катушкой меньше, чем если бы двигалась катушка с током а магнит стоял при прочих равных условиях, хотя эти отличия справедливы только для наблюдателя. В это я тоже не верил, пока мне не показали это в виде эксперимента с двумя ЭД казалось бы схожими характеристиками (размер, зазоры, сопротивление на катушках и прочие). Конечно я не утверждаю что эксперимент был «чистым», но наши конструктора меня тогда впечатлили (к сожалению тот конструктор которое это поведал уже не работает, т.к. давно на пенсии).


        1. Sly_tom_cat
          24.04.2018 11:58

          сила взаимодействия движущего магнита с неподвижной катушкой меньше, чем если бы двигалась катушка с током а магнит стоял при прочих равных условиях

          При прочих равных условиях, припоминая принцип относительности Галилея (его, по-моему, классе в 5-6 проходят) разницы в том, что относительно чего движется — не существуют, с-но не может быть и разного КПД только из за того где там катушка, а где магнит.


          1. opencloser
            24.04.2018 13:44

            ну как минимум в земных условиях мы имеем магнитное поле земли, и следовательно двигать постоянный магнит в этом поле или не двигать должно оказывать определено действие на этот самый магнит и его «силовые поля». Возможно есть и другие причины, вот и хотел узнать, где искать литературу, куда копать.


            1. Sly_tom_cat
              24.04.2018 14:57

              Ась? Вы точно в курсе того какова напряженность магнитного поля земли в сравнении с банальным электромагнитом/неодимовым магнитом?

              О каком такой влиянии вы говорите?

              Это все равно что оценивать смещение земли со своей орбиты после того как вы подпрыгните.


        1. mayorovp
          24.04.2018 13:26

          Катушка с током — это такой же магнит, только управляемый.


          1. opencloser
            24.04.2018 13:51

            Если вы про постоянный магнит, то да они действительно похожи, но есть разница как взаимодействие происходит, постоянный магнит меньше меняет свои магнитные свойства при помещении его в другое магнитное поле, а вот катушка более подвержена искажению магнитного поля.


            1. Sly_tom_cat
              24.04.2018 15:00

              Какое другое магнитное поле — о чем вы?
              Вы еще скажите, что прямо прямо своей пятой точкой чувствуете гравитационное взаимодействие от Сатурна…


  1. AVI-crak
    24.04.2018 08:26

    Сейчас разве-что самый ленивый не пытается «изобрести» очередной драйвер для синхронного двигателя. Пройдёт немного времени, и автор начнёт подозревать что синусы и косинусы — это не просто набор непонятной абстракции из школьной программы. Вот тогда всплывёт понятие вектора, угловой скорости и ещё много чего «нового».

    haqreu — доисторический пик мог крутить три фазы, атмелу хватало мозгов для удержания момента и скорости, современный st чип с математикой — может управлять двигателем с минимальными затратами энергии, а так-же возвращать эту энергию из механики. Разница в подходе — в количестве вычислений по косвенным признакам, в том числе и по прогнозированию поведения механики.

    Предлагаю перешагнуть промежуточные решения, и перейти сразу к векторному управлению. В этом случае не придётся ломать собственные стереотипы, и заново переосмысливать всё имеющийся в запасе.
    Как например то-что магнитное поле не вращается, в реальности оно статично. Катушка не тянет магнитным полем соответствующий полюс магнита — а толкает, или отталкивается. Сила притяжения намного меньше силы отталкивания или вытеснения магнитного поля. И ещё много стандартных заблуждений промежуточного уровня.


    1. haqreu
      24.04.2018 08:31

      Вы, видимо, плохо читали, но я собираюсь использовать готовые контроллеры. Эта статья о том, как к ним подключить движок и как по трём холлам высчитать угол ротора.


      1. AVI-crak
        24.04.2018 08:57

        Это и так понятно. Так-же могу угадать возможности готового контролёра — способного обеспечить постоянный момент, но не скорость, и уж точно не угол поворота. Отчего эта статья и появилась.
        Но если вам важно контролировать угол поворота — почему-бы не воспользоваться сразу готовым контролёром с векторным управлением? Ведь компоненты системы собранные из разных частей (покупных) — стоят гораздо больше чем одно законченное решение. Большая часть затрат — это настройка, которая превращается в бесконечную боль в случае неверного выбора компонентов.


        1. haqreu
          24.04.2018 09:01
          +2

          Ну, угадывать было недолго, особенно учитывая, что я дал название контроллера :)
          Мне не нужно управлять углом поворота, мне нужно управлять моментом, который зависит в том числе и от угла.


          1. AVI-crak
            24.04.2018 09:24

            Для управления моментом — датчики холла лишние в конструкции. Угол поворота, а так-же угловая скорость, инерция, и реакция механики — всё это можно просчитать по косвенным признакам. Самый простой вариант — считывать напряжение со свободной фазы в моменты коммутации. Переход через ноль, скорость нарастания/спада, а так-же отклонения от прогноза — всё это косвенные признаки положения ротора. По этому принципу работают все модельные драйверы движков.

            Датчики холла тоже можно применять, но в этом случае мк становится избыточным. Достаточно силовых усилителей.


            1. haqreu
              24.04.2018 09:30

              Без холлов всё это плохо будет работать в момент старта. Предлагаю считать, что в maxon motor сидят не совсем глупые люди. Для чего они обязательно требуют подключения холлов в своём контроллере EPOS2 50/5? Например, они хотят движок EC 45.


              1. AVI-crak
                24.04.2018 09:49

                Предлагаю замерить индуктивность обмотки при разных углах поворота ротора. А после оценить стоимость технологии в масштабе киловатного промышленного двигателя и маленького модельного движка.
                Для большого двигателя датчики холла — копейки. Для маленького — уже часть конструкции.


                1. haqreu
                  24.04.2018 09:51

                  Так вы мне объясните, зачем в маленьком модельном движке maxon ec45 нужны холлы?


                  1. AVI-crak
                    24.04.2018 16:21

                    Это странный запрос. Учитывая что вы нашли этот мотор под свою задачу — логично предположить что он изготовлен для аппаратного драйвера (не мк!!!). И он не модельный, разъём не тот.
                    Когда вам по настоящему понадобится контроль положения ротора — вы поставите оптический энкодер, как все нормальные люди.


            1. Arastas
              24.04.2018 13:54
              +2

              Угол поворота, а так-же угловая скорость, инерция, и реакция механики — всё это можно просчитать по косвенным признакам.

              Sensorless control это широкий, но не всеобъемлющий круг приложений. Есть много задач, где без реального датчика угла требуемых характеристик не получить.


    1. haqreu Автор
      24.04.2018 13:53

      Сила притяжения намного меньше силы отталкивания или вытеснения магнитного поля.


      Можете подтвердить? Желательно с формулами. Возможно, я плохо учился в школе, но насколько я помню, для двух постоянных магнитов, расположенных очень рядом, притяжение совсем чуть-чуть сильнее отталкивания. А в целом этим можно пренебречь и считать силы одинаковыми.


      1. mayorovp
        24.04.2018 13:56

        Насколько я понял, фокус тут в том, что отталкивается катушка от ближнего магнита, а притягивается — к соседнему. То есть дело исключительно в расстоянии, а не в каких-то хитрых эффектах.


        1. haqreu Автор
          24.04.2018 13:59

          Спасибо, так понятнее.


  1. pt200
    24.04.2018 10:31

    Ну и бонусом я получаю абсолютный угол ротора, что бывает крайне полезно.

    А может быть все таки относительный угол поворота( энкодер то инкрементальный получается)?


    1. haqreu
      24.04.2018 10:33

      А, ну да, неправильно выразился, спасибо.