Линейный энкодер — Linear encoder

Опубликовано 22.05.2016

Датчики углового и линейного перемещения, датчики наклона

Инкрементальные энкодеры

Инкрементальный энкодер (Incremental Encoder) регистрирует относительное перемещение (приращение). Разрешение (Resolution) углового энкодера определяется количеством импульсов на один оборот (на рисунке изображён оптический дик с разрешением 8 имп/об).

Частота импульсов на выходе энкодера пропорциональна скорости вращения.

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

В системах, работающих с абсолютными координатами (станок с ЧПУ), перед началом работы (после включения питания) необходимо выставить ноль – вывести рабочий орган машины в опорную (реперную) точку и в ней обнулить счётчик импульсов.

Синусно-косинусные инкрементальные датчики положения sin/cos 1-Vss и 1-Vpp

Синусоидальные выходные сигналы А и В сдвинуты друг относительно друга на 90 градусов, что позволяет определять направление вращения. Сигнал нулевой метки R используется для синхронизации с точкой отсчёта. Для повышения помехозащищённости датчик выдаёт ещё три инверсных сигнала: A, B, R. Оцифровываются эти сигналы в системе измерения.

Датчики с интерфейсом 1-Vpp используются в сервосистемах, т.к. как позволяют получать очень высокое разрешение. Так, например, если датчик выдаёт 2048 периодов синусоиды (импульсов) на оборот, а система управления в каждой такой синусоиде различает 2048 дискретных уровней, то общее разрешение датчика составит 2048 х 2048 = 4194304 импульсов на оборот.

Инкрементальные датчики с интерфейсом TTL или HTL

Эти датчики сами оцифровывают синусоидальные сигналы – у них на выходе 6 прямоугольных сигналов — три прямых: A, B, R и три инверсных: A, B, R. Для сигнализации неисправности датчика используется инверсный сигнал помехи (если нет неисправности, то сигнал помехи равен 1).

Абсолютные энкодеры

Разрешение абсолютного энкодера (Absolute Encoder) определяется количеством уникальных кодов на один оборот. Однооборотные (Single-turn) абсолютные энкодеры определяют положение в пределах одного оборота, многооборотные (Multi-turn) – в пределах определённого числа оборотов.

Абсолютные датчики положения не требуют для начала работы выхода в опорную точку – при включении питания датчик сразу определяет координату, сканируя кодовые дорожки.

Резольверы

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

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

Резольверы отличаются высокой надёжностью (они не бьются и не запотевают, как оптические) и точностью (аналоговые, а не дискретные).

Код Грея

Код Грея (Gray Code) – это двоичный код, в котором два соседних значения отличаются только одним разрядом.

Код Грея
000 000
1 001 001
2 010 011
3 011 010
4 100 110
5 101 111
6 110 101
7 111 100

Формула побитного преобразования двоичного кода в код Грея

Gi = Bi⊕Bi+1, биты нумеруются справа налево, ⊕ – исключающее ИЛИ (если биты равны, то результат равен 0; если биты не равны, то результат равен 1).

Код Грея используется для кодирования положений в абсолютных датчиках, так как обладает большей помехозащищённостью, чем обычное двоичное кодирование (Natural Binary).

На рисунке изображён оптический диск с 3-х разрядным (8 положений) кодом Грея.

Тахогенераторы

Тахогенераторы предназначены для определения скорости и направления вращения. Напряжение на выходе тахогенератора пропорционально скорости вращения вала.

Методист по олимпиадной робототехнике Университета Иннополис Алексей Овсянников рассказывает, как обработывать сигналы энкодеров двигателей робота в Arduino.

Продолжаю публиковать материалы для слушателей курсов повышения квалификации по подготовке к Innopolis Open in Robotics. В прошлый раз я рассказал про то, как были подготовлены сцены Манипуляционных ИРС в симуляторе CoppeliaSim. Сегодня я хотел бы обратить внимание на механическую часть робота.

Множество команд используют для создания робота широко распространенный набор Lego Mindstorms EV3 или аналогичные (VEX и подобные). Их особенность в использовании датчиков и приводов всего нескольких видов, строго определенных производителем. Контроллеры получают информацию о повороте вала мотора с точностью до градуса, могут определить текущую скорость вращения мотора или синхронизировать их (замедлить любой мотор при замедление другого и т.д.) буквально одной командой.

