- Digitrode
- цифровая электроника вычислительная техника встраиваемые системы
- Превращаем шаговый двигатель в энкодер
- Тема: Валкодер из шагового двигателя
- Валкодер из шагового двигателя
- Вечный энкодер (валкодер) с устойчивыми положениями из шагового двигателя
- Содержание / Contents
- ↑ Шаговый двигатель и схема
- ↑ Недостатки схемы и их преодоление
- ↑ Видео в работе
- ↑ Итого
- Камрад, рассмотри датагорские рекомендации
- 🌻 Купон до 1000₽ для новичка на Aliexpress
- 🌼 Полезные и проверенные железяки, можно брать
- Сага о абсолютном энкодере и шаговом двигателе
- Подпишитесь на автора
- Подпишитесь на автора
Digitrode
цифровая электроника вычислительная техника встраиваемые системы
Превращаем шаговый двигатель в энкодер
В электромеханике одним из интересных моментов является то, что обычный двигатель постоянного тока может играть роль также генератора. Вы можете использовать электричество для вращения вала или использовать вращающийся вал для выработки электроэнергии. На основе этого принципа можно сделать немало полезных вещей. И в данном материале мы покажем, как использовать шаговый двигатель в качестве датчика.
Применение шагового мотора в качестве датчика имеет смысл. Если катушки в двигателе могут перемещать вал, то перемещение вала должно вызвать ток в катушках. Однако следует заметить, что при низких скоростях вы можете пропустить импульсы. Опять же, устройство не оптимизировано для этого типа операций.
В схеме используется дифференциальный усилитель на основе двух ОУ для считывания импульсов от катушки. Два операционных усилителя с двух катушек создают квадратурный сигнал, как обычный энкодер.
Когда вал поворачивается в одном направлении, один импульс будет следовать за другим. При вращении в другом направлении последовательность импульсов будет реверсирована.
Для проверки работоспособности концепции можно собрать схему из Arduino, двух двигателей и драйвера A4988.
А можно с одним двигателем и светодиодным кольцом AdaFruit NeoPixel в качестве индикатора, как на видео ниже.
В любом случае считывать импульсы с датчика/двигателя поможет следующий код:
Тема: Валкодер из шагового двигателя
Опции темы
Поиск по теме
Валкодер из шагового двигателя
Собрал эту схемку http://ru3ga.qrz.ru/UZLY/encod.htm , работает великолепно, но перестраивает частоту через один импульс. Получилось примерно 100 импульсов вместо 200. Как сделать чтобы было 200.
Вот это дааааа. Читал форумы по этим темам, там столько людей собирало их, а никто не испытывал похоже. У одного меня проблема с ним что ли?
Проблема не с шаговым двигателем и схемой, а с ПРОГРАММОЙ!
А они разве не одинаковые. На входе синтеза формируется 10, 11, 01, 00. Это 4 щелчка двигателя. При этом происходит два шага наверх. Как можно получить два импульса за 1 щелчок.
Возмите упрощенную модель для оптовалкодера с оптюратором с четырьмя прорезями (Мальтийский крест). Это четыре «щелчка». За один оборот вы получите восемь изменеий состояния оптопары, а на двух фотоприемниках — шестнадцать.
Ну так с оптопарой понятно. У неё 2 фотоприёмника и 8 состояний. У шаговика 2 обмотки и . состояний. Я кстати разобрал двигатель и вывел все выводы обмоток отдельно. Получилось 2 пары обмоток совмещенных под 90 град. Можно ли включить 4 обмотки как нибудь. Я написал письмо RD3AY по поводу этой проблемы, но пока ответа нет.
С валкодером из шагового двигателя то же, что и с оптовалкодером. Посмотрите на схему, ссылку на которую Вы приводите ранее. И там и там на выходе два сигнала сдвинутые на 90 град. с цифровыми уровнями. Есть, правда, еще один нюанс. В валкодере из шагового двигателя Вы имеете именно ЩЕЛЧКИ — механическую фиксацию угла поворота. Один щелчек, как мы выяснили, это два перехода. Т.е. сдвинуть валкодер только на один переход НЕ ПОЛУЧИТСЯ! Это можно сделать только используя оптический валкодер. Заодно отпадет надобность в операционниках, значительно снижается вес и габариты.
Вот пример реализации валкодера из компьютерной мыши. Такие валкодеры прменяются в моем DDS синтезаторе.
Да, но некоторые шаговички имеют функцию так называемую режым полушагов. и при этом как раз таки имеют место быть промежуточные числа, которые не воспринимаются PIC-ом трансивера. При поключении шаговика с двумя обмотками, но с 50-ю щелчками, всё ровно, переключает при каждом щелчке. это скорее дело в движке.
Тогда смотри сообщение номер три.
Изначально непонятно о чем идет речь? Что за конструкция? Какой контроллер? Кто писал программу? Есть ли возможность ее изменить?
Если валкодер с формирователем исправно работает в статическом режиме (медленное вращение с контролем состояний по обоим каналам) то очевидно, что неувязки в управляемом устройстве.
Вечный энкодер (валкодер) с устойчивыми положениями из шагового двигателя
Механический энкодер — вещь удобная в использовании, но он имеет некоторые досадные недостатки. В частности, контакты со временем изнашиваются и приходят в негодность, появляется дребезг. Оптические энкодеры гораздо надежнее, но они дороже, многие из них боятся пыли, и они редко встречаются в таком виде, в котором их удобно было бы использовать в радиотехнике.
Короче, когда я узнал о том, что шаговый двигатель можно использовать как энкодер, эта идея мне очень понравилась.
Практически вечный энкодер! Замучить его невозможно: соберешь раз и можешь энкодить всю жизнь.
Содержание / Contents
↑ Шаговый двигатель и схема
Я разобрал несколько дисководов, везде двигатели были разные. Встречались на шлейфе, встречались с косой цветных проводов. На шлейфе общий провод — крайний. Всё остальное находится прозвонкой. По сопротивлению понятно: с выхода на выход сопротивление вдвое больше, чем с выхода на общую точку. А можно даже не прозванивать. Если открутить четыре винта, внутри коммутационная плата, на ней видно, где общий провод.
Исходная схема многократно встречается в Сети в вариациях. Я оттолкнулся от статьи Thomas (OZ2CPU) .
У неё есть достоинства, но есть и недостатки, об этом далее. Собрал пробный вариант в виде макета, и понял, что ничего не понял
Для начала хотелось бы сразу видеть, в какую сторону происходит шаг. Схема выдавала квадратурный код, как и обычный энкодер. Этот код надо было каким-то образом превратить в мигание светодиода — «правый» или «левый».
Разработал и протестировал вот такую схему:
Кстати, эту схему на логике можно использовать и для обычного энкодера, я её и отрабатывал на нём.
Для сборки понадобятся 8 элементов «2И-НЕ», я использовал два чипа 74HC00.
Элемент U2A, диод, конденсатор и U2B создают короткий импульс в момент положительного фронта. Элемент U6D, U4D и U2D — мультиплексор, который пересылает этот испульс либо на один, либо на другой светодиод.
Разумеется, этот же функционал можно сделать на единственном микроконтроллере, но это далеко не для всех доступно и удобно. Всё-таки элементы 2И-НЕ можно найти где угодно, в т. ч. советские (74хх00, К155ЛА3, К555ЛА3).
Последние два инвертора (U5D и U3D) можно выкинуть, ведь ничто нам не мешает подключить светодиоды не к земле, а к плюсу питания. Если крепко пошевелить мозгом, схему можно было бы ещё упростить, но эту задачу оставляем на будущее.
Печатки нет, поскольку всё собиралось только на макетке.
↑ Недостатки схемы и их преодоление
↑ Видео в работе
Жалко, что видео не передает тактильные ощущения на валу!
↑ Итого
В целом работа энкодера меня устраивает. Крутить такую «ручку громкости» необычно приятно.
Работа над устройством будет продолжена.
Спасибо за внимание!
Камрад, рассмотри датагорские рекомендации
🌻 Купон до 1000₽ для новичка на Aliexpress
Никогда не затаривался у китайцев? Пришло время начать!
Камрад, регистрируйся на Али по нашей ссылке. Ты получишь скидочный купон на первый заказ. Не тяни, условия акции меняются.
🌼 Полезные и проверенные железяки, можно брать
Куплено и опробовано читателями или в лаборатории редакции.
Сага о абсолютном энкодере и шаговом двигателе
Подпишитесь на автора
Подпишитесь на автора, если вам нравятся его публикации. Тогда вы будете получать уведомления о его новых постах.
Отписаться от уведомлений вы всегда сможете в профиле автора.
Давно я тут не писал постов про принтеры и электронику, но тут назрела тема использования абсолютного энкодера и попытке сделать вменяемое упралвение шаговым двигателем с рассчётом на точность позиционирования (не путать с повторяемостью).
В качестве подопытного было приобретено несколько разных магнитных энкодеров наподобие тех, что используются в таких проектах как 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 оборота в секунду) ошибка повторяемости позиционирования шаговика становится сравнимой с одним микрошагом
0.7 градусов (что примерно 7 шагов при дроблении 1/16, или если пересчитать в мм то это будет
0.1 мм в среднем)
Но это если речь идёт о повторяемости а не о точности. А это разные понятия. Так что теперь поговрим про точность. Будем считать, как это далают прошивки большниства принтеров, что перемещение на один микрошаг у нас всегда одианково (в данном случае это 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 шаговик, которые будет в состоянии корректировать нелинейности при перемещении.
Подпишитесь на автора
Подпишитесь на автора, если вам нравятся его публикации. Тогда вы будете получать уведомления о его новых постах.
Отписаться от уведомлений вы всегда сможете в профиле автора.