Универсальный внешний накопитель для всех iOS-устройств, совместим с PC/Mac, Android
Header Banner
8 800 100 5771 | +7 495 540 4266
c 9:00 до 24:00 пн-пт | c 10:00 до 18:00 сб
0 Comments

Содержание

Как подключить энкодер к Ардуино

Для начала разберёмся детальнее, что такое энкодер.

Энкодер – это устройство, предназначенное для определения угла поворота и преобразующее данные в электрический сигнал. Другое название энкодера – “датчик угла поворота”.

По выходному сигналу различают:

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

Рис. 1. Изображение выходного сигнала инкрементного энкодера

 

С анимацией.

Рис. 2. Схема инкрементного энкодера

 

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

Рис. 3. Схема принципа работы абсолютного энкодера

 

Или эта.

Рис. 4. Схема принципа работы абсолютного энкодера

 

Конструктивно (в зависимости от технологии измерения) экодеры могут быть:

  • Оптическими;
  • Магнитными;
  • Резисторными.

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

Начнём с инкрементных датчиков.

 

 

Подключение инкрементных энкодеров

Чтобы притянуть контакты датчика к логической единице, необходимо использовать резисторы (10кОм). Типовая схема выглядит следующим образом (плата выбрана для примера, входные контакты на Ардуино могут быть изменены на другие).

Рис. 5. Типовая схема

 

Здесь приведён пример с использованием энкодера с кнопкой (есть и такие модели, кнопкой служит сама ручка).

При использовании Atmega можно просто включить встроенные резисторы микроконтроллера специальной командой.

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

Рис. 6. Типовая схема

 

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

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

 

Для более сложных задач можно использовать готовые библиотеки, например:

  • https://github.com/GreyGnome/AdaEncoder
  • https://github.com/PaulStoffregen/Encoder
  • https://github.com/mathertel/RotaryEncoder
  • и другие.

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

Отрабатывается перемещение по иерархии меню и выбор между доступными пунктами.

 

Подключение абсолютных энкодеров

Абсолютные энкодеры не так распространены, как инкрементные. И схема подключения во многом зависит от требований производителя. Так, например, высокоточный 128-битный датчик Bourns ACE-128 легко подключается к Ардуино или Raspberry Pi. Производитель предлагает свои собственные библиотеки для работы с энкодером и даже типовую схему для тестирования функционала.

Схема соединения выглядит так.

Рис. 7. Схема соединения энкодеров

 

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

Рис. 8. Схема для тестирования с выводом числового показателя угла поворота на дисплей

 

Готовая библиотека для Arduino, подробные инструкции и примеры скетчей можно найти на ГитХабе:   https://github.com/arielnh56/ACE128

Аналогично и с изделиями других производителей – необходимо изучать их рекомендации.

Автор: RadioRadar

Подключение энкодера к Ардуино.

Управление мотором энкодер.

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

В примере я буду использовать энкодер собранный в виде модуля 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, что это кому-то интересно и что его надо показывать чаще.

Спасибо.
А пока на этом всё.

Arduino. Внешние прерывания. Подключение энкодера

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

Подготовка к работе

На нашей плате TutorShield установлены две кнопки, которые подключены к цифровым выводам D2 и D3. Подробно подключение кнопок описано в предыдущей статье цикла. Помимо них, для дальнейших экспериментов подключим еще две секции трехцветного светодиода (к выводам D9 и D10). Установите перемычки так, как показано на рисунке:

Установка перемычек

Первый пример

В предыдущем примере для обработки кнопок мы настраивали вывод микроконтроллера на вход и постоянно контролировали его состояние.

Это не самый эффективный способ, так как при этом трудно заставить микроконтроллер делать что-то помимо опроса кнопок. Специально для этих целей можно использовать прерывания.
Прерывание — это функция микроконтроллера, которая при наступлении какого-либо события позволяет остановить выполнение основной программы и обработать произошедшие события. Например, прерывание можно использовать для обработки приема сигналов COM-порта: микроконтроллер выполняет основную программу, а когда модуль UART сообщает о завершении передачи, то МК прерывает работу и обрабатывает принятый байт. Прерывании в микроконтроллере Atmega8 ровно девятнадцать штук и два из них — это внешние прерывания, вызывающие при изменении напряжении на выводе D2 иди D3 Arduino-совместимой платы.
Рассмотрим работу с прерываниями на конкретном примере:


#define LED 11

void setup() {
    attachInterrupt(0, button1, RISING);
    attachInterrupt(1, button2, RISING);
    pinMode(LED, OUTPUT);
}

void loop() {
}

void button1() {
    digitalWrite(LED,HIGH);
}

void button2() {
    digitalWrite(LED,LOW);
}

Для работы с внешним прерыванием в первую очередь его надо инициализировать. Этим занимается функция attachInterrupt(pin,ISR,mode). У этой функции три параметра:

  • pin — номер вывода, на который настроено прерывание. Для платы EduBoard с МК Atmega8 прерывание может быть настроено только на 2ом и 3ем выводе
  • ISR — имя функции-обработчика прерывания
  • mode — режим работы прерывания, может принимать четыре значения. LOW — вызывает обработчик прерывания, когда на выводе низкое напряжение, CHANGE — при изменении, RISING — при переходе от низкого к высокому уровню, FALLING — от высокому к низкому

В приведенном примере настроено два прерывания. Прерывание “0” вызывает обработчик button1() при изменении напряжения с низкого на высокий уровень на выводе D2. Прерывание “1” вызывает обработчик button2() при изменении напряжения с низкого на высокий уровень на выводе D3.
В обработчике прерывания button1() зажигается светодиод, а при обработке прерывания button2() он гасится. То есть при нажатии на кнопку, подключенную к выводу D2 светодиод включится, а при нажатии D3 — выключится.

Второй пример

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


#define LED 11

int val = 0;

void setup() {
    attachInterrupt(0, button1, RISING);
    attachInterrupt(1, button2, RISING);
    pinMode(LED, OUTPUT);
    Serial.begin(9600);
}

void loop() {
    Serial.println(val);
    delay(500);
}

void button1() {
    digitalWrite(LED,HIGH);
    val++;
}

void button2() {
    digitalWrite(LED,LOW);
    val--;
}

После загрузки кода на плату, откройте монитор COM-порта (Ctrl+Shift+M) и посмотрите на то, как изменяются данные при нажатии на кнопки. Чаще всего все будет работать правильно, но иногда переменная будет меняться не на единицу, а сразу на два за одно нажатие. Это значит, что из-за дребезга контактов прерывание было вызвано несколько раз.
В каких-то ситуациях это не имеет большого значения. Чем лучше мы будем предотвращать дребезг контактов, там выше будет риск пропуска нажатия. Есть много способов борьбы с дребезгом контактов, как программных, так и аппаратных. Пока мы не будем останавливаться на них.

Обработка энкодера

На нашем шилде установлен инкрементальный энкодер. По своему виду он похож на переменный резистор, но работает он совершенно по-другому. Вы могли встречать инкрементальные энкодеры в регуляторах громкости с бесконечным вращением.
Мы не будем подробно описывать принцип работы энкодера. Самое главное для нас то, что при вращении на его двух выводах формируется импульсные последовательности сдвинутые по фазе. Фазовый сдвиг может быть положительным и отрицательным в зависимости от направления вращения. Для обработки энкодера необходимо один его вывод настроить на прерывания и в прерывании проверять состояние второго вывода. Если он в высоком состоянии, то значит энкодер вращали по-часовой стрелке. Если на входе низкое напряжение — то против. Рассмотрим на примере:


#define LED 11

int val = 0;

void setup() {
    attachInterrupt(0, button1, RISING);
    pinMode(LED, OUTPUT);
    pinMode(3, INPUT);
}

void loop() {
    if(val<0) val = 0;
    if(val>255) val = 250;
    analogWrite(LED,val);
}

void button1() {
    if( digitalRead(3) == HIGH) val=val+10;
    else val=val-10;
}

В результате работы этой программы при вращении энкодера по-часовой яркость светодиода будет увеличиваться, а при вращении против часовой — уменьшаться. Изменение яркости происходит с шагом в 10 единиц. Чтобы переменная не вышла за пределы нормальных значений в основном цикле она нормируется.

Индивидуальные задания

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

Остальные статьи цикла можно найти здесь.

Мы будем очень рады, если вы поддержите наш ресурс и посетите магазин наших товаров shop.customelectronics.ru.

Дисковый энкодер. Подключение оптического энкодера к Arduino. На что обращать внимание при выборе энкодера

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

На что обращать внимание при выборе энкодера?

Надежность энкодера — это очень важно!

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

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

Представленные в нашей программе поставок абсолютные оптические и магнитные энкодеры вращения разрабатываются и производятся компанией Posital Fraba, которая является мировым лидером в производстве сенсоров позиционирования и первооткрывателем метода абсолютного позиционирования угла поворота. Продукция немецкого производителя Posital Fraba отличается высшим качеством, гарантией которого явился многолетний (более 80-лет!) опыт производства абсолютных энкодеров. Для задач позиционирования − от автоматизации на производстве до мобильной техники − необходима точная и актуальная информация о положении того или иного механического узла.
Абсолютные энкодеры регистрируют малейшие перемещения и преобразуют их в цифровой сигнал. Способность абсолютных энкодеров точно и быстро регистрировать угловое и линейное перемещение делает их важнейшим связующим звеном между механикой и системой управления. В ассортименте Posital широкий спектр механических исполнений энкодеров со всеми распространенными видами интерфейсов.

