Двигатель энкодер


Оптический энкодер или шутка производителя

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

Хотя должен признаться опыт работы с энкодерами имел. Как-то в одной и поделок использовал энкодер из принтера.

В данной истории все приключилось внезапно. Ползая по своим хоббийным форумам натолкнулся на конкурс. Сайт (называть не буду, т.к. разговор не о нем) проводил видимо раскрутку посещаемости и плюс один из форумчан проводил раскрутку своих российского производства изделий. И разыгрывался комплект из 3 наборов для самостоятельной сборки сервоконтроллеров. Я зарегистрировался на этом форуме, подал заявку (вместе с 3 или 4-мя всего лишь участниками) и… выиграл.

Так я стал обладателем 3-х наборов для сборки сервоконтроллеров. Далее мне потребовались энкодеры. Позволю себе объяснить для читателей не так глубоко погруженных в электронные компоненты, что такое сервоконтроллер, энкодер и с чем все это едят.

Есть 2 основных способа управлять точным перемещением в изделиях с ЧПУ (числовое программное управление). Попробую объяснить максимально доступным языком, без сложных схем и терминов. Первый способ это шаговые двигатели. Шаговый двигатель имеет сложное устройство — несколько катушек, притягивающих сердечник в заданных положениях.

Количество положений, в которых может быть зафиксирован сердечник называется шагами, промежуточные положения (регулируются различными промежуточными напряжениями и соответственно магнитными полями) называют микрошагами. Управляет шаговым двигателем драйвер — это плата управления, как правило с микропереключателями шагов и регулировкой тока, протекающего через двигатель. На вход драйвера подаются сигналы: Enable (разрешить работу шагового двигателя), DIR (направление вращения), STEP (количество шагов, на которое двигателю необходимо повернуть вал). И драйвер переводит команды в обороты вала двигателя. Очень простая и надежная конструкция. Из минусов — скорость вращения двигателя ограничена из-за его конструктива, и если двигатель пропустит по той или иной причине шаги, то управляющая программа об этом не узнает. Отсюда и область применения — низко и среднескоростные двигатели в заданной области нагрузок. Например 3Д принтер или хоббийные станки.

Второй способ управлять перемещениями — сервомотор. Мотор сам по себе может быть любым, постоянного или переменного тока, без разницы. Единственное условие, его вал должен иметь энкодер. Энкодер — это устройство определения позиции вала в данный момент времени. Об энкодерах мы поговорим подробнее чуть позже. Сервоконтроллер имеет другой принцип работы, в отличии от драйвера шагового двигателя. Сервоконтроллер получает на входе те же самые сигналы Enable, STEP, DIR и подает на двигатель напряжение. Двигатель начинает вращаться в нужном направлении, энкодер возвращает данные о положении вала двигателя. Как нужное положение достигается, вал двигателя в нем фиксируется. Конечно это сильно упрощено, т.к. есть ускорение и торможение двигателя, управление током и напряжением, пропорционально-интегрально-дифференцирующий (ПИД) регулятор в контуре обратной связи,… но мы же договорились в этот раз не сильно лезть в теорию.

Какие же плюсы серводвигателей: любая скорость вращения, отсутствие пропуска шагов, бесшумность (шаговый двигатель ощутимо громок в работе из-за своего конструктива). Но цена сервоконтроллеров выше и существенно драйверов шаговых двигателей. Поэтому основная ниша сервоконтроллеров — профессиональное применение.

Для своего проекта я выбрал двигатели Динамо Сливен. Эти двигатели широко использовались в советское время в ЭВМ и их было какое-то нереально большое количество. Кажется, что практически любой хоббийщик или имеет такой двигатель или сталкивался с ним. На барахолках их до сих пор перепродают. Это двигатели постоянного тока с фантастическим неубиваемым ресурсом и устойчивостью к любым издевательствам.

В качестве сервоконтроллера я использовал выигранную плату. Она представляет собой развитие open source сервоконтроллера, известного под устойчивым брендом «сервоконтроллер Чена» — по имени китайца, году так в 2004-м, если не ошибаюсь, предложившим данную схему.

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

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

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

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

