Шаговый двигатель как валкодер
4.3.7. Обнаружение потери шагов¶
Данный режим используется главным образом если производится работа с шаговым двигателем на предельных скоростях или нагрузках, где возможно застревание оси, приводящее к потере шагов. В этом случае дополнительный датчик положения ( датчик оборотов или энкодер ) позволяет отследить этот момент уведомить пользователя. Данная функция используется только совместно с шаговыми двигателями и позволяет обнаруживать потерю шагов. Все координаты и положения оси мотора измеряются в шагах и микрошагах.
При использовании энкодера в контроллере сохраняется значение количества шагов двигателя и отсчётов энкодера на оборот (см. вкладку XiLab Настройка кинематики движения ). При включении функции, контроллер сохраняет текущую позицию в шагах ШД и текущую позицию по данным энкодера. Далее, в ходе движения, позиция по энкодеру преобразовывается в шаги и, если разница оказывается больше заданного значения, осуществляется индикация проскальзывания и переход в режим Alarm , при включении соответствующей настройки. Подробно использование энкодера как датчика потери шагов описано в разделе Работа с энкодерами .
При использовании датчика оборотов позиция контролируется по нему. По активному и неактивному фронтам на входе от датчика оборотов контроллер запоминает текущее положение в шагах. Далее, при каждом обороте (количество шагов на один полный оборот мотора устанавливается параметром Steps per turn, см. Настройка кинематики движения (Шаговый двигатель) ) контроллер проверяет, на сколько шагов сместилась ось. При рассогласовании более чем на заданное значение ошибки Minimal error (устанавливается в настройках контроля позиции, см. Контроль позиции ) осуществляется индикация проскальзывания флагом структуры состояния. Если в настройках установлен соответствующий флаг, то при выявлении ошибки контроллер переходит в режим Alarm и мотор останавливается, иначе продолжает свое движение. Если флаг индикации проскальзывания активен, то контроллер переходит в режим Alarm при включении соответствующего параметра в настройках.
Так же в настройках контроля позиции может быть включен режим автоматической коррекции позиции в случае потери шагов. Если эта опция включена, то при обнаружении проскальзывания контроллер останавливает вращение, корректирует шаговую позицию на основании данных энкодера и пытается запустить вращение заново. Флаг ошибки контроля позиции устанавливается, когда позиция сбивается и автоматически снимается после корректировки. В случае невозможности скорректировать позицию устанавливается флаг ошибки контроля позиции и контроллер переходит в режим Alarm . Если потеря шагов происходит в процессе движения, то статус движения не сбрасывается во время коррекции позиции. Если потеря шагов происходит в режиме удержания позиции, то для восстановления корректной позиции подаётся команда движения в позицию , в которой ось мотора находилась до потери шагов.
Для использования функции коррекции позиции нужен энкодер с разрешением не менее двух отсчётов на шаг мотора.
Для корректной работы коррекции позиции контроллеру нужно дать постоять с запитанными обмотками в течение 1 секунды для калибровки. После перехода конторллера в режим Alarm или изменения настроек требуется повторная калибровка.
При использовании автоматической коррекции позиции не рекомендуется устанавливать значение Threshold более 3 шагов т.к. в этом случае не любое проскальзывание будет скорректировано.
Команды резкой и плавной остановки могут быть проигнорированы контроллером во время коррекции позиции. В этом случае можно послать команду плавной остановки дважды, что приведёт к снятию питания с обмоток мотора.
Замечание. Если Вы пользуетесь программными концевиками , то использовать автоматическую коррекцию позиции не рекомендуется, т.к. положения программных концевиков будут изменяться в процессе коррекции позиции.
Команда резкой остановки запускает процесс перекалибровки положения датчика оборотов, причём калибровка происходит при срабатывании датчика оборотов во время движения, управляемого двигателем. Это значит, что если сразу после резкой остановки повернуть ось руками, то после начала движения проскальзывание не будет обнаружено, т.к. калибровка ещё не была произведена.
Если датчик оборота двигателя подвержен дребезгу (механическому), то на очень малых скоростях возможны ложные срабатывания контроля по датчику оборотов.
Контроль позиции по датчику оборотов не может обнаружить вращение оси при нулевой внутренней скорости. Т.е. если остановить двигатель и руками провернуть ось, то это не будет обнаружено.
#21. Подключаем к Arduino Шаговый двигатель 28BYJ-48 на драйвере ULN2003
Сегодня в уроке подключим шаговый двигатель 28BYJ-48 к Arduino и научимся вращать вал двигателя в разные стороны и изменять скорость вращения с помощью потенциометра и энкодера KY-040.
Кратко, что такое шаговый двигатель (ШД) — это двигатель, который способен осуществлять вращение на 1 шаг. Шаг — это угол, который обусловлен устройством каждого конкретного шагового двигателя.
Характеристики шагового двигателя 28BYJ-48:
Размера шагового двигателя 28BYJ-48. Необходимы при проектировании деталей для 3D печати.
Вот так выглядит схема шагового двигателя 28BYJ-48
Подавая сигналы в определённом порядке на выводы двигателя, двигатель можно вращать по часовой стрелке.
Для шагового режима.
Для полушагового режима.
Прямое подключение шагового двигателя 28BYJ-48 к Arduino.
В связи с тем, что двигатель 28BYJ-48 работает от 5в и при небольших токах, его можно подключить на прямую к Arduino.
Схема подключения к Arduino UNO будет следующая.
Для вращения ШД достаточно подавать сигналы по схеме, которую мы рассмотрели выше.
Для этого можно сделать массив подачи сигнала на пины микроконтроллера.
И в цикле выполнять каждую строчку массива. Но есть решение с более компактным кодом. Нашел я данный пример на канале Дмитрия Осипова. За что ему отельное спасибо!
Код для вращения в одну и в другую сторону будет вот таким.
ВНИМАНИЕ! Материалы для скачивания находятся внизу статьи!
Пример подключения шагового двигателя 28BYJ-48 (5V)с использованием драйвер ULN2003.
Также у Дмитрия Осипова есть код для изменения скорости вращения с помощью потенциометра. Я его немного доработал, сделал обработку нажатия кнопки без задержки в 500 мс. Сейчас двигатель стал вращаться в обратную сторону без видимой задержки.
Для подключения буду использовать модуль SBT0811 на драйвере ULN2003.
Драйвер устроен вот таким образом.
Соответственно, наш код будет работать и с данным драйвером.
Подключим все по схеме и загрузим код в Arduino NANO.
Схема подключения для Arduino UNO будет аналогичной.
Как видим, двигатель без проблем вращается по часовой стрелке и против часовой, при нажатии на кнопку вращается в противоположном направлении. При вращении потенциометра в одну сторону — скорость уменьшается, при вращении в противоположном направлении скорость увеличивается.
ВНИМАНИЕ! Материалы для скачивания находятся внизу статьи!
Пример управления шаговым двигателем 28BYJ-48 с помощью Энкодера.
Для уменьшения количества элементов в схеме решил заменить потенциометр и тактовую кнопку на энкодер вращения KY-040. Как подключить энкодер вращения к Arduino рассказывал в предыдущем уроке.
Подключаем шаговый двигатель 28BYJ-48 и энкодер к Arduino по схеме.
Проводим небольшую доработку кода и получим вот такой результат.
Если нажать на энкодер, меняется направление вращения. А при вращении энкодера по часовой стрелке — скорость увеличивается. Если вращать против часовой стрелки — скорость снижается.
ВНИМАНИЕ! Материалы для скачивания находятся внизу статьи!
Вы также можете без проблем воспользоваться примером из стандартной библиотеки Stepper, которая позволит сделать тоже самое и при меньшем объёме кода. Но библиотека не даст вам понять, как это все устроено.
А вот сам пример вращения в одну сторону, а затем в другую с использованием библиотеки Stepper.
На основе данного примера можно реализовать управление не только одним шаговым двигателем, а несколькими. Причем, каждый двигатель будет выполнять свои действия не зависимо от других. В планах сделать пару проектов с использованием данного шагового двигателя.
Пишите в комментариях, что бы вы хотели сделать на шаговых двигателях, и какие примеры вас интересуют. Чем больше будет откликов, тем чаше будут выходить проекты и уроки на сайте.
Не забывайте подписываться на канал Youtube и вступайте в группы в Вконтакте и Facebook.
Всем Пока-Пока.
И до встречи в следующем уроке
Понравилась статья? Поделитесь ею с друзьями:
Вечный энкодер (валкодер) с устойчивыми положениями из шагового двигателя
Механический энкодер — вещь удобная в использовании, но он имеет некоторые досадные недостатки. В частности, контакты со временем изнашиваются и приходят в негодность, появляется дребезг. Оптические энкодеры гораздо надежнее, но они дороже, многие из них боятся пыли, и они редко встречаются в таком виде, в котором их удобно было бы использовать в радиотехнике.
Короче, когда я узнал о том, что шаговый двигатель можно использовать как энкодер, эта идея мне очень понравилась.
Практически вечный энкодер! Замучить его невозможно: соберешь раз и можешь энкодить всю жизнь.
Содержание / Contents
- 1 Шаговый двигатель и схема
- 2 Недостатки схемы и их преодоление
- 3 Видео в работе
- 4 Итого
↑ Шаговый двигатель и схема
Я разобрал несколько дисководов, везде двигатели были разные. Встречались на шлейфе, встречались с косой цветных проводов. На шлейфе общий провод — крайний. Всё остальное находится прозвонкой. По сопротивлению понятно: с выхода на выход сопротивление вдвое больше, чем с выхода на общую точку. А можно даже не прозванивать. Если открутить четыре винта, внутри коммутационная плата, на ней видно, где общий провод.
Исходная схема многократно встречается в Сети в вариациях. Я оттолкнулся от статьи Thomas (OZ2CPU) .
У неё есть достоинства, но есть и недостатки, об этом далее. Собрал пробный вариант в виде макета, и понял, что ничего не понял
Для начала хотелось бы сразу видеть, в какую сторону происходит шаг. Схема выдавала квадратурный код, как и обычный энкодер. Этот код надо было каким-то образом превратить в мигание светодиода — «правый» или «левый».
Разработал и протестировал вот такую схему:
Кстати, эту схему на логике можно использовать и для обычного энкодера, я её и отрабатывал на нём.
Для сборки понадобятся 8 элементов «2И-НЕ», я использовал два чипа 74HC00.
Элемент U2A, диод, конденсатор и U2B создают короткий импульс в момент положительного фронта. Элемент U6D, U4D и U2D — мультиплексор, который пересылает этот испульс либо на один, либо на другой светодиод.
Разумеется, этот же функционал можно сделать на единственном микроконтроллере, но это далеко не для всех доступно и удобно. Всё-таки элементы 2И-НЕ можно найти где угодно, в т. ч. советские (74хх00, К155ЛА3, К555ЛА3).
Последние два инвертора (U5D и U3D) можно выкинуть, ведь ничто нам не мешает подключить светодиоды не к земле, а к плюсу питания. Если крепко пошевелить мозгом, схему можно было бы ещё упростить, но эту задачу оставляем на будущее.
Печатки нет, поскольку всё собиралось только на макетке.
↑ Недостатки схемы и их преодоление
↑ Видео в работе
Жалко, что видео не передает тактильные ощущения на валу!
↑ Итого
В целом работа энкодера меня устраивает. Крутить такую «ручку громкости» необычно приятно.
Работа над устройством будет продолжена.
Спасибо за внимание!
Камрад, рассмотри датагорские рекомендации
Полезные и проверенные железяки, можно брать
Опробовано в лаборатории редакции или читателями.
Тема: Валкодер из шагового двигателя
Опции темы
- Версия для печати
- Версия для печати всех страниц
- Подписаться на эту тему…
Поиск по теме
Валкодер из шагового двигателя
Собрал эту схемку 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-ю щелчками, всё ровно, переключает при каждом щелчке. это скорее дело в движке.
Тогда смотри сообщение номер три.
Изначально непонятно о чем идет речь? Что за конструкция? Какой контроллер? Кто писал программу? Есть ли возможность ее изменить?
Если валкодер с формирователем исправно работает в статическом режиме (медленное вращение с контролем состояний по обоим каналам) то очевидно, что неувязки в управляемом устройстве.