Олимпиада Innopolis Open in Robotics не ограничивает участников в выборе оборудования (кроме очевидного запрета на использование готовых, фабричной сборки, роботов в некоторых номинациях). Вопрос лишь в том, как использовать всю широту ассортимента китайских магазинов.

Алгоритмы синхронизации моторов хорошо описаны в пособии «Управление моторами тележки с контроллером Трик на JavaScript«. Олег Киселев, автор пособия, описывает алгоритмы, которые можно перенести на любую другую платформу. Но и в этих примерах обращения к датчикам оборотов — энкодерам — происходит через готовые команды el.reset(), er.read() и подобные. Если же использовать в качестве контроллера робота Arduino, ESP- или STM-платы, то подобные команды придется реализовывать самостоятельно.

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

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

Оптический сигнал проходит через «окна» в диске и попадает на фотоприемники, которые выдают сигнал. Если свет не проходит, то сигнала нет. Чем быстрее вращается диск, тем короче становятся импульсы. Таким образом измеряется скорость вращения. А как определить направление? Для этого ставят два приемника, таким образом, чтобы один из них открывался в тот момент, когда второй «видит» как раз середину окна (показывает середину импульса).

Обратите внимание, что при вращении диска по часовой стрелке сперва «открывается» приемник А — импульс на нем появляется раньше, чем на приемнике В. При вращении против часовой стрелки сигнал появляется сперва на приемнике B, потом на А. Отслеживание и сравнение сигналов позволяет понять направление вращения диска и вала, к которому он закреплен.

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

Еще раз присмотримся к сигналам, приходящим с приемников A и В: за полный период (цикл, который повторяется при отслеживании одного «окна» на диске) есть четыре состояния выходов. Можно отслеживать их все и увеличить точность измерений или отслеживать только один выход (А или В), а по второму определять направление. Какого только колхоза в программах, отслеживающих энкодеры, я ни встречал. Кто-то пытается ловить код единицами и нулями, которые обозначены на рисунке, кто-то делает пятиэтажные опросы. Но об этом поговорим позже, возможно даже, не в этой статье.

Возьмем для примера два распространенных мотора: Pololu 25mm metal gearmotor и TETRIX MAX DC Motor. Оба они являются мотор-редукторами, что означает совмещение электромотора и редуктора в одном устройстве. Электромотор вращается очень быстро, но слабо, а редуктор увеличивает усилие, снижая скорость вращения. В итоге на выходном валу мотор-редуктора мы получаем меньшую частоту вращения, но большее усилие. Pololu позволяет выбрать один из нескольких вариантов с разными редукторами. То есть, сам мотор может оставаться тем же самым, а меняя редуктор, мы можем получить разные характеристики на выходном валу.

Пока что лучше перейдем к энкодеру TETRIX DC Motor:

Он устанавливается на выходном валу мотор-редуктора. На вал крепится диск с рисками (отражающими и не отражающими областями). Таких рисок аж 1440 на диске, то есть за один оборот вала энкодер может насчитать 1440 импульсов на одном выходе или в четыре раза больше состояний. Точность измерений 0,25 градуса (4 импульса на 1 градус) или 0,0625 градуса (16 состояний на 1 градус). Внушительно!

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

Теперь посмотрим на мотор-редуктор Pololu с энкодером:

На рисунке я выдели цветами:

Красный — выходной вал мотор-редуктора

Зеленый — редуктор

Оранжевый — электромотор

Голубой — энкодер

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

Подобный подход имеет важный минус, кроме очевидной необходимости проводить дополнительные расчеты, а именно — наличие погрешности измерений из-за зазоров и упругих деформациях в редукторе. Выходной вал может повернуться на долю градуса при неподвижном вале мотора. Но в большинстве случае подобные погрешности не превышают одного градуса, а проявляются при резких сменах направления вращения. А простота изготовления диска всего с 10-20 оптическими окнами или магнитными областями значительно удешевляет конструкцию. Моторы серии 25GA-370 стоят по 900 рублей вместе с энкодерами, фирменный мотор Pololu с энкодером обойдется примерно в 3000 рублей.

Посчитаем, какая точность измерений у энкодеров, расположенных на валу мотора, а не выходном валу мотор-редуктора. Для этого обратимся к сравнительной таблице моторов Pololu. Ограничимся какой-нибудь одной серией, например, 12В medium power:

Мотор-редуктор с передаточным отношением 75:1 вращает выходным валом со скоростью 100 оборотов в минуту, а при передаточном отношении 172:1 выходной вал делает 43 оборота за минуту. Просматривая страницы каждого мотора можно заметить, что реально передаточные отношения немного отличаются (74,83 и 171,79 для указанных ранее).

Посчитаем, сколько импульсов энкодер выдает за один оборот выходного вала. За один оборот магнитного диска (то есть, вала мотора) энкодер Pololu выдает по 12 импульсов на каждом выходе, энкодер моторов серии 25GA-370 по 11 импульсов. За один оборот выходного вала вал мотора делает количество оборотов, равное передаточному отношению редуктора. Для моторов Pololu выбранной серии — от 1 до 227. Для моторов серии 25GA-370 — от 4,4 до 500. Получим следующие значения (в таблицу подставлены точные значения передаточных отношений мотор-редукторов Pololu):

Чем меньше скорость вращения выходного вала, тем точнее измерения энкодера. Для наиболее ходовых и применимых в мобильных платформах моделях на 70-170 об/мин (выделены зеленым) даже простой подсчет импульсов на одном выходе энкодера дает точность менее 1 градуса. Меньше, чем 1440 импульсов и 5760 состояний энкодера TETRIX, но сопоставимо с моторами Lego.

Итоговые формулу, связывающие сигналы энкодера с градусами поворота выходного вала будут следующие:

где:

φ — угол поворота выходного вала (в градусах);

n — «тики», сигналы энкодера;

i — передаточное отношение редуктора;

IPR — (impulse per rotation) кол-во импульсов энкодера на 1 оборот диска (может быть как 12 импульсов, так и 48 состояний, в зависимости от того, что отслеживается в программе).

Теперь посчитаем, как часто приходят сигналы с датчика. Умножив частоту вращения выходного вала на передаточное отношение можно получить скорость вращения электромотора. Для всех моторов Pololu она составляет примерно 7500-7800 оборотов в минуту. Фирма Pololu указывает частоту вращения холостого хода (мотора без нагрузки), но сам редуктор может выступать некоторой нагрузкой, поэтому частота вращения и отличается. Так как самая быстрая частота вращения как раз на холостом ходу, а под нагрузкой мотор будет замедляться, то как максимально возможную принимаем именно ее.

Для популярной серии моторов 25GA, взяв за основу таблицу с сайта DVRobot.ru, можно вычислить скорость вращения мотора примерно как 5950-6000 оборотов в минуту.

Округлим скорости вращения в большую сторону и возьмем 7800 об/мин для Pololu 12V medium power и 6000 об/мин для 25GA-370. Обе серии широко распространены и подходят для подключения через драйвера на основе L298P или L298N.

Итак, диск энкодера делает по 7800 или 6000 оборотов за минуту (обозначим частоту вращения символом ω). Энкодер двигателей Pololu выдает по 12 импульсов (IPR=12) на каждом выходе за один оборот. Итого:

Если отслеживать все четыре варианта сигналов на энкодере, то получим 374 400 состояний за одну минуту.

Энкодер моторов 25GA-370 выдает по 11 импульсов на каждый выход за один оборот. Для него получаем

Или 264 000 состояний за минуту.

Делим эти огромные числа на 60 и получаем кол-во импульсов и состояний за секунду. Вычисляем период одного импульса и состояния (время, за которое они сменяются).

У моторов Pololu на холостом ходу каждый новый импульс приходит раз в 641 микросекунду, у 25GA-370 раз в 909 микросекунд. Необходимо, чтобы наш управляющий контроллер успевал фиксировать эти импульсы. Стандартная плата Arduino UNO работает на частоте 16 МГц, то есть, делает 16 млн тактов в секунду. Один такт занимает 0,0625 мкс. Контроллеры на базе STM или ESP работают на больших частотах, их такты гораздо меньше. Желтым в таблице обозначены количества тактов, которые успевает сделать Arduino UNO за время смены одного состояния или прихода одного импульса. Может показаться, что даже 2564 тактов на считывание состояния энкодера Pololu будет более чем достаточно, но вот тут и начинает проявляться «колхоз» в программной обработке показаний датчиков. К сожалению, та же плата Arduino UNO не умеет выполнять действия в параллельных потоках, только в основном цикле. Достаточно нагрузить его сложными вычислениями дробных чисел или считыванием аналоговых датчиков (одни из самых долгих операций; паузы командой delay и работу с интерфейсом UART-Serial оставляем за скобками, они вне конкуренции) и каждая его итерации начнет занимать по несколько тысяч тактов. Считывание показаний в этом датчике неизбежно приведет к пропуску тактов. Выход из этой сложной ситуации кроется в использовании прерываний. Это специальные подпрограммы, которые выполняются при наступлении определенных событий. Например, их можно настроить на появление сигнала на пине. То есть, когда приходит импульс от энкодера, Arduino прерывает основной цикл программы, выполняет небольшой кусочек кода и возвращается в основной цикл в то же самое место, где прервалось выполнение. С точки зрения основной программы, ничего и не произошло. Важно понимать, что вызываемая по прерыванию подпрограмма должна быть как можно меньше и выполняться как можно быстрее, чтобы надолго не прерывать основную программу. Иначе можно получить ситуацию накопления прерываний — пока обрабатывается одно прерывание, происходит следующее событие и основная программа просто не успевает выполняться.

У платы Arduino UNO внешние прерывания можно повесить только на два пина: 2 и 3. Так как управлять хочется двумя моторами, получаем всего по одному прерыванию на мотор. Следовательно, будем отслеживать появление сигналов на одном выходе энкодера, а второй выход покажет направление вращения. Работа с прерываниями сводится к следующим шагам:

1. Необходимо написать подпрограммы, которые будут вызываться. Они обязательно должны быть void (не возвращать никаких значений и без параметров):

Попав в подпрограмму я узнаю, какой сигнал на втором выходе энкодера и, в зависимости от результата, увеличиваю или уменьшаю счетчик encA / encB. Обратите внимание, что эти счетчики должны быть самого вместительного типа, у меня это long, так как обычный int заполнится за минуту-две непрерывного движения.

Присоединить прерывание, то есть включить его. Делается это командой attachInterrupt() со следующими параметрами:

attachInterrupt(digitalPinToInterrupt(pin), ISR, mode)

где

pin — пин, к которому привязывается прерывание (для Arduino UNO это пины 2 и 3, для других плат смотрите описание команды),

ISR — имя вызываемой подпрограммы,

mode — режим срабатывания, бывает LOW (срабатывает пока 0 на пине), CHANGE (срабатывает при любом изменении цифрового сигнала на пине), RISING (срабатывает при изменении сигнала с 0 на 1 на пине), FALLING (срабатывает при изменении сигнала с 1 на 0 на пине). В нашем случае логичнее использовать RISING.

Итоговая программа у меня получилась такой:

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

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

Листинги программ: #define INT_A_PIN 2 #define INT_B_PIN 3 #define SIG_A_PIN 4 #define SIG_B_PIN 5 long encA = 0; long encB = 0; void setup() { pinMode(INT_A_PIN, INPUT); pinMode(INT_B_PIN, INPUT); pinMode(SIG_A_PIN, INPUT); pinMode(SIG_B_PIN, INPUT); Serial.begin(9600); attachInterrupt(digitalPinToInterrupt(INT_A_PIN), EncA, RISING); attachInterrupt(digitalPinToInterrupt(INT_B_PIN), EncB, RISING); } void EncA() { if ( digitalRead(SIG_A_PIN) ) { encA++; } else { encA--; } } void EncB() { if ( digitalRead(SIG_A_PIN) ) { encB--; } else { encB++; } } void loop() { Serial.print(encA); Serial.print("t"); Serial.println(encB); }

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

В последнее время название этих приборов – «энкодеры» утвердилось, и стало общеупотребимым. Мы не беремся здесь и сейчас обсуждать преимущества или недостатки  названия «Энкодеры», а также его правильность. Просто говорим, что это название утвердилось и все заинтересованные лица понимают о чем идет речь. Перечень прежних названий этих приборов был весьма разнообразен: фото-импульсные датчики, ФИДы, датчики угловых перемещений, ДУПы, преобразователи фотоэлектрические, преобразователи вращения (например, ЭНИМС-овский  ВЕ178)  и т д. В настоящее время даже такой значительный российский производитель датчиков перемещения, как СКБ ИС, в скобках,  после названия «Преобразователь перемещения», использует слово «Энкодер». Будем и мы далее использовать данное название.

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

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

