Site Loader

Работаем в 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);
  }
}

Библиотека прекрасно работает. Проверено!

Маленькая и быстрая библиотека для энкодера

? LiveJournal
  • Find more
    • Communities
    • RSS Reader
  • Shop
  • Help
Login
  • Login
  • CREATE BLOG Join
  • English (en)
    • English (en)
    • Русский (ru)
    • Українська (uk)
    • Français (fr)
    • Português (pt)
    • español (es)

Маленькая и быстрая библиотека для энкодера: elchupanibrei — LiveJournal

Давно хотел разобраться с «крутилкой». Наконец появилось время и желание это сделать. В паутине нашел три метода обработки кода грея для энкодера.

Первый самый примитивный. Использует тонны if-else и програмный debounce на millis(). Работает медленно. Вот скриншот такой копипасты.


счетчик энкодера у курильщика с ардуино головного мозга
С переходными процессами в этом примере разбираются без таймера. Тупо ждут микросекунду. Шах и мат перфекционисты. Вторая особенность — вешают функцию onA() на первое прерывание, а onB() на второе. Зачем? Никто не запрещает читать encoder_A_Pin вместе с encoder_B_Pin при срабатывании внешнего прерывания на onA(). Освободившийся interrupt можно использовать для кнопки или второго энкодера.

Второй метод на основе массива всех возможных состояний энкодера. А их не много не мало 16 штук. Достоинства. Простота кода. Чуть-чуть быстрее if-else. Автоматический debounce — все ложные состояния отбрасываются. Правда при сильном дребезге отбрасываются и истиные значения — энкодер кликает, а счетчик не срабатывает. Лечится добавлением 100nF/0.1μF конденсаторов между ногами энкодера и землей.


таблица состояний энкодера
Самый продвинутый — это доработанный второй. Из 16 состояний удаляются бесполезные. Какая нам польза от знания где крутилка до/после клика? На основе оставшихся 4-х комбинаций с помощью булевой алгебры и switch-case делается простейший счетчик. Все! Правда есть нюанс. Функция digitalRead() оказалась настолько медленной, что ATmega328 не успевал читать значения pinA и pinB при срабатывании внешнего прерывания с условием CHANGE на pin A. Поэтому для AVR пришлось использовать прерывание по Timer1. Каждые 0.01 секунд срабатывает таймер и AVR не спеша читает состояние пинов и обновляет счетчик энкодера. Если у AVR pinA и pinB повесить на разные прерывания, как сделанно в примере у курильщика с ардуино головного мозга, то проблемы нет и можно забыть о Timer1. Для быстрых STM32 и ESP8266 все работает на внешнем прерывании — как только энкодер начинает крутиться, срабатывает внешнее прерывание на pinA, считываются значения pinA и pinB и обновляется позиция энкодера.

счетчик энкодера здорового человека
Библиотека подсчитывает только физические клики, оставляя все лишнее за бортом. Внутренняя подтяжка включена, но дополнительные резисторы приветствуются. Без них, на длинных проводах и сильных помехах могут появляться ложные срабатывания. У популярного шилда KY-040 10КОм уже есть на плате.

Чтобы подавить дребезг и избежать пропуск кликов нужно добавить конденсаторы:
— 100nF/0.1μF между A и землей
— 100nF/0.1μF между B и землей
— 100nF/0.1μF между кнопкой и землей

БЕЗ КОНДЕНСАТОРОВ БИБЛИОТЕКА РАБОТАТЬ НЕ БУДЕТ!!!

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


железный debounce и дополнительная подтяжка

расшифровка контактов KY-040

UDP: Переписал код. Теперь еще быстрее, меньше в размере и винарнее. Для кого-то недостаток, для кого-то достоинство, но теперь без аппаратных прерываний не работает. Спасибо товарищу kotyamba за консультацию и знания.

UDP2: Пришлось опять переписать код. Как правильно заметил ksergey9 в комментариях, наше с kotyamba творение более менее нормально работало на медленном AVR. Как только его запускали на быстрых Cortex все превращалось в тыкву. Тепрь все ОК. Лично проверил на Arduino Nano 16Mhz, STM32 Blue Pill и ESP8266.

