- Вечный энкодер (валкодер) с устойчивыми положениями из шагового двигателя
- Содержание / Contents
- ↑ Шаговый двигатель и схема
- ↑ Недостатки схемы и их преодоление
- ↑ Видео в работе
- ↑ Итого
- Камрад, рассмотри датагорские рекомендации
- 🌼 Полезные и проверенные железяки, можно брать
- Сага о абсолютном энкодере и шаговом двигателе
- Подпишитесь на автора
- Подпишитесь на автора
- Самодельный енкодер для серво-привода
- Самодельный енкодер для серво-привода
Вечный энкодер (валкодер) с устойчивыми положениями из шагового двигателя
Механический энкодер — вещь удобная в использовании, но он имеет некоторые досадные недостатки. В частности, контакты со временем изнашиваются и приходят в негодность, появляется дребезг. Оптические энкодеры гораздо надежнее, но они дороже, многие из них боятся пыли, и они редко встречаются в таком виде, в котором их удобно было бы использовать в радиотехнике.
Короче, когда я узнал о том, что шаговый двигатель можно использовать как энкодер, эта идея мне очень понравилась.
Практически вечный энкодер! Замучить его невозможно: соберешь раз и можешь энкодить всю жизнь.
Содержание / Contents
↑ Шаговый двигатель и схема
Я разобрал несколько дисководов, везде двигатели были разные. Встречались на шлейфе, встречались с косой цветных проводов. На шлейфе общий провод — крайний. Всё остальное находится прозвонкой. По сопротивлению понятно: с выхода на выход сопротивление вдвое больше, чем с выхода на общую точку. А можно даже не прозванивать. Если открутить четыре винта, внутри коммутационная плата, на ней видно, где общий провод.
Исходная схема многократно встречается в Сети в вариациях. Я оттолкнулся от статьи Thomas (OZ2CPU) .
У неё есть достоинства, но есть и недостатки, об этом далее. Собрал пробный вариант в виде макета, и понял, что ничего не понял
Для начала хотелось бы сразу видеть, в какую сторону происходит шаг. Схема выдавала квадратурный код, как и обычный энкодер. Этот код надо было каким-то образом превратить в мигание светодиода — «правый» или «левый».
Разработал и протестировал вот такую схему:
Кстати, эту схему на логике можно использовать и для обычного энкодера, я её и отрабатывал на нём.
Для сборки понадобятся 8 элементов «2И-НЕ», я использовал два чипа 74HC00.
Элемент U2A, диод, конденсатор и U2B создают короткий импульс в момент положительного фронта. Элемент U6D, U4D и U2D — мультиплексор, который пересылает этот испульс либо на один, либо на другой светодиод.
Разумеется, этот же функционал можно сделать на единственном микроконтроллере, но это далеко не для всех доступно и удобно. Всё-таки элементы 2И-НЕ можно найти где угодно, в т. ч. советские (74хх00, К155ЛА3, К555ЛА3).
Последние два инвертора (U5D и U3D) можно выкинуть, ведь ничто нам не мешает подключить светодиоды не к земле, а к плюсу питания. Если крепко пошевелить мозгом, схему можно было бы ещё упростить, но эту задачу оставляем на будущее.
Печатки нет, поскольку всё собиралось только на макетке.
↑ Недостатки схемы и их преодоление
↑ Видео в работе

Жалко, что видео не передает тактильные ощущения на валу!
↑ Итого
В целом работа энкодера меня устраивает. Крутить такую «ручку громкости» необычно приятно.
Работа над устройством будет продолжена.
Спасибо за внимание!
Камрад, рассмотри датагорские рекомендации
🌼 Полезные и проверенные железяки, можно брать
Опробовано в лаборатории редакции или читателями.
Источник
Сага о абсолютном энкодере и шаговом двигателе
Подпишитесь на автора
Подпишитесь на автора, если вам нравятся его публикации. Тогда вы будете получать уведомления о его новых постах.
Отписаться от уведомлений вы всегда сможете в профиле автора.
Давно я тут не писал постов про принтеры и электронику, но тут назрела тема использования абсолютного энкодера и попытке сделать вменяемое упралвение шаговым двигателем с рассчётом на точность позиционирования (не путать с повторяемостью).
В качестве подопытного было приобретено несколько разных магнитных энкодеров наподобие тех, что используются в таких проектах как 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 шаговик, которые будет в состоянии корректировать нелинейности при перемещении.
Подпишитесь на автора
Подпишитесь на автора, если вам нравятся его публикации. Тогда вы будете получать уведомления о его новых постах.
Отписаться от уведомлений вы всегда сможете в профиле автора.
Источник
Самодельный енкодер для серво-привода
Тема раздела Драйверы и контроллеры для CNC в категории Станки ЧПУ, Hobby CNC, инструмент; Итак, решил-таки попробовать сделать самостоятельно. Точность необходима высокая, поэтому не уверен, что получится, но попытка — не пытка. Нарисовал в .
Опции темы
Самодельный енкодер для серво-привода
Итак, решил-таки попробовать сделать самостоятельно. Точность необходима высокая, поэтому не уверен, что получится, но попытка — не пытка.
Нарисовал в Кореле и распечатал на струйнике несколько пленок. Разрешение самое высокое, только черный картридж. 3 варианта:
— диаметр 100мм, ширина линии 0.5мм, шаг 0.9 = 360 линий на оборот
— диаметр 100мм, ширина линии 0.25мм, шаг 0.45 = 720 линий на оборот
— диаметр 45мм, ширина линии 0.1мм, шаг 0.4 = 360 линий на оборот
Пленку наклею на 2мм диск из оргстекла, который в свою очередь через обжимную муфточку посажу на ось двигателя.
Датчик для начала попробую от мышки. Есть большое подозрение, что должно получиться.
Вот фотки пленок. Фотик хоть и приличный — но и ему такая макро-съемка тяжело дается .
Комментарий от неспециалиста: если уж браться, то не жмись — 100р. за фотовывод в любой типографии. 3600dpi и пленка путевая.
Ёлы-палы, да кто жмется то? Качество вроде даже наблюдается, штрихи ровненькие, блестящие. И пленка тоже путевая, я с ней и фоторезистом платы с дорожками 0.2мм делаю.
Меня другое интересует — успеет ли фототранзистор от мыши за такими оборотами (3000об/мин=50об/сек)*360штрихов=18кГц. Частота небольшая. А LM393 успеет? И какие будут фронты. Хотя подумал — поставлю TL082 — полоса 5мГц, фронты красивые — они у меня в приводе ток контролируют, да и стоят по 8 рублёв .
Вот для такого моторчика делаю. Есть промышленные енкодеры от BEI — но я сдуру при покупке гнался за тысячами импульсов на оборот, а мой привод такого при больших оборотах понимать не хочет — не успевает.
Итак первый блин как всегда комом . Воточил муфточку, по ходу решил сделать её цельной — сразу наклеил кусок акрила, обточил, отполировал. Получилась красивая деталька, просто промышленного производства
.
Дома напечатал пленки — одну самоклейку, одну обычную. Для начала наклеил самоклейку. Фотку повешу вечером — убегаю на работу.
На маленькой макетке сделал простенькую платку — на ней микруха компараторов, 7 резисторов и опто-пара из мыши. Запитал, вводим в оптический канал отвертку — работает.
Но — при попытке работы с пленочным диском в упор не видит штрихи. Такое впечатление, что луч от светодиода рассеивается. Повышение тока (яркости) светодиода помогает пробить диск — но теперь ситуация обратная, диск видит, но импульсов все равно нет.
Выводы.
Похоже, оптопара из мыши очень малочуствительная и работает исключительно с открытым каналом — через прорези. Также скорее всего принтерная пленка обладает большим коэффициентом рассеяния.
Кстати, разбирал фирменный енкодер. Он сделан на основе стеклянного оптического диска, штрихи (их было 1500) крайне тонкие и малозаметные. А вот подсветка — лампочкой (. ), а фотоприемник представляет из себя прямо на плате нанесенные полоски фоторезиста.
Но разборка кстати не прошла даром — обнаружил, что любимые мной енкодеры от BEI (я их покупал и буду покупать на EBAY), имеющие питание 10, 15 и 30В, элементарно конвертируются на 5В путем перепайки одного проводка — вся схема питается от 5В, лампочка подсветки тоже от 5В, но в случае более высокого напряжения заводится через резистор.
В общем придумал следующее:
— первый вариант — напечатаю на толстой 0.5мм абсолютно прозрачной пленке. Её не потребуется клеить. Единственный минус — очень нестойка, печать легко стирается пальцем — но кто ж ее будет трогать
— второй вариант — прямой канал, то есть делаем тонкий непрозрачный пластиковый диск и круговой фрезой прорезаем щели. Минус — самая тонкая из имеющихся у меня фрез — 0.5мм, а ведь хочется диск поменьше — 40-50мм, а импульсов побольше — 500 на оборот.
— третий вариант — тампопечать. Но не знаю, какое у нее разрешение.
В любом случае енкодер будет сделан, поскольку драйвер DC мотора уже вовсю работает, а зависеть от редко появляющихся на EBAY енкодеров не хочется.
Источник