Оглавление:

Поворотный энкодер - понимание и использование (Arduino / другой ΜКонтроллер): 3 шага
Поворотный энкодер - понимание и использование (Arduino / другой ΜКонтроллер): 3 шага

Видео: Поворотный энкодер - понимание и использование (Arduino / другой ΜКонтроллер): 3 шага

Видео: Поворотный энкодер - понимание и использование (Arduino / другой ΜКонтроллер): 3 шага
Видео: Уроки Arduino. Работа с энкодером 2024, Ноябрь
Anonim
Поворотный энкодер - понимание и использование (Arduino / другой ΜКонтроллер)
Поворотный энкодер - понимание и использование (Arduino / другой ΜКонтроллер)

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

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

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

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

Шаг 1: понимание выходных данных

Понимание выходных данных
Понимание выходных данных

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

Теперь нам просто нужно реализовать это в нашем µController (я использовал Arduino Nano).

Шаг 2: Постройте схему

Постройте схему
Постройте схему
Постройте схему
Постройте схему

Как я описал ранее, выходы создают ВЫСОКИЙ и НИЗКИЙ фланки. Чтобы получить чистый HIGH на выводах A и B данных µController, мы должны добавить резисторы Pull-Up. Общий контакт C идет прямо на землю для НИЗКОГО фланга.

Для получения информации о внутреннем переключателе (кнопочном) мы будем использовать два других контакта. Один из них идет в VCC, а другой - на контакт данных µController. Мы также должны добавить резистор Pull-Down к выводу данных, чтобы получить чистый НИЗКИЙ уровень.

Также можно использовать внутренние резисторы Pull-Up и Pull-Down вашего µController!

В моем случае распиновка выглядит так:

  • +3, 3V => +3, 3V (Arduino) (также возможно + 5V)
  • GND => GND (Ардуино)
  • A => Pin10
  • B =>

    Штырь

    11

  • C => GND
  • SW =>

    Штырь

    12

Шаг 3: Написание кода

int pinA = 10; // внутренний переключатель A int pinB = 11; // внутренний переключатель B int pinSW = 12; // переключение (нажатый кодировщик) int encoderPosCount = 0; // начинается с нуля, измените, если хотите

int positionval;

bool switchval; int mrotateLast; int mrotate;

void setup () {

int mrotateLast = digitalRead (pinA); Serial.begin (9600); задержка (50); }

недействительный цикл () {readencoder (); если (readswitch () == 1) {Serial.println ("Switch = 1"); }}

int readencoder () {

mrotate = digitalRead (pinA); if (mrotate! = mrotateLast) {// ручка вращается if (digitalRead (pinB)! = mrotate) {// переключатель A изменился первым -> вращение по часовой стрелке encoderPosCount ++; Serial.println («повернут по часовой стрелке»); } else {// сначала изменился переключатель B -> энкодер вращающийся против часовой стрелкиPosCount--; Serial.println («повернут против часовой стрелки»); }

Serial.print ("Позиция кодировщика:"); Serial.println (encoderPosCount); Serial.println (""); } mrotateLast = mrotate; return encoderPosCount; } bool readswitch () {

if (digitalRead (pinSW)! = 0) {// переключатель нажат

while (digitalRead (pinSW)! = 0) {} // переключатель в данный момент нажат switchval = 1; } else {switchval = 0;} // переключатель не нажат return switchval; }

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

Вот и все! Просто и полезно.

Не стесняйтесь изменять и выполнять код. Вы можете реализовать это в своем проекте.

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

Рекомендуемые: