Подключение углового кодера к Arduino Uno

В этой статье мы будем подключать угловой кодер к плате Arduino Uno. Угловой кодер используется для идентификации угла поворота оси двигателя или какого-нибудь другого устройства. Более подробную информацию об этом устройстве можно прочитать в статье про подключение углового кодера к микроконтроллеру AVR.

Подключение углового кодера к Arduino Uno: внешний вид конструкции

Принципы работы углового кодера

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

Внешний вид углового кодера

Угловой кодер имеет следующие контакты:
— земля;
— питание +5 В;
— выходной сигнал A;
— выходной сигнал B;
— контакт времени или общий контакт.

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

Последовательность импульсов на выходах углового кодера

Как показано на рисунке при вращении оси кодера по часовой стрелке сначала будет наблюдаться спад импульса на выходе A, а потом на выходе B. А при вращении оси кодера против часовой стрелки сначала будет наблюдаться спад импульса на выходе B, а потом на выходе A.

Этот спад импульса для используемого нами углового кодера с 20 позициями будет случаться каждые 360/20 = 18 градусов. Если число позиций в угловом кодере будет больше, то и обеспечиваемая им точность измерений будет также выше.

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

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

Плата Arduino Uno
Резистор 220 Ом (2 шт.)
Резистор 1 кОм
Светодиод (8 шт.)
Конденсатор 100 нФ (2 шт.)
Соединительные провода
Макетная плата

Работа схемы

Схема устройства представлена на следующем рисунке.

Схема подключения углового кодера к Arduino UnoКонденсаторы на схеме предназначены для нейтрализации эффекта дребезга контактов углового кодера. Если их не будет, то возможны ошибки в определении позиции кодера.

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

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

Исходный код программы

Принцип работы программы пояснен с помощью комментариев к соответствующим командам.

int count =0;
int x=0;
int y=0;

void setup()
{
  DDRD = 0xFF; // контакты, к которым подключены светодиоды, переключаем в режим работы на вывод данных
  PORTD =0; //записываем в эти контакты 0V
  pinMode(8,INPUT); // pin8 на ввод данных
  pinMode(9,INPUT); // pin9 на ввод данных
}

void loop()
{
  if ((digitalRead(8)==LOW)||(digitalRead(9)==LOW)) // если на каком-нибудь выходном контакте углового кодера наблюдается спад импульса
  {
  delay(10);
  if (digitalRead(8)==LOW) // если PINB идет вторым в спаде импульса (на нем LOW)
  {
  if (count<255)
  {
  count++; // увеличиваем двоичный счетчик на единицу если его значение меньше 255
  }
  }
  if (digitalRead(9)==LOW) // если PINA идет вторым в спаде импульса (на нем LOW)
  {
  if (count>0)
  {
  count—; // уменьшаем двоичный счетчик на 1 если его значение больше 0
  }
  }
  delay(100);
  while ((digitalRead(8)==LOW)&&(digitalRead(9)==LOW)) // ждем пока позиция оси углового кодера не сбросится
  {
  }
  }
  PORTD = count; // показываем значение двоичного счетчика с помощью светодиодов
}

Видео, демонстрирующее работу схемы

(1 голосов, оценка: 5,00 из 5)
Загрузка...
16 просмотров


Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *