1 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

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

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

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

Автор: Александр Кленин
Опубликовано 26.08.2009

Использование шаговых двигателей (ШД) в качестве энкодера по-прежнему остается привлекательным решением, т.к. промышленные энкодеры, при всех своих достоинствах, имеют существенные недостатки — цена и сложности при покупке единичных экземпляров. Если контактные энкодеры еще с трудом можно приобрести, то цена бесконтактных энкодеров совершенно неподъемная.
В моем случае исключалось применение контактного энкодера, т.к. не допускались пропуски и генерация паразитного (из-за дребезга) сигнала при вращении. Мне не удалось получить удовлетворительных результатов при испытаниях контактных инкрементального и абсолютного энкодеров. Марки называть не буду.

В итоге, склонился к применению ШД от старого 5-дюймового дисковода. За основу взял https://ru3ga.qrz.ru/UZLY/encod.htm, но большое число элементов совсем не радовало.

В результате, схема была приведена к виду, показанному на Рис.1. Для подавления паразитных колебаний у обоих каналов закорочена одна из полуобмоток, что обеспечило достаточное демпфирование, резко снизило скорость нарастания сигнала при больших скоростях вращения и позволило использовать ШД с внутренним соединением средних выводов обмоток.
Также введен гистерезис порядка 50. 100 мВ (зависит от напряжения питания 4. 5В).
После изменений работа схемы при напряжении питания 5В меня устроила, но хотелось, чтобы она работала от 3В. Большое число элементов и сравнительно большой потребляемый ток, привели к схеме Рис.2.

Подключение обмоток двигателя осталось таким же, а в качестве формирователя сигнала использована микросхема HEF4069 (можно заменить CD4069, MC14069). Ввод схемы в линейную область сделан на одном инверторе, выход которого соединен с входом. Такое соединение позволяет превратить инвертор в повторитель напряжения, примерно равного половине напряжения питания без использования дополнительного резистивного делителя.
При 3В схема на LM358 отказалась работать из-за недостаточно хороших выходных уровней компаратора.
Качество работы обеих схем при 5В питании получилось примерно одинаковое. При монотонном пошаговом повороте вала двигателя наблюдалась четкая последовательность 2-битного кода Грея. Но! При смене направления вращения первый шаг нарушал эту последовательность.
Например:

Вращение по часовой

Вращение против часовой

Видно, что при смене направления происходило изменение состояния обоих каналов, что противоречило правилу кодирования. Последующие шаги соответствовали правильной последовательности нового направления.
Эта особенность поведения ШД (смена состояния в обоих каналах) учитывалась программно. Для примера приведены ассемблерные программы обработки сигналов ШД в качестве энкодера для AVR и MSP430.

На Рис.3 приведены диаграммы сигналов, генерируемых ШД при включении обмоток в соответствии со схемами. Алгоритм обработки сигналов энкодера показан на двух нижних диаграммах Рис.3
-при поступлении прерывания от активного фронта канала А анализируется уровень и флаг требования прерывания канала B. Если флаг установлен, что говорит о смене направления вращения, дополнительно анализируется состояние внутреннего рабочего флага, который сигнализирует о предыдущем направлении вращения и идет соответствующее изменение значения счетчика шагов. Это сделано для исключения неоднозначности определения кодовой последовательности, возникающей при смене направления вращения. Если флаг сброшен, что говорит об отсутствии смены направления вращения, идет простое изменение значения счетчика шагов.
-совершенно аналогично идет обработка прерывания от активного фронта канала В.
В итоге получается обработка каждого шага двигателя.
Шаговый двигатель, в качестве энкодера, был встроен в конструкцию ленточной пилорамы для повышения точности изготовления пиломатериалов.

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

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

В частности необходимо было проконтролировать правильность счёта каналами энкодера, исправность Z-канала. Работа каналов инкрементального энкодера в общем представлена на диаграмме ниже — 2 канала («А», «А инверсный» и «В», «В инверсный») а так же канал Z (на диаграмме обозначен как «С»).

Представленная на фото ниже конструкция предназначена для контроля работоспособности подобных инкрементальных энкодеров

Читать еще:  Характеристики масло для двигателя 5w30

Устройство управляется PIC-контроллером. Принцип работы сей шайтан-арбы несложен — шаговый двигатель вращает вал энкодера, в это время контроллер производит счёт импульсов, подсчитанные значения выводятся на LCD-дисплей.

На первом экране видим готовность аппарата

После нажатия любой из клавиш управления переходим к выбору исполняемой программы:


Программа 1: подсчёт количества оборотов ведёт контроллер, основываясь на числе импульсов шагового двигателя. Возможно задать число оборотов от 1 до 10. Подсчитанное число импульсов делится на число оборотов и на экран выводится число импульсов на оборот. Подходит для энкодеров без Z-канала

Программа 2: подсчёт количества оборотов ведёт контроллер, основываясь на сигнале синхронизации Z-канала. Первый оборот начинает отсчитываться после первой сработки Z-канала. Возможно задать число оборотов от 1 до 10. Подсчитанное число импульсов делится на число оборотов и на экран выводится число импульсов на оборот.

На следующем экране — выбор числа оборотов для измерения

Далее — после нажатия кнопки «Ввод» происходит работа программы

И в конце — вывод на экран результатов измерения числа импульсов инкрементального энкодера на оборот

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

Управление шаговым двигателем производится в полушаговом режиме (что с нашим двигателем от 5-дюймового дисковода составляет 400 имп/об.)
Входа контроллера развязаны от каналов энкодера опторазвязками.
Подсчёт импульсов происходит по прерываниям от изменения состояния входов порта B (RB4:RB7)
Для канала Z используется прерывание по входу RB0 (INT)
Ссылки на документацию по элементной базе можно найти внизу страницы.

Источник питания устройства даёт напряжения питания 24, 12 и 5V, что позволяет испытывать инкрементальные энкодеры, предназначенные для работы со всеми этими напряжениями питания. Переключатель на плате контроллера так же переключает резисторы на входе оптопар, в зависимости от напряжения выхода конкретного энкодера (5, 12 и 24v соответственно).

Ниже представлены фото платы источника питания и платы управления. Надписи на кнопках смысловой нагрузки не несут — просто подвернулись такие кнопки. На самом деле верхняя — «больше», средняя — «меньше», нижняя — «ввод». Входной переключатель был использован от старой магнитолы, а поэтому имеет не 3 положения, а 7 (использованы 3).


Далее — чертёж печатной платы (со стороны проводников и со стороны деталей)
(для открытия в полный размер кликните на изображении)
По ссылке можно скачать проект этой печатной платы для Sprint Layout (*.lay).


А вот фото в сборе с LCD — дисплеем.

Механически система представляет из себя шаговый двигатель, вращающий щестерёнку большего диаметра (взята от старого самописца), вал которой через «гибкую передачу» (короткий отрезок толстой резиновой трубки) соединён с валом энкодера. Сам же энкодер жёстко зажат пластинами крепления (конструкция в принципе может быть любая). Коэффициент передачи получился 4.8, что в связке с двигателем от 5-дюймового дисковода в полушаговом режиме (400 имп/об) даёт 1920 имп/оборот энкодера).


Вот как это выглядит в работе:

Программа для PIC-контроллера написана на MicroC PRO v.4.15

По ссылкам ниже можно скачать:

Дополнительная справочная информация по комплектующим устройства:

Одноступенчатый редуктор с приводом от Шагового Двигателя

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

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

Так как на изготовленном станке планировалось обрабатывать не только дерево и пластики, а еще и дюраль, то интересно было сделать зубчатую пару как раз из этого материала.

По наличию у меня были обрезки дюралевого листа толщиной 6мм. В качестве привода я решил использовать Шаговый Двигатель (ШД) 23HS8430, он тоже у меня был в наличие и валялся без дела.

Читать еще:  В жару падают обороты двигателя

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

Учтя все ограничения, я перевел двигатель в 3Д модель и дальше стал сопрягать с ним остальные детали…

Теперь что касается построения зубчатой пары: в машиностроительной конфигурации Компас 3Д (v13) есть такая утилита как «Расчеты цилиндрической зубчатой передачи внешнего зацепления», в ней производим геометрический расчет, вводя требуемые параметры: число зубьев, модуль и т.д. Углубляться в это не буду, достаточно будет прочитать главу про построение зубчатых передач из курса механики: детали машин.

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

Для большего интереса я решил сделать шестерни с разным количеством зубьев и передаточным отношением 2:1.

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

После окончания 3Д проектирования, все детали перевел в 2Д вид и сохранил их в векторном формате *.dxf.

Для того чтобы вырезать все детали на станке, я преобразовал векторный формат в G-code через постпроцессор в программе ArtCam. Полученный файл загрузил в станок и после обнуления координат, вырезал все детали.

В ведомую шестерню запрессовал подшипник, он достаточно плотно вошел, так как я занизил отверстие на несколько соток.

Отдельно на токарном станке выточили ось, на которую устанавливается ведомая шестерня.

Дальше все достаточно просто, собрал узел в едино, и осталось только его закрутить.
Но пришлось подождать месяц, так как драйвера для ШД у меня не оказалось, и я заказал драйвер DM542 на Али.

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

Сразу хочу оговориться, что код для прошивки ардуино нашел на просторах Интернета.

Генератор частоты может: — генерировать меандр на 16 битном таймере. Диапазон частот 1Гц — 8МГц. Регулировка частоты производится энкодером. До частоты 2,8 кГц разрешение 1 герц, на частотах выше таймер аппаратно уже не может поддерживать это разрешение, поэтому более высокие частоты синтезируются, задавая параметром не требуемую частоту, а просто инкременируя регистр сравнения. Получается чем выше частота — тем больше шаг между щелчками энкодера. Вращая энкодер, с не нажатой кнопкой частота меняется на 1Гц; с нажатой кнопкой один шаг — 100Гц. Выше 2,8кГц. вращение энкодера с нажатой кнопкой так — же ускоряет счёт. Программного подавления дребезга контактов энкодера нет, поэтому нужно повесить конденсаторы 0,01..0,1 мкф. относительно земли. На кнопке конденсатор не обязателен. Рассчитанная математически частота выводится в сериал.

*************************************************************
/* Генератор 1 Hz..8 MHz. Энкодер подключен к пинам A0 и A1, кнопка
энкодера подключена к A2. Требуется использовать конденсаторы 0,01..0,1uf
относительно земли на каждый из 2х выводов энкодера.
Скетч для ардуино на мк atmega328 (UNO,Nano, MiniPro)
*/

float freq;
void setup() <
pinMode (9,OUTPUT); // выход генератора
pinMode(A0,INPUT); // с рассчетом, что энкодере внешняя подтяжка-
pinMode(A1,INPUT); // -к шине питания. Если нету, то подтянуть программно.
pinMode(A2,INPUT_PULLUP); //кнопка энкодера

Serial.begin(9600);
PCICR=1 =2848) gen_mode=1; //переключение режима управления по OCR

// Если увеличение частоты
if (n==3||n==0) <
if (gen_mode)0) > else < if(ocr>9)ocr-=10; > >
else knopka? enc++ : enc+=100; // в нч режиме
> //end GetUP

Читать еще:  Глушитель для китайского двигателя своими руками

// Если уменьшение частоты
if (n==2||n==1) <
if (gen_mode) < if (knopka)< if(ocr =2)enc--; >else < if (enc>100) enc-=100; > >
> //end GetDown

После того как все собрал, подсоединил и залил в Arduino скетч, можно приступать к включению:

Теперь про работу сего механизма: вращение и работа передачи вполне не плохое хоть и при звоне шестерен. В итоге получилось разогнать до 12,5 оборотов в секунду ведущую шестерню, а на ведомой соответственно в два раза меньше. Сгенерированная частота при этом составила порядка 5кГц при 400 имп/об. выставленное на драйвере. При этой частоте двигатель еще не уходил в ступор, а это значит, что можно было дать частоту и больше.

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

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

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

Содержание / Contents

  • 1 Шаговый двигатель и схема
  • 2 Недостатки схемы и их преодоление
  • 3 Видео в работе
  • 4 Итого

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

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

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

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

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

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

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

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

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

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

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

↑ Итого

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

Спасибо за внимание!

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

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

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

Ссылка на основную публикацию
ВсеИнструменты
Adblock
detector