Энкодер и ардуино. Подключение энкодера к Arduino: полное руководство по использованию

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

Что такое энкодер и зачем он нужен

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

Основные преимущества использования энкодеров:

  • Высокая точность измерения угла поворота
  • Возможность определять направление вращения
  • Отсутствие ограничений по количеству оборотов
  • Простота подключения к микроконтроллерам

Виды энкодеров и их особенности

Существует два основных типа энкодеров:

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

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


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

Выдают уникальный код для каждого углового положения вала. Позволяют определить точное положение сразу после включения питания. Более сложные и дорогие.

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

Принцип работы инкрементального энкодера

Инкрементальный энкодер имеет два выходных канала A и B, которые генерируют прямоугольные импульсы при вращении вала. Каналы сдвинуты по фазе на 90°, что позволяет определять направление вращения.

Принцип работы инкрементального энкодера:

  1. При вращении вала генерируются импульсы на каналах A и B
  2. Подсчет импульсов позволяет определить угол поворота
  3. Анализ последовательности импульсов на A и B дает направление вращения
  4. Частота импульсов пропорциональна скорости вращения

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

Для подключения инкрементального энкодера к Arduino требуется всего 3-4 провода:

  • VCC — питание 5В
  • GND — земля
  • A — сигнальный выход канала A
  • B — сигнальный выход канала B

Схема подключения энкодера к Arduino:


  1. VCC энкодера подключаем к 5V на Arduino
  2. GND энкодера — к GND Arduino
  3. Выход A — к цифровому пину 2 (прерывание 0)
  4. Выход B — к цифровому пину 3 (прерывание 1)

Использование пинов с поддержкой прерываний позволяет более точно обрабатывать сигналы энкодера.

Программирование работы с энкодером на Arduino

Для корректной работы с энкодером необходимо использовать прерывания и правильно обрабатывать сигналы с каналов A и B. Вот базовый код для работы с энкодером на Arduino:

«`cpp #define encoderPinA 2 #define encoderPinB 3 volatile int encoderPos = 0; volatile int lastEncoded = 0; void setup() { pinMode(encoderPinA, INPUT_PULLUP); pinMode(encoderPinB, INPUT_PULLUP); attachInterrupt(0, updateEncoder, CHANGE); attachInterrupt(1, updateEncoder, CHANGE); Serial.begin(9600); } void loop() { Serial.println(encoderPos); delay(100); } void updateEncoder() { int MSB = digitalRead(encoderPinA); int LSB = digitalRead(encoderPinB); int encoded = (MSB << 1) | LSB; int sum = (lastEncoded << 2) | encoded; if(sum == 0b1101 || sum == 0b0100 || sum == 0b0010 || sum == 0b1011) encoderPos++; if(sum == 0b1110 || sum == 0b0111 || sum == 0b0001 || sum == 0b1000) encoderPos--; lastEncoded = encoded; } ```

Этот код использует прерывания для обработки сигналов энкодера, что обеспечивает высокую точность измерений. Функция updateEncoder() вызывается при каждом изменении состояния на пинах A или B и корректно определяет направление и величину поворота.

Применение энкодеров в проектах с Arduino

Энкодеры находят широкое применение в различных проектах на базе Arduino:


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

Как использовать энкодер для управления скоростью мотора? Вот пример кода:

«`cpp #define ENCA 2 // Пин энкодера A #define ENCB 3 // Пин энкодера B #define PWM 5 // ШИМ пин для управления мотором #define IN1 6 // Пин направления 1 #define IN2 7 // Пин направления 2 volatile int posi = 0; long prevT = 0; float eprev = 0; float eintegral = 0; void setup() { Serial.begin(9600); pinMode(ENCA,INPUT); pinMode(ENCB,INPUT); pinMode(PWM,OUTPUT); pinMode(IN1,OUTPUT); pinMode(IN2,OUTPUT); attachInterrupt(digitalPinToInterrupt(ENCA),readEncoder,RISING); } void loop() { // Задаем целевую позицию int target = 1200; // PID константы float kp = 1; float kd = 0.025; float ki = 0.0; // Считаем время long currT = micros(); float deltaT = ((float) (currT — prevT))/1.0e6; prevT = currT; // Ошибка int e = posi — target; // Производная float dedt = (e-eprev)/(deltaT); // Интеграл eintegral = eintegral + e*deltaT; // Управляющий сигнал float u = kp*e + kd*dedt + ki*eintegral; // Мотор направление int dir = 1; if(u<0){ dir = -1; } // Сигнал на мотор int pwr = (int) fabs(u); if(pwr >
255){ pwr = 255; } setMotor(dir,pwr,PWM,IN1,IN2); // Сохраняем предыдущую ошибку eprev = e; } void setMotor(int dir, int pwmVal, int pwm, int in1, int in2){ analogWrite(pwm,pwmVal); // Задаем скорость if(dir == 1){ digitalWrite(in1,HIGH); digitalWrite(in2,LOW); } else if(dir == -1){ digitalWrite(in1,LOW); digitalWrite(in2,HIGH); } else{ digitalWrite(in1,LOW); digitalWrite(in2,LOW); } } void readEncoder(){ int b = digitalRead(ENCB); if(b >
0){ posi++; } else{ posi—; } } «`

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


Особенности работы с энкодерами на Arduino

При использовании энкодеров с Arduino следует учитывать несколько важных моментов:

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

Заключение

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



Подключение энкодера к Ардуино. Управление мотором энкодер.

В примере я буду использовать энкодер собранный в виде модуля KY-040. А ещё нам понадобятся электрический моторчик, Транзистор, я взял МОСФЕТ и Ардуино, куда же теперь без неё.
Вот схема подключение, подробнее я расскажу позже.

Для питания моторчика нужен отдельный блок питания.
А также нам понадобятся 2 резистора, зачем, я расскажу чуть позже.

Для сегодняшнего примера управления скоростью мотора я подключил энкодер в виде модуля KY-040 и мотор на 12 вольт. Но я решил не просто плавно регулировать скорость, а сделать дискретное переключение. Я определил приблизительно при каком напряжении у меня начинает вращаться мотор, и присвоил это значение первому переключению энкодера. Все последующие переключения идут с приращиванием значений. И так до шестой скорости. Это можно видеть в мониторе порта. Количество скоростей и шаг вращения может быть любым.

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

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

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

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

Как работает скетч, я объясню чуть позже, а пока посмотрим с схему подключения.
Я подключил к Ардуино НАНО, но без проблем подойдёт любая Ардуино.
Сначала рассмотрим подключение энкодера.

  • Выход clock я подключил к пину D2
  • Data  к пину D3,
  • а switch к пину D4.
  • Питание к +5 вольт ардуино.
  • Земля к земле


Так как я взял мотор работающий от 12 вольт, то для его управления нужен транзистор. Я использовал MOSFET, так как он намного лучше обычных биполярных транзисторов.
Меня часто спрашивают, зачем использовать два резистора, если и так всё работает.
Рассказываю.
Резистор на 10 ком нужен для того чтобы при отсутствии сигнала на входе транзистора было хоть какое-то напряжение, которое не даст ему ловить разные наводки и переключаться в разное состояние.


Установив этот резистор вы подаёте низкий уровень на вход, а так как сопротивление резистора большое, то при подаче на вход сигнала с Ардуино, оно никак не повлияет на работу.
А резистор на 100 ом нужен для предотвращения Ардуино от перегрузки по току. Он работает как обычный ограничитель тока. В момент открытия транзистора через него может пойти большой ток.
Ставить их или нет решать вам, но я бы советовал всё же их установить.
Это примерный список транзисторов которые можно подключать. Но их список гораздо больше. В основном они работают с приборами до 30 вольт, но есть и для большего напряжения и силы тока.

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