Материалы, технологии и опыт производителя

Высокие требования к применяемым материалам с учетом разных коэффициентов температурного расширения, применение подшипников проверенных поставщиков, специальные технологии выборки люфтов — это все влияет на такие важные параметры энкодера, как плавность и легкость вращения вала, долговечность и стабильность механических параметров. Еще в 1970 году ФРАБА разрабатывает первый в мире опто-электронный датчик углового положения и начинает его производство. Большой опыт работы и современные технологии производства делают продукцию этой компании непревзойденной по таким важным параметрам как: высокая надежность, низкие цены и кратчайшие сроки поставок. С годами у производителя, особенно у производителя концентрирующегося на производстве узкой линейки продукции, в данном случае производстве абсолютных энкодеров, за плечами оказываются колоссальный опыт, свои наработки и секреты.
Ниже представлены технологии лежащие в основе абсолютных энкодеров производства Posital Fraba, их отличия и особенности.

Оптические энкодеры

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

Принцип оптического измерения

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

Функциональные возможности

Оптические абсолютные энкодеры IXARC POSITAL используют высокоинтегрированную технологию Opto-ASIC, обеспечивающую разрешение до 16 бит (65536 шагов) за оборот. Для многооборотных моделей диапазон измерения увеличивается за счет механически зацепляемых кодовых дисков до 16384 (214) оборотов.

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

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

Конструкция энкодера

Основной проблематикой является наличие в одной конструкции большого количества механических, оптических и электронных взаимодействующих, но совершенно разных по природе компонентов. Так, механика имеет склонность к механическому износу. А на качество оптических элементов влияют в первую очередь такие факторы, как загрязнение, тускнение, изменение интенсивности излучения. Высокое разрешение энкодера требует использования оптического диска с высокой плотностью нанесенного на него трафарета. Для оптического/физического разрешения (а не интерполированного!) в 12 бит требуется диск с секторами делящими окружность на 4096 частей/меток. Чем компактнее энкодер и меньше диаметр диска, тем выше требования к оптике энкодера. Для распознавания такой плотности рисунка на диске необходимо располагать считывающую матрицу в непосредственной близости к диску. Минимальный зазор между вращающимся диском и считывающей матрицей предъявляет очень высокие требования к механике. Минимальное биение/люфт вала приведет к соприкасанию при вращении диска с считывающей матрицей и, как следствие, к повреждению нанесенного на диск трафарета. Износ механических частей энкодера или негерметичность корпуса ведет также к загрязнению оптики продуктами износа и попадающей снаружи пыли и, как следствие, искажению результатов измерения. Оптический диск является важным узлом энкодера. Под воздействием времени, перепадов температуры и мн. др. факторов свойства материала диска могут со временем меняться, например тускнеть и деформироваться. Первый фактор, в сочетании с теряющим интенсивность светодиодной подсветки, резко может снизить надежность работы и/или вызвать полный отказ в работе. Второй фактор может вызвать опасность соприкасания диска с матрицей при вращении вала энкодера с теми же вытекающими последствиями.

Магнитные энкодеры

Принцип магнитных измерений

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

Инновационная многооборотная технология

Многооборотные магнитные энкодеры IXARC POSITAL используют инновационную технологию для отслеживания количества оборотов, даже если оборот произошел при отключенном питании системы. Для выполнения этой задачи энкодеры преобразуют вращение вала в электрическую энергию. Технология основана на эффекте Виганда: когда постоянный магнит на валу энкодера поворачивается на определенный угол, магнитная полярность в „проводе Виганда“ резко меняется, создавая кратковременный всплеск напряжения в обмотке, окружающей провод. Этот импульс отмечает поворот вала, а также обеспечивает питание электронной цепи, регистрирующей данное событие. Эффект Виганда происходит в любых условиях, даже при очень медленном вращении, и исключает потребность в резервных батареях.

Преимущества магнитных энкодеров

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

Энкодер вращения — оптический или магнитный?

Этот вопрос однажды задали соучредителю группы компаний «Fraba» (он же директор компании Posital) в интервью журнала «Конструктор» при обсуждении темы внедрения новой магнитной технологии при производстве энкодеров вращения.
Ниже перевод публикации этого интервью.

Что говорят специалисты в отношении новой магнитной технологии?

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

Энкодеры вращения преобразуют угол поворота вала в электрический сигнал и работают на оптическом или магнитном принципе действия. Оптические энкодеры измеряют точнее, а магнитные по конструкции более стабильные и прочные — таково распространенное мнение. Соответствует ли это действительности на самом деле? Редакция журнала „Конструктор“ взяла интервью у соучредителя группы компаний «Fraba» и компании-производителя «Posital» с 50-и летним стажем разработки и производства абсолютных энкодеров из г. Кёльна.

Господин Лезер, являются ли на самом деле оптические энкодеры точнее магнитных?

Однозначно нет. В настоящее время оптические энкодеры больше не опережают магнитные по точности. Технология магнитных энкодеров в последние годы позволила полностью перекрыть разрыв с оптической в отношении всех важных электрических параметров. Выпускаемые сегодня магнитные энкодеры уже достигают разрешения 16 бит при точности 0,09° и, таким образом, такие параметры, которые раньше были достижимы только оптическими энкодерами. Касательно оптических энкодеров мы говорим с позиции производителя абсолютных оптических энкодеров с 50 летним опытом работы. Оптические энкодеры мы производим начиная с 1963 года и это всегда являлось нашей основной специализацией. В 2013 году произошел настоящий переворот в соотношении технологий, когда был представлен магнитный энкодер достигающий по всем ключевым параметрам традиционные оптические системы.

Что позволило так значительно повысить возможности магнитных энкодеров?

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

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

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

И все таки, имеются ли случаи применения, где оптические энкодеры предпочтительнее магнитных, например, в отношении устойчивости к магнитным полям?

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

Какая технология энкодеров дает больше свободы машиностроителям в проектировании?

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

Сопутствующие товары и статьи


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

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

Ленту необходимо протирать не прилагая усилий или придерживая ее рукой так как она очень легко соскакивает со своих креплений и для того чтобы поставить ее на место скорее всего придется разбирать устройство. Для протирки обычно используется любой тампон (туалетная бумага, безворсовая салфетка и т.п.) и спирт (“Мистер-Мускул”, жидкость для промывки картриджей и т.п.).

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

Также стоит обратить на энкодерный диск , который находится в крайней левой части устройства (Canon) – єто диск, сообщающийся путем зубчатіх передач (шестеренок) с двигателем. На данном диске также есть отметки (риски), по которім датчик ориентируется и определяет продольное положение листа. Если этот диск загрязнен, то может появиться проблема следующего характера: лист бумаги будет с разрывами, т.е. на листе могут появиться поперечные полосы – механизм протяжки бумаги, ориентируясь по этому диску, протягивает лист, а если диск загрязнен, то лист будет проходить, как бы рывками.

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

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

Слово «энкодер» имеет англоязычное происхождение. Оно возникло от слова encode, что значит «преобразовывать». Наиболее известными мировыми производителями данных приборов являются такие известные бренды как Siemens, СКБ ИС, HEIDENHAIN RLS, Baumer, SICK AG, Balluff, Schneider electric (Autonics Telemecanique), OMRON.

Сфера и цель применения

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

Ранжирование энкодеров

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

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

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

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

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

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

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

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

Разновидности абсолютных энкодеров

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

Оптический энкодер – что это?

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

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

Типы датчиков в зависимости от принципа работы

По характеристикам работы энкодеры делятся на магнитные и фотоэлектрические.

Физический принцип работы первых базируется на применении открытого в 1879 году Э. Холлом. В данном случае разность потенциалов возникает лишь при помещении проводника постоянного тока в область магнитного поля.

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

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

Фотоэлектрический энкодер – это датчик, функционирующий на базе фотоэлектрического эффекта, который наблюдается в результате воздействия света на вещество. Открыт данный принцип в 1887 году Г. Герцем. В процессе работы датчика данного типа наблюдается постоянное преобразование светового луча в электрический сигнал.

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

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

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

В данной истории все приключилось внезапно. Ползая по своим хоббийным форумам натолкнулся на конкурс. Сайт (называть не буду, т.к. разговор не о нем) проводил видимо раскрутку посещаемости и плюс один из форумчан проводил раскрутку своих российского производства изделий. И разыгрывался комплект из 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 градусов. Я спросил на форуме у такого же как я покупателя таких же энкодеров как у него стоит датчик. И у него все было также неправильно и не работало.

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

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

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

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

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

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

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

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

Планирую купить +17 Добавить в избранное Обзор понравился +120 +226

Как использовать поворотный энкодер с Arduino


