Энкодер alps распиновка

Содержание

SDR и Ретро от RA3PKJ

Вы на странице: Поговорим о энкодерах

Поговорим о энкодерах

Форум http://ra3pkj.keyforum.ru (кликнуть). Если блокируют, пользуйтесь TroywellVPN

Чистые платы для различного применения от R3KBL(кликнуть)

Общая информация

Аппаратное управление SDR можно строить на основе энкодеров, как в случае валкодера, так и остальных крутилок (громкость, порог АРУ, полоса, расстройка и т.д.).

Как известно, энкодеры по типу выходного сигнала бывают абсолютные и инкрементные.

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

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

Конструктивно энкодеры бывают контактные, оптические и магнитные. Самые дешёвые — контактные энкодеры.

Таким образом, самые дешёвые энкодеры — инкрементные контактные. Они хорошо подходят для крутилок типа громкость, расстройка и т.п.

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

Энкодеры фирмы Bourns. Сайт http://www.bourns.com

Контактные энкодеры фирмы Bourns:

Оптические энкодеры фирмы Bourns:

Магнитные энкодеры фирмы Bourns:

Энкодеры фирмы Alps Electric. Сайт http://www.alps.com/

Инкрементные энкодеры фирмы Alps Electric:

Что выбрать?

Для простых крутилок достаточно иметь энкодеры с количеством импульсов на оборот 12. 24, т.к. после учетверения в микроконтроллере (если учетверение предусмотрено) получим 48. 96 шагов на оборот.

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

Исходя из минимума цен можно рекомендовать для простых крутилок например энкодер PEC12-4220F-S0024 фирмы Bourns — инкрементный контактный, с кнопкой (кнопка срабатывает при нажатии на торец оси), 24 импульса на оборот, пластмассовая ось:

Detent Option — наличие или отсутствие щелчков при вращении оси. Standart Shaft Length — высота корпуса с осью (см. даташит). Switch Configuration — наличие или отсутствие кнопки.

Буква F в обозначении указывает на изолированную ось (т.е. пластмассовая).

Также можно рекомендовать энкодер EC12E24204A8 фирмы Alps Electric — инкрементный контактный, без кнопки, 24 импульса на оборот, пластмассовая ось. Его цена примерно в 1,5. 2 раза меньше чем у предыдущего:

К сожалению, фирма Alps Electric не отражает в названии энкодера геометрическую высоту корпуса с осью (по крайней мере я не заметил), в отличие от предыдущей фирмы Bourns.

На сайте Alps Electric нет pdf-файлов, поэтому для выбора конкретного типа энкодера (количество импульсов на оборот, высота корпуса с осью) проследуйте на сайт производителя (см. ссылку на сайт выше). Там же можно найти энкодеры рассматриваемой серии EC12 с кнопкой.

Типоразмеры энкодеров данного исполнения разных фирм

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

Энкодеры для валкодера

Энкодеры для валкодера должны иметь количество импульсов на оборот в диапазоне 64. 100. После учетверения в микроконтроллере (если учетверение предусмотрено) получим 256. 400 шагов на оборот. Иметь энкодер выше 100 импульсов в этом случае нет смысла — плотность перестройки будет лишней. Кому-то может показаться, что энкодер с количеством 100 импульсов на оборот это многовато. Возможно, что и так. Тогда 64 импульса будет самое то. Но лично мне нравится количество импульсов выше, чем 64. Будьте готовы, что энкодер для валкодера влетит Вам в копейку.

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

Источник

Как работает инкрементальный энкодер и как его подключить к Arduino

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

Существует два типа энкодеров: абсолютные энкодеры и инкрементальные энкодеры. В данной статье мы будем использовать инкрементальный энкодер.

Ранее на нашем сайте мы уже рассматривали подключение инкрементального энкодера к плате Arduino, но эта статья более свежая и значительно более подробная. Также на нашем сайте есть статьи про подключение инкрементального энкодера к другим микроконтроллерам:

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

  1. Плата Arduino Uno (купить на AliExpress).
  2. Инкрементальный энкодер (купить на AliExpress).

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

Распиновка инкрементального энкодера

Модуль инкрементального энкодера содержит 5 контактов: GND, +(VCC), SW(Switch), DT и CLK. Все эти контакты являются цифровыми, за исключением контактов VCC и Ground. Назначение контактов (распиновка) инкрементального энкодера представлена на следующем рисунке.

GND – контакт общего провода (земли) инкрементального энкодера, в нашем проекте его необходимо подключить к общему проводу (ground pin) платы Arduino.

VCC – контакт для подачи питания на инкрементальный энкодер, его необходимо подключать к источнику напряжения питания 5V или 3.3V.

SW (switch pin) – контакт переключения энкодера. Инкрементальный энкодер, который мы используем, содержит внутри себя кнопку, которая активируется при нажатии на верхний край его рукоятки (оси). В активном состоянии эта кнопка формирует уровень LOW.

DT – данный контакт представляет собой фактически то же самое что и контакт CLK, но последовательность импульсов на нем сдвинута по фазе на 90 градусов относительно контакта CLK.

CLK – главный контакт модуля инкрементального энкодера. Каждый раз при вращении рукоятки выходной импульс на нем сменяет свое состояние с High на Low.

Как работает инкрементальный энкодер

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

При вращении оси энкодера его контакты Output A и Output B вступают в контакт с его пластиной в определенном порядке, который зависит от направления вращения оси энкодера. Если ось энкодера вращается по часовой стрелке, то сначала с пластиной соединяется output A, а потом output B. Если ось энкодера вращается против часовой стрелки, то все происходит с точностью наоборот. Таким образом, при любом направлении вращения оси энкодера сигналы на его выходах output A и output B сдвинуты на до градусов относительно друг друга.

На представленной анимации если мы вращаем ось энкодера по часовой стрелке, контакт A подключается первым, а потом подключается контакт B. Отслеживая какой контакт подключился к пластине первым мы можем определить направление вращения оси энкодера и, соответственно, мы можем инкрементировать или декрементировать состояние счетчика в нашей программе.

Компоненты модуля инкрементального энкодера

Это очень дешевый и простой в использовании модуль, который может быть использован в разнообразных приложениях. В зависимости от направления вращения своей оси он генерирует последовательность цифровых сигналов на своих контактах DATA и clock. Если импульсы начинаются с контакта data, а импульсы на контакте CLK сдвинуты относительно него на 90 градусов, это значит что ось энкодера вращается по часовой стрелке, иначе она вращается против часовой стрелки.

Если вы посмотрите внимательно на модуль инкрементального энкодера, то вы увидите, что на его печатной плате сравнительно мало элементов: на фронтальной части мы видим рукоятку энкодера и контакты, а на тыльной части только подтягивающие резисторы. Фактически, инкрементальный энкодер – это механическое устройство, способное работать с уровнями напряжения 3.3V и 5V.

Наиболее часто задаваемые вопросы про инкрементальный энкодер

Где применяются инкрементальные энкодеры?
Достаточно часто они применяются для управления скоростью и направлением движения ленты транспортёра. Также они востребованы в системах распределения товаров на складах, системах обработки багажа и упаковочных системах.

Какие типы энкодеров существуют?
Энкодеры выпускаются 4-х основных типов: механические, оптические, магнитные и электромагнитные.

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

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

Что такое джиттер энкодера?
Джиттер (дрожание) сигнала энкодера заключается в непостоянстве формы импульсов на выходах двух каналов энкодера относительно друг друга, что приводит к нежелательному смещению импульса вперед или назад.

Схема модуля инкрементального энкодера

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

Схема проекта

Схема подключения инкрементального энкодера к плате Arduino представлена на следующем рисунке.

Как видите, схема подключения достаточно проста, необходимо всего лишь подключить контакты CLK и DT инкрементального энкодера к контактам внешних прерываний D2 и D3 платы Arduino. Также необходимо подключить контакт SW энкодера к контакту D4 платы Arduino – этот контакт мы также будем конфигурировать для обработки внешнего прерывания.

Внешний вид собранной конструкции проекта представлен на следующем рисунке.

Объяснение программы для Arduino

Полный код программы приведен в конце статьи, здесь же мы кратко рассмотрим его основные фрагменты.

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

Первым делом в программе мы подключим необходимые библиотеки и назначим контактам платы Arduino, к которым подключены контакты энкодера, осмысленные имена.

Источник

Как работает поворотный энкодер. Взаимодействие с Ардуино

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

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

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

Поворотные энкодеры против потенциометров

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

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

Как работают поворотные энкодеры

Внутри энкодера находится диск с прорезями, подключенный к общему контакту «C», и два контакта «A» и «B», как показано ниже:

Когда вы поворачиваете ручку, выводы «A» и «B» входят в контакт с общим контактом «C» в определенном порядке в соответствии с направлением, в котором вы поворачиваете ручку.

Когда они вступают в контакт с выводом «С», они вырабатывают сигналы. Эти сигналы сдвинуты по фазе на 90° друг относительно друга, поскольку один вывод входит в контакт раньше другого:

Когда вы поворачиваете ручку по часовой стрелке, сначала подключается контакт «A», а затем контакт «B». Когда вы поворачиваете ручку против часовой стрелки, сначала подключается контакт «B», а затем контакт «A».

Отслеживая последовательность замыкания и размыкания с контактом «C», мы можем определить в каком направлении была повернута ручка энкодера. Вы можете сделать это, просто наблюдая за состоянием «B» в момент когда «A» меняет состояние.

