СОДЕРЖАНИЕ ►
Энкодер Ардуино, а точнее модуль KY-040 очень часто используется в проектах для управления различными устройствами от платы Arduino. В этом обзоре мы рассмотрим схему подключения модуля к микроконтроллеру, а также представим сразу несколько примеров с использованием датчика для включения и управления яркостью светодиодов, вращение сервопривода с помощью энкодера и платы Arduino.
Модуль энкодер Ардуино: схема, распиновка
Энкодер служит для преобразования угла поворота в электрический сигнал. При вращении ручки модуля мы получаем два сигнала (A и B), которые противоположны по фазе. Сигналы A и B зависят друг от друга при вращении энкодера Ардуино по часовой или против часовой стрелки. Для считывания сигнала A и B с энкодера можно использовать, как цифровые, так и аналоговые порты микроконтроллера.
Каждый раз, когда сигнал A переходит от положительного уровня к нулю, мы считываем значение сигнала B (смотри диаграмму выше). Если сигнал B находится в этот момент в положительном состоянии, значит энкодер вращается по часовой стрелке, если B равен нулю, то энкодер вращается против часовой стрелки. Считывая оба выхода при помощи Ардуино, можно определить направление и угол поворота.
Как подключить энкодер к Ардуино
Для занятия нам понадобятся следующие детали:
- плата Arduino Uno / Arduino Nano / Arduino Mega;
- модуль энкодер ky-040;
- беспаечная макетная плата;
- светодиоды и резисторы;
- микро сервопривод;
- провода «папа-папа», «папа-мама».
Для работы с энкодером потребуется установить библиотеку RotaryEncoder.h, скачать архив можно здесь. Если у вас возникли трудности с установкой библиотеки для энкодера, то рекомендуем ознакомиться с информацией, как установить библиотеку в Arduino IDE. Для подключения KY-040 к Arduino можно использовать цифровые и аналоговые пины микроконтроллера, в наших примерах используются пины A1-A3.
Скетч. Пример Ардуино энкодер прерывание
Разберем для начала самый простой пример управления энкодером от Ардуино с помощью прерываний, где вся черновая работа по определению положения ручки энкодера выполняется с помощью библиотеки RotaryEncoder.h. Мы лишь выводим данные на монитор порта Arduino IDE. Соберите схему с энкодером, как показано на картинке выше и загрузите в микроконтроллер Arduino следующую программу.
#include"RotaryEncoder.h"// библиотека для энкодера RotaryEncoder encoder(A2, A3); // пины подключение энкодера (DT, CLK)static int pos = 0; // задаем начальное положение энкодераint newPos; voidsetup() { Serial.begin(9600); Serial.println(pos); // выводим на монитор начальное значение } voidloop() { // проверяем положение ручки энкодера encoder.tick(); newPos = encoder.getPosition(); // если положение изменилось - выводим на мониторif (pos != newPos) { Serial.println(newPos); pos = newPos; } }
Пояснения к коду:
- начальное положение ручки равно нулю
static int pos = 0;
и это значение выводится на мониторе порта в процедуре void setup в начале программы; - в примере программы для энкодера нет ограничения по положению рукоятки датчика KY-040, положение может быть положительным и отрицательным.
Скетч. Управление энкодером Ардуино светодиодом
Следующий пример позволит управлять яркостью светодиода с помощью ШИМ сигнала, а также включать и выключать второй светодиод с помощью нажатия кнопки энкодера. Для этого соберите схему, размещенную выше. Обратите внимание, что порт SW энкодера подключен к пину 2 Arduino, а светодиоды к 12 и 11 пину. После сборки схемы загрузите следующий код управления светодиодами на Arduino с энкодером.
#include"RotaryEncoder.h"// библиотека для энкодера RotaryEncoder encoder(A2, A3); // пины подключение энкодера (DT, CLK)// задаем шаг энкодера и макс./мин. значение#define STEPS 5 #define POSMIN 0 #define POSMAX 255 int lastPos, newPos; voidsetup() { pinMode(2, INPUT_PULLUP); // пин подключения кнопки энкодера (SW)pinMode(11, OUTPUT); // пины для подключения светодиодовpinMode(12, OUTPUT); Serial.begin(9600); encoder.setPosition(10 / STEPS); } voidloop() { // проверяем положение ручки энкодера encoder.tick(); newPos = encoder.getPosition() * STEPS; if (newPos < POSMIN) { encoder.setPosition(POSMIN / STEPS); newPos = POSMIN; } else if (newPos > POSMAX) { encoder.setPosition(POSMAX / STEPS); newPos = POSMAX; } // если положение изменилось - выводим на мониторif (lastPos != newPos) { Serial.println(newPos); lastPos = newPos; } // включаем первый светодиод с установленной яркостьюanalogWrite(11, lastPos); // включаем второй светодиод с помощью нажатия кнопкиif (digitalRead(2)==HIGH) { digitalWrite(12, LOW); } if (digitalRead(2)==LOW) { digitalWrite(12, HIGH); } }
Пояснения к коду:
- для пина 2 используется конфигурация INPUT_PULLUP, так как кнопка энкодера подключена к GND и при ее нажатии на цифровом входе будет сигнал LOW;
- в программе можно изменить максимальное и минимальное значение поворота энкодера, а также шаг вращения ручки датчика ky-040.
Скетч. Управление серво мотором от энкодера
Следующий скетч демонстрирует подключение серво с энкодером. Логический провод микросерво (желтый или оранжевый цвет) подключается к ШИМ порту 11 микроконтроллера. В программе задается угол поворота серво с помощью поворота ручки модуля ky-040. Работа программы похожа на управление потенциометром серво, но в случае с энкодером, можно задавать максимально точный угол поворота.
#include"RotaryEncoder.h"// библиотека для энкодера RotaryEncoder encoder(A2, A3); // пины подключение энкодера (DT, CLK)#include<Servo.h> // библиотека для сервоприводаServo servo; // задаем шаг энкодера, макс./мин. значение поворота#define STEPS 10 #define POSMIN 0 #define POSMAX 180 int lastPos, newPos; voidsetup() { servo.attach(11); // пин для подключения сервоSerial.begin(9600); encoder.setPosition(10 / STEPS); } voidloop() { // проверяем положение ручки энкодера encoder.tick(); newPos = encoder.getPosition() * STEPS; if (newPos < POSMIN) { encoder.setPosition(POSMIN / STEPS); newPos = POSMIN; } else if (newPos > POSMAX) { encoder.setPosition(POSMAX / STEPS); newPos = POSMAX; } // если положение изменилось - выводим на мониторif (lastPos != newPos) { Serial.println(newPos); lastPos = newPos; } // устанавливаем угол поворота микросерво servo.write(lastPos); }
Пояснения к коду:
- шаг поворота качалки серво Ардуино составляет 10 градусов. Шаг поворота и максимальный угол поворота можно изменить в программе.
Заключение. Мы рассмотрели несколько вариантов подключения модуля энкодера к Arduino: пример с прерыванием и управлением светодиодом, пример с управлением мотором серво. Также модуль можно использовать для управления меню на дисплее 1602 LCD Ардуино. Мы использовали библиотеку RotaryEncoder.h, но есть еще несколько библиотек энкодера для Ардуино, которые в одном обзоре не уместить.
Подключение энкодера
В зависимости от типа энкодера, он подключается либо напрямую к компьютеру, либо к специальному программатору с помощью интерфейса. С помощью чего проверяется работоспособность энкодера. В случае неисправности энкодера в большинстве случаев потребуется его замена. Энкодеры делятся на:
- Инкрементальный энкодер
- Абсолютный энкодер
- Энкодер с параллельным интерфейсом (встречается редко)
- Энкодер с последовательным интерфейсом (широко распространен)
Инкрементальные энкодеры бывают с цифровым или с аналоговыми сигналами. Отличие инкрементального энкодера от абсолютного заключается в том, что он при подаче питания не может определить свое положение (абсолютную позицию) в каком положении находится его вал.
Программирование энкодера
Современные энкодеры внутри себя имеют микроконтроллер (процессор) все данные энкодера передаются по цифровому последовательному интерфейсу, наиболее распространённый RS485. В процессоре энкодера хранятся данные о двигателе, в котором этот датчик установлен (ток, напряжение, инерция, угол смещения ротора, индуктивности и естественно тип двигателя с серийным номером).
Именно поэтому новые энкодеры просто поставить на оборудование не получится, придется программировать. Программирование энкодера производится с помощью компьютера со специальным программным обеспечением либо с помощью программатора.
Настройка энкодера, юстировка
После программирования энкодера следует его настройка (юстировка). У каждого производителя Настройка энкодера, юстировка индивидуальная.
Самые распространенные производители энкодеров:
- Siemens
- Heidenhain
- Kubler
- Omron
- Sick
Также Настройка энкодера, юстировка будет зависеть от двигателя, на котором он установлен.
Проверка энкодера
По завершению всех вышеперечисленных процедур следует проверка энкодера на специальном стенде. Проверка работы с приводом как без нагрузки, так и с нагрузкой. В некоторых случаях проверка энкодера проводится с помощью компьютера и соответствующего софта.
Распиновка и схема энкодера
Распиновка энкодера |
Схема энкодера |
К кому обратиться?
Специализированный сервисный центр «Кернел» выполнит профессиональное подключение, настройку (юстировку) и программирование энкодеров любых производителей в сжатые сроки и за разумные деньги.
подключение, настройку и программирование энкодеров производят квалифицированные специалисты с инженерным образованием.
Специалисты нашей компании за время ее существования произвели настройку и программирование более тысячи энкодеров выпущенных под разными брендами.
Мы уверенны в качестве выполненных работ и даем гарантию на все виды работ, включая настройку и программирование энкодера шесть месяцев.
Как с нами связаться
Вас заинтересовало предложение по подключению, настройке и программированию энкодеров? Задайте их нашим менеджерам. Связаться с ними вы можете несколькими способами:
- Заказав обратный звонок (кнопка в правом нижнем углу сайта)
- Посредством чата (кнопка расположена с левой стороны сайта)
- Либо позвонив по номеру: +7(8482) 79-78-54; +7(917) 121-53-01
- Написав на электронную почту: 89171215301@mail.ru
Вот далеко не полный список производителей промышленной электроники и оборудования, ремонтируемой в нашей компании.
Коротко энкодеры можно назвать преобразователями угловых перемещений. Они служат для модификации угла поворота объекта вращения, например, вала какого-либо механизма, в сигнал электрического тока. При этом определяется не только угол поворота вала, но и его направление вращения, а также скорость вращения и текущая позиция относительно первоначального положения.
Наиболее популярными энкодеры стали при их использовании в системах точного перемещения, на станкостроительных заводах, в производственных комплексах с применением робототехники, в измерительных устройствах, в которых необходима регистрация точных измерений наклонов, поворотов, вращений и углов.
Виды и принцип действия
Энкодеры – это датчики поворота. Простейший датчик имеет ручку, которая может поворачиваться по часовой стрелке или против нее. В зависимости от угла поворота и направления выдается цифровой сигнал, информирующий о том, в каком положении находится ручка, либо в какую сторону она была повернута.
У такого энкодера, показанного на рисунке, ручка также может применяться в качестве кнопки. Это является вспомогательной функцией конкретного вида энкодера.
По типу выдаваемых данных энкодеры делятся на две большие группы:
- Абсолютные.
- Инкрементальные.
Абсолютные энкодеры
У абсолютного энкодера весь круг поворота разделен на определенное количество секторов, чаще всего одинакового размера. Эти сектора пронумерованы. Энкодер при работе выдает номер сектора, в котором на данный момент он находится. Поэтому он и называется абсолютным. У этого типа энкодера всегда можно определить, на какой угол относительно нулевого сектора повернут энкодер в конкретный момент, то есть, при повороте он выдает значения номеров секторов, до максимального значения. Далее он переходит снова на ноль.
Если вал энкодера поворачивать в другую сторону, то он начнет выдавать противоположные значения. В нашем случае у него используется пять выводов для выдачи значений поворота.
У данного алгоритма имеются свои недостатки. Из таблицы 1 виден порядок выдаваемых значений n-го энкодера. Стоит обратить внимание на две последние строчки, переход от 127 на 128.
Таблица 1
Здесь меняются абсолютно все биты. В идеальном энкодере они все меняются одновременно и нет никаких проблем. Практически в реальном энкодере биты меняются быстро, однако не одновременно. И в какой-то момент на выходе энкодера оказывается совершенно произвольное значение. Так как меняются все биты, следовательно, у энкодера будет произвольное значение от нуля до всех единиц.
Справа изображен пример такого переключения. Чем это может грозить? Разберем пример. Микроконтроллер с помощью двигателя управляет валом и поворачивает его на определенный угол. В определенный момент при переключении со 127 на 128 ячейку он получает определенное случайное значение. Контроллер делает вывод, что вал находится совершенно в другом месте, в отличие от фактического места, и начинает его вращать в другую сторону, с другой скоростью и т.д.
Через определенное время микроконтроллер получает правильное значение, начинает пытаться остановить вал и вращать его в правильную сторону. Такой процесс может продолжаться долго, при условии, что такая ошибка будет встречаться часто. Такие ошибки являются нерегулярными, и вычислить их достаточно сложно.
Код Грея
Выше описанная проблема решается с помощью введения кода Грея. Особенностью кода Грея является то, что при переключении энкодера на единицу, значение кода Грея меняется также на единицу. Меняется только один вид. Это видно в таблице 2 в сравнении двоичного кода и кода Грея.
Таблица 2
Первые две строчки совпадают, но уже во второй строчке поменялся средний бит. Далее также меняется один бит. Также стоит отметить, что последний и первый код Грея отличается на один бит, то есть код Грея может зациклиться.
Преимуществом данного кода является то, что ошибка, которая рассмотрена выше, невозможна. Из недостатков можно отметить, что микроконтроллеру необходимо переводить код Грея в двоичный код для того, чтобы понять, в каком положении находится абсолютный энкодер.
Инкрементальные энкодеры
Следующим типом является инкрементальный энкодер, который имеет более простую структуру. Но при этом он не показывает конкретное место положения своей ручки. Он показывает только направление поворота, а число делений поворота должен считать микроконтроллер.
У инкрементального энкодера есть набор полосок, которые по умолчанию подключены к земле, и при повороте они замыкаются и размыкаются. Получается сигнал, изображенный на рисунке (похож на меандр). Таких круговых полосок у энкодера две. Полоски смещены на одну четверть, и сигналы также смещены между собой на четверть. Это важно, так как позволяет определить направление вращения.
Схему инкрементального энкодера можно представить по правому рисунку. Кнопки обозначают периодические подключения энкодера к земле. Так как внутри энкодер не подключается к логической единице, то необходимо снаружи самостоятельно подтянуть логические единицы через резисторы к выводу энкодера. В этом случае, когда ни одна из ножек у энкодера не подключена к земле, на ножках будет логическая единица.
Если энкодер подключил к земле какую-то ножку, то на этой ножке будет логический ноль. В спокойном состоянии у энкодера на выходе логическая единица. При начале вращения энкодера в любую сторону, то сначала один вывод подключается к земле, затем другой. Далее эти выводы по очереди отключаются от земли, и на них опять образуется логическая единица.
Определить направление поворота можно по тому, какой из выводов раньше подключился к земле. При подсчете полных циклов можно посчитать количество щелчков поворота энкодера.
Фактически у энкодера имеется четыре состояния:
- Две единицы.
- Ноль и единица.
- Ноль и ноль.
- Единица и ноль.
Три состояния, которые не равны единицам, являются неустойчивыми, и в них энкодер не может находиться. Во многих микроконтроллерах реализована функция подсчета поворотов с помощью таймеров, у которых есть определенные входы. Таймер считает на аппаратном уровне, на сколько щелчков и в какую сторону был повернут энкодер, и выдает значение. То есть, счетчик инкрементирует какое-либо число.
По изменению этого числа можно определить, на сколько щелчков был повернут энкодер. По количеству щелчков можно определить и угол поворота. Энкодер также имеет дребезг контактов, который усложняет анализ сигналов.
Оптические энкодеры
Подобный преобразователь выполнен в виде диска, зафиксированного на валу, и изготовленного из стекла. Оптический датчик поворота отличается от других видов дополнительным оптическим растором, перемещаемым при повороте вала. При этом он превращает момент вращения в световой поток, который далее принимается фотодатчиком.
Оптический преобразователь запоминает углы вращения. При этом каждому отдельному положению соответствует особый цифровой код, который вместе с числом оборотов образует единицу измерения датчика. Энкодер подключается и работает по аналогии с инкрементальным датчиком.
По характеру функционирования они разделяются на фотоэлектрические и магнитные. Принцип работы магнитных основан на использовании эффекта Холла, который был впервые открыт в 1879 году. При этом разность потенциалов появляется только при расположении провода постоянного тока в магнитное поле.
По точности и свойствам разрешения магнитный вид датчика уступает фотоэлектрическому, однако по конструкции он проще, менее требователен к условиям работы и пространству. Магнитный энкодер является прибором, который фиксирует прохождение магнитного полюса магнита при вращении, находящегося рядом с чувствительным элементом. Информация передатчика выражается в цифровом коде.
Фотоэлектрический энкодер является датчиком, работающим на основе фотоэлектрического принципа. Этот эффект наблюдается при воздействии светового потока на вещество. Этот принцип был открыт в 1887 году. При эксплуатации такого датчика происходит постоянное преобразование луча света в сигнал электрического тока.
Аналогами фотоэлектрического энкодера являются оптоэлектронный, оптический и оптронный. Эти датчики наиболее чувствительны к характеристикам изготовления, эксплуатации и другим факторам, по сравнению с другими моделями. Однако это оправдывается их повышенной точностью, в отличие от конкурентов.
Похожие темы:
-
Потенциометры. Виды и особенности. Устройство и работа
-
Реостаты. Виды и особенности. Принцип действия и устройство
-
Автотрансформаторы (ЛАТР). Типы и особенности. Принцип работы
-
Сервоприводы. Виды и устройство. Характеристики и применение
РубрикаОБОРУДОВАНИЕИспользуемые источники:
- https://xn--18-6kcdusowgbt1a4b.xn--p1ai/%d1%8d%d0%bd%d0%ba%d0%be%d0%b4%d0%b5%d1%80-%d0%b0%d1%80%d0%b4%d1%83%d0%b8%d0%bd%d0%be/
- https://www.remontservo.ru/pages/publications/article-135/jenkoder-podkljuchenie-nastrojka-programmirovanie
- https://electrosam.ru/glavnaja/slabotochnye-seti/oborudovanie/enkodery/