Как использовать поворотный энкодер с Arduino

В этом посте мы узнаем, как использовать Rotary Encoder с Arduino. Мы будем отображать закодированное значение как по часовой стрелке, так и против часовой стрелки в числах со знаком.

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

Чтобы узнать о Rotary Encoder и его типах с применением, преимуществами и работой, посетите здесь:

Что такое поворотный энкодер? Конструкция и работа энкодера

Необходимые компоненты:

Принципиальная схема и подключение:

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


Как работает энкодер?

Энкодер имеет диск с равномерно расположенными контактными зонами, которые подключены к общему контакту C и двум другим отдельным контактам A и B, как показано ниже.

Когда диск начнет пошагово вращаться, контакты A и B начнут контактировать с общим контактом, и соответственно будут сгенерированы два выходных сигнала прямоугольной формы.

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

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

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


Исходный код / ​​программа:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

14

18

19

20

21

22

23

24

25

26

27

28

29

30

34

35

36

37

38

39

40

41

42

43

#include h>

ЖК-дисплей LiquidCrystal (12, 11, 5, 4, 3, 2);

#define outputA 6

#define outputB 7

int counter = 0;

int aState;

int aLastState;

void setup () {

pinMode (outputA, INPUT);

pinMode (outputB, INPUT);

Serial.begin (9600);

ЖК начало (16,2);

// Читает начальное состояние outputA

aLastState = digitalRead (outputA);

}

void loop () {

aState = digitalRead (outputA); // Считывает “текущее” состояние выхода A

// Если предыдущее и текущее состояние выхода A различаются, это означает, что произошел импульс

if (aState! = ALastState) {

// Если Состояние outputB отличается от состояния outputA, это означает, что энкодер вращается по часовой стрелке

if (digitalRead (outputB)! = aState) {

counter ++;

ЖК.Чисто();

} else {

счетчик -;

lcd.clear ();

}

Serial. print («Должность:»);

Serial.println (счетчик);

lcd.setCursor (0, 0);

lcd.print («Должность:»);

lcd.setCursor (10, 0);

жк принт (счетчик);

}

aLastState = aState; // Обновляет предыдущее состояние outputA текущим состоянием

}


Видеоуроки и объяснения: Учебное пособие по поворотному энкодеру

| Как работает Rotary Encoder и как его использовать с Arduino

урок Arduino – Rotary Encoder «осою.com

Содержание
  1. Введение
  2. Препараты
  3. О поворотном энкодере
  4. Примеры
Поворотные энкодеры

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

В этом уроке мы покажем, как работает энкодер и как использовать его с платой Osoyoo UNO.

Оборудование

  • Плата Osoyoo UNO (полностью совместима с Arduino UNO rev.3) x 1
  • Поворотный энкодер x 1
  • I2C LCD 1602 Дисплей x 1
  • Джемперы F / M
  • Кабель USB x 1
  • шт. X 1

Программное обеспечение

Обзор

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

ТЕХНИЧЕСКИЕ ХАРАКТЕРИСТИКИ:

  • Плоский верх
  • Возможность нажатия кнопки
  • Импульсов на оборот: 20
  • Неограниченное вращение
  • Контакты расположены под прямым углом к ​​ручке, но вы можете подключить их к макетной плате с помощью перемычек «папа-мама»
  • Стандартное расстояние между выводами: 2.54 мм (0,1 ″)
  • Размеры (без штифтов): длина 26,2 мм (1,03 дюйма) x ширина 18,5 мм (0,73 дюйма) x высота 28,5 мм (1,12 дюйма)
  • Общие размеры вала: высота 20 мм (0,79 дюйма) x диаметр 6 мм (0,24 дюйма)
  • Размеры поворотной части вала: высота 12,5 мм (0,49 дюйма) x диаметр 6 мм (0,24 дюйма)
  • Вес: 6,43 г (0,23 унции)

Выводы

Выводы контактов этого датчика угла поворота показаны на рисунке ниже.

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

Низкий уровень генерируется путем размещения заземления на контакте C и передачи его на контакты CLK и DT, когда переключатели замкнуты.

Высокий уровень генерируется входом питания 5 В и подтягивающими резисторами, так что CLK и DT имеют высокий уровень, когда переключатели разомкнуты.

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

Принцип работы

В этом уроке мы собираемся протестировать и подключить поворотный энкодер. Поворотный энкодер можно считать в положительном направлении и обратном направлении во время вращения выходной частоты импульсов, и вращение является непрерывным. По сравнению с поворотным потенциометром, это устройство имеет ограниченное вращение. Поворотный энкодер имеет собственную кнопку, встроенную в само устройство, нажатием кнопки энкодер можно сбросить в исходное состояние, при котором отсчет начинается с 0 (НОЛЬ).

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

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

Инкрементальные энкодеры вырабатывают серию импульсов. Эти импульсы используются для измерения вращения, положения вала и скорости. Есть два канала выхода поворотного энкодера (A и B в терминологии США). Сигналы энкодера смещены друг от друга на 1/2 импульса. Иногда это также называют разделением фаз на 90 градусов. Этот термин происходит от обсуждения одного полного цикла импульсов кодировщика, от момента, когда сигнал впервые повышается, до момента, когда он снова повышается на 360 градусов. Тогда вы можете видеть, что расстояние в 1/2 импульса энкодера будет считаться 90 градусами.

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

Инкрементальные энкодеры имеют две фазы прямоугольной формы с разностью фаз 90 градусов, часто называемые каналом A и B. Один из каналов одновременно предоставляет информацию, относящуюся к скорости, путем последовательного сравнения сигналов двух каналов, направления вращения и полученной информации.Существует также специальный сигнал, называемый каналом Z или ZERO, который дает абсолютное нулевое положение вращения, сигнал показывает прямоугольную волну с центральной линией канала прямоугольной формы, совпадающей. Точность инкрементального энкодера зависит от двух механических электрических факторов: (ОШИБКА ИНДЕКСА РАСТРА), (ЭКСЦЕНТРИЧНОСТЬ ДИСКА), (ЭКСЦЕНТРИЧНОСТЬ ПОДШИПНИКА). Чтобы узнать, какой электрический эквивалент механического угла в 360 градусов можно рассчитать по следующей формуле ниже.

Внутри энкодера есть два переключателя. Когда переключатель соединяет контакт A с контактом C, а другой переключатель соединяет контакт B с контактом C.

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

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

Угловое положение клеммы A и клеммы B таково, что:

  • Вращение переключателя по часовой стрелке заставит переключатель, соединяющий A и C, сначала изменить состояние.
  • Вращение переключателя против часовой стрелки приведет к тому, что переключатель, соединяющий B и C, сначала изменит состояние.

Коммутационные сигналы A и B
Ошибка индексации энкодера – это электрический угол единицы максимального смещения двух последовательных импульсов.Ошибка кодирования вызвана вышеупомянутыми факторами. Максимальная погрешность будет составлять ± 25 электрических градусов (заявленных в любых условиях), что эквивалентно номинальному значению смещения ± 7%, поскольку фаза 90 градусов, электрическая для двух каналов, и максимальное отклонение ± 35 электрических градусов равно отклонению ± 10%. влево Рейтинги Вправо.

Использование поворотного энкодера с Arduino

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

Подключение

Создайте схему, как показано ниже:

Энкодер Ардуино
CLK D2
ДТ D3
+ + 5В
ЗЕМЛЯ ЗЕМЛЯ

Кодовая программа

После завершения вышеуказанных операций подключите плату Arduino к компьютеру с помощью кабеля USB. Зеленый светодиодный индикатор питания (обозначенный PWR ) должен загореться. Откройте Arduino IDE и выберите соответствующий тип платы и тип порта для вашего проекта. Затем загрузите следующий скетч на свой Arduino.

 const int clkPin = 2; // clk присоединяется к выводу 2 const int dtPin = 3; // прикрепление dt к pin3 const int swPin = 4; // номер кнопки int encoderVal = 0; void setup () {// установить clkPin, dePin, swPin как INPUT pinMode (clkPin, INPUT); pinMode (dtPin, ВХОД); pinMode (swPin, ВВОД); digitalWrite (swPin, HIGH);  Серийный .begin (9600); // инициализируем последовательную связь со скоростью 9600 бит / с} void loop () {int change = getEncoderTurn (); encoderVal = encoderVal + изменить; if (digitalRead (swPin) == LOW) // если кнопка потянет вниз {encoderVal = 0; }  Последовательный  .println (encoderVal); // выводим encoderVal на монитор последовательного порта} int getEncoderTurn (void) {static int oldA = HIGH; // установить oldA как HIGH static int oldB = HIGH; // установить oldB как HIGH int result = 0; int newA = digitalRead (dtPin); // считываем значение clkPin в newA int newB = digitalRead (clkPin); // считываем значение dtPin в newB if (newA! = oldA || newB! = oldB) // если значение clkPin или dtPin изменилось {// что-то изменилось if (oldA == HIGH && newA == LOW) {result = (oldB * 2 - 1); }} oldA = newA; oldB = newB; вернуть результат; } 