UDP3: Воспользовался ООП и путем наследования сделал тяжелый класс с float — «RotaryEncoderAdvanced». В нем можно прописывать количество шагов на клик, минимальное и максимальное значение. Получился законченный велосипед. Естественно легкий класс «RotaryEncoder» никуда не делся и работает без изменений.

UDP4: Переделал «RotaryEncoderAdvanced» на template, прощай float. Библиотека может занимать меньше памяти — все зависит от типа используемых переменных. Добавил возможность на лету менять — step per click, minimum value и maximum value. Управляем множеством различных значений с помощью одного энкодера!!!

Забирать как всегда тут.

Список библиотек Arduino | AlexGyver Technologies

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

Список составлен для библиотек, подходящих для UNO, NANO, MEGA, то есть тут нет мощных библиотек для DUE и ZERO подобных плат. Источники:

Время, таймеры


  • Time – счётчик времени для Ардуино, считает часы-минуты-месяцы и всё такое. Описание
  • RTCTimer – таймер для работы в паре с RTC модулем
  • GyverTimer – моя версия таймера с миллис, рекомендую! Есть мс и мкс таймеры, режим периода и таймаута, улучшенный алгоритм счёта периодов.
  • Chrono – ещё библиотека “таймера с millis()” для эффективного построения логики своего кода
  • elapsedMillis – ещё один простой таймер с millis()
  • buildTime – библиотека для получения даты и времени компиляции в явном виде
  • TimeLord – библиотека, позволяющая узнать время восхода/заката Солнца и Луны, лунные фазы, звёздное время и проч. на основе географического положения
  • GyverTimer012 – лёгкая библиотека для управления прерываниями на всех трёх таймерах ATmega328
    .
    Заменена библиотекой GyverTimers
  • GyverTimers – библиотека для управления прерываниями по всем таймерам на ATmega328 и ATmega2560 с возможностью отдельной настройки каналов. Объективно лучше следующих трёх библиотек.
  • TimerOne – библиотека для удобного ручного контроля за Таймером 1 (прерывания, ШИМ, и.т.д.)
  • MsTimer2 – библиотека для удобного ручного контроля за Таймером 2. Есть версия FlexiTimer2, которая чем-то лучше.
  • TimerThree – библиотека для удобного ручного контроля за Таймером 3

Коммуникация, интерфейсы


  • Firmata – стандартная библиотека для общения с компьютером по протоколу Firmata. Описание
  • SoftwareSerial – стандартная библиотека для создания TTL Serial на любых двух пинах, позволяет создать дополнительный порт для общения с Bluetooth/GPS/GSM и прочими модулями с Serial коммуникацией.
  • AltSoftSerial – самая лучшая версия софтварного Serial, использует системный таймер
  • SerialCommand – лёгкая библиотека для общения через порт при помощи команд
  • CmdMessenger – мощная библиотека для общения через Serial порт, со своим парсером и кучей приколюх. Описание
  • EasyTransfer – библиотека для общения двух Ардуинок через последовательный порт
  • Streaming – вывод в порт “в стиле C++” при помощи оператора <<
  • OneWire – библиотека для общения по протоколу one wire, например с датчиками температуры DHT18b20. Ардуино может быть “slave” для общения, читать тут
  • SerialControl – набор примеров для управления состояниями пинов при помощи Serial команд. Описание
  • MiniPirate – более мощная версия SerialControl, позволяет командами в порт крутить серво, сканировать i2c и многое другое!
  • MIDI_library – библиотека для работы с музыкальными устройствами по протоколу MIDI (через Serial, подходит любая Ардуина)
  • MIDI – MIDI библиотека от великого PaulStoffregen (через Serial, подходит любая Ардуина)
  • arcore – ещё одна библиотека для MIDI (USB-MIDI, только для Леонардо/Микро)
  • MIDIUSB – ещё одна библиотека для MIDI (USB-MIDI, только для Леонардо/Микро)
  • HIDUINO – набор инструментов для создания USB MIDI устройства
  • HID – очень мощная библиотека для создания HID устройств (мыши, клавиатуры, геймпады и другие USB контроллеры)
  • ArduinoJoystickLibrary – ещё одна библиотека для создания полноценного HID геймпада на Leonardo/Micro (ATmega32U4)
  • CPPM – библиотека для организации связи по протоколу CPPM (например RC приёмник Orange R615X)
  • PPMEncoder – раскодирование и генерация PPM сигнала для RC моделей
  • TVout – библиотека для вывода графики на экран телевизора через вход AV. Описание
  • X10 – библиотека для общения по протоколу X10 по линии питания 220V. Описание тут

Некоторое железо


  • AccelStepper – более интересная и качественная замена стандартной библиотеке Stepper для контроля шаговых моторчиков. Скачать можно со страницы разработчика, или вот прямая ссылка на архив.
  • ServoSmooth – моё дополнение к стандартной библиотеке Servo, позволяющее управлять сервоприводом с настройкой максимальной скорости движения и разгона/торможения (как в AccelStepper, только для серво). Must have любого любителя серво манипуляторов!
  • CapacitiveSensor – библиотека для создания сенсорных кнопок (из пары компонентов рассыпухи). Описание
  • ADCTouchSensor – ещё одна версия библиотеки для создания сенсорных кнопок. Есть ещё одна, так, на всякий случай
  • TouchWheel – библиотека для создания сенсорных слайдеров и колец
  • Buzz – детектор присутствия на основе всего лишь одного провода! (измеряет ЭМ волны)
  • Bounce – библиотека антидребезга для кнопок и всего такого. Сомнительная полезность, но почитайте описание
  • oneButton – библиотека для расширенной работы с кнопкой. На мой взгляд неудобная
  • GyverButton – моя библиотека для расширенной работы с кнопкой. Очень много возможностей!
  • AdaEncoder – библиотека для работы с энкодерами
  • GyverEncoder – моя библиотека для энкодеров с кучей возможностей, поддерживает разные типы энкодеров
  • RTCLib – лёгкая библиотека, поддерживающая большинство RTC модулей
  • OV7670 – библиотека для работы с камерой на OV7670
  • IRremote – базовая библиотека для работы с ИК пультами и излучателями
  • IRLib – более расширенная версия для работы с ИК устройствами
  • IRLremote – самая чёткая библиотека для ИК пультов, работает через прерывания. 100% отработка пульта
  • keySweeper – почти готовый проект для перехвата нажатий с беспроводных клавиатур
  • USB_Host_Shield – позволяет Ардуине работать с геймпадами (PS, XBOX) и другими USB устройствами
  • Brain – библиотека для работы с NeuroSky ЭЭГ модулями
  • TinyGPS – шустрая библиотека для работы с GPS модулями
  • GyverRGB – моя библиотека для работы с RGB светодиодами и лентами
  • FadeLED – библиотека для плавного (ШИМ) мигания светодиодами с разными периодами
  • CurrentTransformer – измерение силы тока при помощи трансформатора (катушки) на проводе. Читай: токовые клещи
  • LiquidCrystal-I2C – библиотека для LCD дисплеев с I2C контроллером. Разработчик – fdebrabander
  • LiquidCrystal-I2C – библиотека для LCD дисплеев с I2C контроллером. Разработчик – johnrickman. Предыдущая вроде бы лучше
  • LiquidTWI2 – быстрая библиотека для LCD дисплеев на контроллерах MCP23008 или MCP23017
  • LCD_1602_RUS – библиотека русского шрифта для LCD дисплеев
  • LCD_1602_RUS_ALL – новая версия предыдущей библиотеки с поддержкой украинского языка
  • u8glib – библиотека для работы с монохромными LCD и OLED дисплеями
  • ucglib – библиотека для работы с цветными LCD и OLED дисплеями
  • Adafruit_SSD1306 – ещё одна библиотека для OLED дисплеев
  • Adafruit-GFX-Library – дополнение для adafruit библиотек дисплеев, позволяет выводить графику
  • SSD1306Ascii – самодостаточная и очень лёгкая библиотека для вывода текста на OLEDы
  • NeoPixelBus – библиотека для работы с адресной светодиодной лентой, адаптированная под esp8266 (NodeMCU, Wemos и др.). 

Работа с данными, фильтры


  • FFT – быстрое преобразование Фурье (раскладывание звука в спектр)
  • fix_FFT – говорят пофикшенная библиотека FFT
  • FHT – быстрое преобразование Хартли (как Фурье, только ещё быстрее)
  • GyverFilters – несколько очень эффективных фильтров данных (бегущее среднее, медиана, упрощённый одномерный Калман, AB фильтр
  • TinyEKF – быстрый облегчённый вариант фильтра Калмана
  • filtering-library – несколько фильтров данных
  • Gaussian – фильтр Гаусса
  • aJson – работа с данными в формате JSON. Есть ещё Arduino JSON библиотека, и парсер потока JSON данных
  • PID – самая известная библиотека ПИД регулятора. Для неё есть дополнение – автонастройка (автотюн) параметров регулятора
  • GyverPID – моя версия PID регулятора, на мой взгляд более компактная и удобная в использовании
  • GyverRelay – библиотека релейного регулятора с гистерезисом и обратной связью по производной
  • CryptoSuite – несколько примеров шифрования данных известными шифрами
  • AESlib – библиотека для работы с AES шифрованием
  • LinkedList – работа с типом данных “связанный список”, читайте на Хабре
  • FixedPointsArduino – работа с типом данных “с фиксированной точкой” (десятичные дроби, но быстрее вычисляются)

Системные штуки

Работа с памятью


  • EEPROM – стандартная библиотека для работы с EEPROM. Рекомендую использовать более удобную EEPROMex
  • EEPROMex – более удобная библиотека для работы с EEPROM памятью. Описание
  • EEPROMWearLevel – “менеджер” EEPROM памяти, следит за количеством перезаписи ячеек
  • MemoryFree – библиотека для изучения текущей занятости SRAM памяти. Описание
  • EEWrap – библиотека позволяет использовать EEPROM как оперативную память (SRAM), т.е. для хранения переменных
  • Flash – библиотека позволяет удобно хранить/читать любые данные во Flash памяти микроконтроллера (массивы, строки с текстом…)
  • PGMWrap – ещё одна мощная библиотека для записи/чтения данных во Flash память
  • optiboot_flash – модифицированный загрузчик OptiBoot, в который добавлена возможность работать с Flash памятью во время выполнения кода (считай расширение SRAM за счёт Flash!)

Работа с пинами


  • DirectIO – более быстрая альтернатива стандартных функций чтения/записи состояния пина
  • AnalogReadFast – быстрый вариант чтения аналогового пина (21 мкс)
  • CyberLib – крутой сборник быстрых аналогов функциям Ардуино, читайте описание. Примечание: автор этой открытой библиотеки не любит, когда ей пользуются в своих проектах, так что аккуратнее.
  • GyverHacks – сборник быстрых аналогов функций Ардуино, не таких быстрых, как у CyberLib, но более привычный в использовании. Изменение частоты/разрядности ШИМ
  • SoftPWM – делаем софтверный ШИМ на разных пинах
  • PWM – библиотека, позволяющая задавать частоту ШИМ
  • GyverPWM – мощная библиотека для расширенной генерации ШИМ (только для ATmega328)
  • PinChangeInt – делаем прерывания на любом пине. Как так? Есть описание
  • PinChangeInterrupt – ещё одна библиотека, позволяющая ловить прерывания на любом пине
  • analogComp – работа с аналоговым компаратором микроконтроллера

Глубинные настройки


  • GyverHacks – помимо описанного выше, тут есть некоторые глубинные настройки, измерение опорного напряжения и температуры ядра (для ATmega328)
  • GyverTimer012 – лёгкая библиотека для управления прерываниями на всех трёх таймерах ATmega328
  • directTimers – библиотека для расширенного ручного управления таймерами на ATmega328, раскрывает все возможности и настройки таймеров
  • directADC – библиотека для расширенного ручного управления АЦП и компаратором на ATmega328, раскрывает все возможности и настройки АЦП
  • GyverPower – самая лёгкая и универсальная библиотека для управления сном, периферией и системным клоком
  • Low-Power – мощная библиотека для управления энергосбережением и спящим режимом
  • narcoleptic – ещё одна очень простая в использовании библиотека спящего режима
  • SoftwareReset – доступ к перезагрузке Ардуино “из скетча”
  • WatchDog – библиотека для работы со “сторожевым псом”, перезагружающим МК в случае зависания. Ещё вариант
  • Adafruit-Trinket-USB – библиотека эмуляции USB для ATtiny85 (плата Digispark). Имитирует клавиатуру/мышь
  • TrinketHidCombo_MEGA328 – библиотека эмуляции USB для ATmega328 (платы UNO/Nano/Pro Mini). Имитирует клавиатуру/мышь. Пример есть на форуме. Оригинальный пост на форуме. Скачать с FTP сайта. Скачать с облака Mail. Скачать с Яндекс Диска.

Ядра и загрузчики


  • GyverCore – мой вариант ядра для плат с ATmega168/328 на борту (UNO, Nano, Mini), основан на оригинальном ядре Arduino, стандартные функции многократно ускорены и облегчены. Рекомендуется для тяжёлых и требовательных к скорости проектов.
  • optiBoot – крутой загрузчик для Ардуино, более быстрый, лёгкий и функциональный
  • HoodLoader – загрузчик для МК 16u2 с поддержкой HID (читай: превращает оригинальную UNO в аналог Leonardo с поддержкой HID)
  • ArduinoXInput_AVR – ядро для плат на базе ATmega32U4 (Leonardo, Micro), превращающее плату в контроллер с поддержкой XInput (геймпад от Xbox). Для создания игрового контроллера также понадобится библиотека ArduinoXInput. Есть гайд на английском
  • GyverCore – лёгкое и быстрое ядро для ATmega328 (Arduino NANO), которое разработали мы с коллегой. Лёгкое и быстрое, возможность работы без загрузчика и широкий выбор вариантов тактирования и вообще системных настроек.
  • MiniCore – ядро для поддержки микроконтроллеров ATmega328, ATmega168, ATmega88, ATmega48 и ATmega8, основано на optiBoot. Одна из основных фишек – поддержка внутреннего тактового генератора!
  • MicroCore – ядро для поддержки микроконтроллеров ATtiny13, ATtiny13A and ATtiny13V с выбором частоты внутреннего тактового генератора
  • ATTinyCore – ядро для поддержки микроконтроллеров ATtiny 441/841, 44/84, 45/85, 461/861, 48/88, 828, 1634, 87, 167, опять же на базе крутого OptiBoot.

Менеджеры задач и потоков


  • ArduinoThread – библиотека для создания “потоков” – отдельно выполняемых задач по таймеру или как-то ещё
  • EventManager – библиотека для работы с событиями (опять-же таймер-вашего-кода)
  • Arduino-fsm – ещё один менеджер задач, позволяющий писать чёткий понятный код с кучей задач, выполняющихся по таймеру
  • Automaton – ещё один фреймворк для написания скетчей с задачами и таймерами. Есть вики
  • FreeRTOS – операционная система реального времени для Ардуино. Задачи, потоки…
  • Arduino_FreeRTOS – ещё одна версия RTOS
  • GyverRTOS – моя простенькая RTOS с режимом сна (на основе библиотеки Low-Power)
  • DeepSleepScheduler – менеджер задач со встроенным режимом сна

Звук и речь


  • Talkie – библиотека синтеза звука речи для создания говорящих девайсов
  • Mozzi – большая библиотека для генерации различных звуков
  • uSpeech – библиотека распознавания речи
  • TMRpcm – библиотека для воспроизведения звуковых файлов .WAV с карты памяти
  • toneAC – более продвинутая версия стандартной tone() для генерации звуковой частоты. Скачать сами файлы можно тут
  • DFPlayer – библиотека для работы с MP3 модулем DFPlayer mini
  • WTV020SD16P – работа со звуковым модулем WTV020SD16P

Разное


  • menusystem – мощный инструмент для создания меню с кучей примеров
  • LCD_Menu – готовый инструмент для создания меню на LCD Дисплеях
  • LiquidMenu – ещё один фреймворк для создания меню на LCD
  • MENWIZ – ещё один готовый вариант меню для LCD
  • MicroDebug – библиотека для удобной отладки кода
  • hoverboard-hack – немного не в тему, но это инструкция по хакингу платы ховерборда для использования её в своих целях

Важные страницы


4.8 / 5 ( 21 голос )

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

Научно-технические

Главная  Статьи, аналитика  Научно-технические

«Научно-технические статьи» — подборка научно-технических статей радиоэлектронной тематики: новинки электронных компонентов, научные разработки в области радиотехники и электроники, статьи по истории развития радиотехники и электроники, новые технологии и методы построения и разработки радиоэлектронных устройств, перспективные технологии будущего, аспекты и динамика развития всех направлений радиотехники и электроники, обзоры выставок радиоэлектронной тематики.


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

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

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

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

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

С анимацией.

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

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

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

Или эта.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Автор: RadioRadar

Дата публикации: 10.05.2018

Мнения читателей

Нет комментариев. Ваш комментарий будет первый.

Вы можете оставить свой комментарий, мнение или вопрос по приведенному выше материалу:


Энкодер, потенциометр, FLASH-I2C — Описания, примеры, подключение к Arduino

Общие сведения:

Trema модуль — Энкодер, потенциометр, I2C-flash — является устройством ввода данных с подключением по шине I2С. У модуля есть программируемый выход, значительно расширяющий его возможности.

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

Модуль относится к серии «Flash», а значит к одной шине I2C можно подключить более 100 модулей, так как их адрес на шине I2C (по умолчанию 0x09), хранящийся в энергонезависимой памяти, можно менять программно.

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

Видео:

Спецификация:

  • Напряжение питания: 3,3 В или 5 В (постоянного тока).
  • Потребляемый ток: до 10 мА (без нагрузки на программируемом выходе).
  • Интерфейс: I2C.
  • Скорость шины I2C: 100 кбит/с.
  • Адрес на шине I2C: устанавливается программно (по умолчанию 0x09).
  • Уровень логической 1 на линиях шины I2C: 3,3 В (толерантны к 5 В).
  • Уровень логической 1 на выходе Signal: 3,3 В.
  • Аналоговый уровень на выходе Signal: от 0 до 3,3 В.
  • Разрешение ШИМ: 8 бит.
  • Разрешение ЦАП: 8 бит (ШИМ + RC-фильтр).
  • Частота ШИМ: устанавливается программно от 1 до 12000 Гц (по умолчанию 1,5 кГц).
  • Рабочая температура: от -20 до +70 °С.
  • Габариты: 30 х 30 мм.
  • Вес: 12 г.

Все модули линейки «Trema» выполнены в одном формате

У модуля имеются две колодки выводов: разъём I2C (GND, Vcc, SDA, SCL) и разъём D/A (GND, Vcc, Signal).

  • SCL — вход/выход линии тактирования шины I2C.
  • SDA — вход/выход линии данных шины I2C.
  • Vcc — вход питания 3,3 или 5 В.
  • GND — общий вывод питания.
  • Signal — программируемый выход модуля.

Модуль подключается к Arduino по шине I2C.

Устройства которыми модуль управляет в автономном режиме, подключаются к колодке D/A.

Подключение:

Модуль подключается к аппаратной или программной шине I2C Arduino и имеет адрес 0x68. Для удобства подключения, предлагаем воспользоваться TremaShield.