Шаговый мотор как энкодер

цифровая электроника вычислительная техника встраиваемые системы

Превращаем шаговый двигатель в энкодер

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

Шаговый мотор как энкодер

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

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

Шаговый мотор как энкодер

Когда вал поворачивается в одном направлении, один импульс будет следовать за другим. При вращении в другом направлении последовательность импульсов будет реверсирована.

Шаговый мотор как энкодер

Для проверки работоспособности концепции можно собрать схему из Arduino, двух двигателей и драйвера A4988.

Шаговый мотор как энкодер

А можно с одним двигателем и светодиодным кольцом AdaFruit NeoPixel в качестве индикатора, как на видео ниже.

В любом случае считывать импульсы с датчика/двигателя поможет следующий код:

Видео:Скрытая полезная функция двигателя от CD-ROM-аСкачать

Скрытая полезная функция двигателя от CD-ROM-а

Шаговый двигатель в роли энкодера

Шаговый мотор как энкодер

Применять шаговый двигатель в качестве генератора не пробовал только ленивый, а как насчёт его применения в роли энкодера? Легко — утверждает автор Arduino Project Hub под ником Andrewf1. Лицензия — GPL версии 3 или больше по вашему выбору.

Подключать такой импровизированный энкодер прямо к входам Arduino нельзя — напряжение до 50 В выведет микроконтроллер из строя. Нужно несложное согласующее устройство:

Шаговый мотор как энкодер

При вращении вала двигателя на двух выходах согласующего устройства появляются примоугольные импульсы:

Шаговый мотор как энкодер

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

Чтобы показать возможности устройства, мастер также подключает к Arduino второй шаговый двигатель с драйвером A4988, используемый по прямому назначению, а также адресное светодиодное кольцо Neopixel. Вы вращаете вал двигателя, применяемого в качестве энкодера, а второй двигатель или светящаяся точка на светодиодном кольце повторяют вращение по направлению и скорости.

Шаговый мотор как энкодер

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

Видео:Энкодер из шагового двигателя на АрдуиноСкачать

Энкодер из шагового двигателя на  Ардуино

Вечный энкодер (валкодер) с устойчивыми положениями из шагового двигателя

Шаговый мотор как энкодер

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

Читайте также: Регулировка зажигания лодочный мотор салют

Короче, когда я узнал о том, что шаговый двигатель можно использовать как энкодер, эта идея мне очень понравилась.
Практически вечный энкодер! Замучить его невозможно: соберешь раз и можешь энкодить всю жизнь.

Видео:Шаговый двигатель + оптический энкодерСкачать

Шаговый двигатель + оптический энкодер

↑ Шаговый двигатель и схема

Шаговый мотор как энкодер

Я разобрал несколько дисководов, везде двигатели были разные. Встречались на шлейфе, встречались с косой цветных проводов. На шлейфе общий провод — крайний. Всё остальное находится прозвонкой. По сопротивлению понятно: с выхода на выход сопротивление вдвое больше, чем с выхода на общую точку. А можно даже не прозванивать. Если открутить четыре винта, внутри коммутационная плата, на ней видно, где общий провод.

Исходная схема многократно встречается в Сети в вариациях. Я оттолкнулся от статьи Thomas (OZ2CPU) .

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

Разработал и протестировал вот такую схему:

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

Для сборки понадобятся 8 элементов «2И-НЕ», я использовал два чипа 74HC00.
Элемент U2A, диод, конденсатор и U2B создают короткий импульс в момент положительного фронта. Элемент U6D, U4D и U2D — мультиплексор, который пересылает этот испульс либо на один, либо на другой светодиод.

Разумеется, этот же функционал можно сделать на единственном микроконтроллере, но это далеко не для всех доступно и удобно. Всё-таки элементы 2И-НЕ можно найти где угодно, в т. ч. советские (74хх00, К155ЛА3, К555ЛА3).
Последние два инвертора (U5D и U3D) можно выкинуть, ведь ничто нам не мешает подключить светодиоды не к земле, а к плюсу питания. Если крепко пошевелить мозгом, схему можно было бы ещё упростить, но эту задачу оставляем на будущее.
Печатки нет, поскольку всё собиралось только на макетке.

Видео:Как работает шаговый двигатель с энкодеромСкачать

Как работает шаговый двигатель с энкодером

↑ Недостатки схемы и их преодоление

Видео:Создание инкрементного, магнитного энкодера.Скачать

Создание инкрементного, магнитного энкодера.

↑ Видео в работе

Жалко, что видео не передает тактильные ощущения на валу!

Видео:Управление биполярным шаговым двигателем при помощи инкрементального энкодера. Инкрементный энкодер.Скачать

Управление биполярным шаговым двигателем при помощи инкрементального энкодера. Инкрементный энкодер.

↑ Итого

В целом работа энкодера меня устраивает. Крутить такую «ручку громкости» необычно приятно.
Работа над устройством будет продолжена.

Видео:Валкодер из шагового двигателя (encoder). Шаговый Двигатель. stepper motorsСкачать

Валкодер из шагового двигателя (encoder). Шаговый Двигатель. stepper motors

Камрад, рассмотри датагорские рекомендации

? Полезные и проверенные железяки, можно брать

Опробовано в лаборатории редакции или читателями.

Видео:Энкодеры. Подробный обзор с экспериментами!Скачать

Энкодеры. Подробный обзор с экспериментами!

Сага о абсолютном энкодере и шаговом двигателе

Подпишитесь на автора

Подпишитесь на автора, если вам нравятся его публикации. Тогда вы будете получать уведомления о его новых постах.

Читайте также: Как правильно соединить мотор

Отписаться от уведомлений вы всегда сможете в профиле автора.

Давно я тут не писал постов про принтеры и электронику, но тут назрела тема использования абсолютного энкодера и попытке сделать вменяемое упралвение шаговым двигателем с рассчётом на точность позиционирования (не путать с повторяемостью).

В качестве подопытного было приобретено несколько разных магнитных энкодеров наподобие тех, что используются в таких проектах как mechaduino (или его китайская инкарнация как MSK Servo42) или же в системах стабилизации камер (внезапно там используются те же магнитные энкодеры). В итоге у меня оказалось два их от разных производителей:

    AS5048A с разрешением 12bit (если пересчитать в угол по нехитрой формуле 360/2**12

0.08789 градуса)
TLE5012b с разрешением 15bit (опять же если пересчитать в угол то 360/2**15

В итоге я остановился на втором варианте, так как его разрешения хватает что бы легко ловить повороты даже для двигателя в 400 шагов на оборот при 32 микрошаге (а это получится примерно так 360/(400*32)

0.028125 градуса), хотя это уже и экстремальный вариант.

На макетке была собрана конструкция из stm32f103c8t6 aka bluepill энкодера и драйвера шагового двигателя tmc2130 (взял то что было под руками). Всё это счастье было запрограммировано на довольно простые действия:

  • stm32 имеет прерывания на трех пинах которые подключены к Step/Dir/Enable на плате управления принтером
  • при получении сигналов на Step/Dir/Enable производится stm32 делает шаг через tmc2130
  • после завершения шага (если успевает) считывает положение двигателя через энкодер tle5012b (на валу двигателя помещён магнит)
  • stm32 печатает в UART инфу о количестве шагов, микрошаге, количесве оборотов и текущем угле поворота двигателя (энкодер таки абсолютный и умеет считать обороты)

Дальше у меня возникла идея проверить насколько точно шаговик встаёт по шагам. Для этого в управляющей плате принтера (которая тоже stm32 но пожирнее) были выставлены виртуальные 80 steps/mm для оси X (в принципе это значение стандартное для 20 зубой шпули для GT2) а драйвер двигателя был выставлен в 16 микрошаг (двигатель у меня 1.8 градуса, 200 шагов на оборот, и как следствия с 16 микрошагом каждый шаг соответсвует 360/(200*16) = 0.1125 градуса, запомним эту цифру). Я решил посмотреть как у нас зависит точность выставления угла поворота от скорости принтера (а как следствие и точность). Как происходило тестирование:

  • Был выбран набор скоростей: 10, 25, 50, 75, 100, 125, 150, 200, 250 мм/с
  • Для каждой скорости передвижение с X0 до X160 и обратно и ожидание в крайних положения по 2 секунды (это 4 оборота движка в одну строну и в другую) повторялось по 25 раз
  • Данные с энкодера писались в лог (скриптик с сериал консоли всё писал в файлики)

В итоге получилось довольно занятная картинка: Шаговый мотор как энкодер1.875 оборота в секунду) ошибка повторяемости позиционирования шаговика становится сравнимой с одним микрошагом

  • На скоростях 100, 125, 150 и 200 мм/с у нас ошибка повторяемости позиционирования шаговика снова становится сравнимой с погрешностью датчика угла поворота (особенность драйвера tmc2130, для него это другой режим работы и он пытается делать точное позиционирование)
  • А вот на скорости в 250мм/с система идёт в разнос и повторяемость падает до 0.7 градусов (что примерно 7 шагов при дроблении 1/16, или если пересчитать в мм то это будет
  • Но это если речь идёт о повторяемости а не о точности. А это разные понятия. Так что теперь поговрим про точность. Будем считать, как это далают прошивки большниства принтеров, что перемещение на один микрошаг у нас всегда одианково (в данном случае это 0.1125 градуса или 0.0125 мм если у нас 80 шагов на мм). Посмотрим насколько это так. То что мы видим при скорости 10мм/с (да довольно медленно) Шаговый мотор как энкодерНа картинках нарисовано чтение с датчика и счётчик шагов (данные датчика это синяя линия) а так же идеальные значения углов для данного номера шага (хе хе, довольно просто посчитать) а так же вертикальными черточками различия реально измеренного от идеального. Какие выводы можно сделать по этой картинке:

    • Шаги у нас не равномерны (что в целом понятно, исходя из физики двигателя)
    • Какие то шаги у нас почти точно попадают в идеальные значения углов поворота (но не все. совсем не все. )
    • Хотя точность позиционирования у нас не очень высокая, но повторяемость хорошая (синяя линия на картинке это статистика по 25 повторам

    Теперь посмотрим что будет если шаговик пойдёт немного быстрее 25 мм/с

    Шаговый мотор как энкодер

    Картинка в целом не поменялась, но ошибка позиционирования возросла (разница между реальным и идеальным положением)

    Шаговый мотор как энкодер

    Видно что позиционирование стало ещё хуже.

    Шаговый мотор как энкодер

    Шаговый мотор как энкодер

    Ошибка осталась на прежнем уровне (tmc2130 перешел в другой режим работы)

    Шаговый мотор как энкодер

    Шаговый мотор как энкодер

    Шаговый мотор как энкодер

    Шаговый мотор как энкодер

    Шаговый мотор как энкодер

    Картинка похожа на первую. Опять же зеленая линия это среднее. Оражневая медиана. Какие выводы можно сделать?

    • Что приятно средняя ошибка позиционирования примерно 0. Что означает что шаговик с одинаковой вероятность как проскакивает положение, так и недоходит до него (по этому среднее и есть 0).
    • А вот медиана уже становится большой. На уровне 0.5-0.8 градуса.
    • Разброс ошибок довольно большой, он растёт с примерно 0.2 градусов при 10мм/с до 4 градусов при 250мм/с, что соответсвует разбросу хода от 0.02 до 0.5 мм (хе хе.. кто там хвастался что печатает на скорости 200+мм/с. )
    • Ещё замечу, что всё это измерялось на свободном шаговике без нагрузки. С нагрузкой будет все печальнее (и я это проверю в следующей части)

    Что из всего этого следует?

    Если хочется повышать качество печати, то надо слегка поменять подход к позиционирования шаговика в прошивках (позицоинирование у него не линейное, и это надо учитывать). По идее надо сделать умный closed-loop шаговик, которые будет в состоянии корректировать нелинейности при перемещении.

    Подпишитесь на автора

    Подпишитесь на автора, если вам нравятся его публикации. Тогда вы будете получать уведомления о его новых постах.

    Отписаться от уведомлений вы всегда сможете в профиле автора.

    • Свежие записи
      • Чем отличается двухтактный мотор от четырехтактного
      • Сколько масла заливать в редуктор мотоблока
      • Какие моторы бывают у стиральных машин
      • Какие валы отсутствуют в двухвальной кпп
      • Как снять стопорную шайбу с вала


      🎥 Видео

      Шаговые двигатели, и как ими управлять с помощью микроконтроллераСкачать

      Шаговые двигатели, и как ими управлять с помощью микроконтроллера

      Сравнение Шаговых Двигателей и Шаговиков с ЭнкодеромСкачать

      Сравнение Шаговых Двигателей и Шаговиков с Энкодером

      Работа энкодераСкачать

      Работа энкодера

      Подключение двигателя без электроники и Ардуино!Скачать

      Подключение двигателя без электроники и Ардуино!

      Datagor.ru - Вечный энкодер (валкодер) с устойчивыми положениями из шагового двигателяСкачать

      Datagor.ru - Вечный энкодер (валкодер) с устойчивыми положениями из шагового двигателя

      Энкодер шаговый двигатель и драйвер,что это???Скачать

      Энкодер шаговый двигатель и драйвер,что это???

      Управление шаговым двигателем. Драйвер A4988, подключение и настройкаСкачать

      Управление шаговым двигателем. Драйвер A4988, подключение и настройка

      Шаговый двигатель со встроенным драйвером и энкодером.Скачать

      Шаговый двигатель со встроенным драйвером и энкодером.

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

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

      Энкодер электродвигателя для arduino. Робототехника для начинающихСкачать

      Энкодер электродвигателя для arduino. Робототехника для начинающих

      Драйверы шагового двигателя T86 против HBS860H для мотора с энкодеромСкачать

      Драйверы шагового двигателя T86 против HBS860H для мотора с энкодером

      NEMA17 Управление шаговым двигателем - Stepper motor with ArduinoСкачать

      NEMA17 Управление шаговым двигателем  - Stepper motor with Arduino
    Поделиться или сохранить к себе:
    Технарь знаток