Текущий результат

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

Подсчитайте положение энкодера и отобразите его на ЖК-дисплее I2C 1602

Следуя последнему примеру, мы покажем счет энкодера на ЖК-дисплее I2C 1602.

Подключение

Создайте схему, как показано ниже:

Энкодер Ардуино
CLK D2
ДТ D3
SW D4
+ + 5В
ЗЕМЛЯ ЗЕМЛЯ
I2C 1602 ЖК-дисплей Ардуино
VCC + 5В
ЗЕМЛЯ ЗЕМЛЯ
SDA A4
SCL A5

Кодовая программа

После завершения вышеуказанных операций подключите плату Arduino к компьютеру с помощью кабеля USB. Зеленый светодиодный индикатор питания (обозначенный PWR ) должен загореться. Откройте Arduino IDE и выберите соответствующий тип платы и тип порта для вашего проекта. Затем загрузите следующий скетч на свой Arduino.

 #include Wire.h> #include  LiquidCrystal_I2C  .h>  LiquidCrystal_I2C  lcd (0x27,20,4); // установить адрес ЖК-дисплея на 0x27 для 16-символьного и 2-строчного отображения const int clkPin = 2; // clk присоединяется к выводу 2 const int dtPin = 3; // прикрепление dt к pin3 const int swPin = 4; // номер кнопки int encoderVal = 0; void setup () {lcd.в этом(); // инициализируем ЖК-дисплей // Выводим сообщение на ЖК-дисплей. lcd.backlight (); lcd.setCursor (0,0); lcd.print ("Значение:"); // установить clkPin, dePin, swPin как INPUT pinMode (clkPin, INPUT); pinMode (dtPin, ВХОД); pinMode (swPin, ВВОД); digitalWrite (swPin, HIGH);  Серийный . Начало (9600); // инициализируем последовательную связь со скоростью 9600 бит / с} void loop () {int change = getEncoderTurn (); encoderVal = encoderVal + изменить; if (digitalRead (swPin) == LOW) // если кнопка потянет вниз {encoderVal = 0; lcd. clear (); ЖКsetCursor (0,0); lcd.print ("Значение:"); }  Последовательный  .println (encoderVal); // выводим encoderVal на серийный монитор lcd.setCursor (5,1); lcd.print (encoderVal); } int getEncoderTurn (void) {static int oldA = HIGH; // установить oldA как HIGH static int oldB = HIGH; // установить oldB как HIGH int result = 0; int newA = digitalRead (dtPin); // считываем значение clkPin в newA int newB = digitalRead (clkPin); // считываем значение dtPin в newB if (newA! = oldA || newB! = oldB) // если значение clkPin или dtPin изменилось {// что-то изменилось if (oldA == HIGH && newA == LOW) {result = (oldB * 2 - 1); }} oldA = newA; oldB = newB; вернуть результат; } 

Текущий результат

Через несколько секунд после завершения загрузки поверните энкодер по часовой стрелке, угловое смещение увеличится; при повороте против часовой стрелки смещение уменьшается.

micro_dc_motor_with_encoder-sj02_sku__fit0458-DFRobot

  • ДОМ
  • СООБЩЕСТВО
  • ФОРУМ
  • БЛОГ
  • ОБРАЗОВАНИЕ