Когда сигнал на выводе «А» меняет состояние, то:

  • если B! = A, то ручка повернута по часовой стрелке:

  • если B = A, то ручка повернута против часовой стрелки:

Распиновка поворотного энкодера

Распиновка у модуля поворотного энкодера следующая:

  • GND — земля.
  • VCC — питание обычно 3,3В или 5В.
  • SW — активная кнопка низкого уровня. Когда кнопка нажата, напряжение падает.
  • DT (выход «B») — аналогичен выходному сигналу CLK, но отстает от CLK на 90°. Этот выходной сигнал можно использовать для определения направления вращения.
  • CLK (выход A) — основной выходной импульс для определения величины вращения. Каждый раз, когда ручка поворачивается на один щелчок в любом направлении, на выводе «CLK» вырабатывается один импульс — HIGH, а затем LOW.

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

Теперь, когда мы знаем все о поворотном энкодере, пришло время применить его! Подключим поворотный энкодер к Ардуино. Подключение довольно простое. Начните с подключения вывода VCC на модуле к 5 В на Ардуино и вывода GND к GND Ардуино.

Теперь подключите контакты CLK и DT к цифровым контактам №2 и №3 Ардуино соответственно. Наконец, подключите вывод SW к цифровому выводу №4. На следующем рисунке показана схема соединения:

Скетч Ардуино — чтение поворотных энкодеров

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

Если все в порядке, то вы должны в мониторе последовательного порта увидеть следующее:

Если сообщения о вращении противоположно ожидаемому, попробуйте поменять местами строки CLK и DT.

Пояснение к коду:

Скетч начинается с объявления выводов Ардуино, к которым подключены выводы CLK, DT и SW энкодера:

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

Переменные currentStateCLK и lastStateCLK содержат состояние выхода CLK и используются для определения величины вращения. Вызываемая строка currentDir используется при печати текущего направления вращения в последовательный монитор. Переменная lastButtonPress используется для исключения дребезга контактов кнопки:

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

В функции loop() мы снова проверяем состояние CLK и сравниваем его со значением lastStateCLK. Если они разные, это означает, что ручка повернута и возник импульс. Мы также проверяем, равно ли значение currentStateCLK 1, чтобы отреагировать только на одно изменение состояния, чтобы избежать двойного счета:

Внутри оператора if мы определяем направление вращения. Для этого мы просто считываем вывод DT на модуле энкодера и сравниваем его с текущим состоянием вывода CLK.

Если они разные, это означает, что ручка повернута против часовой стрелки. Затем мы уменьшаем значение счетчика и устанавливаем его currentDir на «CCW».

Если два значения совпадают, это означает, что ручка вращается по часовой стрелке. Затем мы увеличиваем счетчик и устанавливаем currentDir на «CW»:

Затем мы отправляем наши результаты в монитор последовательного порта:

Вне оператора if мы обновляем lastStateCLK текущее состояние CLK:

Далее идет логика для считывания кнопки и предотвращения дребезга ее контактов. Сначала мы читаем текущее состояние кнопки, если оно LOW, мы ждем 50 мсек, чтобы отметить нажатие кнопки. Если кнопка остается в LOW состоянии более 50 мс, мы печатаем в монитор последовательного порта «Button pressed!«:

Затем мы все повторяем снова.

Код Ардуино с использованием прерываний

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

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

Широко распространенным решением является использование прерывания. С прерыванием вам не нужно постоянно опрашивать конкретное событие. Это освобождает Ардуино для выполнения какой-то другой работы, не пропуская событие.

Подключение энкодера к Ардуино с учетом прерывания

Поскольку большинство Ардуино (включая Ардуино UNO) имеют только два внешних прерывания, мы можем отслеживать только изменения в сигналах DT и CLK. Вот почему мы удалили соединение вывода SW с предыдущей схемы подключения.

Итак, теперь схема подключения выглядит так:

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

Код Ардуино

Ниже приведен скетч, демонстрирующий использование прерываний при чтении углового энкодера:

Обратите внимание, что основной цикл этой программы loop() остается пустым, поэтому Ардуино ничего не делает.

Между тем, эта программа отслеживает изменение значения на цифровом выводе 2 (соответствует прерыванию 0) и цифровом выводе 3 (соответствует прерыванию 1). Другими словами, программа ищет изменение напряжения с HIGH на LOW или с LOW на HIGH, которое происходит при повороте ручки.

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

За все это отвечают две строки в коде. Эта функция attachInterrupt() которая сообщает Ардуино, какой вывод следует контролировать, какой ISR выполнять, если прерывание срабатывает, и какой тип триггера следует искать.

Источник

Adblock
detector