Оглавление:
Видео: Простой поворотный декодер: 4 шага
2024 Автор: John Day | [email protected]. Последнее изменение: 2024-01-30 11:51
В этом руководстве описывается простой метод декодирования последовательного поворотного энкодера с использованием Arduino Uno R3.
Компактные программные процедуры используются для подсчета количества переходов, устранения дребезга контактов и определения направления вращения. Дополнительные компоненты и справочные таблицы не требуются.
Предоставляются версии кода с прерыванием и без прерывания.
Версия кода прерывания требует только одного вывода прерывания.
Изображений:
- На начальном фото представлен кодировщик в сборе.
- На снимке экрана показан код для версии прерывания и счет, когда вал энкодера вращается по часовой стрелке и против часовой стрелки.
- На видео показан счет при быстром вращении.
Шаг 1: Принципиальная схема
Схема подключения энкодера представлена на рис.1.
Провода перемычки припаяны непосредственно к контактам энкодера.
Поменяйте местами два синих провода, если направление счета меняется на противоположное.
Шаг 2: Список деталей
Следующие детали были получены с
- 1 только Arduino UNO R3 с USB-кабелем.
- 1 только последовательный энкодер (EC11 или аналог) с переключателем.
- 1 только ручка для вала.
- 3 только перемычки Arduino «папа-папа».
Шаг 3: теория
Последовательные поворотные энкодеры генерируют две прямоугольные волны, каждая из которых смещена на 90 градусов, как показано на рисунке 1.
Логические схемы на контакте A и контакте B различаются, когда вал вращается по часовой стрелке (CW) и против часовой стрелки (CCW) в положениях с 1 по 6.
Общие методы определения направления вращения включают:
- аппаратное обеспечение
- двойные прерывания
- таблицы поиска шаблонов
В этом проекте используется программный метод, не требующий таблиц поиска. [1]
Направление
Вместо того, чтобы смотреть на шаблоны вывода от контакта A и контакта B, давайте сосредоточимся на контакте A.
Если мы выберем контакт B после каждого перехода контакта A, мы заметим, что:
- Контакт A и контакт B имеют противоположные логические состояния, когда энкодер вращается по часовой стрелке.
- Контакт A и контакт B имеют одинаковое логическое состояние, когда энкодер вращается против часовой стрелки.
Актуальный код:
// ----- Подсчет переходов
CurrentStateA = stateContactA (); если (CurrentStateA! = LastStateA) {CurrentStateB = digitalRead (ContactB); если (CurrentStateA == CurrentStateB) Count ++; if (CurrentStateA! = CurrentStateB) Count--; LastStateA = CurrentStateA; }
Этот метод дает следующие преимущества:
- таблицы поиска не требуются
- требуется только одна линия прерывания
Debounce
Все механические энкодеры страдают от «дребезга контактов».
Если переключающий контакт не замыкается / размыкается чисто, его логическое состояние будет быстро меняться от ВЫСОКОГО до НИЗКОГО, пока переключающий контакт не установится. Это приводит к ложным подсчетам.
Одним из методов подавления дребезга контактов является добавление небольшого конденсатора к каждому контакту переключателя. Конденсатор и связанный с ним подтягивающий резистор образуют интегратор, который эффективно закорачивает высокие частоты и позволяет напряжению переключателя плавно повышаться / понижаться.
Обратной стороной этого подхода является то, что переходы могут быть пропущены, если вал энкодера вращается быстро.
Программное обеспечение Debouncing
В этом методе используются два счетчика (открытый и закрытый), которые установлены на ноль. [2]
При обнаружении перехода на контакте A:
- Постоянно опрашивайте Контакт А.
- Увеличивайте счетчик открытия и сбрасывайте счетчик закрытия всякий раз, когда Контакт A ВЫСОКИЙ.
- Увеличивайте счетчик закрытия и сбрасывайте счетчик открытия всякий раз, когда на контакте A НИЗКИЙ уровень.
- Выйдите из цикла, когда один из счетчиков достигнет заранее установленного значения. Мы эффективно ищем период устойчивого состояния после любого отскока контакта.
Актуальный код:
// ----- Контакт A для устранения дребезга
while (1) {if (digitalRead (ContactA)) {// ----- ContactA открыт-закрыт = 0; // Пустой противоположный интегратор Open ++; // Интегрируем if (Open> MaxCount) return HIGH; } else {// ----- ContactA закрыт Открыто = 0; // Пустой противоположный интегратор Closed ++; // Интегрировать if (Closed> MaxCount) return LOW; }}
Нет необходимости отключать контакт B, поскольку переходы между контактами A и B не совпадают.
Подсчет
Механический «фиксатор» эффективно удваивает ваш счет, поскольку между щелчками регистрируется два счета (см. Рис. 1).
Количество «фиксаторов» может быть определено с использованием арифметики по модулю 2, как показано ниже.
Актуальный код:
// ----- Подсчет "фиксаторов"
если (Счетчик% 2 == 0) {Serial.print ("Счетчик:"); Serial.println (Счетчик / 2); }
использованная литература
Дополнительную информацию можно найти по адресу:
[1]
howtomechatronics.com/tutorials/arduino/ro…
[2]
newbiehack.com/ButtonorSwitchDebounceinSof…
Шаг 4: Программное обеспечение
Для этого проекта требуется последняя версия IDE Ardino Uno R3 (интегрированная среда разработки), доступная по адресу
Загрузите каждый из следующих двух скетчей Arduino (прилагается)
- rotary_encoder_1.ino (версия опроса)
- rotary_encoder_2.no (версия с прерыванием)
Дважды щелкните нужную версию и следуйте инструкциям на экране.
Наслаждаться …
Щелкните здесь, чтобы просмотреть другие мои инструкции.
Рекомендуемые:
Поворотный инструмент DIY: 4 шага
Поворотный инструмент DIY: в этой инструкции я покажу вам, как вы можете взять несколько легко доступных материалов и объединить их, чтобы сделать вращающийся инструмент своими руками! Итак, приступим
Как: бесконтактный поворотный энкодер: 3 шага
Как: бесконтактный поворотный энкодер: В этом примечании по применению описывается, как спроектировать высоконадежный поворотный переключатель или энкодер с использованием Dialog GreenPAK ™. Эта конструкция переключателя является бесконтактной и поэтому не учитывает окисление и износ контактов. Он идеально подходит для использования на открытом воздухе, где есть длинные
Как сделать простой DTMF (тональный) декодер телефонной линии: 3 шага
Как сделать простой DTMF (тональный) декодер телефонной линии: это простой проект, который позволяет вам декодировать сигналы DTMF практически на любой телефонной линии. В этом уроке мы используем декодер MT8870D. Мы используем готовый тональный декодер, потому что, поверьте мне, пытаться сделать это с помощью
Поворотный энкодер - понимание и использование (Arduino / другой ΜКонтроллер): 3 шага
Поворотный энкодер - понимание и использование (Arduino / другой ΜКонтроллер): Поворотный энкодер - это электромеханическое устройство, которое преобразует вращательное движение в цифровую или аналоговую информацию. Он может вращаться по часовой стрелке или против часовой стрелки. Есть два типа угловых энкодеров: абсолютные и относительные (инкрементальные) энкодеры. Чт
(Простой) простой способ получить аналоговый / pwm-звук от Raspberry PI Zero, а также подключиться к Crt TV: 4 шага
(Простой) легкий способ получить аналоговый / pwm-звук из Raspberry PI Zero, а также подключиться к Crt TV: здесь я использовал простейший метод для передачи звука на телевизор вместе с композитным видео