Выходной сигнал инкрементального энкодера может представлять собой две последовательности прямоугольных импульсов в форме меандры, сдвинутых друг относительно друга на четверть периода. Последовательности обозначаются  обычно латинскими буквами A и B. Знак угла сдвига между  A и B определяет направление движения. Третий выход инкрементального энкодера формирует короткий импульс, называемый ноль-меткой (Z-меткой, индексом), который  строго привязан к определенному месту положения ротора энкодера. Эта ноль-метка часто используется системой точного перемещения в процедуре «выхода в ноль».

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

И еще одно замечание, на которое хотелось бы обратить внимание при рассмотрении инкрементальных энкодеров. В специальных энкодерах, предназначенных для работы с некоторыми  сервоприводами, кроме обычных последовательностей импульсов A, B и Z имеется три дополнительных выхода, на которых формируется сигналы о положении ротора вращающегося синхронного серводвигателя. Выходы обычно имеют названия U,V,W (иногда HA,HB,HC). Такой специальный энкодер невозможно заменить обычным энкодером с выходами A, B и Z. Понять, имеются ли у запрашиваемого Клиентом энкодера дополнительные выходы U,V,W можно по документации к конкретному сервоприводу, где такая информация, как правило, имеется. Или по количеству выводов, которых у спец энкодеров не меньше 15.

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

Однооборотный абсолютный энкодер преобразует угол поворота вала энкодера в цифровой код. Причем каждому положению внутри оборота соответствует свое значение кода. Форма представления цифрового кода может быть различной: параллельный код (двоичный, двоично-десятичный, Грея и др.) и последовательный код, когда информация о положении содержится в цифровых сообщениях, формируемых на выходе энкодера (например, с помощью протоколов SSI, BiSS, CAN Open и др.)

Многооборотный абсолютный энкодер формирует информацию о положении не только внутри оборота, но и подсчитывает ещё количество полных оборотов вала энкодера. Количество полных оборотов, которое запоминает в своей памяти такой энкодер, может достигать величины в несколько сотен тысяч. Форма представления цифрового кода – последовательный и/или параллельный код.

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

Аналоговый энкодер. Выходной сигнал аналогового энкодера представляет собой две последовательности синусоидальных сигналов, сдвинутых друг относительно друга на фазный угол 90°. Амплитуда сигналов составляет 0.5В (размах колебаний Upp – 1В).  Всего сигналов 4, поскольку каждая последовательность представлена прямым и инверсным сигналами (два дифференциальных выхода). В паспортных данных к энкодеру всегда указывается количество периодов синусоидальных сигналов на оборот вала или длина соответствующая периоду для линейных аналоговых энкодеров.

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

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

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

Некоторые известные европейские производители электроприводов используют резольверы, как основной датчик обратной связи сервосистем. Китайские производители отдают предпочтение (на данный момент) энкодерам на валу серводвигателей.

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

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

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

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

Типы энкодеров

Выделяют следующие типы энкодеров: инкрементальные (инкрементные) и абсолютные.

Инкрементальный энкодер

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

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

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

Классификация по принципу действия

По принципу действия энкодеры различают:

  • оптические
  • магнитные
  • магниторезисторные

Оптические

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

Магнитные

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

Магниторезисторные

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

Параметры, на которые необходимо обратить внимание при выборе энкодеров

При выборе энкодера следует обратить внимание на следующие параметры:

  • Вал, отверстие под вал (и их диаметр). От этого зависит каким образом на энкодер будет передаваться вращение, либо объект будет подсоединяться к отверстию энкодера, либо на вал энкодера будет передаваться вращение с помощью, например, зубчатой передачи или ремня.

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

image

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

image

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

image

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

image

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

image

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

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

image

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

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

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

Счет

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

image

Его начальное положение 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, для работы с энкодером, для кнопки.

image

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Подключение

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

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

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

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

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

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

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

Подключение инкрементальный энкодера к avr

Оцените статью
Рейтинг автора
5
Материал подготовил
Илья Коршунов
Наш эксперт
Написано статей
134
А как считаете Вы?
Напишите в комментариях, что вы думаете – согласны
ли со статьей или есть что добавить?
Добавить комментарий