На что ещё способны шаговые моторы? — Забивать голы в настольном хоккее

Создавая своего первого робота (Робот для настольного хоккея), а именно механическую часть, узнал много интересного для себя, чем и хочу поделиться.

Механика робота для настольного хоккея

Примерно половину знаний я «нагуглил» или подсмотрел на Youtube, а вторую половину получил на практике, методом проб и ошибок в многочисленных экспериментах.

Расскажу про 4 момента, на мой взгляд заслуживающих особого внимания:

  1. Разгон шагового мотора до максимальных оборотов.
  2. Одновременная работа массива из шаговых моторов через один контроллер.
  3. Охлаждение шаговых моторов и драйверов.
  4. Как избавиться от писка шаговых моторов.

В настольном хоккее Stiga Play-Off с каждой стороны по 6 игроков (вратарь и 5 на поле). У моего робота для настольного хоккея, в соответствии с количеством игроков — 6 роборук, по одной руке для каждого игрока, и каждую руку приводят в движение 2 мотора. Первый мотор перемещает игрока вперёд и назад, а второй мотор вращает клюшку. Итого задействовано 12 шаговых моторов.

Почему именно шаговые моторы? Мне понадобилась точность и аккуратность, а шаговый мотор как раз и обладает способностью вращать вал строго на заданное количество градусов/шагов. Но, кроме точности, понадобилась скорость, и тут начались проблемы и поиск решения.

1. Разгон шагового мотора до максимальных оборотов


При поиске в интернет можно найти много информации про ЗD принтеры, ЧПУ, роборуки с 6 степенями свободы и тому подобным устройствам. Но, мне нужно передвинуть игрока на ~40 см за доли секунды или ударить клюшкой по шайбе так, чтобы она полетела в ворота через всё игровое поле. И что делать? — ставить опыты и выжимать из моторов все соки!

Вал шагового мотора вращается импульсами и моторы, которые я использовал для робота (типоразмер Nema 17) делают 1 полный оборот за 200 шагов, по 1.8 градуса за 1 шаг.
Как новичок, я приобрёл самые обычные драйверы для шаговых двигателей A4988, купил контроллер Ардуино Мега с самым большим количеством входов/выходов, CNC Shield v3 для удобного размещения сразу 4-х драйверов, блок питания на 12 вольт, всё соединил проводами по инструкциям с многочисленных сайтов. Разобрался как написать скетч-программу для Ардуино и запустил.

Моторы стали вращаться, но мне была нужна скорость. Если подать с контроллера на драйвер мотора 1000 импульсов в секунду, мотор будет вращаться со скоростью 5 оборотов в секунду. Замечательно, но этого было мало. Увеличил количество импульсов и мотор перестал трогаться – пищит и не крутится, не хватает сил тронуться сразу на таких оборотах. Это как на машине с механикой сразу включить 5-ю передачу. Пришлось дорабатывать скетч контроллера для плавного, но по возможности, быстрого старта. Есть, конечно, готовые классы AccelStepper, но как-то я с недоверием его воспринял, будут ограничения как всегда, подумал и сделал свой собственный класс для плавного старта, в котором использовал формулу кубической параболы с некоторыми вспомогательными коэффициентами.

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

При таком разгоне обязательно присутствуют пропуски шагов, но потеря нескольких шагов для тех целей, которые я преследовал, не важны, это не 3D печать.
Подвожу итог – для максимального RPM нужно обеспечить плавный разгон.

2. Одновременная работа массива из шаговых моторов через один контроллер


Как уже озвучено выше, в роботе используется 12 шаговых моторов. Этот массив моторов управляется через 1 контроллер Ардуино Мега, который был выбран из-за наличия большого количества пинов (входов/выходов).



Чтобы управлять 12 моторами мне понадобилось:

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

Дополнительно задействовал ещё 24 пина:

  • 12 пинов для получения данных от оптических концевых выключателей (нужны для безопасности механики, ограничивая зону перемещения приводов игроков, разве можно полностью доверять программе? Датчики по одному установлены в начале и конце каждого привода и ещё есть пружины для мягкой остановки, разве можно полностью доверять датчикам?)
  • 12 пинов для RGB-светодиодов индикации режимов работы (зелёный горит при подаче питания, синий добавляется при движении вперёд/назад и красный добавляется при вращении клюшки, в общем, зелёный для пользы, а синий и красный цвета для красоты)

Мозг робота сейчас «пребывает» в настольном компьютере, как временное решение, пока в микрокомпьютер Rasperry Pi 4 на борт робота не переедет. Компьютер передаёт управляющие команды через USB порт в контроллер Ардуино и тут нужна возможность одновременной работы всех 12 моторов. На практике, в процессе игры я не видел, чтобы все 12 моторов работали одновременно, может 4, но технически это предусмотрено.

В скетче для Ардуино создал класс Player для управления 2-мя моторами (перемещение и вращение клюшки) и при запуске создаётся 6 экземпляров этого класса. При инициализации классов передаются номера пинов, к которым будет привязан каждый из «игроков», т.о. каждый из 6-ти игроков привязан к своим драйверам/моторам, датчикам и светодиодам.

В цикле loop скетча проверяется порт USB на наличие команды от компьютера и по очереди вызываются методы Move и Rotate у 6-ти объектов игроков для выполнения движений или остановок.

Подведу итог — контроллер Ардуино Мега оснащён очень большим количеством входов/выходов >70. Если потребуется решить некую задачу, можно подключить десятки шаговых моторов.

3. Охлаждение шаговых моторов и драйверов


Если на драйвер шагового мотора на пин VMOT подать питание и драйвер будет включен (по умолчанию ENABLE=0 — включен), мотор, возможно, начнёт немного пищать (зависит от драйвера), а обмотки мотора и драйвер начнут греться. Можно потрогать радиатор драйвера и убедится в этом. Я начал использовать питание мотора 12V и нагрев быстро почувствовал, а при 36V мне очень не понравился этот эффект.

Дожидаться, пока сгорят обмотки мотора или драйвер я не стал и начал разбираться, что не так. Всё решить помог пин ENABLE. В случае, если вращение мотора не требуется, следует выключить драйвер ENABLE=1, а когда понадобится вращение, нужно просто включить драйвер ENABLE=0. Поскольку в роботе используются 12 моторов, и они не очень часто вращаются одновременно, значит им можно давать остыть, когда не нужны.

Я взял под контроль пин Enable каждого драйвера мотора через Ардуино. Понадобилось дополнительно задействовать 12 пинов контроллера, но драйверы стали холодными и моторы больше не шумят, хотя используется напряжение 36V.

4. Как избавиться от писка шаговых моторов


Сначала я приобрёл драйверы для шаговых моторов A4988, понадобилось 12 штук. Они популярные, надёжные, простые и понятные, а также очень дешёвые, для новичков самое то. Всё работало почти хорошо, с шагами всё понятно, 1 импульс – 1 шаг, 200 импульсов при 1.8 градуса на 1 шаг – 1 оборот мотора.

Но, было 2 неприятных момента. На малых оборотах, особенно, когда нужно медленно повернуть клюшку игрока, у моторов наступал тремор. И ещё, этот писк! При работе 12 моторов было ощущение, что со мной разговаривает R2D2.

Стал искать решение проблемы и узнал о тихих драйверах с немецкими чипами Trinamic TMC 2100, 2130, 2208 и прочих сериях. Стоят они в несколько раз дороже, но, если Вам нужна тишина и плавность хода, они того стоят.

В TMC есть режим StelthChop с интерполяцией 4 или 16 входных импульсов в 256 микрошагов. После тестирования, выбрал режим 4->256 микрошагов.

StelthChop TMC2100

Скетч для Ардуино потребовалось немного дописать, т.к. теперь для полного оборота мотора требовалось не 200 шагов, а в 4 раза больше (800 на 1 полный оборот) из-за используемого режима StelthChop 4->256. Больше шагов – плавнее и тише ход. Вращение сейчас плавное, тихое и никакого писка.

Видео, что в итоге получилось:


Надеюсь, мой опыт поможет кому-нибудь в других проектах.
AdBlock похитил этот баннер, но баннеры не зубы — отрастут

Подробнее
Реклама

Комментарии 23

    +4
    Шикарно!
      0
      как минимум оригинально :) Жаль, не могу «плюсануть» статью!

      я шаговые пощупал, когда делал самодельный расстановщик SMD-компонентов на плату. ДА. проще заказать сборку плат в Китае (или местных монтажников), но чУдное слово — ХОТЕЛОСЬ самому такой сделать и всё пощупать :)
      флуд
      Станок заработал, что даже удивило. Медленно, ошибаясь иногда на миллиметр(!), но заработало.
      Да, использовал в работе, окупил себя первой партией собранных плат.
      Сейчас простаивает: 1. Вирус и заказы пропали. 2. Мне он уже не нравится, хочется быстрее, точнее, с питателями (фидерами), а их надо отпечатать на 3d-принтере. Он куплен, но так до конца и не доделан.
      0
      Вратарей на мыло! Или на переобучение. R2D2, играющий в хоккей это плюс.
      Отличный проект в плане форсирования шаговиков и управляющей электроники.

      Усё
        0
        Стал искать решение проблемы и узнал о тихих драйверах с немецкими чипами Trinamic TMC 2100, 2130, 2208 и прочих сериях

        подскажите, а у вас были «белые» или «черные» платы у драйверов?

        До сих пор по Сети ходят байки, что платы у них по разному разведены, поэтому черные надёжнее, но надо радиатор получше приклеить, а белые не такие горячие при работе, но критичнее к просадке питания (и на них нельзя больше 38в подавать)
          0
          В роботе сейчас установлены TMC2100 — 2 черных v1 и 10 белых v1.3 (заказывал по-очереди для пробы). Они разные, но у обоих пришлось пины ms припаивать. У v1 (черные) вручную ms припаять очень сложно, даже под стеклом, слишком мелко 1мм. Для v1.3 (белые) паять ms гораздо удобнее, т.к. на плате они крупнее. Питание использую 36 вольт, а вот на счёт нагрева не подскажу, у меня всё холодное, т.к. через пин Enable сразу отключаю драйвер, если не нужен.
            0
            понял, спасибо!
            У меня отключать не получится — мне надо удержание вакуумного захвата, а, если я верно понимаю, при отключении ключей снимается и ток с катушек.
          +2
          Очень колоритный проект, понравилась идея.

          С током проблем не было (нема может от 2А сжёвывать. Итого 25А. Нет?)?

          А продолжение будет?
          — Распознавание положения игроков (движок при разгоне пропускает шаги, так?) и клюшек (также пропуск шагов).
          — Логика по игре: кого как двинуть и т.д.

            0
            Не думаю, что стратегия игры подразумевает одновременную работу большого количество моторов
              0
              Спасибо!
              У меня набралось 3 разных типа моторов 1.7А, 2A, т.к. брал по-очереди для тестирования, остановился на 2А. Они бьют сильнее, шайба часто летит по воздуху, если надо.
              Сейчас нашёл на Ali моторы на 2.5А, попробую позже.

              Продолжение будет, есть много идей, как улучшить/упростить/облегчить механику, с софтом можно улучшать бесконечно. Сейчас переношу «мозги» с десктопа на Raspbery Pi 4.

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

                Если подсчет шагов не осуществляется, то проще использовать DC моторы через Н мост.
              0

              Интересно про программную часть тоже, видно, что компьютер делает не очевидные голы, например, с отскоком от стены.

                +1
                Про распознавание и программную часть расскажу в последующих видео/статьях, выкладываю по-очереди, как всё было исторически — механика, распознавание объектов, алгоритм игры.

                Элемент случайности специально добавлен (30% случаев), с ним игра проходит интереснее. Некоторые голы просто нереальные.
                  0
                  Элемент случайности специально добавлен (30% случаев), с ним игра проходит интереснее.

                  Кстати, как оно играется против шестирукого противника? Без элемента случайности, по идее, должен быть полный швах?
                    0
                    Если убрать случайность, игрок-человек будет постоянно держать левую руку на вратаре и ожидать удара — так будет не интересно играть
                +2
                А если на вторую сторону такого же робота посадить?
                А если неиспользуемым хоккеистам добавить idle-анимации?
                  +3
                  Это уже получится почти как в фильме Живая сталь
                    +2
                    И будет охрененно )
                  +1
                  А музыка специально, чтобы работу моторов не было слышно?
                  На микрошаге драйверы греются значительно сильнее, чем без деления.
                  Если хотите опытом поделиться выложите код с обработкой ускорений.
                    +1
                    Шум моторов в процессе игры
                    www.youtube.com/watch?v=6oS7r0hbwhk&t=830

                    Быстрое передвижение вперёд и назад, код для Ардуино для драйверов TMC2100 4->256
                    int m_iMLineStepPin = STEP_PIN;
                    unsigned long i = 0;
                    unsigned long iDelayStep1 = 0;
                    unsigned long m_iMLineStepCount = 1000;

                    while (m_iMLineStepCount > 0) {
                    iDelayStep1 = (200000000/(i*i*i+100000)+4)/4;
                    digitalWrite(m_iMLineStepPin, HIGH);
                    digitalWrite(m_iMLineStepPin, LOW);
                    delayMicroseconds(iDelayStep1);

                    if (m_iMLineStepCount%4==0) i++;
                    m_iMLineStepCount--;
                    }
                      0
                      То есть торможения нет просто остановка. Удара при остановке после большой скорости не наблюдается?
                      И в каждый момент возможно только одно движение — поступательное или вращательное только на одном «игроке»
                      А как управляется всё в целом? Как ищется шайба? Камера и распознавание картинки, нейросеть… расскажете?
                    +2
                    Очень здорово! Жду следущей статьи с описанием, как вы обучили его играть
                      0
                      Ух! Впечатляет! В детстве развлекались таким хоккеем.
                      Очень интересно про логику.
                      А что за музыка в видео?
                        0
                        нужно передвинуть игрока на ~40 см за доли секунды

                        А вариант поставить на ремень шестерню с бОльшим диаметром не рассматривался?
                        Самый простой способ увеличить скорость перемещения игрока.

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

                        Самое читаемое