Для этого используется не один фотодиод, а несколько, обычно 4. Они формируют 2 независимых канала передачи данных, и сравнивая сигналы с этих каналов можно однозначно сделать вывод о направлении вращения диска.

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

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

Абсолютные энкодеры используют диск со сложной системой кодировки положения. Наиболее распространен код Грея — двоичная кодировка с защитой от ошибок.

Я остановил свой выбор на инкрементальном энкодере с контролем направления вращения, т.е. с двумя квадратурными каналами вывода информации. Разрешения в 100 линий на оборот диска мне было за глаза. Поэтому на Алиэкспрессе я нашел энкодеры за разумную цену и с нужными мне характеристиками.

Вот фотка 3-х пришедших мне энкодеров. Дошли они недели за 3.

У энкодеров 4 вывода, Красный — питание 5В, Черный — земля, Цветные — каналы А и В. Я быстренько выточил втулочку на вал двигателя под крепление диска, ввинтил туда стержень с резьбой.

На 3Д принтере распечатал площадку под крепление датчика энкодера

Собрал все вместе

Подключил сервоконтроллер, и… тут бы был счастливый конец обзору, но нет. Ничего не заработало. Даже близко ничего не заработало.

Подключил осциллограф и понял, что никаких квадратурных сигналов на выходе нет, только шумы, наводки и непонятные выплески. Грешил я на все на свете. И на требовательность к позиционированию, и на засветку, и на наводки электромагнитные. И часами аккуратно возюкал датчик в разных положениях, выключал свет и пытался проделать все тоже самое в темное. «Крокодил не ловится, не растет кокос.» Разумеется я перепробовал все 3 энкодера. Везде тоже самое. И тут меня дернуло поразглядывать датчик в микроскоп.

То что я увидел повергло меня в изумление. Все 4 сенсора стояли в ряд по радиусу диска, т.е. засвечивались через прорезь диска одновременно. Разумеется ничего не работало. Датчики должны стоять перпендикулярно радиусу диска, и засвечиваться последовательно разными фронтами прорези диска. Я не мог поверить, что это так просто и так глупо. Китайцы поставили датчик с поворотом на 90 градусов. Я спросил на форуме у такого же как я покупателя таких же энкодеров как у него стоит датчик. И у него все было также неправильно и не работало.

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

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

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

На фото видно, что сенсоры стали перпендикулярно радиусу диска.

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

Ну а дальше двигатель займет свое место на фрезерном станке, но это уже совсем другая история...:-)

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

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

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

Всем добра и удовольствия от хобби!

mysku.me

AVR. Учебный Курс. Инкрементальный энкодер.

Энкодер это всего лишь цифровой датчик угла поворота, не более того.

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

Если с абсолютным энкодером все просто, то с инкрементальным бывают сложности. Как его обрабатывать?

С Энкодера выходят два сигнала А и В, сдвинутых на 90 градусов по фазе, выглядит это так:

А дальше пляшем от типа энкодера. А они бывают разные.

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

В оптическом же может быть два фонаря и два фотодиода, святящие через диск с прорезями (шариковая мышка, ага. Оно самое).

Механический подключается совсем просто центральный на землю, два крайних (каналы) на подтянутые порты. Я, для надежности, подключил внешнюю подтяжку. Благо мне на Pinboard для этого только парой тумблеров щелкнуть:

Оптический подключается в зависимости от типа оптодатчика, обычно там стоит два фотодиода с общим анодом.

Обычно, все пытаются работать с ними через прерывания INT, но этот метод так себе. Проблема тут в дребезге — механические контакты, особенно после длительного пользования, начинают давать сбои и ложные импульсы в момент переключения. А прерывание на эти ложные импульсы все равно сработает и посчитает что нибудь не то.

Лучше считать не импульсы, а состояния.

Метод прост:Подставим нули и единички, в соответствии с уровнем сигнала и запишем последовательность кода:

A:0 0 1 1 0 0 1 1 0 0 1 1 0B:1 0 0 1 1 0 0 1 1 0 0 1 1

Если A и B идут на одни порт контроллера (например на A=PB0 B=PB1), то при вращении энкодера у нас возникает меняющийся код:

11 = 310 = 200 = 001 = 111 = 3

Теперь остается только циклически опрашивать наш энкодер сравнивая текущее состояние с новым и на основании этого делающего выводы о вращении. Причем частота опроса должна быть такой, чтобы не пропустить ни одного импульса. Например, мой EC12 имеет 24 импульса на оборот. Вращать его предпологается вручную и я вряд ли смогу вращать его с космической скоростью, но решил все же замерить. Подключился к осциллографу, крутнул ручку что есть мочи:

Выжал меньше килогерца. Т.е. опрашивать надо примерно 1000 раз в секунду. Можно даже реже, будет надежней в плане возможного дребезга. Сейчас, кстати, дребезга почти нет, но далеко не факт что его не будет потом, когда девайсина разболтается.

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

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 // Эту задачу надо запускать каждую миллисекунду. // EncState глобальная переменная u08 -- предыдущее состояние энкодера // EncData глобальная переменная u16 -- счетный регистр энкодера     void EncoderScan(void) { u08 New;   New = PINB & 0x03; // Берем текущее значение // И сравниваем со старым   // Смотря в какую сторону оно поменялось -- увеличиваем // Или уменьшаем счетный регистр   switch(EncState) { case 2: { if(New == 3) EncData++; if(New == 0) EncData--; break; }   case 0: { if(New == 2) EncData++; if(New == 1) EncData--; break; } case 1: { if(New == 0) EncData++; if(New == 3) EncData--; break; } case 3: { if(New == 1) EncData++; if(New == 2) EncData--; break; } }   EncState = New; // Записываем новое значение // Предыдущего состояния   SetTimerTask(EncoderScan,1); // Перезапускаем задачу через таймер диспетчера }

Почему я под счетчик завел такую большую переменную? Целых два байта? Да все дело в том, что у моего энкодера, кроме импульсов есть еще тактильные щелчки. 24 импульса и 24 щелчка на оборот. А по моей логике, на один импульс приходится четыре смены состояния, т.е. полный период 3201_3201_3201 и один щелчок дает 4ре деления, что некрасиво. Поэтому я считаю до 1024, а потом делю сдвигом на четыре. Получаем на выходе один щелочок — один тик.

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

Ускорять опрос занятие тупиковое. Но нас спасает то, что у таких энкодеров, как правило, есть уже свои схемы подавления дребезгов и неопределенностей, так что на выходе у них четкий прямоугольный сигнал (правда и стоят они совершенно негуманно. От 5000р и до нескольких сотен тысяч. А что ты хотел — промышленное оборудование дешевым не бывает).

Так что без проблем можно применять прерывания. И тогда все упрощается неимоверно. Настраиваем всего одно прерывание по внешнему сигналу. Например, INT0 настраиваем так, чтобы сработка шла по восходящему фронту. И подаем на INT0 канал А.

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

А в обработчике прерывания INT0 щупаем вторым выводом канал В. И дальше все элементарно!

Если там высокий уровень — делаем +1, если низкий -1 нашему счетному регистру. Кода на три строчки, мне даже писать его лень.

Конечно, можно такой метод прикрутить и на механический энкодер. Но тут надо будет заблокировать прерывания INT0 на несколько миллисекунд. И НИ В КОЕМ СЛУЧАЕ нельзя делать это в обработчике.

Алгоритм прерывания с антидребезгом будет выглядеть так:

  • Зашли в обработчик INT0
  • Пощупали второй канал
  • +1 или -1
  • Запретили локально INT0
  • Поставили на таймер событие разрешающее INT0 через несколько миллисекунд
  • Вышли из обработчика

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

easyelectronics.ru

Как подключить энкодер к частотному преобразователю. Схема

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

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

Теперь представим, что энкодер идеальный и его контакты не страдают дребезгом. Подключим к выводам энкодера осциллограф и начнем вращать ручку энкодера. Импульсы будут сдвинуты относительно друг друга на 90 градусов. Если крутить ручку мощности (кВт) вправо, влево или назад, то будем иметь последовательности панели управления:

Если осциллограммы как применение последовательности задач логических нулей и единиц, то они будут иметь такой вид:

Возьмем обычный энкодер, у которого есть дребезг контактов. Зона дребезга:

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

Аппаратный способ – это подключение серии конденсаторов частотника, триггеров Шмитта, как указано на схеме панели управления:

Рекомендуется применять метод борьбы с дребезгом – программный. Такой метод описан в библиотеке Ротери. Данная библиотека содержит несколько функций, которые нужны для настройки выводов векторного контроллера на ввод, и подключение подтягивающих мощность (кВт) резисторов. В библиотеке нужно указывать соответствующие команды и задачи. Данной командой включается подтягивающий резистор внутри контроллера панели частотника.

Функция серии Get position vfd возвращает значение энкодера. Данная фукнция нужна для получения количества импульсов, которые считал энкодер. Функция set Position vfd нужна для загрузки значения, с которого энкодер начнет свой счет.

Функция tick должна быть рассмотрена подробнее. Переменные этой функции sig1 и sig2 записывают состояние векторного pin, к которой подключен энкодер. Дальше эти pin записываются в переменную thisState vfd, которая является текущим состоянием энкодера. Если текущее состояние энкодера не равно предыдущему, то вычисляются новые направления счета и количество импульсов мощности сохраняется в переменной Position. Когда энкодер вернется в свое начальное векторное положение, произойдет сдвиг вправо на два разряда, и новое значение управления нужно записать в переменную PositionExt. Данная переменная нужна для сохранения серии результатов задач, которые будут иметь применение в основной программе.

Счет

Проанализировав состояние энкодера при вращении влево и вправо, составляем таблицу:

Его начальное положение 1-1. При повороте вправо произошел щелчок, единица стала логическим нулем. Новое значение this State vfd равно 01. Согласно команды данный результат суммируется со значением переменной Position.

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

Происходит второй щелчок при повороте энкодера направо, и вместо позиции 01 мы имеем позицию 00. После того, как весь дребезг закончится, на выходе управления также имеем значение единицы. При четвертом щелчке, когда позиция с 10 стала 11, мы имеем значение 6. После окончания дребезга остается 6.

В некоторых энкодерах имеет применение кнопка панели. При ее нажатии и отпускании тоже будет дребезг контактов, нужно применить библиотеку Bounce. Функции этой библиотеки нужны для задания pin, к которому будет подключена кнопка, задач времени задержки в миллисекундах. Если произошло нажатие на кнопку, то функция мощности (кВт) возвращает векторное значение true, если нет, то false vfd.

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

Данная схема состоит из платы Arduino Uno, инкрементального энкодера, четырехразрядного светодиодного индикатора, ключевых транзисторов и ограничительного резистора. Эта схема называется счетчиком импульсов. Она считает импульсы, которые будет воспроизводить энкодер при его вращении. Энкодер своими выводами подключен к каналам А2 и А3, вывод кнопки подключен к выводу А4, средний вывод подключен к земле, второй вывод тоже к земле.

Рассмотрим скетч, который называется счетчиком импульсов энкодера управления частотника. Вначале подключаем библиотеки для работы таймера, индикатора LS, для работы с энкодером, для кнопки.

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

Если нажимаем на кнопку индикатора, переменная обнулится, на индикаторе будет ноль.

Подключение энкодера промышленного назначения к Arduino

Наша задача суметь управлять скоростью асинхронного двигателя с помощью программы на компьютере. У нас имеется преобразователь частоты (частотник):

Для домашних заданий такая информация не нужна. На фотографии энкодер промышленного назначения для асинхронного двигателя управления мощностью (кВт) станков:

В станкостроении энкодеры широко применяются для преобразователей частоты асинхронных двигателей. Они монтируются как датчики обратной связи по своей скорости. Такие энкодеры имеют большую дискретность от 100 импульсов на оборот до 1 млн импульсов на оборот. У этой марки дискретность равна 500 имп. на оборот.

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

Энкодеры абсолютного вида имеют внутреннюю память, которая помнит последние положения. Зачем нужна память, и зачем сохранять эти данные? В заводских условиях станкостроения перед перемещением определенного устройства в первую очередь указывают нулевую точку. Такой процесс называется реферированием, то есть, выход в нуль.

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

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

Сигнал «А» — это сигнал импульса прямого типа. Количество импульсов с этого сигнала приходит на каждом обороте. Оно равно 500 (дискретность датчика).

Сигнал «В» — тоже прямой сигнал импульса. С него на каждом обороте поступает число импульсов по дискретности датчика, который смещен от канала «А» на 90 градусов (500).

Сигнал «R» — это сигнал метки «нуль». С одного оборота датчика получается один импульс.

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

Подключение

Подключение простое. Подсоединяем напряжение 5 вольт на выходы энкодера. У нас раскладка: провод коричневого цвета – 0 В, белого цвета — +5 В, розовый, зеленый и красный – А, В, R.

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

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

Работа счетчика импульсов на основе модуля энкодера

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

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

Для примера накрутим 120 импульсов. Теперь скручиваем обратно, вращая ручку против часовой стрелки. Центральная ось энкодера работает как кнопка. Она очищает от нулей свободные разряды индикатора. У кнопки есть небольшой дребезг контактов, поэтому выключение и включение происходит не сразу. Программным путем, дребезг устраняется. Это основа работы с модулем энкодера.

chistotnik.ru

Оптические энкодеры | РОБОТОША

Первые оптические энкодеры были разработаны в середине 1940-х годов «Фортепианной компанией Болдуина» для использования в качестве «тоновых колес», которые позволяли электрическим органам имитировать другие музыкальные инструменты. Современные устройства в основном представляют собой миниатюрные версии датчика приближения с использованием прерывания света. В энкодере сфокусированный луч света, направлен на совмещенный с излучателем фотоприемник, периодически прерывается вращающимся диском, расположенным между приемником и передатчиком света и закрепленный на валу контролируемого объекта. Диск может быть непрозрачным с отверстиями, либо прозрачным с нанесенным на него кодированным рисунком. По сравнению с более сложными преобразователями переменного тока, это простая схема кодирования реализует, по существу, цифровой вывод результатов с оптических датчиков в недорогой надежной конструкции с хорошей помехоустойчивостью.

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

 

Инкрементный оптический энкодер

Оптические поворотные инкрементные энкодеры, еще их называют датчиками угла поворота, стали наиболее популярным устройством для измерения угловой скорости и положения в моторах, на валу колеса или рулевого механизма. В мобильных роботах, энкодеры используются для контроля положения или скорости колес и других, управляемых при помощи моторов соединений. Из-за того, что энкодеры являются проприоцептивными датчиками, их оценка положения является лучшей в системе координат робота и, при решении задачи локализации робота (см. слайды «Проблема локализации мобильного робота»), требуются значительные поправки.

Принцип действия инкрементного энкодера

Простейшим типом инкрементного энкодера является одноканальный тахометр, обычно состоящий из механического прерывателя света, производящего определенное количество прямоугольных или синусоидальных импульсов, при каждом обороте вала. Увеличение числа импульсов увеличивает разрешение (и стоимость) модуля. Разрешение энкодера измеряется в числе отсчетов на оборот (CPR, cycles per revolution). Минимальное угловое разрешение легко вычислить по величине CPR. Типичный энкодер в мобильной робототехнике имеет значение 2000 CPR, в то же время промышленный оптический энкодер может иметь параметр CPR равный 10000. С точки зрения требуемого диапазона, конечно же важно, чтобы энкодер был достаточно быстрым, чтобы успевать считывать значения на предполагаемой скорости вращения.  Промышленные оптические энкодеры полностью удовлетворяют требованиям, предъявляемым в робототехнических приложениях.

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

В дополнение к нестабильности на низких скоростях, одноканальный тахометр также неспособен определять направление вращения и, следовательно, не может быть использован в качестве датчика положения. Квадратурные энкодеры, преодолели эти проблемы путем добавления второго канала, смещенного относительно первого, поэтому результирующие последовательности импульсов сдвинуты по фазе на 90 градусов, как показано на рисунке ниже. Этот метод позволяет декодирующей электронике определить, какой канал опережает другой и, следовательно, установить направление вращения.  Кроме того, четыре детектируемых различных состояния увеличивают разрешение в четыре раза без изменения диска прерывателя. Таким образом, энкодер, имеющий 2000 CPR выдаст при квадратурной реализации даст уже 8000 отсчетов. Дальнейшее улучшение возможно путем измерения синусоидальной волны с помощью оптического детектора и выполнения сложной интерполяции. Такие методы, хотя и редко используемые в мобильной робототехнике, могут дать 1000-кратное увеличение разрешения.

Принцип действия квадратурного инкрементного оптического энкодера

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

В случае ограниченного вращения, такого как возвратно-поступательное движение вдоль направляющих (как в станках с ЧПУ) можно использовать электрические концевые выключатели и/или механические ограничители для задания исходного положения. Для улучшения повторяемости, возврат в исходное положение разбивается на два этапа. Ось вращается с пониженной скоростью в соответствующем направлении до тех пор, пока не встретится механизм остановки, после чего происходит обраткое вращение в течение предопределенного короткого промежутка времени. Вал вращается медленно обратно до остановки на заданной медленной скорости из этой заданной начальной точки, тем самым, устраняя любые изменения в инерциальной нагрузке, которые могли бы повлиять на окончательное исходное положение. Этот двухэтапный подход используется, например, при старте шагового двигателя для инициализации позиционирования печатающей головки в принтерах.

С другой стороны, функция абсолютного индексирования может быть основана на каком-то внешнем действии по созданию опорной точки, которое отделено от цикла непосредственного сервоуправления. Хорошей иллюстрацией этой ситуации служит инкрементный датчик, используемый для отслеживания угла рулевого управления платформы. Например, когда робот включается в первый раз, абсолютный угол рулевого управления неизвестен и должен быть инициализирован, используя «привязку» действия к маякам на док-станции, соседней стене, или какой-либо другой идентифицирующий набор ориентиров. Увеличение или уменьшение значения счетчика электронного декодера используется для изменения регистра направления транспортного средства в относительной форме.

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

 

Абсолютный оптический энкодер

Абсолютные энкодеры обычно используются в приложениях с медленным вращением в которых недопустима потенциальная потеря информации о положении. Элементы дискретного детектора в фотоэлектрической матрице индивидуально совмещены с концентрическими дорожками на светопрерывателе, создавая эффект бесконтактной реализации энкодера с щеточными контактами. Назначение отдельной дорожки для каждого бита результирующего разрешения приводит к дискам большего размера (по сравнению с конструкцией инкрементного энкодера) и соответствующему снижению допустимого отклонения при ударе и вибрации. При этом каждая дополнительная дорожка энкодера удваивает разрешение, но учетверяет стоимость датчика.

Принцип действия абсолютного оптического энкодера

Вместо последовательного потока битов, как в инкрементном датчике, абсолютные оптические энкодеры обеспечивают параллельный вывод слова данных с уникальным кодом шаблона для каждого дискретного положения вала. Чаще всего используется код Грея, двоичное и двоично-десятичное кодирование. Характерной особенностью кода Грея (по имени изобретателя Франка Грея из Bell Labs) является то, что только один бит изменяется за раз, помогая избежать тем самым асинхронных неоднозначностей, обусловленными электронными и механическими допусками элементов. С другой стороны, двоичный код постоянно включает множество измененных битов при увеличении или уменьшении счета на единицу. Например, при переходе из положения 255 в положение 0, восемь бит меняются с 1 в 0. Так как нет никакой гарантии, что все пороговые детекторы, являющиеся элементами слежения детектора сработают одновременно, в момент перехода будет присутствовать значительная неопределенность в данной схеме кодирования. Поэтому требуется дополнительный сигнал подтверждения правильности данных, если больше чем один бит изменился между последовательными положениями энкодера.

Поворот 8-битного диска с кодом Грея

На рисунке слева поворот против часовой стрелки на одну позицию становится причиной изменения только одного бита. На рисунке справа такой же поворот двоично-кодированного диска станет причиной изменения всех битов в частном случае (с 255 в 0) иллюстрируя тем самым опорную линию на 12 часов.

Абсолютные энкодеры лучше всего подходят для медленных и/или редких поворотов, таких как кодирование угла поворота рулевого колеса, в отличие от измерения высокоскоростного непрерывного (например, ведущее колесо) вращения, которое потребует вычисления смещения вдоль всего пути движения. Хотя и не столь надежны как резольверы для высокотемпературных или в приложениях с высокой ударной стойкостью, абсолютные энкодеры могут работать при температурах свыше 125 градусов и средним разрешением (1000 отсчетов на оборот). Потенциальным недостатком абсолютных энкодеров является их параллельный вывод данных, который требует более сложного интерфейса из-за большего количества проводов. 13-битный абсолютный энкодер, использующий  дополнительные выходные сигналы для помехоустойчивости потребует 28-жильный кабель (13 сигнальных пар плюс питание и заземление) вместо шести в случае с резольвером или инкрементным энкодером.

 

Еще по этой теме

Вы можете пропустить чтение записи и оставить комментарий. Размещение ссылок запрещено.

robotosha.ru

Работа с энкодерами - ruxisupport

Область применения энкодеров¶

Энкодеры применяются для создания точной и быстродействующей обратной связи по координате со всеми типами электродвигателей. Причем обратная связь может осуществляться по положению оси мотора, по линейному положению позиционера, углу поворота моторизованного столика или по любому параметру, непосредственно связанному с положением оси мотора и измеряемому с помощью двухканального квадратурного энкодера, удовлетворяющего требованиям описанным в разделе Технические характеристики для соответствующего типа контроллера. Контроллер 8SMC5 поддерживает как дифференциальные энкодеры, так и простые (single-ended) энкодеры, с возможностью автоопределения типа энкодера. Контроллер 8SMC4 поддерживает только простые энкодеры.

Предупреждение. Автоопределение типа энкодера работает только с энкодерами на 3.3В и 5В (с погрешностью 0.2В).

Что такое квадратурный энкодер?¶

Энкодер - это датчик механического движения. Квадратурный энкодер предназначен для прямого определения позиции оси. Датчик передает относительное положение оси в виде двух электрических сигналов по каналам СН А и СН В, смещенных относительно друг друга на четверть периода.

Сигналы на выходе СН А и СН В квадратурного энкодера.

Механика оптического квадратурного энкодера.

Механика оптического квадратурного энкодера представлена на рисунке. Используются две оптопары. Принцип работы оптопары: светодиод и детектор расположены напротив друг друга с разных сторон от диска. Когда "окно" диска попадает на детектор, оптопара «открыта» (выходной сигнал - логический 0). Если детектор закрыт непрозрачной частью диска, то выходной сигнал датчика – логическая 1.

Основная характеристика квадратурного энкодера – число шагов на один оборот (CPR). Стандартные значения разрешения для энкодера – от 24 до 1024 CPR. Каждый период изменения сигнала может быть расшифрован 1,2 или 4 кодами, что соответствует режимам работы Х1, Х2 и Х4. В данном контроллере используется наиболее точный режим Х4. Максимальная частота каждого из сигналов энкодера, зависит от выбранного энкодера, так для 200 кГц и режима x4 контроллер способен воспринимать 800 000 отсчётов положения по энкодеру в секунду.

Возможности контроллера¶

Контроллер имеет два режима работы с энкодером:
  • использование энкодера как основного датчика положения (основной режим работы с двигателями постоянного тока; для шаговых двигателей режим ведущего энкодера доступен в прошивках c версий 3.10.x).
  • обнаружение проскальзывания, люфта или потери шагов (рекомендуемый режим работы совместно с шаговыми двигателями, если энкодер не используется как основной датчик положения, подробнее).

Режим ведущего энкодера¶

В этом случае все параметры мотора, в том числе положение и скорость движения, измеряются непосредственно с помощью энкодера и имеют размерности, основанные на отсчетах энкодера. Положение отображается непосредственно в отсчетах энкодера, скорости выражаются в RPM - оборотах в минуту. Скорость движения рассчитывается контроллером на основе данных об измеренной скорости и значении количества импульсов энкодера на один полный оборот оси мотора, указанных в блоке настроек обратной связи во вкладке Настройка кинематики движения (Шаговый двигатель), (DC мотор). Отметим, что в случае использования DC мотора режимы поддержания заданной скорости, движения в заданную точку и все производные от них работают с помощью алгоритмов ПИД-регулирования и требуют соответствующих настроек. Для шаговых двигателей режим ведущего энкодера оптимизирует управление двигателем, за счет чего уменьшаются шумы при движении, стабильно проходятся резонансные скорости, достигается большая скорость вращения по сравнению с режимом работы без энкодера, без риска потери шагов, при которых сбивается координата и требуется повторная калибровка.

Новое! Новый алгоритм управления двигателем включен в последнюю версию прошивки. Алгоритм использует обратную связь с замкнутым контуром по энкодеру, подавляя колебания двигателя и акустические шумы. Этот алгоритм позволяет практически любым моторам двигаться в несколько раз быстрее без потери шагов. Все это поставляется с бесплатным обновлением прошивки и программного обеспечения. Новый алгоритм доступен с прошивкой 3.9.16+, которую можно загрузить с нашего сайта или обновить с помощью XiLab. Используйте XiLab 1.13.13+ и выставите параметр "Feedback" на "Encoder" в настройках Device configuration -> Stepper motor. Обратите внимание: значение позиции теперь отображается в отсчетах энкодера.

Подключение энкодера¶

Подключение энкодера к контроллеру осуществляется через разъем DSub, который есть во всех системах: плата контроллера, одноосная и двухосная в корпусе и многоосная.

Схема подключения простого энкодера к разъему DSub.

Схема подключения дифференциального энкодера к разъему DSub.

Также смотрите раздел пример подключения простого мотора.

Предупреждение. Входы энкодеров контроллера внутренне подтянуты к логической единице сопротивлением 5.1 килоОм. Обычно выходы энкодера имеют тип "открытый коллектор" с внутренним подтягивающим резистором. При передаче данных, они обеспечивают хорошие показатели перехода из высокого логического уровня в низкий. Но переход из логического 0 в логическую 1 оказывается более плавным. Он происходит через RC цепь, образованную сопротивлением подтяжки и ёмкостью кабеля. Это особенно важно для длинных кабелей. Если встроенной подтяжки недостаточно, то для улучшения показателей скорости перехода 0 - 1 можно добавить подтягивающий резистор R=1.5k Ом к +5 В на каждый выход, проверив, что открытый коллерктор энкодера способен пропускать ток 5 мА. Схема включения резисторов показана выше. Максимальной скорости работы инкрементального квадратурного энкодера можно достичь добавив к его выходу драйвер push-pull с выходным током более 10 мА, который обеспечивает резкие фронты переходов 0 - 1 и 1 - 0.

QuadEnc1.png View (19.9 KB) selizar, 15 May 2013 11:30

SigEnc1.png View (4.35 KB) selizar, 15 May 2013 11:31

Encoder1.png View (16.4 KB) selizar, 15 May 2013 11:37

Encoder1_rus.ai (387 KB) Sergey_Goncharov, 06 Jun 2013 20:56

Encoder1_eng.ai (355 KB) Sergey_Goncharov, 06 Jun 2013 20:56

Encoder1_rus.svg View (29.6 KB) helicopter, 03 Jul 2014 11:45

Encoder.png View (57.2 KB) yakovlev, 16 Jun 2015 15:23

Encoder.svg View (51.2 KB) yakovlev, 16 Jun 2015 15:26

Encoder.cdr (36.4 KB) yakovlev, 16 Jun 2015 15:26

Encoder_Diff.svg View (17.6 KB) vitkorob, 26 Jan 2017 19:20

Encoder_Diff.png View (40.2 KB) vitkorob, 26 Jan 2017 19:20

ru.xisupport.com


Смотрите также