ДОМ ФОРУМ БЛОГ
  • Контроллер
    • DFR0010 Arduino Nano 328
    • DFR0136 Сервоконтроллер Flyduino-A 12
    • DFR0225 Romeo V2-Все в одном контроллере R3
    • Arduino_Common_Controller_Selection_Guide
  • DFR0182 Беспроводной геймпад V2. 0
  • DFR0100 Комплект для начинающих DFRduino для Arduino V3
  • DFR0267 Блуно
  • DFR0282 Жук
  • DFR0283 Мечтатель клен V1.0
  • DFR0296 Блуно Нано
  • DFR0302 MiniQ 2WD Plus
  • DFR0304 Беспроводной геймпад BLE V2
  • DFR0305 RoMeo BLE
  • DFR0351 Romeo BLE mini V2.0
  • DFR0306 Блуно Мега 1280
  • DFR0321 Узел Wido-WIFI IoT
  • DFR0323 Блуно Мега 2560
  • DFR0329 Блуно М3
  • DFR0339 Жук Блуно
  • DFR0343 Контроллер с низким энергопотреблением UHex
  • DFR0355 SIM808 с материнской платой Leonardo
  • DFR0392 DFRduino M0 материнская плата, совместимая с Arduino
  • DFR0398 Контроллер роботов Romeo BLE Quad
  • DFR0416 Bluno M0 Материнская плата
  • DFR0575 Жук ESP32
  • DFR0133 X-Board
  • DFR0162 X-Board V2
  • DFR0428 3.5-дюймовый сенсорный TFT-экран для Raspberry Pi
  • DFR0494 Raspberry Pi ШАПКА ИБП
  • DFR0514 DFR0603 IIC 16X2 RGB LCD KeyPad HAT V1.0
  • DFR0524 5.5 HDMI OLED-дисплей с емкостным сенсорным экраном V2.0
  • DFR0550 5-дюймовый TFT-дисплей с сенсорным экраном V1.0
  • DFR0591 модуль дисплея raspberry pi e-ink V1.0
  • DFR0592 Драйвер двигателя постоянного тока HAT
  • DFR0604 HAT расширения ввода-вывода для Pi zero V1.0
  • DFR0566 Шляпа расширения ввода-вывода для Raspberry Pi
  • DFR0528 Шляпа ИБП для Raspberry Pi Zero
  • DFR0331 Romeo для контроллера Edison
  • DFR0453 DFRobot CurieNano – мини-плата Genuino Arduino 101
  • TEL0110 CurieCore Intel® Curie Neuron Module
  • DFR0478 Микроконтроллер IOT FireBeetle ESP32 (V3.0) с поддержкой Wi-Fi и Bluetooth
  • DFR0483 FireBeetle Covers-Gravity I O Expansion Shield
  • FireBeetle Covers-24 × 8 светодиодная матрица
  • TEL0121 FireBeetle Covers-LoRa Radio 433 МГц
  • TEL0122 FireBeetle Covers-LoRa Radio 915 МГц
  • TEL0125 FireBeetle охватывает LoRa Radio 868MHz
  • DFR0489 FireBeetle ESP8266 Микроконтроллер IOT
  • DFR0492 FireBeetle Board-328P с BLE4.1
  • DFR0498 FireBeetle Covers-Camera & Audio Media Board
  • DFR0507 FireBeetle Covers-OLED12864 Дисплей
  • DFR0508 FireBeetle Covers-Двигатель постоянного тока и шаговый драйвер
  • DFR0511 FireBeetle Covers-ePaper Черно-белый дисплейный модуль
  • DFR0531 FireBeetle Covers-ePaper Черно-белый и красный дисплейный модуль
  • DFR0536 Плата расширения геймпада с микробитами
  • DFR0548 Плата расширения микробитового драйвера
  • ROB0148 micro: Maqueen для micro: bit
  • ROB0150 Microbit Круглая плата расширения для светодиодов RGB
  • MBT0005 micro IO-BOX
  • SEN0159 Датчик CO2
  • DFR0049 DFRobot Датчик газа
  • TOY0058 Датчик атмосферного давления
  • SEN0220 Инфракрасный датчик CO2 0-50000ppm
  • SEN0219 Гравитационный аналоговый инфракрасный датчик CO2 для Arduino
  • SEN0226 Датчик барометра Gravity I2C BMP280
  • SEN0231 Датчик гравитации HCHO
  • SEN0251 Gravity BMP280 Датчики атмосферного давления
  • SEN0132 Датчик угарного газа MQ7
  • SEN0032 Трехосный акселерометр – ADXL345
  • DFR0143 Трехосевой акселерометр MMA7361
  • Трехосный акселерометр серии FXLN83XX
  • SEN0072 CMPS09 – Магнитный компас с компенсацией наклона
  • SEN0073 9 степеней свободы – бритва IMU
  • DFR0188 Flymaple V1.1
  • SEN0224 Трехосевой акселерометр Gravity I2C – LIS2DH
  • SEN0140 Датчик IMU с 10 степенями свободы, версия 2.0
  • SEN0250 Gravity BMI160 6-осевой инерционный датчик движения
  • SEN0253 Gravity BNO055 + BMP280 интеллектуальный 10DOF AHRS
  • SEN0001 URM37 V5.0 Ультразвуковой датчик
  • SEN0002 URM04 V2.0
  • SEN0004 SRF01 Ультразвуковой датчик
  • SEN0005 SRF02 Ультразвуковой датчик
  • SEN0006 SRF05 Ультразвуковой датчик
  • SEN0007 SRF08 Ультразвуковой датчик
  • SEN0008 SRF10 Ультразвуковой датчик
  • SEN0149 URM06-RS485 Ультразвуковой
  • SEN0150 URM06-UART Ультразвуковой
  • SEN0151 URM06-PULSE Ультразвуковой
  • SEN0152 URM06-ANALOG Ультразвуковой
  • SEN0153 Ультразвуковой датчик URM07-UART
  • SEN0246 URM08-RS485 Водонепроницаемый гидролокатор-дальномер
  • SEN0304 Ультразвуковой датчик URM09 (Gravity-I2C) (V1.0)
  • SEN0304 Ультразвуковой датчик URM09 (Gravity-I2C) (V1.0)
  • SEN0300 Водонепроницаемый ультразвуковой датчик ULS
  • SEN0301 Водонепроницаемый ультразвуковой датчик ULA
  • SEN0307 URM09 Аналог ультразвукового датчика силы тяжести
  • SEN0311 A02YYUW Водонепроницаемый ультразвуковой датчик
  • SEN0312 ME007YS Водонепроницаемый ультразвуковой датчик
  • SEN0313 A01NYUB Водонепроницаемый ультразвуковой датчик
  • DFR0066 SHT1x Датчик влажности и температуры
  • DFR0067 DHT11 Датчик температуры и влажности
  • SEN0137 DHT22 Модуль температуры и влажности
  • DFR0023 Линейный датчик температуры DFRobot LM35
  • DFR0024 Gravity DS18B20 Датчик температуры, совместимый с Arduino V2
  • DFR0024 Gravity DS18B20 Датчик температуры, совместимый с Arduino V2
  • SEN0114 Датчик влажности
  • Датчик температуры TOY0045 TMP100
  • TOY0054 SI7021 Датчик температуры и влажности
  • SEN0206 Датчик инфракрасного термометра MLX
  • SEN0227 SHT20 Водонепроницаемый датчик температуры и влажности I2C
  • SEN0236 Gravity I2C BME280 Датчик окружающей среды Температура, влажность, барометр
  • SEN0248 Gravity I2C BME680 Датчик окружающей среды VOC, температура, влажность, барометр
  • DFR0558 Цифровой высокотемпературный датчик силы тяжести типа К
  • SEN0308 Водонепроницаемый емкостный датчик влажности почвы
  • SEN0019 Регулируемый переключатель инфракрасного датчика
  • SEN0042 DFRobot Инфракрасный датчик прорыва
  • SEN0143 SHARP GP2Y0A41SK0F ИК-датчик рейнджера 4-30 см
  • SEN0013 Sharp GP2Y0A02YK ИК-датчик рейнджера 150 см
  • SEN0014 Sharp GP2Y0A21 Датчик расстояния 10-80 см
  • SEN0085 Sharp GP2Y0A710K Датчик расстояния 100-550 см
  • Модуль цифрового ИК-приемника DFR0094
  • DFR0095 Модуль цифрового ИК-передатчика
  • SEN0018 Цифровой инфракрасный датчик движения
  • DFR0107 ИК-комплект
  • SEN0264 TS01 ИК-датчик температуры (4-20 мА)
  • SEN0169 Аналоговый pH-метр Pro
  • DFR0300-H Gravity: аналоговый датчик электропроводности (K = 10)
  • DFR0300 Гравитационный аналоговый датчик электропроводности V2 K = 1
  • SEN0165 Аналоговый измеритель ОВП
  • SEN0161-V2 Комплект гравитационного аналогового датчика pH V2
  • SEN0161 PH метр
  • SEN0237 Гравитационный аналоговый датчик растворенного кислорода
  • SEN0204 Бесконтактный датчик уровня жидкости XKC-Y25-T12V
  • SEN0205 Датчик уровня жидкости-FS-IR02
  • SEN0244 Gravity Analog TDS Sensor Meter для Arduino
  • SEN0249 Комплект измерителя pH с аналоговым наконечником копья силы тяжести для применения в почве и пищевых продуктах
  • SEN0121 Датчик пара
  • SEN0097 Датчик освещенности
  • DFR0026 Датчик внешней освещенности DFRobot
  • TOY0044 УФ-датчик
  • SEN0172 LX1972 датчик внешней освещенности
  • SEN0043 TEMT6000 датчик внешней освещенности
  • SEN0175 УФ-датчик v1.0-ML8511
  • SEN0228 Gravity I2C VEML7700 Датчик внешней освещенности
  • SEN0101 Датчик цвета TCS3200
  • DFR0022 Датчик оттенков серого DFRobot
  • Датчик отслеживания линии SEN0017 для Arduino V4
  • SEN0147 Интеллектуальный датчик оттенков серого
  • SEN0212 TCS34725 Датчик цвета I2C для Arduino
  • SEN0245 Gravity VL53L0X Лазерный дальномер ToF
  • SEN0259 TF Mini LiDAR ToF Laser Range Sensor
  • SEN0214 Датчик тока 20A
  • SEN0262 Гравитационный аналоговый преобразователь тока в напряжение для приложений 4 ~ 20 мА
  • SEN0291 Gravity: Цифровой ваттметр I2C
  • DFR0027 Цифровой датчик вибрации DFRobot V2
  • DFR0028 DFRobot Датчик наклона
  • DFR0029 Цифровая кнопка DFRobot
  • DFR0030 DFRobot емкостный сенсорный датчик
  • Модуль цифрового зуммера DFR0032
  • DFR0033 Цифровой магнитный датчик
  • DFR0034 Аналоговый звуковой датчик
  • SEN0038 Колесные энкодеры для DFRobot 3PA и 4WD Rovers
  • DFR0051 Аналоговый делитель напряжения
  • DFR0052 Аналоговый пьезодисковый датчик вибрации
  • DFR0076 Датчик пламени
  • DFR0053 Аналоговый датчик положения ползуна
  • DFR0054 Аналоговый датчик вращения V1
  • DFR0058 Аналоговый датчик вращения V2
  • Модуль джойстика DFR0061 для Arduino
  • DFR0075 AD Клавиатурный модуль
  • Модуль вентилятора DFR0332
  • SEN0177 PM2.5 лазерный датчик пыли
  • Модуль датчика веса SEN0160
  • SEN0170 Тип напряжения датчика скорости ветра 0-5 В
  • TOY0048 Высокоточный двухосевой датчик инклинометра, совместимый с Arduino Gadgeteer
  • SEN0187 RGB и датчик жестов
  • SEN0186 Метеостанция с анемометром Флюгер Дождь ведро
  • SEN0192 Датчик микроволн
  • SEN0185 датчик Холла
  • FIT0449 DFRobot Speaker v1.0
  • Датчик частоты сердечных сокращений SEN0203
  • DFR0423 Самоблокирующийся переключатель
  • SEN0213 Датчик монитора сердечного ритма
  • SEN0221 Датчик угла Холла силы тяжести
  • Датчик переключателя проводимости SEN0223
  • SEN0230 Инкрементальный фотоэлектрический датчик угла поворота – 400P R
  • SEN0235 Модуль поворотного энкодера EC11
  • SEN0240 Аналоговый датчик ЭМГ от OYMotion
  • SEN0232 Гравитационный аналоговый измеритель уровня звука
  • SEN0233 Монитор качества воздуха PM 2.5, формальдегид, датчик температуры и влажности
  • DFR0515 FireBeetle Covers-OSD Модуль наложения символов
  • SEN0257 Датчик гравитационного давления воды
  • SEN0289 Gravity: Цифровой датчик встряхивания
  • SEN0290 Gravity: Датчик молнии
  • DFR0271 GMR Плата
  • ROB0003 Pirate 4WD Мобильная платформа
  • Мобильная платформа ROB0005 Turtle 2WD
  • ROB0025 NEW A4WD Мобильный робот с кодировщиком
  • ROB0050 4WD MiniQ Полный комплект
  • ROB0111 4WD MiniQ Cherokey
  • ROB0036 Комплект роботизированной руки с 6 степенями свободы
  • Комплект наклонно-поворотного устройства FIT0045 DF05BB
  • ROB0102 Мобильная платформа Cherokey 4WD
  • ROB0117 Базовый комплект для Cherokey 4WD
  • ROB0022 4WD Мобильная платформа
  • ROB0118 Базовый комплект для Turtle 2WD
  • Робот-комплект ROB0080 Hexapod
  • ROB0112 Мобильная платформа Devastator Tank
  • ROB0114 Мобильная платформа Devastator Tank
  • ROB0124 Мобильная платформа HCR с всенаправленными колесами
  • ROB0128 Devastator Tank Мобильная платформа Металлический мотор-редуктор постоянного тока
  • ROB0137 Explorer MAX Робот
  • ROB0139 Робот FlameWheel
  • DFR0270 Accessory Shield для Arduino
  • DFR0019 Щит для прототипирования для Arduino
  • DFR0265 IO Expansion Shield для Arduino V7
  • DFR0210 Пчелиный щит
  • DFR0165 Mega IO Expansion Shield V2.3
  • DFR0312 Плата расширения Raspberry Pi GPIO
  • DFR0311 Raspberry Pi встречает Arduino Shield
  • DFR0327 Arduino Shield для Raspberry Pi 2B и 3B
  • DFR0371 Экран расширения ввода-вывода для Bluno M3
  • DFR0356 Щит Bluno Beetle
  • DFR0412 Gravity IO Expansion Shield для DFRduino M0
  • DFR0375 Cookie I O Expansion Shield V2
  • DFR0334 GPIO Shield для Arduino V1.0
  • DFR0502 Gravity IO Expansion & Motor Driver Shield V1.1
  • DFR0518 Micro Mate – мини-плата расширения для микробита
  • DFR0578 Gravity I O Expansion Shield для OpenMV Cam M7
  • DFR0577 Gravity I O Expansion Shield для Pyboard
  • DFR0626 MCP23017 Модуль расширения с IIC на 16 цифровых IO
  • DFR0287 LCD12864 Экран
  • DFR0009 Экран ЖК-клавиатуры для Arduino
  • DFR0063 I2C TWI LCD1602 Модуль Gadgeteer-совместимый
  • Модуль DFR0154 I2C TWI LCD2004, совместимый с Arduino Gadgeteer
  • Светодиодная матрица DFR0202 RGB
  • DFR0090 3-проводной светодиодный модуль
  • TOY0005 OLED 2828 модуль цветного дисплея.Совместимость с NET Gadgeteer
  • Модуль дисплея TOY0006 OLED 9664 RGB
  • Модуль дисплея TOY0007 OLED 2864
  • Модуль дисплея FIT0328 2.7 OLED 12864
  • DFR0091 3-проводной последовательный ЖК-модуль, совместимый с Arduino
  • DFR0347 2.8 TFT Touch Shield с 4 МБ флэш-памяти для Arduino и mbed
  • DFR0348 3.5 TFT Touch Shield с 4 МБ флэш-памяти для Arduino и mbed
  • DFR0374 Экран LCD клавиатуры V2.0
  • DFR0382 Экран со светодиодной клавиатурой V1.0
  • DFR0387 TELEMATICS 3.5 TFT сенсорный ЖК-экран
  • DFR0459 Светодиодная матрица RGB 8×8
  • DFR0460 Светодиодная матрица RGB 64×32 – шаг 4 мм / Гибкая светодиодная матрица 64×32 – Шаг 4 мм / Гибкая светодиодная матрица 64×32 – Шаг 5 мм
  • DFR0461 Гибкая светодиодная матрица 8×8 RGB Gravity
  • DFR0462 Гибкая светодиодная матрица 8×32 RGB Gravity
  • DFR0463 Gravity Гибкая светодиодная матрица 16×16 RGB
  • DFR0471 Светодиодная матрица RGB 32×16 – шаг 6 мм
  • DFR0472 Светодиодная матрица RGB 32×32 – шаг 4 мм
  • DFR0464 Gravity I2C 16×2 ЖК-дисплей Arduino с подсветкой RGB
  • DFR0499 Светодиодная матрица RGB 64×64 – шаг 3 мм
  • DFR0506 7-дюймовый дисплей HDMI с емкостным сенсорным экраном
  • DFR0555 \ DF0556 \ DFR0557 Gravity I2C LCD1602 Модуль ЖК-дисплея Arduino
  • DFR0529 2.2-дюймовый ЖК-дисплей TFT V1.0 (интерфейс SPI)
  • DFR0605 Gravity: Цифровой светодиодный модуль RGB
  • FIT0352 Цифровая светодиодная водонепроницаемая лента с RGB-подсветкой 60LED м * 3 м
  • DFR0645-G DFR0645-R 4-цифровой светодиодный сегментный модуль дисплея
  • Артикул DFR0646-G DFR0646-R 8-цифровой светодиодный сегментный модуль дисплея
  • DFR0597 Гибкая светодиодная матрица RGB 7×71
  • DFR0231 Модуль NFC для Arduino
  • Модуль радиоданных TEL0005 APC220
  • TEL0023 BLUETOOH BEE
  • TEL0026 DF-BluetoothV3 Bluetooth-модуль
  • Модуль беспроводного программирования TEL0037 для Arduino
  • TEL0044 DFRduino GPS Shield-LEA-5H
  • TEL0047 WiFi Shield V2.1 для Arduino
  • TEL0051 GPS GPRS GSM модуль V2.0
  • TEL0067 Wi-Fi Bee V1.0
  • TEL0073 BLE-Link
  • TEL0075 RF Shield 315 МГц
  • TEL0078 WIFI Shield V3 PCB Антенна
  • TEL0079 WIFI Shield V3 RPSMA
  • TEL0084 BLEmicro
  • TEL0086 DF-маяк EVB
  • TEL0087 USBBLE-LINK Bluno Адаптер для беспроводного программирования
  • TEL0080 UHF RFID МОДУЛЬ-USB
  • TEL0081 УВЧ RFID МОДУЛЬ-RS485
  • TEL0082 UHF RFID МОДУЛЬ-UART
  • TEL0083-A GPS-приемник для Arduino Model A
  • TEL0092 WiFi Bee-ESP8266 Wirelss модуль
  • Модуль GPS TEL0094 с корпусом
  • TEL0097 SIM808 GPS GPRS GSM Shield
  • DFR0342 W5500 Ethernet с материнской платой POE
  • DFR0015 Xbee Shield для Arduino без Xbee
  • TEL0107 WiFiBee-MT7681 Беспроводное программирование Arduino WiFi
  • TEL0089 SIM800C GSM GPRS Shield V2.0
  • Модуль приемника RF TEL0112 Gravity 315MHZ
  • TEL0113 Gravity UART A6 GSM и GPRS модуль
  • TEL0118 Gravity UART OBLOQ IoT-модуль
  • Модуль TEL0120 DFRobot BLE4.1
  • Bluetooth-адаптер TEL0002
  • TEL0108 Модуль аудиоприемника Bluetooth
  • TEL0124 SIM7600CE-T 4G (LTE) Shield V1.0
  • DFR0505 SIM7000C Arduino NB-IoT LTE GPRS Expansion Shield
  • DFR0013 IIC в GPIO Shield V2.0
  • Плата привода двигателя датчика DFR0057 – Версия 2.2
  • DFR0062 Адаптер WiiChuck
  • DFR0233 Узел датчика RS485 V1.0
  • DFR0259 Arduino RS485 щит
  • DFR0370 Экран CAN-BUS V2
  • DFR0627 IIC для двойного модуля UART
  • TEL0070 Multi USB RS232 RS485 TTL преобразователь
  • DFR0064 386AMP модуль аудиоусилителя
  • DFR0273 Экран синтеза речи
  • DFR0299 DFPlayer Mini
  • TOY0008 DFRduino Плеер MP3
  • SEN0197 Диктофон-ISD1820
  • DFR0420 Аудиозащитный экран для DFRduino M0
  • DFR0534 Голосовой модуль
  • SD2403 Модуль часов реального времени SKU TOY0020
  • TOY0021 SD2405 Модуль часов реального времени
  • DFR0151 Модуль Gravity I2C DS1307 RTC
  • DFR0469 Модуль Gravity I2C SD2405 RTC
  • DFR0316 MCP3424 18-битный канал АЦП-4 с усилителем с программируемым усилением
  • DFR0552 Gravity 12-битный модуль I2C DAC
  • DFR0553 Gravity I2C ADS1115 16-битный модуль АЦП, совместимый с Arduino и Raspberry Pi
  • DFR0117 Модуль хранения данных Gravity I2C EEPROM
  • Модуль SD DFR0071
  • Плата привода двигателя датчика DFR0057 – Версия 2.2
  • DFR0360 XSP – Программист Arduino
  • DFR0411 Двигатель постоянного тока Gravity 130
  • DFR0438 Яркий светодиодный модуль
  • DFR0439 Светодиодные гирлянды красочные
  • DFR0440 Модуль микровибрации
  • DFR0448 Светодиодные гирлянды, теплый белый цвет
  • Встроенный термопринтер DFR0503 – последовательный TTL
  • DFR0504 Гравитационный изолятор аналогового сигнала
  • DFR0520 Двойной цифровой потенциометр 100K
  • DFR0565 Гравитационный цифровой изолятор сигналов
  • DFR0563 Гравитация 3.Датчик уровня топлива литиевой батареи 7V
  • DFR0576 Гравитационный цифровой мультиплексор I2C с 1 по 8
  • DFR0117 Модуль хранения данных Gravity I2C EEPROM
  • DRI0001 Моторный щит Arduino L293
  • DRI0002 MD1.3 2A Двухмоторный контроллер
  • DRI0009 Моторный щит Arduino L298N
  • DRI0021 Драйвер двигателя постоянного тока Veyron 2x25A Brush
  • DRI0017 2A Моторный щит для Arduino Twin
  • Драйвер двигателя постоянного тока DRI0018 2x15A Lite
  • Микродвигатель постоянного тока FIT0450 с энкодером-SJ01
  • FIT0458 Микродвигатель постоянного тока с энкодером-SJ02
  • DFR0399 Микро-металлический мотор-редуктор постоянного тока 75 1 Вт Драйвер
  • DRI0039 Quad Motor Driver Shield для Arduino
  • DRI0040 Двойной 1.Драйвер двигателя 5A – HR8833
  • DRI0044 2×1.2A Драйвер двигателя постоянного тока TB6612FNG
  • Драйвер двигателя постоянного тока DFR0513 PPM 2x3A
  • DFR0523 Гравитационный цифровой перистальтический насос
  • DRI0027 Digital Servo Shield для Arduino
  • DRI0029 Сервопривод Veyron, 24 канала
  • SER0044 DSS-M15S 270 ° 15KG Металлический сервопривод DF с аналоговой обратной связью
  • DRI0023 Экран шагового двигателя для Arduino DRV8825
  • DRI0035 TMC260 Щиток драйвера шагового двигателя
  • DFR0105 Силовой щит
  • DFR0205 Силовой модуль
  • DFR0457 Контроллер мощности Gravity MOSFET
  • DFR0564 Зарядное устройство USB для 7.Литий-полимерная батарея 4 В
  • DFR0535 Менеджер солнечной энергии
  • DFR0559 Солнечная система управления мощностью 5 В для подсолнечника
  • DFR0559 Менеджер солнечной энергии 5 В
  • DFR0580 Solar Power Manager для свинцово-кислотных аккумуляторов 12 В
  • DFR0222 Реле X-Board
  • Релейный модуль DFR0017, совместимый с Arduino
  • DFR0289 Релейный контроллер RLY-8-POE
  • DFR0290 RLY-8-RS485 8-релейный контроллер
  • DFR0144 Релейный экран для Arduino V2.1
  • DFR0473 Gravity Digital Relay Module Совместимость с Arduino и Raspberry Pi
  • KIT0003 EcoDuino – Комплект для автомобильных заводов
  • KIT0071 MiniQ Discovery Kit
  • KIT0098 Пакет компонентов подключаемого модуля Breadboard
  • Артикул DFR0748 Цветок Китти
  • SEN0305 Гравитация: HUSKYLENS – простой в использовании датчик машинного зрения AI
  • Подключение датчика к Raspberry Pi
  • DFR0677 ШЛЯПА ONPOWER UPS для Raspberry Pi

Arduino и пример поворотного энкодера – Arduino Learning

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

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

Поворотные энкодеры

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

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

.

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

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

Может быть дополнительный третий выход: ссылка или «индекс», который происходит один раз за каждый ход. Это используется, когда требуется абсолютная ссылка, например, в системах позиционирования. Выходные данные индекса обычно обозначаются буквой Z.

.

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

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

В них используются два выхода, называемые A и B, которые называются квадратурными выходами, поскольку они сдвинуты по фазе на 90 градусов.

Диаграмма состояний:

Код для поворота
по часовой стрелке
Фаза A B
1 0 0
2 0 1
3 1 1
4 1 0
Код для поворота
против часовой стрелки
Фаза A B
1 1 0
2 1 1
3 0 1
4 0 0

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

Две формы выходных волн сдвинуты по фазе на 90 градусов, что и означает квадратура. Эти сигналы декодируются для создания импульса обратного отсчета или импульса обратного отсчета. Для программного декодирования выходы A и B считываются программным обеспечением либо через прерывание на любом фронте, либо через опрос, а приведенная выше таблица используется для декодирования направления. Например, если последнее значение было 00, а текущее значение – 01, устройство переместилось на полшага по часовой стрелке. Механические типы сначала будут устранены, требуя, чтобы одно и то же (действительное) значение считывалось определенное количество раз, прежде чем распознавать изменение состояния.

На энкодерах с фиксаторами есть разные способы переключения состояний. В некоторых случаях и A, и B всегда имеют разомкнутую цепь на фиксаторах, и полный цикл переключения 00 → 00 происходит при переходе от одного фиксатора к другому. У других есть фиксаторы с чередованием значений 00 и 11, с разнесенным временем переключения во время перехода между фиксаторами.

Инкрементальная импульсная диаграмма A, B, Z

Кроме того, некоторые инкрементальные энкодеры выдают сигнал «Z». После каждого поворота этот Z-сигнал обычно увеличивается на 90 ° в одном и том же положении.Это можно использовать как точный ориентир. Некоторые инкрементальные энкодеры также имеют дополнительные дифференциальные сигналы, называемые «/ A», «/ B» и «/ Z». Эти сигналы являются инвертированными сигналами «A», «B» и «Z». Контроллеры могут сравнивать каждую пару («A» должно быть равно инвертированному «/ A»), чтобы гарантировать отсутствие ошибок во время передачи. [10]

Наблюдатель, например микропроцессор, считывает (отсчитывает) выходные данные кодировщика. Наблюдателю необходимо достаточно часто производить выборку выходных данных кодировщика, чтобы не пропустить никаких изменений кода.Если энкодер вращается слишком быстро, то наблюдатель может пропустить изменение выходного сигнала энкодера, поэтому наблюдатель увидит недопустимый переход, такой как 00 → 11, и запутается. Для этого перехода наблюдатель не знает, в какую сторону повернулся кодировщик: он мог двигаться вперед (00 → 01 → 11) или назад (00 → 10 → 11). Если энкодер вращается еще быстрее, то несколько выходных изменений могут быть пропущены, и наблюдатель может ошибиться в направлении. Рассмотрим последовательность движения вперед 00 → 01 → 11 → 10 (на 3 шага вперед).Если кодировщик вращается слишком быстро, наблюдатель может видеть только первый (00) и четвертый (10) выходы и заключить, что кодирование совершило допустимый переход 00 → 10 (1 шаг назад).

Тот же принцип используется в мышах-шариках для отслеживания движения мыши вправо / влево или вперед / назад.

Датчики вращения с одним выходом (т. Е. Импульсные датчики) не могут использоваться для определения направления движения. Они хорошо подходят для систем, измеряющих переменные скорости движения. В некоторых приложениях они могут использоваться для измерения расстояния движения (например,грамм. ноги движения).

Вот модуль, который я использовал

Подключение

Модуль CLK -> Arduino D2
Модуль DT -> Arduino D3
Модуль + -> Arduino 5v
Модуль GND -> Arduino GND

Код

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

 / ******* Эскиз поворотного энкодера на основе прерываний *******
Саймон Мерретт, основанный на идеях Олега Мазурова, Ника Гаммона, RT, Стива Спенса
* /

статический int pinA = 2; // Наш первый вывод аппаратного прерывания - цифровой вывод 2
статический int pinB = 3; // Наш второй вывод аппаратного прерывания - цифровой вывод 3
энергозависимый байт aFlag = 0; // дайте нам знать, когда мы ожидаем, что нарастающий фронт на контакте A сигнализирует о том, что кодировщик достиг фиксации
энергозависимый байт bFlag = 0; // дайте нам знать, когда мы ожидаем, что нарастающий фронт на выводе B сигнализирует о том, что энкодер достиг фиксации (направление противоположно тому, когда установлен флаг aFlag)
энергозависимый байтовый кодировщик Pos = 0; // эта переменная хранит наше текущее значение позиции энкодера.Измените на int или uin16_t вместо byte, если вы хотите записать больший диапазон, чем 0-255
изменчивый байт oldEncPos = 0; // сохраняет последнее значение позиции энкодера, чтобы мы могли сравнить его с текущим показанием и посмотреть, изменилось ли оно (чтобы мы знали, когда печатать на последовательный монитор)
чтение непостоянного байта = 0; // где-то для хранения прямых значений, которые мы читаем с наших контактов прерывания, прежде чем проверять, переместили ли мы весь фиксатор

void setup () {
  pinMode (pinA, INPUT_PULLUP); // устанавливаем pinA как вход, подтягиваем HIGH к логическому напряжению (5V или 3.3В для большинства случаев)
  pinMode (pinB, INPUT_PULLUP); // устанавливаем pinB как вход, подтягиваем ВЫСОКОЕ к логическому напряжению (5 В или 3,3 В для большинства случаев)
  attachInterrupt (0, PinA, RISING); // устанавливаем прерывание на PinA, ищем сигнал нарастающего фронта и выполняем процедуру обслуживания прерывания "PinA" (ниже)
  attachInterrupt (1, PinB, RISING); // устанавливаем прерывание на PinB, ищем сигнал нарастающего фронта и выполняем процедуру обслуживания прерывания "PinB" (ниже)
  Serial.begin (115200); // запускаем ссылку на монитор последовательного порта
}

void PinA () {
  cli (); // останавливаем прерывания до того, как мы прочитаем значения выводов
  чтение = PIND & 0xC; // считываем все восемь значений выводов, затем удаляем все значения, кроме pinA и pinB
  if (reading == B00001100 && aFlag) {// проверяем, что оба контакта зафиксированы (ВЫСОКИЙ) и ожидаем фиксации на переднем фронте этого контакта
    encoderPos -; // уменьшаем счетчик позиции энкодера
    bFlag = 0; // сбрасываем флаги для следующего хода
    aFlag = 0; // сбрасываем флаги для следующего хода
  }
  иначе, если (чтение == B00000100) bFlag = 1; // сигнал, что мы ожидаем, что pinB сигнализирует о переходе к фиксации из свободного вращения
  sei (); // перезапускаем прерывания
}