Работа скетча.
Для работы с энкодером надо установить вот эту библиотеку. Установить можно из диспетчера библиотек.
Дальше надо указать к каким контактам платы Ардуино вы будете подключать выводы data и clock. Я подключил их к выводам 3 и 2.
Мотор я подключил к контакту 9, но можно было бы подключить к любому контакту который может работать в режиме ШИМ.
Создаём переменную для хранения текущей позиции и присваиваем ей значение ноль.
Кнопку энкодера подключаем к контакту 4 платы, чтобы все провода были в одной кучке.
Дальше создаём переменные для хранения значений отвечающих за скорость вращения. У меня мотор начинает вращаться со значения 50.
Шестую скорость я установил в 120. Хоть это и является всего половиной от возможной скорости. Можно задать до 255. Остальные значения я просто плавно раскидал между оставшихся шагов.
А ещё я создал переменную для полной остановке мотора, со значением 0.
В переменную newpos будут попадать новые шаги при переключении энкодера.

В setup ничего нового.
Объявляем скорость работы серийного порта.
9 пин Ардуино объявляем как выход, а 4 pin, к которому подключеня кнопка сделаем входом, да ещё подключим внутреннюю подтяжку. Так, что при не нажатой кнопке, там всегда будет высокий уровень.
Выводим значение начальной позиции энкодера. Она у нас равна нулю.

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

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

Чуть расскажу про Оператор множественного выбора switch.
Сначала он получает значение из переменной pos и ищет его среди своих кейсов.
Если значение было найдено, то выполняются все команды находящиеся внутри, до оператора break.
После этого происходит выход.
Если значение не было найдено, то выполняется default и выход из оператора.
Кстати в одном кейсе могут находится несколько, и все они будут выполнены.  

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

Сайт отключен

  • Возможные причины отключения сайта

    • Закончился срок действия хостинга. Для восстановления работы сайта, Вам нужно продлить хостинг в личном кабинете
    • Хостинг-аккаунт превысил максимально допустимую нагрузку на хостинг-сервер. В этом случае Вам необходимо связаться со службой поддержки для уточнения ситуации
    • Веб сайт был заблокирован по решению Администрации
  • Можливі причини відключення сайту

    • Закінчився термін дії хостингу. Для відновлення роботи сайту, Вам потрібно продовжити хостинг в особистому кабінеті
    • Хостинг-аккаунт перевищив максимально допустиме навантаження на хостинг-сервер. У цьому випадку Вам необхідно зв’язатися зі службою підтримки для уточнення ситуації
    • Веб-сайт був заблокований за рішенням Адміністрації
  • Possible reasons of website deactivation

    • Active hosting time is up. To restore correct website work You need to extend current hosting in the dashboard
    • Hosting account exceed maximum allowed load on hosting-server. In this case You need to contact our support team for more precise situation
    • Website was blocked by Administration
Если у Вас возникнут любые дополнительные вопросы, Вы всегда можете обратиться в нашу службу поддержки с помощью электронной почты support@thehost. ua или с помощью запроса в личном кабинете

Контактные номера телефонов службы поддержки:

  • +380 (44) 222-9-888 — Украина
  • +48 (22) 602-28-42 — Польша
  • +1 (424) 208-02-04 — США
Перейти в личный кабинетFAQ

Якщо у Вас виникнуть будь-які додаткові питання, Ви завжди можете звернутися до нашої служби підтримки за допомогою електронної пошти [email protected] або за допомогою запиту в особистому кабінеті

Контактні номери телефонів служби підтримки:

  • +380 (44) 222-9-888 — Україна
  • +48 (22) 602-28-42 — Польща
  • +1 (424) 208-02-04 — США
Перейти до особистого кабінетуFAQ

If you have any additional questions, you can always contact our support via email [email protected] or using a request in your personal account

Contact support phone numbers:

  • +380 (44) 222-9-888 — Ukraine
  • +48 (22) 602-28-42 — Poland
  • +1 (424) 208-02-04 — USA
Go to personal accountFAQ

энкодеров для подключения к Arduino | SIM -карт

Компоненты Arduino

— Encoders

Проводка и базовый учебник для Mobiflight & Prosim с использованием Ardunio Mega

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

Кодировщики KY-040 имеют печатную плату, прикрепленную к кодировщику, которая имеет специальное оборудование для устранения дребезга. Но для них нужен блок питания 5В.

Опять же, эти компоненты используются во всем Симе.

цвет провода

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

Мне нравится использовать разные цвета для разных устройств.

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

Красный для +5 В, желтый для светодиодов и серый для сервоприводов и т.д. Также используются красный и синий.

Мне нравится использовать разные цвета для разных устройств.

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

Красный для +5 В, желтый для светодиодов и серый для сервоприводов и т. д.

цвет провода

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

Мне нравится использовать разные цвета для разных устройств.

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

Красный для +5 В, желтый для светодиодов и серый для сервоприводов и т.д. Они содержат схему подавления дребезга, которая помогает Arduino обеспечивать точные измерения и предотвращать ложные показания.

Количество фиксаторов варьируется у разных поставщиков, но их очень легко сосчитать.

 

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

 

 

Энкодеры KY-040

Одиночные энкодеры

Энкодеры — Одиночные

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

 

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

Это устраняет необходимость в дополнительном источнике питания устройства. Устранение дребезга выполняется программным обеспечением MobiFlight.

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

Одна сторона энкодера имеет 3 контакта: Левый/Земля/Правый

Другая сторона энкодера имеет 2 контакта: Земля/SW

KY-040 Проводка

Энкодеры — KY-0 40 ПРОВОДКА

В этом примере на рисунках показан энкодер KY-040 с печатной платой. Это просто подключить с помощью 4 или 5 проводов в зависимости от того, нужно ли вам подключить кнопочный переключатель. На этих картинках я пропустил переключатель/кнопку.

Платы Ky-040 отличаются от однокомпонентных энкодеров тем, что требуют питания 5 В. Этого можно добиться, используя внешний источник питания или выходную линию 5 В Arduino, как показано на рисунке.

Если используется внешний источник питания, необходимо соединить заземление вместе.

Одинарная проводка энкодера

Энкодеры — однокомпонентная проводка

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

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

Подключение нескольких энкодеров

Энкодеры — несколько устройств

Чтобы добавить несколько KY-040, необходимо последовательно подключить питание (5 В) и заземление . Все остальные линии/контакты требуют специального назначения контактов на Arduino.

Для объединения нескольких энкодеров (отдельных устройств) требуется только заземление.

Иногда проще соединить все заземления в конфигурации гирляндной цепи. Связывание устройств с одним и другим с помощью единого заземления Arduino Mega.

Другим способом может быть использование разделительной платы с общей линией заземления.

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

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

Для всех других контактов энкодеров потребуются собственные выделенные контакты на Ardunio.

Свяжитесь с нами>

Напишите нам по электронной почте:

HelenWatersClarke@Outlook. com

Заметили ошибку?
Хотите что-то изменить?
Нужна дополнительная помощь?

Урок 28 Энкодер — документация SunFounder sensor-kit-v2-for-arduino

Введение

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

Компоненты

  • 1 * Плата SunFounder Uno

  • 1 * USB-кабель для передачи данных

  • 1 * Модуль поворотного энкодера

  • 1 * 5-контактный антиреверсивный кабель

Принцип

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

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

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

Показывает, что если на выходе 1 высокий уровень, а на выходе 2 высокий уровень, то переключатель вращается по часовой стрелке; если выход 1 высокий, а выход 2 низкий, то переключатель вращается против часовой стрелки. В результате при программировании SCM, если выход 1 высокий, тогда вы можете сказать, вращается ли поворотный датчик влево или вправо, если известно состояние выхода 2.

Экспериментальные процедуры

Шаг 1: Сборка схемы

Проводка между поворотным энкодером и платой SunFounder Uno:

Энкодер

SunFounder Uno

ЦЛК

2

ДТ

3

ПО

4

ВКЦ

Земля

Земля

Шаг 2: Откройте файл кода

Шаг 3: Выберите правильную плату и порт

Шаг 4: Загрузите скетч на плату SunFounder Uno 900 05

Код

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *