Как подключить энкодер к Arduino. Какие типы энкодеров бывают. Как работает оптический и магнитный энкодер. Как программировать энкодер на Arduino. Где применяются энкодеры в проектах с Arduino.
Что такое энкодер и зачем он нужен
Энкодер — это устройство, преобразующее угол поворота вала в цифровой или аналоговый сигнал. Энкодеры широко применяются в робототехнике, ЧПУ станках, измерительных приборах и других областях, где требуется точное определение положения или скорости вращения.
Основные задачи, которые решают энкодеры:
- Измерение угла поворота вала
- Подсчет количества оборотов
- Определение направления вращения
- Измерение скорости вращения
Энкодеры позволяют создавать точные системы позиционирования и управления движением в проектах на базе Arduino. Рассмотрим основные типы энкодеров и их особенности.
Типы энкодеров
Энкодеры можно разделить на два основных типа:
1. Инкрементальные энкодеры
Выдают импульсы при вращении вала. Позволяют определить угол поворота и направление, но не абсолютное положение. Требуют начальной калибровки.

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

Подключение энкодера к Arduino
Рассмотрим подключение простого инкрементального энкодера к Arduino:
- Питание энкодера подключаем к 5V и GND Arduino
- Выход A энкодера — к цифровому пину Arduino (например, D2)
- Выход B энкодера — к другому цифровому пину (например, D3)
- Кнопку энкодера (если есть) — к цифровому пину с подтяжкой (например, D4)
Схема подключения энкодера к Arduino:
«` «`Программирование энкодера на Arduino
Базовый алгоритм работы с энкодером на Arduino:
- Инициализация пинов энкодера
- Чтение состояния выходов A и B в прерывании
- Определение направления и подсчет шагов
- Вычисление угла поворота
Пример простого скетча для работы с энкодером:
«`cpp #define ENCODER_A 2 #define ENCODER_B 3 volatile long encoder_pos = 0; int last_A, last_B; void setup() { pinMode(ENCODER_A, INPUT_PULLUP); pinMode(ENCODER_B, INPUT_PULLUP); attachInterrupt(digitalPinToInterrupt(ENCODER_A), encoder_isr, CHANGE); attachInterrupt(digitalPinToInterrupt(ENCODER_B), encoder_isr, CHANGE); Serial.begin(9600); } void loop() { Serial.println(encoder_pos); delay(100); } void encoder_isr() { int A = digitalRead(ENCODER_A); int B = digitalRead(ENCODER_B); if(A != last_A || B != last_B) { if(A == B) { encoder_pos++; } else { encoder_pos—; } } last_A = A; last_B = B; } «`
Применение энкодеров в проектах Arduino
Энкодеры находят широкое применение в различных проектах на базе Arduino:
- Управление моторами в робототехнике
- Создание пользовательских интерфейсов (регуляторы громкости, меню настроек)
- Измерительные приборы (угломеры, тахометры)
- Системы позиционирования в ЧПУ станках
- Управление сервоприводами
Пример использования энкодера для управления яркостью светодиода:
«`cpp #includeВ этом примере поворот энкодера вправо увеличивает яркость светодиода, а поворот влево — уменьшает.
Выбор энкодера для проекта Arduino
При выборе энкодера для проекта Arduino следует учитывать несколько факторов:

- Требуемая точность и разрешение
- Условия эксплуатации (влажность, температура, вибрации)
- Наличие кнопки
- Размер и способ монтажа
- Стоимость
Для большинства любительских проектов подойдут недорогие инкрементальные энкодеры с разрешением 20-30 импульсов на оборот. Для более точных измерений рекомендуется использовать энкодеры с высоким разрешением или абсолютные энкодеры.
Заключение
Энкодеры являются мощным инструментом для создания систем точного позиционирования и управления в проектах Arduino. Они позволяют решать широкий спектр задач — от простых регуляторов до сложных систем управления движением. Правильный выбор типа энкодера и его корректное программирование позволят значительно расширить возможности ваших проектов на базе Arduino.
Подключение энкодера к Ардуино. Управление мотором энкодер.
Сегодня познакомимся с энкодером и сделаем так, что он будет управлять мотором.
Энкодер вращения — это электромеханическое устройство, предназначенное для преобразования угла поворота вращающегося объекта в электрический сигнал (цифровой или аналоговый).
В примере я буду использовать энкодер собранный в виде модуля KY-040. А ещё нам понадобятся электрический моторчик, Транзистор, я взял МОСФЕТ и Ардуино, куда же теперь без неё.
Вот схема подключение, подробнее я расскажу позже.
Для питания моторчика нужен отдельный блок питания.
А также нам понадобятся 2 резистора, зачем, я расскажу чуть позже.
Для сегодняшнего примера управления скоростью мотора я подключил энкодер в виде модуля KY-040 и мотор на 12 вольт. Но я решил не просто плавно регулировать скорость, а сделать дискретное переключение. Я определил приблизительно при каком напряжении у меня начинает вращаться мотор, и присвоил это значение первому переключению энкодера. Все последующие переключения идут с приращиванием значений. И так до шестой скорости. Это можно видеть в мониторе порта. Количество скоростей и шаг вращения может быть любым.
При вращении по часовой стрелке, значения увеличиваются, а против часовой уменьшаются. Дойдя до нуля, мотор останавливается. Так же он останавливается при превышении значений. Остановить также можно, нажав на кнопку энкодера. При этом все значения сбрасываются. Скрипт легко переделать для паузы мотора вместо сбрасывания.
Что бы заполнить паузу, пока вы будете смотреть как управлять мотором, я расскажу как ещё можно использовать энкодер.
Очень часто его используют для отображения различных меню. В одном из следующих уроков, я обязательно такое сделаю. Как только получу дисплей, а то я все уже использовал.
При изготовлении различных моделей и роботов. И ещё много где.
Как работает скетч, я объясню чуть позже, а пока посмотрим с схему подключения.
Я подключил к Ардуино НАНО, но без проблем подойдёт любая Ардуино.
Сначала рассмотрим подключение энкодера.
- Выход clock я подключил к пину D2
- Data к пину D3,
- а switch к пину D4.
- Питание к +5 вольт ардуино.
- Земля к земле
Так как я взял мотор работающий от 12 вольт, то для его управления нужен транзистор. Я использовал MOSFET, так как он намного лучше обычных биполярных транзисторов.
Меня часто спрашивают, зачем использовать два резистора, если и так всё работает.
Резистор на 10 ком нужен для того чтобы при отсутствии сигнала на входе транзистора было хоть какое-то напряжение, которое не даст ему ловить разные наводки и переключаться в разное состояние.
Установив этот резистор вы подаёте низкий уровень на вход, а так как сопротивление резистора большое, то при подаче на вход сигнала с Ардуино, оно никак не повлияет на работу.
А резистор на 100 ом нужен для предотвращения Ардуино от перегрузки по току. Он работает как обычный ограничитель тока. В момент открытия транзистора через него может пойти большой ток.
Ставить их или нет решать вам, но я бы советовал всё же их установить.
Это примерный список транзисторов которые можно подключать. Но их список гораздо больше. В основном они работают с приборами до 30 вольт, но есть и для большего напряжения и силы тока.
Мотор просто устанавливается разрыв между стоком и питанием мотора.
Желательно ещё параллельно включению установить диод и конденсатор, но я обычно это не делаю, и зря.
Работа скетча.
Для работы с энкодером надо установить вот эту библиотеку. Установить можно из диспетчера библиотек.
Дальше надо указать к каким контактам платы Ардуино вы будете подключать выводы data и clock. Я подключил их к выводам 3 и 2.
Мотор я подключил к контакту 9, но можно было бы подключить к любому контакту который может работать в режиме ШИМ.
Создаём переменную для хранения текущей позиции и присваиваем ей значение ноль.
Кнопку энкодера подключаем к контакту 4 платы, чтобы все провода были в одной кучке.
Дальше создаём переменные для хранения значений отвечающих за скорость вращения. У меня мотор начинает вращаться со значения 50.
Шестую скорость я установил в 120. Хоть это и является всего половиной от возможной скорости. Можно задать до 255. Остальные значения я просто плавно раскидал между оставшихся шагов.
А ещё я создал переменную для полной остановке мотора, со значением 0.
В переменную newpos будут попадать новые шаги при переключении энкодера.
В setup ничего нового.
Объявляем скорость работы серийного порта.
9 пин Ардуино объявляем как выход, а 4 pin, к которому подключеня кнопка сделаем входом, да ещё подключим внутреннюю подтяжку. Так, что при не нажатой кнопке, там всегда будет высокий уровень.
Выводим значение начальной позиции энкодера. Она у нас равна нулю.
В loop постоянно проверяем положение энкодера, а здесь получаем позицию и сохраняем в переменную new pos.
Это условие проверки нажатия кнопки энкодера. Если кнопка нажата, то сбрасываем значение энкодера в ноль. Кстати можно эту строчку закомментировать и мотор остановится, но в ноль не сбросится. Получается как бы пауза и при следующих вращениях энкодера, значения будут продолжаться. Ну и небольшой делейчик. Не помешает.
В этом условии мы проверяем было ли изменение в экодере, тоесть было ли вращение. Ели было изменение, то новая позиция не будет равна старой, и условие будет верно и мы проваливаемся внутрь.
Там мы сразу изменим позицию на новую, и теперь пока не крутанёшь ручку, в это условие не попадёшь.
Чуть расскажу про Оператор множественного выбора switch.
Сначала он получает значение из переменной pos и ищет его среди своих кейсов.
Если значение было найдено, то выполняются все команды находящиеся внутри, до оператора break.
После этого происходит выход.
Если значение не было найдено, то выполняется default и выход из оператора.
Кстати в одном кейсе могут находится несколько, и все они будут выполнены.
Если вам нравятся мои видео, то вы можете помочь в развитии канала став его спонсором. Все ваши вклады пойдут на закупки новых модулей. Вам же за это будут предоставлены дополнительные бонусы, и они довольно интересные.
Вы видите ссылки на видео, которые, я думаю будут вам интересны. Перейдя на любое из этих видео вы узнаете что-то новое, а ещё поможете мне. Ведь любой ваш просмотр — это знак YOUTUBE, что это кому-то интересно и что его надо показывать чаще.
Спасибо.
А пока на этом всё.
Инкрементальный энкодер с кнопкой EC11. Обзор, подключение к Ардуино, скетч для работы с энкодером | Электроника и жизнь
В этот статье поговорим о инкрементальном энкодере EC11 с AliExpress. Данный энкодер служит для передачи точного значения, с помощью которого можно управлять каким-либо механизмом с шаговым режимом работы, выбора параметров работы устройства, управления навигационным меню и т.д. Наличие кнопки дополнительно расширяет функционал этого энкодера. Например, можно обыграть короткое нажатие на кнопку, как подтверждение выбранного режима, а длительное нажатие — как отмену.
Инкрементальный энкодер с кнопкой EC11Инкрементальный энкодер с кнопкой EC11
У данного энкодера 5 ножек: две для подключения плюса и земли, две для выходного сигнала вращения энкодера и одна, отвечающую за нажатие кнопки энкодера. Преимущество этого энкодера в том, что он уже смонтирован на плате, с обратной стороны которой размещены цепочки из конденсаторов и резисторов, устраняющие возможный дребезг контактов на аппаратном уровне. А значит нам не придется устранять его программно, дополнительно усложняя скетч.
По принципу передаваемых данных, энкодеры делятся на абсолютные и инкрементальные. У абсолютного энкодера, значения, соответствующие углу поворота, заданы заранее и эти значения передаются контроллеру.
Принцип работы абсолютного энкодераПринцип работы абсолютного энкодера
У инкрементального энкодера значения не заданы и передается только цифровой сигнал поворота. В зависимости от того, в какую сторону осуществляется поворот, энкодер передает различный сигнал. Именно его и будет анализировать микроконтроллер, определяя направление поворота и увеличивая или уменьшая необходимое нам значение переменной.
Принцип работы инкрементального энкодераПринцип работы инкрементального энкодера
Когда мы поворачиваем ручку энкодера по часовой стрелке, то сначала подключается контакт S2, а затем контакт S1. Когда поворачиваем ручку против часовой стрелки, сначала подключается контакт S1, а затем контакт S2.Отслеживая, очередность подключения контактов, мы можем определить, в каком направлении вращается энкодер.
Сигнал при вращении по часовой стрелкеСигнал при вращении по часовой стрелке
Т.е. в тот момент, когда мы зафиксировали сигнал, на выходе S1, мы сравниваем его с сигналом на выходе S2. И если сигнал S1 равен сигналу S2, то ручка энкодера повернута по часовой стрелке, а если не равен, то против часовой. Речь идет об этой модели энкодера, у другой последовательность подключения контактов может быть обратной. Но принцип тот же.
Сигнал при вращении против часовой стрелкиСигнал при вращении против часовой стрелки
Собираем схему с энкодером на макетной плате. Крайние ножки 5V и GND соединяем с соответствующими пинами Arduino UNO . S1 подключаем к 5 порту, S2 к 6-му.
Подключение энкодера к Arduino UNOПодключение энкодера к Arduino UNO
Открываем Arduino IDE и пишем небольшой скетч. Определяем постоянные, связанные с теми портами, куда мы подключили энкодер, и переменные, фиксирующие прошлое и текущее состояние выходов S1 и S2 для отслеживания их изменения. В переменную val мы и будем записывать текущее значение, соответствующее повороту ручки энкодера.
В функции setup производим достаточно стандартную инициализацию.
И фиксируем начальное значение сигнала выхода S1 энкодера.
Скетч для работы с энкодеромСкетч для работы с энкодером
В функции loop считываем текущее значение сигнала выхода S1 энкодера. И сравниваем с начальным. Если значение не равно начальному, значит осуществляется поворот энкодера. И в этом случае считываем значение выхода S2 энкодера. Если S1 равен S2, значит вращение осуществляется по часовой стрелке и переменной val мы добавляем единицу, если нет, то вращение против часовой стрелки и мы вычитаем единицу из переменной val.
Скетч для работы с энкодеромСкетч для работы с энкодером
Подключаем Arduino к компьютеру, загружаем скетч и открываем монитор порта. Поворачиваем по часовой стрелке и видим, как значение увеличивается дважды. При вращении в обратную сторону значение уменьшается дважды.
Монитор порта Arduino IDEМонитор порта Arduino IDE
Происходит это из-за того, что при повороте на каждый шаг, передается 4 импульса, 2 из которых совпадают с предыдущим значение, поэтому не проходят по нашему условию (curS1!=prevS1), а два проходят данное условие и изменяют дважды значение переменной. Это хорошо видно на данной картинке.
Иллюстрация двойного срабатывания при повороте ручки энкодераИллюстрация двойного срабатывания при повороте ручки энкодера
Добавляем булеву переменную flag, которая и будет отсекать повторное изменение значения val. И пишем дополнительное условие – если flag == true, то следующий блок кода срабатывает и flag становится false, а если нет, то переменной flag присваиваем значение true и значение переменной val изменится только один раз за шаг.
Скетч для работы с энкодеромСкетч для работы с энкодером
Загружаем скетч в Ардуино, открываем монитор порта и видим, что значение меняется на единицу при вращении в ту или иную сторону.
Теперь соединим выход энкодера Key с портом номер 7 Ардуино.
Подключение энкодера к Arduino UNO с учетом кнопкиПодключение энкодера к Arduino UNO с учетом кнопки
Добавляем в наш скетч соответствующие постоянную и переменную. И еще одну переменную, фиксирующую время нажатия кнопки.
В функцию loop добавляем блок кода, в котором мы будем отслеживать сигнал с кнопки и при появлении низкого уровня сигнала, считать кнопку нажатой и выводить соответствующее сообщение. Фиксация времени текущего нажатия и сравнивание его с таймером Ардуино, необходима для предотвращения многочисленных срабатываний данного условия в пределах одного нажатия.
Скетч для работы с энкодером с учетом кнопкиСкетч для работы с энкодером с учетом кнопки
Загружаем скетч в Ардуино, открываем монитор порта, нажимаем на ручку энкодера, и видим как монитор порта фиксирует нажатие.
Монитор порта Arduino IDEМонитор порта Arduino IDE
В следующей статье мы снова вернемся с LED матрице и с помощью энкодера будем управлять различными режимами ее работы.
Скетч из статьи можно загрузить по ссылке — https://yadi.sk/d/firAa6UXM9l-Gw
Ниже размещено видео по материалам данной статьи. Спасибо, что дочитали до конца! Всем пока!
Дисковый энкодер. Подключение оптического энкодера к 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 и заодно разобраться с вопросом их подключения и использования.
Собственно очевидно, что получать состояние энкодера можно двумя способами. Это опрос порта и прерывание.
Подробно разобран вот тут http://cxem.net/arduino/arduino8.php
В общем-то не скажу, что мне этот способ интересен — греть воздух и тратить энергию опрашивая энкодер в большинстве случаев лишь пустая трата ресурсов поэтому останавливаться на нём не буду.
Вот это самое оно — контроллер спит и просыпается лишь для того, чтобы считать значение энкодера, выполнить какие-то действия и снова уснуть. Минусом является то, что не все входы контроллера могут генерировать прерывание.
Неплохой материал по теме нашёл тут http://www.circuitsathome.com/mcu/reading-rotary-encoder-on-arduino и уже было дело ломанулся попробовать живьём, но тут мне попалась на глаза библиотечка с нехитрым названием Encoder, в которой вся грязная работа уже сделана и к тому-же утверждается, что процедуры обработки прерываний написаны на ассемблере и таким образом можно ожидать достаточно высокой производительности.
Библиотека достаточно универсальна — подключенный энкодер может работать в следующих режимах
- наилучшая производительность: оба сигнала генерируют прерывания.
- хорошая производительность: один сигнал генерирует прерывание — второй нет (не совсем понял — видимо второй пин опрашивается)
- низкая производительность: оба пина опрашиваются
В комплекте идут примеры кода в виде ардуино скетчей.
Для начала качаем библиотеку Encoder.zip (version 1.2), распаковываем её в папку для библиотек настроенную в IDE. Пробуем скетч из комплекта библиотеки.
#include <Encoder.h>
Encoder myEnc(5, 6);
void setup() {
Serial.begin(9600);
Serial.println("Basic Encoder Test:");
}
long oldPosition = -999;
void loop() {
long newPosition = myEnc.read();
if (newPosition != oldPosition) {
oldPosition = newPosition;
Serial.println(newPosition);
}
}
Библиотека прекрасно работает. Проверено!
arduino rotary encoder
, Это очень полезные электрические компоненты, вращение и направление которых можно легко определить., Это делает их идеальными для выбора и изменения переменных., И хотя они выполняют свою работу без проблем. Их постепенное движение — не очень увлекательное занятие.. И я. Я говорю это только потому, что недавно разобрал старый, жесткий диск. И не только я нашел довольно мощный, неодимовые магниты, но и мотор жесткого диска. Сняв с него пластины, я вытащил его из корпуса и понял, что вращение его вызывает гораздо большее удовлетворение, чем использование инкрементального энкодера.. Итак, в этом взломанном эпизоде мы узнаем, как работают двигатели жестких дисков и как их можно использовать в качестве поворотных энкодеров.. Давайте начнем. Это видео спонсируется JLCPCB., Производитель быстрых, Прототипы печатных плат для 10 лет., Загрузите файлы Gerber, чтобы получить высококачественные печатные платы по смехотворно низким ценам и сделать ваши проекты более профессиональными.. Если внимательно посмотреть на мотор, то мы можем видеть, что он имеет четыре точки прорыва сзади.. Измеряя сопротивление между всеми ними. Я заметил, что есть сопротивление 6.4 между тремя точками, пока есть низкое сопротивление 3.3 между каждой из трех точек и четвертой точкой.. Это заставило меня поверить, что двигатель имеет соединение Y, а четвертая точка отрыва — звезда..
Точка. Но конечно, также существуют другие типы двигателей с жестким диском только с тремя точками отрыва.. Если бы мы хотели создать для них звездную точку, нам пришлось бы добавить резистор с высоким сопротивлением к каждой грани и использовать точку привязки как виртуальную точку звезды., А пока вернемся к четырехпроводному двигателю.. К счастью, у меня была пара таких, так что пожертвовать одним и сломать его с небольшим усилием было не проблема. На внутренней. Мы видим, что ротор состоит из постоянного магнита с чередующейся полярностью., Пока статор состоит из медной проволоки, обернутые вокруг листов статора, для формирования катушек.. Эта конструкция почти идентична конструкции двигателя BLDC.. Итак, чтобы подтвердить мое предположение, Я подключил ESC к трем фазам мотора, не включая точку звезды и включил все это.. Как вы видете, за счет увеличения времени включения входного сигнала ESC, двигатель действительно начинает вращаться., Это доказывает, что мы на самом деле имеем дело с бесщеточным двигателем постоянного тока.. Если вам нужна дополнительная информация о том, как работает двигатель BLDC и как вы можете сделать свой собственный драйвер, для этого обязательно посмотрите мой предыдущий проект на эту тему.. Но главный вопрос все еще остается: Как определить, вращается ли он по часовой стрелке или против часовой стрелки? Чтобы найти возможное решение? Давайте откроем инкрементальный энкодер, чтобы понять, как он работает..
На внутренней. Мы видим круглый металлический диск. Он имеет узор с проводящими серебряными точками и черными непроводящими точками., А с другой стороны мы получили несколько скользящих контактов, которые так или иначе связаны с землей VCC., Вывод DT и CLK энкодера. Хотя на примере реальной жизни понять его принцип работы довольно сложно., замысел довольно легко уловить с помощью рисунка.. Сейчас, когда к энкодеру подключено пять вольт, его металлический диск также подключен к этому потенциалу напряжения, это означает, что как только мы повернем круг на один шаг по часовой стрелке. Вывод DT подключается к пяти вольтам раньше, чем вывод CLK.. И если бы мы вращались против часовой стрелки, порядок был бы наоборот., Это означает, что мы можем определить вращение и направление энкодера, проверив, какой вывод подключен к 5 сначала вольт., Аналогичный принцип можно использовать, когда речь идет о двигателе BLDC., Как мы обнаружили ранее. Его ротор состоит из чередующихся поляризованных магнитов, которые, при вращении перемещаются вдоль катушек двигателя., Это означает, что в них индуцируется напряжение., Что мы можем наблюдать, если мы соединим каждую фазу к одному входу моего осциллографа и потенциал опорного напряжения в точке звезды.. Как вы видете, вращая двигатель в любом направлении, создается трехфазное напряжение, амплитуда и частота которого пропорциональны скорости вращения.
. Если мы внимательно посмотрим на напряжения при вращении по часовой стрелке, мы видим, что последовательность L1. L2. L3, а последовательность вращения против часовой стрелки — L1 L3 L2.. Причина тому — само расположение катушек., Это позволяет нам определять вращение и направление, проверяя, в каком порядке появляются напряжения.. Сделать это, Подключил L1, L2 и L3 к аналоговым входам, 0, 1 и 2 соответственно. И точка звезды двигателя BLDC на землю Arduino Nano.. Для начинающих, Я ускорил АЦП Arduino и установить аналоговое опорное напряжение к внутреннему 1.1 V. Поскольку наведенные напряжения двигателя никогда не превышают этого значения., Затем я написал простой фрагмент кода, который проверяет, используется ли напряжение L1, и, если да, также проверяет постоянно меняющееся напряжение., будь то L2 или L3, — следующее наведенное напряжение.. Исходя из этого, серийный монитор, затем выводит, по часовой стрелке или против часовой стрелки., И после загрузки, коды открытия серийника, следить и раскручивать мотор в обоих направлениях. Вроде все, работал нормально. Но конечно, если бы вы добавили ЖК-дисплей в систему и изменили на нем переменную, в зависимости от вращения и направления двигателя, это выглядело бы намного более впечатляюще.. Сейчас, на этом мы могли бы закончить этот мини-проект и положить конец этому.. Но меня все еще беспокоило то, что мы должны многократно использовать аналого-цифровой преобразователь..
. Было бы разумнее использовать внешнее прерывание, как я сделал с традиционным поворотным энкодером. Вот почему я удалил моторные провода от Arduino и вместо этого подключил их к двум MCP602 rail to rail., операционные усилители. По этой простой схеме., Эти операционные усилители. В принципе, действуют как компараторы с небольшим гистерезисом., Это означает, что если напряжение на гранях выше, чем напряжение звезды. Выход компаратора будет тянуться к 5 V. Пока, когда лицевое напряжение ниже, чем напряжение звезды, выход будет подключен к земле.. Это также создает трехфазное напряжение., но на этот раз с тремя квадратными напряжениями.. Сюда, Я могу подключить выход компаратора L1 к контакту прерывания. Пока подключаю выходы компаратора L2 и L3 года к обычным цифровым выводам., Теперь, активировав прерывания, которые только устанавливают флаг и включают функции цифрового чтения, чтобы увидеть, на каком лице впоследствии наведено напряжение, код стал намного более гибким и отзывчивым на вращение, мотор., Последнее, что нужно сделать для меня – должен был снова прикрепить пластины и повеселиться с этим вполне удовлетворительным поворотным энкодером.. Надеюсь, вам понравилось смотреть это видео и, возможно, вы даже узнали что-то новое по пути.. Если так, не забудьте лайкнуть и подписаться.
[mam_video id = tjCJ3MlFt7g]
[adrotate banner =”2″]
[mam_tag id = 1430]
[adrotate banner =”3″]
Опубликовано в четверг декабря 13, 2018
Каждый компьютер заслуживает взлома поворотного энкодера В эпоху сенсорных экранов и емкостных кнопок, мы бы солгали, если бы сказали, что не испытывали периодической ностальгии по старым добрым временам, когда … … Продолжить чтение »Опубликовано вторник января 02, 2018
Декодирование поворотного энкодера для Arduino Electronics Weekly Удивительно, сколько программ Arduino для декодирования поворотных энкодеров начинается с чего-то вроде: “Я просмотрел все доступные эскизы поворотного энкодера и. … Продолжить чтение »Опубликовано во вторник, апрель 30, 2019
Физическая ручка для вкладок браузера HackadayЕсли вы похожи на большинство из нас, у вас сейчас открыто около двадцати вкладок браузера. Что, если бы существовал способ перемещаться по этим вкладкам с помощью физического интерфейса? … Продолжить чтение »
[adrotate banner =”4″]
[adrotate banner =”5″]
Посмотрите на мир глазами этой камеры оборудованы, змеиный робот.
Эта 3D-печатный Протез использует компьютерное зрение, чтобы настроить свою власть в зависимости от объекта.
Ks0013 keyestudio Rotary Encoder Module для ArduinoПоворотный энкодер может подсчитывать время вывода импульсов во время процесса вращения в положительном и обратном направлении, вращая.
вики: HTTPS://t.co/VrhXakh2a3 https://t.co/sjXSNgSFtX
HTTPS://t.co/VrhXakh2a3
3D печать дома
Сделай сам макро рельс
[adrotate banner =”6″]
KY-040 модуль Энкодер от 25 грн
KY-040 модуль Энкодер
Код товара: 113309
Производитель:Описание: Модуль энкодера предназначен для построения систем ввода и управления, ручка может вращаться на 360° в обе стороны+нажатие, число импульсов на оборот: 20, питание: 3-5V
Тип: Датчик
В наличии/под заказ
157 шт — склад Киев
15 шт — РАДИОМАГ-Киев
3 шт — РАДИОМАГ-Львов
19 шт — РАДИОМАГ-Харьков
7 шт — РАДИОМАГ-Одесса
1+ | 29 грн |
10+ | 25 грн |
Описание: Микроконтроллер: ATmega328P. Тип корпуса: TQFP-32. Рабочее напряжение: 5В. Входное напряжение (рекомендованное): 7-12В. Цифровых входов/выходов: 14 (из которых 6 могут быть использованы как ШИМ). Аналоговых входов: 8. Сила тока на входах/выходах: 40 мА. Сила тока для 3.3В выхода: 50 мА. Память: 32 кБ из которых 2кБ используется бутлоадером. SRAM: 2 кБ. EEPROM: 1 кБ. Частота: 16 МГц
Тип: Отладочная плата 712 шт — склад Киев
24 шт — РАДИОМАГ-Киев
23 шт — РАДИОМАГ-Львов
29 шт — РАДИОМАГ-Харьков
23 шт — РАДИОМАГ-Одесса Конструкторы и наборы — Arduino
Описание: Модуль семисегментного 4-значного дисплея 0,36 дюйма, драйвер дисплея TM1637, I2C интерфейс, 4 семисегментные цифры и разделительные точки с общим анодом, 4 контакта подключения, регулируемая яркость дисплея: 8 уровней яркости, логические уровни 5В или 3,3В, ток потребления до 80 мА. Крепление дисплея 4-мя винтами M2.
Тип: Шилд индикация 13 шт — склад Киев
7 шт — РАДИОМАГ-Киев
3 шт — РАДИОМАГ-Львов
3 шт — РАДИОМАГ-Харьков
10 шт — РАДИОМАГ-Днепр
100 шт — ожидается Конструкторы и наборы — Arduino
Описание: Работа через I2C интерфейс, часы: минуты: секунды AM/PM, Day Month, Date — Year, учет високосных лет, точный календарь до 2100 года, есть 1Гц вывод, 56 байт энергонезависимой памяти доступно пользователю.
Тип: Шилд память 30 шт — склад Киев
5 шт — РАДИОМАГ-Киев
4 шт — РАДИОМАГ-Львов
5 шт — РАДИОМАГ-Харьков
5 шт — РАДИОМАГ-Одесса
Автономная навигация на Arduino. Энкодеры / Блог им. lokki / RoboCraft. Роботы? Это просто!
Сегодня большая часть поста будет посвящена энкодерам на основе фотоинтеррапторов:Поехали!
Вместо вступления
Не прошло еще месяца с тех пор, как меня затянула эта зараза. Постоянно читаю разные блоги и форумы в поисках информации и вдохновения. Меня сначала сильно удивляло то, что многие люди берут уже готовые алгоритмы, готовые конструкции и просто соединяя это вместе получают работающую штуку. Но ведь они при этом сами ничего не придумали, серым веществом не поскрипели! Просто собрали конструктор по инструкции. Типа как собрать шкаф из Икеи, мозг особо не нужен. Но потом посмотрел на то, что получается у меня — готовая ардуина, готовый моторшилд, готовая платформа с гусеницами. Даже датчики куплены уже с готовой обвязкой. Зато код пишу с нуля и разбираюсь с каждой библиотекой 🙂 Так что каждому свое — кому-то с паяльником печатные платы фигачить, а кому-то логику и алгоритмы продумывать…
Энкодеры
… Ну не привык я, работая постоянно с компьютерами, что данные бывают неточными. У нас, программистов, если сказано, что Х=5, то Х равно именно 5, а не 4,95 или 5,1567. Если данные с компаса мне еще удалось приручить — благо точность там большая не нужна, то с акселерометром я так и не смог совладать. Погрешность настолько велика, что даже на идеально ровной поверхности и равномерном движении посчитать расстояние — это задача не из самых легких. Что уж говорить о трясущемся танке, который к тому же еще может наклоняться в разные стороны из-за неровностей «дороги»? Ведь там на «помощь» расчетам приходит вектор притяжения земли, который начинает вмешиваться в показания. В общем — лес дремучий.
Но расстояние считать все равно надо, и как бы я не хотел уйти от энкодеров — прийдется их применять. Так не будем тянуть и приступим-с.
Внимательно осмотрев имеющийся редуктор, изучив все технологические отверстия в его корпусе, я решил делать энкодеры на основе фотоинтеррапторов. Штуки эти весьма не дороги даже с «обвязкой», поэтому, не долго думая, заказываем сразу парочку в ближайшем магазине.
Шестеренки в редукторе — белые, значит будем наклеивать на них черные полоски. Разрешения в один импульс на оборот для наших целей вполне достаточно — не мудрствуем с шаблонами, а просто заклеиваем половинку черной бумагой:
И вторую тоже:
Мне очень повезло — отверстие для шурупа на плате фотоинтерраптора идеально село на ось. Плюс две прорези в пластике корпуса редуктора, и энкодер готов.
Собираем все в кучу, сочиняем тестовый скеч и радуемся:
(превый столбец — количество оборотов шестеренки, второй — усредненное значение с датчика)
Повороты и отклонения от курса я буду считать по компасу, так что второй энкодер нужен будет для коррекции ошибок.
Вместо заключения:
Количество датчиков растет, всем нужно питание, все хотят подключиться к ардуине. Кучи «скруток» уже начинают бесить, серва от резких поворотов постоянно выдергивает сонар из ардуины, да и эстетический вопрос всего этого нагромождения проводов остается открыт.
[фотография вырезана цензурой]
Так что беремся за паяльник… Вот так уже значительно лучше! =)
Ну-с, на сегодня хватит. В следующий раз нас ждет увлекательное тестирование и сравнение ультразвукового сонара и инфракрасного дальномера. Что же больше подойдет для «зрения» моего робота?
PS с вопросом.
Уже совсем чуть-чуть остается до того момента, как робот поедет и я начну тестировать и отлаживать алгоритмы навигации. Уже виден свет в конце туннеля 🙂 По итогам я сделаю один большой пост про все этапы разработки и обязательно сниму видео. Нужно ли подробно описывать принципы работы используемых сенсоров, выкладывать тестовые скечи, графики и прочую мелочевку? В принципе, это все достаточно легко гуглится, кое что даже на русском, но формат сайта вроде как располагает к подробным описаниям. Хотя если все описывать подробно — итоговый пост будет огромен 🙂
Как использовать поворотный энкодер с 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 ЖК-дисплей 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 для поворотного энкодера, детали
Привет, ребята !!!!! мы здесь, чтобы помочь вам узнать, как запустить код arduino поворотного энкодера и как читать вывод.Итак, начнем.
Энкодер — это устройство, которое можно бесконечно вращать. Простые, вроде этого, не имеют реального состояния, как горшок, поэтому при запуске вы не сможете просто прочитать данные с кодировщика, к которому он повернут.
Что такое кодировщик?При измерении положения энкодер — это устройство, которое может обнаруживать и преобразовывать механическое движение в аналоговый или цифровой кодированный выходной сигнал. В частности, он измеряет положение, а скорость; ускорение и направление могут быть получены из положения как линейного, так и вращательного движения.
Но поскольку вы можете продолжать вращать его, у него все равно нет ни начала, ни середины, ни конца. Однако, если вы отслеживаете это вращение в коде, вы можете использовать его как вход ручки, который вы можете поворачивать вверх или вниз сколько угодно.
Как работает энкодер?Большинство простых энкодеров, подобных этому, используют только 4 контакта, один из которых заземлен, а другой — Vcc. Эти два других контакта меняют состояние и всегда имеют высокий или низкий уровень, поэтому они могут иметь всего 4 комбинации.00, 01, 10 и 11.
Это известно как 2-битный код Грея. Итак, когда вы его поворачиваете, arduino может сказать… Ну, вы были на 01, а теперь на 00, так что вы двигаетесь в этом направлении. Или вы были в 01, а теперь у вас 10, так что вы, должно быть, переехали в другую сторону. Вы можете видеть, что этот кодировщик имеет 5 контактов, а 2 других — это простой переключатель, который включается, когда вы нажимаете.
Звучит очень просто, и это вроде как есть, но что мы можем сделать, так это каждый раз, когда значение изменяется, мы можем проверять, в каком направлении оно двигалось.Затем, если мы увеличиваем значение каждый раз, когда оно поворачивается в одну сторону, и уменьшаем его, когда мы перемещаем один шаг в другой.
Мы можем отслеживать, насколько он переместился с момента нашего начала. Так что если вам нужна ручка, которая может поворачиваться до 11, это ваш парень. (Обещаю, здесь есть двойной каламбур)
Итак, действительно забавная вещь о поворотном энкодере — это то, что он работает; нам нужно знать каждый раз, когда эти ценности меняются. Это может быть сложно, потому что, если arduino что-то делает, например, delay (1000) или что-то еще, мы пропустим изменение.
Итак, нам нужен способ сказать Arduino: «Меня не волнует, что вы делаете или когда вы это делаете; если вы видите, что любой из этих двух контактов меняет состояние, вы бросаете все и обращаетесь к ним ». Для этого нам нужны прерывания.
Прерывания — это чудо Пины прерывания— это специальные пины, которые могут остановить ваш Arduino и заставить его сделать что-то еще, прежде чем он двинется дальше. Поскольку это особые контакты, вы получаете только несколько из них на вашем Arduino; но эти булавки могут следить за любым ИЗМЕНЕНИЕМ (от высокого к низкому / от низкого к высокому), ПАДЕНИЯ (от высокого к низкому) или ВОССТАНОВЛЕНИЯ (от низкого к высокому).
Вы можете прикрепить к этим контактам функции прерывания, чтобы, если произойдет изменение; он все отбросит и запустит эту функцию. Это становится напуганным, поскольку ломает базовую линейную природу цикла Arduino; но может стать самым мощным, когда вы освоите его.
Любые глобальные переменные, которые используются внутри этих функций, имеют особое имя. Их не зря называют изменчивыми переменными. Их ценности могут измениться в любой момент.
Итак, если вы дважды используете volatile в своем цикле, это может быть не то же самое значение во второй раз, если оно было изменено во время функции прерывания.
Поворотный энкодер Описание кода Arduino:Чтобы отслеживать поворотный энкодер, мы сделаем кое-что, что будет выглядеть очень странно, так что потерпите меня.
У энкодера 2 цифровых контакта: ВЫСОКИЙ (1) или НИЗКИЙ (0), верно? Если мы рассматриваем контакты как двоичные, мы читаем их как 00, 01, 10 или 11. Последовательность, которую кодер выводит при вращении по часовой стрелке, — это 00, 01, 11, 10 повторений.
Итак, если у вас есть показание 01, следующее показание может быть либо 00, либо 11 в зависимости от направления вращения ручки.Итак, добавив предыдущее закодированное значение к началу текущего закодированного значения; мы получаем 1 из 8 возможных чисел (0001, 0010, 0100, 0111, 1000, 1011, 1110 и 1101) 1101, 0100, 0010 и 1011 — все это означает движение по курку. 1110, 0111, 0001 и 1000 — все против часовой стрелки.
Итак, теперь мы можем сказать следующее: (сумма — это последнее чтение + текущее чтение)
if (sum == 0b1101 || sum == 0b0100 || sum == 0b0010 || sum == 0b1011) encoderValue ++; // движение по часовой стрелке if (sum == 0b1110 || sum == 0b0111 || sum == 0b0001 || sum == 0b1000) encoderValue -; // движение против часовой стрелки
Адам Мейер | Ардуино + rotary_encoder
Первое, что делает каждый, когда начинает работать с Arduino, — это подключить его к потенциометру и регулировать яркость и светодиоды или перемещать сервопривод.Ну, поворотный энкодер может выглядеть как потенциометр, но кроме ручки, это полная противоположность.
Энкодер — это устройство, которое можно бесконечно вращать. Простые, такие как тот, который я получил от sparkfun, не имеют реального состояния, как горшок, поэтому при запуске вы не сможете просто читать с кодировщика, к которому он обращен. Но поскольку вы можете продолжать вращать его, в любом случае у него нет ни начала, ни середины, ни конца. Однако, если вы отслеживаете это вращение в коде, вы можете использовать его как вход ручки, который вы можете поворачивать вверх или вниз сколько угодно.
На большинстве поворотных энкодеров, когда вы их вращаете, вы чувствуете неровность. Они известны как ступеньки, и у большинства поворотных энкодеров, таких как этот парень, их около 12 на один оборот. Но у некоторых их 200 и больше. По сути, этот шаг представляет собой минимальную величину, на которую вы можете повернуть энкодер, чтобы зарегистрировать любое изменение.
Большинство простых энкодеров, подобных этому, используют только 3 контакта, и один из них заземлен. Эти два других контакта меняют состояние и всегда имеют высокий или низкий уровень, поэтому они могут иметь всего 4 комбинации.00, 01, 10 и 11. Это известно как 2-битный код Грея. Итак, когда вы его поворачиваете, ардуино может сказать … Ну, вы были на 01, а теперь на 00, так что вы двигаетесь в этом направлении. Или вы были в 01, а теперь у вас 10, так что вы, должно быть, переехали в другую сторону. Вы можете видеть, что этот кодировщик имеет 5 контактов, а 2 других — это простой переключатель, который включается, когда вы нажимаете. (см. вторую иллюстрацию справа)
Звучит очень просто, и это вроде как есть, но что мы можем сделать, так это каждый раз, когда значение изменяется, мы можем проверять, в каком направлении оно двигалось.Затем, если мы увеличиваем значение каждый раз, когда оно поворачивается в одну сторону, и уменьшаем его, когда мы перемещаем один шаг в другой, мы можем отслеживать, насколько оно переместилось с момента начала. Так что если вам нужна ручка, которая может поворачиваться до 11, это ваш парень. (Обещаю, здесь есть двойной каламбур)
Итак, действительно забавная вещь о поворотном энкодере заключается в том, что для его работы нам нужно знать каждый раз, когда эти значения меняются. Это может быть сложно, потому что, если arduino что-то делает, например, delay (1000) или что-то еще, мы пропустим изменение.Итак, нам нужен способ сказать Arduino: «Мне все равно, что вы делаете или когда вы это делаете, если вы видите, что любой из этих двух контактов меняет состояние, вы бросаете все и обращаетесь к ним». Для этого нам нужны прерывания.
Подключение только для энкодера без встроенной кнопки
Подключение энкодера и встроенной кнопки
Прерывания — это чудо
Пины прерывания— это специальные пины, которые могут остановить ваш Arduino и заставить его сделать что-то еще, прежде чем он двинется дальше.Поскольку это специальные контакты, вы получаете только несколько из них на своем Arduino, но эти контакты могут отслеживать любое ИЗМЕНЕНИЕ (от высокого к низкому / от низкого к высокому), ПАДЕНИЕ (от высокого к низкому) или ПОДНИМАЮЩЕЕ (от низкого к высокому). Вы можете прикрепить к этим контактам функции прерывания, поэтому, если произойдет изменение, он все отбросит и запустит эту функцию. Он становится напуганным, поскольку ломает базовую линейную природу цикла Arduino, но может стать самым мощным, когда вы его освоите.
Любые глобальные переменные, которые используются внутри этих функций, имеют особое имя.Их не зря называют изменчивыми переменными. Их ценности могут измениться в любой момент. Поэтому, если вы дважды используете volatile в своем цикле, это может быть не то же самое значение во второй раз, если оно было изменено во время функции прерывания.
Код
Чтобы отслеживать поворотный энкодер, мы сделаем кое-что, что будет выглядеть очень странно, так что потерпите меня. У энкодера есть 2 цифровых контакта: ВЫСОКИЙ (1) или НИЗКИЙ (0), верно? Если мы рассматриваем контакты как двоичные, мы читаем их как 00, 01, 10 или 11.При вращении по часовой стрелке кодер выводит последовательность 00, 01, 11, 10 повторений. Таким образом, если у вас есть показание 01, следующее показание может быть либо 00, либо 11 в зависимости от направления вращения ручки. Таким образом, добавляя предыдущее закодированное значение к началу текущего закодированного значения, мы получаем 1 из 8 возможных чисел (0001, 0010, 0100, 0111, 1000, 1011, 1110 и 1101) 1101, 0100, 0010 и 1011 — все это означает движение по часовой стрелке. . 1110, 0111, 0001 и 1000 — все против часовой стрелки.
Итак, теперь мы можем сказать следующее: (сумма — это последнее чтение + текущее чтение)
если (сумма == 0b1101 || сумма == 0b0100 || сумма == 0b0010 || сумма == 0b1011) encoderValue ++; // движение по часовой стрелке if (sum == 0b1110 || sum == 0b0111 || sum == 0b0001 || sum == 0b1000) encoderValue -; // движение против часовой стрелки
Если бы мы хотели рассматривать двоичные числа как десятичные числа, мы могли бы даже сократить это до следующего:
если (сумма == 13 || сумма == 4 || сумма == 2 || сумма == 11) encoderValue ++; если (сумма == 14 || сумма == 7 || сумма == 1 || сумма == 8) encoderValue -;
Без кода кнопки
// Из статьи билдра: http: // bildr.org / 2012/08 / поворотный-энкодер-arduino / // эти пины не могут быть изменены 2/3 - специальные пины int encoderPin1 = 2; int encoderPin2 = 3; volatile int lastEncoded = 0; изменчивый длинный кодировщикValue = 0; long lastencoderValue = 0; int lastMSB = 0; int lastLSB = 0; void setup () { Serial.begin (9600); pinMode (encoderPin1, ВХОД); pinMode (encoderPin2, ВХОД); digitalWrite (encoderPin1, HIGH); // включаем подтягивающий резистор digitalWrite (encoderPin2, HIGH); // включаем подтягивающий резистор // вызываем updateEncoder (), когда видно изменение максимума / минимума // при прерывании 0 (вывод 2) или прерывании 1 (вывод 3) attachInterrupt (0, updateEncoder, ИЗМЕНИТЬ); attachInterrupt (1, updateEncoder, ИЗМЕНИТЬ); } void loop () { // Делаем что-нибудь здесь Серийный.println (encoderValue); задержка (1000); // только здесь, чтобы замедлить вывод и показать, что он будет работать даже во время задержки } void updateEncoder () { int MSB = digitalRead (encoderPin1); // MSB = старший бит int LSB = digitalRead (encoderPin2); // LSB = младший значащий бит int encoded = (MSB 1) | LSB; // преобразование значения 2-х выводов в одно число int sum = (lastEncoded 2) | закодировано; // добавляем его к предыдущему закодированному значению если (сумма == 0b1101 || сумма == 0b0100 || сумма == 0b0010 || сумма == 0b1011) encoderValue ++; if (sum == 0b1110 || sum == 0b0111 || sum == 0b0001 || sum == 0b1000) encoderValue -; lastEncoded = закодировано; // сохраняем это значение для следующего раза }
С кодом кнопки
// Из статьи билдра: http: // bildr.org / 2012/08 / поворотный-энкодер-arduino / // эти пины не могут быть изменены 2/3 - специальные пины int encoderPin1 = 2; int encoderPin2 = 3; int encoderSwitchPin = 4; // кнопочный переключатель volatile int lastEncoded = 0; изменчивый длинный кодировщикValue = 0; long lastencoderValue = 0; int lastMSB = 0; int lastLSB = 0; void setup () { Serial.begin (9600); pinMode (encoderPin1, ВХОД); pinMode (encoderPin2, ВХОД); pinMode (encoderSwitchPin, ВХОД); digitalWrite (encoderPin1, HIGH); // включаем подтягивающий резистор digitalWrite (encoderPin2, HIGH); // включаем подтягивающий резистор digitalWrite (encoderSwitchPin, HIGH); // включаем подтягивающий резистор // вызываем updateEncoder (), когда видно изменение максимума / минимума // при прерывании 0 (вывод 2) или прерывании 1 (вывод 3) attachInterrupt (0, updateEncoder, ИЗМЕНИТЬ); attachInterrupt (1, updateEncoder, ИЗМЕНИТЬ); } void loop () { // Делаем что-нибудь здесь if (digitalRead (encoderSwitchPin2)) { // кнопка не нажимается }еще{ // кнопка нажата } Серийный.println (encoderValue); задержка (1000); // только здесь, чтобы замедлить вывод и показать, что он будет работать даже во время задержки } void updateEncoder () { int MSB = digitalRead (encoderPin1); // MSB = старший бит int LSB = digitalRead (encoderPin2); // LSB = младший значащий бит int encoded = (MSB 1) | LSB; // преобразование значения 2-х выводов в одно число int sum = (lastEncoded 2) | закодировано; // добавляем его к предыдущему закодированному значению если (сумма == 0b1101 || сумма == 0b0100 || сумма == 0b0010 || сумма == 0b1011) encoderValue ++; if (sum == 0b1110 || sum == 0b0111 || sum == 0b0001 || sum == 0b1000) encoderValue -; lastEncoded = закодировано; // сохраняем это значение для следующего раза }
проектов Arduino: как читать поворотные энкодеры Arduino
Поворотные декодеры существуют уже много лет.Их можно использовать в робототехнике и особенно в двигателях для определения направления и скорости. Более того, вы можете использовать их для фотообъективов, трекболов, оптомеханических мышей и, конечно же, для проектов Arduino. Здесь мы и поговорим об этом.
Основные компоненты поворотных энкодеров:
- Макетная плата
- Перемычки
- Модуль поворотного энкодера
- USB-кабель
Большинство базовых энкодеров имеют 3 контакта, и один из них является общим. Остальные контакты могут изменять состояние и быть низкими или высокими, поэтому вы можете получить всего 4 комбинации — 00, 01, 10 и 11.Поэтому, когда вы его поворачиваете, ваш контроллер может сказать, что вы были на 00, а теперь на 01. Некоторые кодировщики могут иметь 4 или 5 контактов, и с ними немного сложнее работать.
Как работают энкодеры?
Давайте посмотрим на его принципы работы. Он генерирует прямоугольные импульсы — энкодер имеет диск с контактными зонами, которые подключены к контактам A, B и C. Первые два контакта начинают контактировать с контактом C, когда диск начинает пошагово вращаться. Затем генерируются два выходных сигнала прямоугольной формы.
Вы можете использовать любой из выходных сигналов для определения положения поворота и подсчета количества импульсов. Однако, если вы также хотите знать направление, вам необходимо одновременно оценить оба результата.
Например, если у вас есть два выходных сигнала, смещенных по фазе на 90 градусов, и ваш энкодер вращается по часовой стрелке, выход B находится за выходом A. Сначала это может показаться сбивающим с толку, но когда вы попробуете это один раз, вы видите, это очень просто.
Существует простой способ запрограммировать контроллер Arduino на считывание направления вращения и положения энкодера. Если ваш RT вращается против часовой стрелки, сигналы будут иметь равные значения. Таким образом, если вы будете считать шаги каждый раз, когда сигнал меняется с низкого на высокий или с высокого на низкий, вы увидите, что выходные сигналы имеют равные значения.
Как видите, вместо старых аналоговых потенциометров можно использовать RT в качестве альтернативы. Ротационные регистраторы очень похожи, и вы можете использовать их как датчики вращения.Они непрерывно вращаются и делятся на сегменты, что упрощает работу с ними.
Каждое движение по часовой или против часовой стрелки приводит к тому, что переключатели закрываются или открываются, и каждый сегмент вызывает ощущение щелчка. Существуют разные модели RT, и современные имеют нажимной переключатель мгновенного действия с 3 контактами на одной стороне (A и B — кодирующие контакты, а C — заземляющий или общий контакт) и 2 контакта на другой стороне (переключатель N / O. контакты) для переключателя.
Что такое прерывания?
Существуют специальные контакты, которые могут остановить ваш Arduino в любой момент, чтобы он сделал что-то еще, прежде чем перейти к следующему шагу.Эти специальные контакты являются контактами прерывания, и хотя вы можете получить только несколько из них на Arduino, эти контакты могут следить за падением, подъемом или изменением.
Когда вы прикрепляете к контактам функцию прерывания, она перестанет делать все и запустится для новой функции, если произойдет изменение. Несмотря на то, что для новичков это может быть слишком много, поскольку это нарушает линейный характер петель Arduino, это очень мощный инструмент для экспертов.
Как вы, возможно, знаете, глобальные переменные, используемые в функциях, имеют имя — volatile variables.Они могут изменить свою ценность, когда вам это нужно. Например, если вы используете изменчивую переменную несколько раз в одном цикле, она может иметь другое значение во второй раз, если произошли изменения в функции прерывания.
Одна из наиболее распространенных проблем при чтении кодировщиков заключается в том, что довольно часто, если ваш контроллер выполняет что-то еще, например, выполняет код, пользователь начинает поворачивать ручку. Если это произойдет, как вы можете быстро проверить входные линии и не пропустить подъем или падение?
Дело в том, что если вы пропустите подъем или падение, вы потеряете положение энкодера.Более того, вы не сможете интерпретировать направление. К счастью, вы можете использовать прерывания для выполнения этой задачи.
Как следует из названия, прерывания приостанавливают текущее действие. Если код выполняется и событие квалифицируется как управляемое прерыванием (например, вы можете указать, что прерывание происходит, когда сигнал переходит с высокого на низкий), то все, что происходит, будет приостановлено, и будет выполнен новый код.
В результате пользователю не нужно контролировать синхронизацию кода, что очень полезно, потому что часто приходится выполнять серию операций и что-то легко упустить.
Как подключить поворотный энкодер к Arduino?
Когда вам нужно подключить RT к Arduino, вы должны добавить средство защиты от сбоев в настройках, чтобы избежать ошибок кодирования. Это важно, потому что в поворотном энкодере есть два металлических контакта, и они могут касаться друг друга неточно, как в механическом переключателе. В результате он будет проявляться в виде шагов назад при продвижении вперед или в виде пропущенных шагов. Чтобы избежать этого, вы можете использовать RC-фильтр или добавить строку кода в программном обеспечении.
Чтобы сделать все еще проще, для пользователей Arduino доступна библиотека кодировщика, которая сделает за вас тяжелую работу и определит шаг и направление. Все, что вам нужно сделать, это добавить библиотеку в текущий проект Arduino и убедиться, что вы используете правильные контакты. Затем определите контакты для библиотеки и выполните кодирование.
Вам также могут понравиться:
Поворотный энкодерс Arduino — все знают
A Rotary Encoder — это электромеханическое устройство, преобразующее угловое перемещение вала в аналоговый или цифровой код.
Поворотные энкодеры можно найти в радиооборудовании, таком как любительское радио или портативное устройство, где для настройки на правильную частоту требуется непрерывное или непрерывное вращение на 360 0 .В этом проекте работа Rotary Encoder объясняется с помощью Arduino. Следующие разделы посвящены введению в энкодеры, схемы и принцип работы.
Схема Выберите следующий набор проектов Arduino, которые вы хотите изучить в Electronicshub : Arduino Projects »Требуется оборудование
- Поворотный энкодер
- Arduino UNO
- ЖК-дисплей
Введение в датчики вращения
Поворотный энкодер — это устройство ввода, которое предоставляет информацию о направлении и величине вращения ручки.С поворотными энкодерами связан переключатель выбора, который можно активировать, нажав ручку.
Обычно используемый датчик угла поворота — это инкрементальный датчик угла поворота. Этот тип обеспечивает мгновенный результат о вращающемся валу, генерируя два выходных сигнала прямоугольной формы, которые не совпадают по фазе на 90 градусов друг с другом.
Кодировщик вращения должен кодировать штифты A и B, чтобы обеспечить либо высокий, либо низкий выходной сигнал в зависимости от вращения и направления вала.
Основную функцию углового энкодера можно объяснить, рассматривая его как комбинацию двух переключателей, которые замыкаются или размыкаются из-за вращения вала.
По мере вращения вала переключатели замыкаются и размыкаются. Если выходы обрабатываются как двоичные, то при вращении по часовой стрелке выходы в A и B будут 00, 01, 11 и 10.
Для вращения против часовой стрелки или против часовой стрелки, выходы будут 10, 11, 01 и 00. Форма импульсов в обоих направлениях вращения показана ниже.
Для проверки последовательности выходные контакты энкодера подключены к двум светодиодам, как показано на следующей схеме.
Когда ручка поворотного энкодера вращается по часовой стрелке или против часовой стрелки, светодиоды загораются в соответствии с вышеупомянутой последовательностью.
Схема поворотного энкодера с Arduino
Поворотный энкодерсостоит из пяти контактов: двух кодирующих контактов A и B (или CLK и DT), одного контакта для переключателя и двух контактов источника питания для Vcc и GND.
Два кодирующих контакта и контакт переключателя выдают цифровые сигналы. Они подключены к контактам 2, 3 и 4 Arduino.
Для отображения объектов меню используется ЖК-дисплей 20X4. Подключения аналогичны подключению ЖК-дисплея 16X2. RS и E ЖК-дисплея подключены к контактам 5 и 6 Arduino.
Контакты данных, то есть D4 — D7 (контакты 11-14) ЖК-дисплея, подключены к контактам 7-10 Arduino.
Рабочие
Датчики вращенияобеспечивают бесконечное вращение в любом направлении с помощью кнопки выбора (нажатие на ручку). Такую уникальную функциональность можно использовать в приложениях выбора «меню», где вращение вала в любом направлении позволит нам просматривать содержимое меню, а нажатие кнопки позволит нам выбрать выделенное содержимое меню.
В этом проекте работа поворотного энкодера в качестве переключателя меню объясняется с помощью Arduino и ЖК-дисплея. Схема работы следующая.
Код для Arduino написан в соответствии с приложением и загружен в Arduino. При включении на ЖК-дисплее отображается список значений по горизонтали.
При вращении вала поворотного энкодера по часовой стрелке пункты меню будут меняться слева направо, причем каждый пункт будет подсвечиваться при каждом повороте ручки.
Когда будет достигнут последний элемент, дальнейшее вращение не приведет к каким-либо действиям, но последний элемент будет выделен.
Если ручку повернуть против часовой стрелки, пункты меню будут выделены в обратном направлении. Выделенный элемент будет отображаться под списком элементов.
Если мы хотим выбрать любой выделенный элемент, нажимается кнопка поворотного энкодера. Он отображается как выбранный элемент, и выбранный элемент остается таким, пока не будет выбран следующий элемент.
Код
ПРИМЕЧАНИЕ
- Работа поворотного энкодера объясняется в этом проекте с помощью обычной операции переключения и в качестве переключателя меню с использованием Arduino.
- Может быть реализован как переключатель выбора для меню с несколькими уровнями иерархии в каждом подменю.
- Если уровней иерархии в содержимом меню больше, то в Arduino необходимо использовать концепцию прерываний. Датчики вращения
- могут использоваться для точного управления сервоприводами и шаговыми двигателями.
Управление двигателем постоянного тока с помощью энкодера и 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;
quad + = 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);
}
}
// конец кода.
Использование кодировщиков с библиотекой Arduino
Введение
RoboClaw обычно использует энкодеры в схеме автоматического управления с обратной связью для поддержания скорости и положения. Однако бывают ситуации, когда требуется больше настраиваемого управления от микроконтроллера. В этом документе описывается использование Arduino для чтения, установки и сброса кодировщиков с помощью библиотеки BasicMicro Arduino.
Материалы
(1) Контроллер мотора RoboClaw
(1) Arduino Uno
(1) Редукторный двигатель Pololu с квадратичным энкодером * **
(3) от женщины к мужчине 0.Кабель-перемычка 1 ″
(1) компьютер с установленной BasicMicro Motion Studio
(1) кабель micro USB для RoboClaw
(1) USB-кабель для Arduino
(1) маленькая отвертка
* Ссылка на мотор-редуктор Pololu с энкодером** Обратите внимание, что любой двигатель со встроенным квадратовым энкодером может использоваться для этой заметки по применению
.Давайте начнем
1. Выполните это примечание к приложению до шага 17, чтобы настроить RoboClaw и Arduino.Использование функций библиотеки Arduino
Ниже приведен список всех функций кодировщика, доступных в библиотеке Arduino.Обратите внимание, что все функции вызываются для существующего объекта RoboClaw, созданного ранее. Примечания к приложению об основах использования библиотеки, включая создание объекта RoboClaw, доступны здесь.Считывающие энкодеры
Для чтения текущих значений энкодера используются две функции. Согласно их названию, один используется для чтения канала 1, а другой — канала 2. Этим функциям необходимо передать только адрес RoboClaw.
ReadEncM1 (адрес)ReadEncM2 (адрес)
Пример кода:
В этом примере «ReadEncM1» вызывается в объекте RoboClaw для чтения текущего счетчика кодировщика, адрес оборудования RoboClaw передается в качестве единственного аргумента функции.Возвращенное значение сохраняется в переменной «motor_1_count».
int motor_1_count = roboclaw.ReadEncM1 (0x80)
Скорость чтения
Эти две функции используются для считывания скорости двигателя в счетчиках энкодера, для каждого канала есть одна функция. Единственный аргумент этих функций — адрес RoboClaw.
ReadSpeedM1 (адрес)ReadSpeedM2 (адрес)
Пример кода:
В этом примере «ReadSpeedM1» вызывается в объекте RoboClaw для считывания скорости двигателя 1 в счетчиках энкодера.Единственный аргумент, передаваемый функции, — это адрес RoboClaw.
int motor_1_speed = roboclaw.ReadSpeedM1 (0x80)
Установка энкодеров
Эти функции устанавливают счетчик кодировщика соответствующего канала на заданное значение. Адрес RoboClaw и устанавливаемое значение должны быть переданы им.
SetEncM1 (адрес, значение)SetEncM2 (адрес, val)
Пример кода:
В этом примере счетчик кодера канала 1 установлен на 10 000 отсчетов.Передается адрес RoboClaw и счетчик, который нужно установить.
roboclaw.SetEncM1 (0x80,10000)
Сброс энкодеров
Передача адреса RoboClaw этой функции и ее вызов приводит к обнулению обоих каналов кодировщика.
Пример кода:
В этом примере счетчики кодировщика для обоих каналов устанавливаются на ноль путем вызова «ResetEncoders» с адресом RoboClaw, переданным функции.
motor_1_count = roboclaw.ResetEncoders (0x80)
Команды положения
Эти функции используются для установки двигателя для данного канала в определенное положение в счетах энкодера. Адрес RoboClaw, значение ускорения, значение замедления, скорость, положение и значение флага должны быть переданы в функции. Значение флага определяет, будет ли команда выполнена немедленно или сохранена для последующего выполнения. Значение «0» сохраняет команду, а значение «1» немедленно запускает команду позиционирования.Версия этих функций «M1M2» позволяет устанавливать оба двигателя независимо и одновременно.
SpeedAccelDeccelPositionM1 (адрес, ускорение, скорость, замедление, положение, флаг)SpeedAccelDeccelPositionM2 (адрес, ускорение, скорость, замедление, положение, флаг)
SpeedAccelDeccelPositionM1M2 (адрес, Accel1, Speed1, Deccel1, Position1, Accel2, Speed2, Deccel2, Position2, Flag)
Пример кода:
В этом примере положение двигателя 1 установлено на 15000 отсчетов.Адрес RoboClaw передается функции как первый аргумент. Значения ускорения и замедления установлены на 10000, а значение скорости установлено на 2000. Аргумент флага установлен на «1», так что команда выполняется немедленно.
motor_1_count = roboclaw.SpeedAccelDeccelPositionM1 (0x80,10000,2000,10000,15000,1)
Запуск образца кода
Доступен образец кода, демонстрирующий использование функций, подробно описанных в этом примечании к приложению.Следуйте приведенным ниже инструкциям, чтобы получить код и протестировать его с Arduino и RoboClaw, настроенными на шаге 1.
1. Загрузите библиотеку RoboClaw Arduino отсюда.2. Добавьте библиотеку RoboClaw Arduino в IDE Arduino. Обратите внимание на место, куда была загружена библиотека RoboClaw, а затем откройте IDE Arduino. В верхнем меню нажмите «Эскиз» и выберите «Включить библиотеку», а затем «Добавить .Zip-библиотеку». В открывшемся диалоговом окне выберите загруженный файл .zip и нажмите «Открыть».Библиотека теперь добавлена в установку Arduino, и на нее можно ссылаться по эскизам.
Рисунок 1
Диалог для добавления библиотек .zip в установку Arduino IDE.
3. Загрузите или клонируйте образец кода для этой заметки по применению отсюда.Если Git установлен на используемом компьютере, его можно клонировать, введя следующую команду в терминале.
git clone https: // github.com / basicmicro / using_encoders_arduino.git
4. Откройте пример кода в среде Arduino IDE и загрузите его на плату Arduino.
5. Теперь Arduino должна быть занята запуском примера кода и подключенным RoboClaw.
Объяснение кода примера
Пример кода начинается со считывания значения кодировщика, подключенного к каналу 1, и печати значения на последовательном мониторе. Затем он переходит к установке счетчика кодировщика канала 1 на 10000, считывает значение и распечатывает его, чтобы продемонстрировать, что установка значения работает.Оттуда он запускает двигатель 1, работающий на половинной скорости, а затем считывает и печатает значение скорости, после чего двигатель останавливается. Затем оба энкодера устанавливаются в ноль путем вызова «ResetEncoders», и значение энкодера считывается и распечатывается. Наконец, вызывается команда положения для позиционирования двигателя 1 на позицию 15000 отсчетов.
Устранение неполадок на примере
Если RoboClaw не отвечает на команды, отправляемые Arduino, необходимо проверить несколько вещей. Сначала убедитесь, что между Arduino и RoboClaw есть заземление, без него две платы не смогут правильно обмениваться данными.