void PinB () {
  cli (); // останавливаем прерывания до того, как мы прочитаем значения выводов
  чтение = PIND & 0xC; // считываем все восемь значений выводов, затем удаляем все значения, кроме pinA и pinB
  if (reading == B00001100 && bFlag) {// проверяем, что оба контакта зафиксированы (ВЫСОКИЙ) и ожидаем фиксации на переднем фронте этого контакта
    encoderPos ++; // увеличиваем счетчик позиции энкодера
    bFlag = 0; // сбрасываем флаги для следующего хода
    aFlag = 0; // сбрасываем флаги для следующего хода
  }
  иначе, если (чтение == B00001000) aFlag = 1; // сигнализируем, что мы ожидаем, что pinA сигнализирует о переходе к фиксации из свободного вращения
  sei (); // перезапускаем прерывания
}

void loop () {
  if (oldEncPos! = encoderPos) {
    Серийный.println (encoderPos);
    oldEncPos = encoderPos;
  }
} 

Link
KY-040 Модуль поворотного декодера кодировщика для Arduino

Интерфейс поворотного энкодера Arduino

Поворотные энкодеры

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


Энкодер

Эта коммутационная плата поворотного энкодера имеет пять контактов,

  • GND → Заземление
  • + → + 5V Источник питания
  • SW → кнопочный переключатель
  • DT → Контакт B энкодера
  • CLK → Контакт A энкодера

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

Между прочим, когда вал вращается против часовой стрелки, выходной сигнал, генерируемый на выходных контактах энкодера A и B, инвертируется.

Интерфейс Arduino для поворотного энкодера

Подключите контакты источника питания поворотного энкодера к плате Arduino как + к 5V и Gnd к Gnd. Затем подключите вывод CLK (выход энкодера A) к цифровому выводу D2 Arduino, а вывод DT (выход энкодера B) к цифровому выводу D1. После завершения подключения загрузите следующий эскиз, чтобы получить угол и положение поворотного энкодера на последовательном мониторе.

Эскиз Arduino для поворотного энкодера

 #define encoderOutA 2 // Вывод CLK поворотного энокодера
 #define encoderOutB 1 // Вывод DT поворотного энокодера
 
 int counter = 0;
 int presentState;
 int previousState;
 void setup () {
 pinMode (encoderOutA, INPUT);
 pinMode (encoderOutB, INPUT);
 
  Серийный .begin (9600);
 previousState = digitalRead (encoderOutA); // Получить текущее состояние кодировщика OutA
 }
 void loop () {
 presentState = digitalRead (encoderOutA);
 если (настоящее состояние! = предыдущее состояние)
 {
 если (digitalRead (encoderOutB)! = presentState)
 {
 счетчик ++;
 }
 еще {
 прилавок --;
 }
  Серийный  .print ("Должность:");
  Серийный .println (счетчик);
 }
 previousState = presentState; // Заменить предыдущее состояние encoderOutA текущим состоянием
 }

 

В коде Arduino сначала определите выходные контакты и инициализируйте счет как 0, затем объявите текущие и предыдущие переменные состояния. Используя цикл условий «IF», ​​получите текущее состояние энкодера и сравните его с предыдущим состоянием. Если изменений нет, счет остается прежним, в противном случае значение счетчика увеличивается при вращении по часовой стрелке и уменьшается при вращении против часовой стрелки.

Управление двигателем постоянного тока с помощью энкодера и Arduino

/ *

* Управление скоростью и направлением вращения двигателя постоянного тока с помощью Arduino

* и энкодера

* Это бесплатное программное обеспечение, БЕЗ ГАРАНТИИ.

* https://simple-circuit.com/

* /

#define button 4 // Вывод кнопки поворотного энкодера (SW) подключен к выводу 4 Arduino

#define pwm1 5 // вывод PWM1

#define pwm2 6 // вывод PWM2

// объявления переменных

boolean motor_dir = 0;

uint8_t last_read;

int8_t quad = 0, изменить;

int16_t motor_speed = 0;

void setup ()

{

pinMode (2, INPUT_PULLUP);

pinMode (3, INPUT_PULLUP);

pinMode (кнопка, INPUT_PULLUP);

pinMode (pwm1, ВЫХОД);

pinMode (pwm2, ВЫХОД);

last_read = digitalRead (3) << 1 | digitalRead (2);

attachInterrupt (0, encoder_read, ИЗМЕНИТЬ);

attachInterrupt (1, encoder_read, ИЗМЕНИТЬ);

}

void encoder_read ()

{

uint8_t encoderRead = 0;

encoderRead = digitalRead (3) << 1 | digitalRead (2);

if (encoderRead == last_read)

return;

if (bitRead (encoderRead, 0) == bitRead (last_read, 1))

quad – = 1;

иначе

quad + = 1;

last_read = encoderRead;

}

int8_t EncoderGet (void)

{

int8_t val = 0;

в то время как (quad> = 4) {

val + = 1;

четырехъядерный – = 4;

}

в то время как (quad <= -4) {

val – = 1;

квад + = 4;

}

return val;

}

bool debounce ()

{

счетчик байтов = 0;

для (байт l = 0; l <5; l ++) {

if (digitalRead (button) == 0)

count ++;

задержка (10);

}

if (count> 2) return 1;

иначе вернуть 0;

}

void loop ()

{

if (digitalRead (button) == 0) // если кнопка нажата

if (debounce ()) // вызов функции противодействия

{

каталог_двигателя =! каталог_двигателя; // инвертировать переменную направления

set_speed (motor_speed);

в то время как (debounce ()); // вызов функции противодействия (ждать, пока кнопка не будет отпущена)

}

change = EncoderGet ();

if (изменить) {

motor_speed + = изменить;

if (motor_speed> 255)

motor_speed = 255;

, если (motor_speed <0)

motor_speed = 0;

set_speed (скорость_двигателя);

}

задержка (50); // ожидание 50 мс

}

void set_speed (byte pwm_duty)

{

switch (motor_dir)

{

case 0: digitalWrite (pwm1, 0);

analogWrite (pwm2, motor_speed);

перерыв;

случай 1: digitalWrite (pwm2, 0);

analogWrite (pwm1, motor_speed);

}

}

// конец кода.

Поворотный энкодер Omron E6B2-CWZ6C (инкрементальный) 4547648314091

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

Местонахождение предмета: Ранчо Кордова, Калифорния, США

Почтовые отправления:

по всему миру

Исключено: США, Российская Федерация, Франция, Германия, Ирландия, Италия, Испания, Бразилия, Австралия

Выбрать страну: -Выберите-AfghanistanAlbaniaAlgeriaAmerican SamoaAndorraAngolaAnguillaAntigua и BarbudaArgentinaArmeniaArubaAustriaAzerbaijan RepublicBahamasBahrainBangladeshBarbadosBelarusBelgiumBelizeBeninBermudaBhutanBoliviaBosnia и HerzegovinaBotswanaBritish Virgin IslandsBrunei DarussalamBulgariaBurkina FasoBurundiCambodiaCameroonCanadaCape Verde IslandsCayman IslandsCentral African RepublicChadChileChinaColombiaComorosCongo, Демократическая Республика theCongo, Республика theCook IslandsCosta RicaCôte-д’Ивуар (Берег Слоновой Кости) Хорватия, Республика ofCyprusCzech RepublicDenmarkDjiboutiDominicaDominican RepublicEcuadorEgyptEl SalvadorEquatorial GuineaEritreaEstoniaEthiopiaFalkland острова (Мальвинские) ФиджиФинляндияФранцузская ГвианаФранцузская ПолинезияРеспублика ГабонГамбияГрузияГанаГибралтарГрецияГренландияГренадаГуаделупаГуамГватемалаГернсиГвинеяГвинея-БисауГайанаГаитиГондурасГонконгВенгрияИсландияИндияДжордаИндонияИндонияИндия banonLesothoLiberiaLibyaLiechtensteinLithuaniaLuxembourgMacauMacedoniaMadagascarMalawiMalaysiaMaldivesMaliMaltaMarshall IslandsMartiniqueMauritaniaMauritiusMayotteMexicoMicronesiaMoldovaMonacoMongoliaMontenegroMontserratMoroccoMozambiqueNamibiaNauruNepalNetherlandsNetherlands AntillesNew CaledoniaNew ZealandNicaraguaNigerNigeriaNiueNorwayOmanPakistanPalauPanamaPapua Нового GuineaParaguayPeruPhilippinesPolandPortugalPuerto RicoQatarReunionRomaniaRwandaSaint HelenaSaint Киттс-NevisSaint LuciaSaint Пьер и MiquelonSaint Винсент и GrenadinesSan MarinoSaudi ArabiaSenegalSerbiaSeychellesSierra LeoneSingaporeSlovakiaSloveniaSolomon IslandsSomaliaSouth AfricaSri LankaSurinameSwazilandSwedenSwitzerlandTaiwanTajikistanTanzaniaThailandTogoTongaTrinidad и TobagoTunisiaTurkeyTurkmenistanTurks и Кайкос IslandsTuvaluUgandaUkraineUnited Арабских EmiratesUnited KingdomUruguayUzbekistanVanuatuVatican город StateVenezuelaVietnamVirgin остров (U.

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

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