Как установить энкодер на двигатель

Монтаж

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

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

Абсолютный энкодер устройство

Рисунок 3. Абсолютный энкодер

У этого типа ДУПа его поворотный круг поделён на определённые пронумерованные сектора, обычно идентичного размера. Во время работы он выдаёт конкретный секторный номер, в котором он непосредственно и находится. Именно поэтому данное устройство называют абсолютным. Благодаря его устройству можно легко определить угол/положение/направление энкодера относительно начального (нулевого) сектора.

Помимо этого абсолютный датчик угла не требует присоединения систем отсчёта к какому-нибудь нулевому значению. В нём используется специальный код Грея, позволяющий не допустить ошибки при работе. Из недостатков можно выделить только то, что микроконтроллер будет вынужден постоянно его переводить в двоичный код, чтобы выяснить положение ДУПа.

Использование

void tick();                             // опрос энкодера, нужно вызывать постоянно или в прерывании
void setType(boolean type);              // TYPE1 / TYPE2 - тип энкодера TYPE1 одношаговый, TYPE2 двухшаговый. Если ваш энкодер работает странно, смените тип
void setTickMode(boolean tickMode);      // MANUAL / AUTO - ручной или автоматический опрос энкодера функцией tick(). (по умолчанию ручной)
void setDirection(boolean direction);    // NORM / REVERSE - направление вращения энкодера
void setFastTimeout(int timeout);        // установка таймаута быстрого поворота
void setPinMode(bool mode);              // тип подключения энкодера, подтяжка HIGH_PULL (внутренняя) или LOW_PULL (внешняя на GND)
void setBtnPinMode(bool mode);           // тип подключения кнопки, подтяжка HIGH_PULL (внутренняя) или LOW_PULL (внешняя на GND)
 
boolean isTurn();                        // возвращает true при любом повороте, сама сбрасывается в false
boolean isRight();                       // возвращает true при повороте направо, сама сбрасывается в false
boolean isLeft();                        // возвращает true при повороте налево, сама сбрасывается в false
boolean isRightH();                      // возвращает true при удержании кнопки и повороте направо, сама сбрасывается в false
boolean isLeftH();                       // возвращает true при удержании кнопки и повороте налево, сама сбрасывается в false
boolean isFastR();                       // возвращает true при быстром повороте
boolean isFastL();                       // возвращает true при быстром повороте
 
boolean isPress();                       // возвращает true при нажатии кнопки, сама сбрасывается в false
boolean isRelease();                     // возвращает true при отпускании кнопки, сама сбрасывается в false
boolean isClick();                       // возвращает true при нажатии и отпускании кнопки, сама сбрасывается в false
boolean isHolded();                      // возвращает true при удержании кнопки, сама сбрасывается в false
boolean isHold();                        // возвращает true при удержании кнопки, НЕ СБРАСЫВАЕТСЯ
boolean isSingle();                      // возвращает true при одиночном клике (после таймаута), сама сбрасывается в false
boolean isDouble();                      // возвращает true при двойном клике, сама сбрасывается в false
void resetStates();                      // сбрасывает все is-флаги

Пример

Остальные примеры смотри в examples!

#define CLK 2
#define DT 3
#define SW 4

#include "GyverEncoder.h"
Encoder enc1(CLK, DT, SW);  // для работы c кнопкой

void setup() {
  Serial.begin(9600);
  enc1.setType(TYPE2);
}

void loop() {
	// обязательная функция отработки. Должна постоянно опрашиваться
  enc1.tick();
  
  if (enc1.isTurn()) {     // если был совершён поворот (индикатор поворота в любую сторону)
    // ваш код
  }
  
  if (enc1.isRight()) Serial.println("Right");         // если был поворот
  if (enc1.isLeft()) Serial.println("Left");
  
  if (enc1.isRightH()) Serial.println("Right holded"); // если было удержание + поворот
  if (enc1.isLeftH()) Serial.println("Left holded");
  
  //if (enc1.isPress()) Serial.println("Press");         // нажатие на кнопку (+ дебаунс)
  //if (enc1.isRelease()) Serial.println("Release");     // то же самое, что isClick
  
  if (enc1.isClick()) Serial.println("Click");         // одиночный клик
  if (enc1.isSingle()) Serial.println("Single");       // одиночный клик (с таймаутом для двойного)
  if (enc1.isDouble()) Serial.println("Double");       // двойной клик
  
  
  if (enc1.isHolded()) Serial.println("Holded");       // если была удержана и энк не поворачивался
  //if (enc1.isHold()) Serial.println("Hold");         // возвращает состояние кнопки
}

Занимательная промавтоматика. Часть 4. Энкодеры. Установка и монтаж

Типы валов

По типу валов все энкодеры делятся на 2 основных типа, это:

2. С полым (сквозным или односторонним).

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

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

Энкодеры с полым валом за счет своей конструкции обладают рядом преимуществ, таких как:

  • Меньше стоимость, за счёт меньшего количества деталей;
  • Занимает меньше места, за счет отсутствия выпирающего вала;
  • Простая установка – нет необходимости сочленять 2 вала.

Установка. Фланцы: виды и особенности.

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

1. Корпус устройства закреплён жёстко за боковую фаску или торцевой фланец, а оси соединяются с помощью гибкой муфты – для прямых валов;

2. Оси соединены жёстко цанговым зажимом, корпус преобразователя угловых перемещений крепится через гибкую скобу, либо штифт – для полых валов.

Фланцы для крепления могут быть круглыми или квадратными :

  • Круглые фланцы или гибкие способны гасить микробиения, возникающие из-за небольшого отклонения между осями энкодера и двигателя;
  • Квадратные фланцы используются, когда необходимо обеспечить максимально жёсткое крепление устройства к корпусу двигателя.

Возможные ошибки в точности считывания

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

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

Для устранения неточностей работы из-за описанных проблем, могут быть использованы:

· Гибкая муфта – компенсирует непараллельность валов и угловое рассогласование;

· Гибкие фланцы — фланцевые адаптеры отлично компенсируют асимметрию валов относительно друг друга и гасят вибраций.

Что влияет на срок службы энкодера?

На срок эксплуатации датчика угла поворота могут повлиять следующие факторы:

  • Скорость вращения;
  • Температура;
  • Вибрация;
  • Нагрузка на вал.

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

Влияния вибрации можно скомпенсировать, применив специальные гибкие муфты и фланцы, описанные ранее.

Нагрузка на вал в первую очередь будет зависеть от правильной установки — от того насколько точно совпадают оси валов энкодера и двигателя. Для этого надо четко представлять, где и как будет установлен датчика угла поворота.

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

Hardware Requirements

Encoders have 2 signals, which must be connected to 2 pins. There are three
options.

  1. Best Performance: Both signals connect to interrupt pins.
  2. Good Performance: First signal connects to an interrupt pin, second to a non-interrupt pin.
  3. Low Performance: Both signals connect to non-interrupt pins,
    .
Board InterruptPins LED Pin(do not use)
Teensy 4.0 — 4.1 All Digital Pins 13
Teensy 3.0 — 3.6 All Digital Pins 13
Teensy LC 2 — 12, 14, 15, 20 — 23 13
Teensy 2.0 5, 6, 7, 8 11
Teensy 1.0 0, 1, 2, 3, 4, 6, 7, 16
Teensy++ 2.0 0, 1, 2, 3, 18, 19, 36, 37 6
Teensy++ 1.0 0, 1, 2, 3, 18, 19, 36, 37
Arduino Due All Digital Pins 13
Arduino Uno 2, 3 13
Arduino Leonardo 0, 1, 2, 3 13
Arduino Mega 2, 3, 18, 19, 20, 21 13
Sanguino 2, 10, 11

Low cost encoders only connect their pins to ground. Encoder will activate the
on-chip pullup resistors. If you connect lengthy wires, adding 1K pullup resistors
may provide a better signal.

Монтаж и подключение датчиков поворота

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

Важно прочно закрепить корпус датчика при монтаже

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

Варианты подключения

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

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

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

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

После подключения желательно проверить все мультиметром.

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


Рисунок 2. Инкрементный энкодер Имея более простую конструкцию, преобразователь формирует импульсы, благодаря которым устройство приёма информации определяет нынешнее положение объекта, подсчитывая счётчиком число импульсов. Сразу после приведения данного вида ДУПа в действие положение интересующего объекта (вала) неизвестно. Для подключения системы отсчёта непосредственно к отсчётному началу такие датчики оснащены нулевой меткой. Через них валу необходимо пройти после соответствующего включения устройства.

Из недостатков данного вида датчиков можно выделить то, что определить пропуск импульсов от преобразователя не представляется возможным. Это соответственно является причиной накопления ошибки при выявлении поворотного угла объекта (пока он не пройдёт нуль-метку). Для выявления направления поворота используется пара измерительных каналов – косинусный и синусный. В них одинаковые импульсные последовательности перемещены ровно на 90 градусов относительно обоих каналов.

Ввод текста на Ардуино с помощью энкодера

Для этого занятия нам потребуется:

  • плата Arduino Uno / Arduino Nano / Arduino Mega;
  • цифровой энкодер (модуль KY-040);
  • дисплей LCD 1602 (по желанию);
  • провода «папа-мама».


Схема подключения энкодера (KY-040) к Ардуино Уно

Encoder Arduino Uno Arduino Nano Arduino Mega
GND GND GND GND
+ 5V 5V 5V
SW 6 6 6
DT 4 4 4
CLC 2 2 2

Для первого примера программы следует подключить энкодер к Ардуино, согласно схеме размещенной выше, и установить библиотеку RotaryEncoder.h. Библиотеки можно скачать на нашем сайте здесь. Вся информация будет выводится на монитор порта Arduino IDE. А окончательный вариант строки String сохранится в переменную stroka. Большую часть настроек в программе можно менять по своему усмотрению.

Скетч. Ввод текста энкодером на Ардуино

#include "RotaryEncoder.h"      // библиотека для энкодера
RotaryEncoder encoder(4, 2);  // пины подключение энкодера (DT, CLK)
#define SW 6                              // пин подключения порты SW энкодера

byte scale = 5;  // указываем сколько символов должно быть в строке

// создаем массив из 39 символов - его можно увеличивать и уменьшать
char massiv = {
  'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'G', 'K', 'L', 'M',
  'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z',
  ' ', '-', '/', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9'
};

String simvol;
String stroka;
byte w;
int pos;
int newPos;
boolean buttonWasUp = true;

void setup() {
   Serial.begin(9600);                       // подключаем монитор порта
   pinMode(SW, INPUT_PULLUP);  // подключаем пин SW

   // выводим первый символ в массиве на монитор порта
   simvol = massiv;
   Serial.println(simvol);
}

void loop() {

   while (w < scale) {
     // проверяем положение ручки энкодера
     encoder.tick(); newPos = encoder.getPosition();

     // указываем максимальный и минимальный диапазон энкодера
     if (newPos > 38) { encoder.setPosition(0); }
     if (newPos < 0) { encoder.setPosition(38); }

     // если положение энкодера изменилось  - выводим на монитор символ
     if (pos != newPos && newPos <= 38 && newPos >= 0) {
        pos = newPos;
        simvol = massiv;
        Serial.println(simvol);
     }

     // узнаем, отпущена ли кнопка энкодера сейчас
     boolean buttonIsUp = digitalRead(SW);
     // если кнопка была отпущена и не отпущена сейчас
     if (buttonWasUp && !buttonIsUp) {
        // исключаем дребезг контактов кнопки энкодера
        delay(10);
        // узнаем состояние кнопки энкодера снова
        buttonIsUp = digitalRead(SW);
        // если кнопка была нажата, то сохраняем символ в строку
        if (!buttonIsUp) {
           w = w + 1;
           stroka = stroka + simvol;
           Serial.println(stroka);
           encoder.setPosition(0);
      }
    }
    // запоминаем состояние кнопки энкодера
    buttonWasUp = buttonIsUp;
   }

   // если было введено 5 символов - выходим из цикла while
   Serial.println(stroka);
   delay(1000);
}

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

  1. массив содержит 39 символов, при этом нумерация начинается с нуля. Т.е. позиции ручки энкодера «0» соответствует символ «А»;
  2. в программе цикл while выполняется 5 раз — это указывается в переменной , которая отвечает за конечную длину всей строки.

Типы приборов

Устройства бывают нескольких типов. Типы энкодеров: инкрементальные и абсолютные, оптические и механические. Далее будет рассмотрено, что такое энкодер инкрементального типа, а затем обозрены другие типы.

Инкрементальные энкодеры

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

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

Этот вид работает следующим образом. У него есть начальная нуль-метка, или выход Z, и два дополнительных выхода — A и B. Датчик создает две линии сигналов со смещенными на четверть фазы импульсами относительно друг друга. Разница импульсов указывает на направление вращения, а их количество — на угол поворота.

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

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

Абсолютные энкодеры

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

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

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

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

Многооборотные датчики поворота

Абсолютные энкодеры могут быть однооборотными и многооборотными.

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

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

Оптические энкодеры

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

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

Оптические угловые датчики бывают фотоэлектрическими и магнитными.

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

Фотоэлектрические датчики основаны на том же принципе. В них свет преобразуется в электрические сигналы.

Механические энкодеры

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

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

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

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

Для этого понадобятся:

  • любое устройство Ардуино, например, Arduino UNO, Arduino Mega, Arduino Leonardo, Arduino 101, Arduino Due;
  • любой энкодер Ардуино.

Обзор поворотного энкодера

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

Пины, и что они означают:

  • CLK: выход A (цифровой);
  • DT: выход B (цифровой);
  • SW: нажатие кнопки (цифровой);
  • + : VCC-напряжение питания;
  • GND: заземление.

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

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

Чтобы определить направление и проверить, вращается ли штифт по часовой стрелке или против часовой стрелки, нужно сделать следующее:

  • Если вращающийся вал движется по часовой стрелке, то сигнал A опережает B. В одни и те же моменты времени, A и B будут находиться на противоположных частях прямоугольной волновой функции.
  • Если вал движется против часовой стрелки, то сигнал B опережает A.

Подключение

Если говорить в общем, то CLK, DT и SW, должны быть подключены к цифровым выводам на Ардуино, + должен быть подключен к 5V, а GND заземлен.

Пошаговая инструкция подключения проводов энкодера к Ардуино:

  1. CLK: подключите конец провода к пину CLK на поворотном энкодере, затем к любому цифровому выводу на Arduino (оранжевый провод).
  2. DT: подключите конец провода к пину DT, затем к любому цифровому контакту на Arduino (желтый провод).
  3. SW: подключите конец провода к пину SW, далее к любому цифровому контакту на Arduino (голубой провод).
  4. + : подключите провод к пину +, затем к контакту +5V на Arduino (красный провод).
  5. GND: подключите конец провода к пину GND на энкодер с контактом GND на Arduino. (Черный провод).

Как кодировать

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

Что понадобится:

  • датчик поворотного энкодера;
  • Ардуино;
  • пьезодатчик;
  • провода.

Вот сам код:

Описание кода

Итак, сначала нужно определить контакты, к которым подключен кодер, и назначить некоторые переменные, необходимые для работы программы. В разделе «Настройки» нужно определить два контакта в качестве входных данных, и запустить последовательную связь для печати результатов на последовательном мониторе. Также нужно прочитать начальное значение вывода A, затем поместить это значение в переменную aLastState.

Далее в разделе цикла снова изменить вывод A, но теперь поместить значение в переменную aState. Таким образом, если повернуть вал и сгенерировать импульс, эти два значения будут отличаться. Сразу после этого, используя второй параметр «if», определить направление вращения. Если выходное состояние B отличается от A, счетчик будет увеличен на единицу, в противном случае он будет уменьшен. В конце, после вывода результатов на мониторе, нужно обновить переменную aLastState с помощью переменной aState.

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

Упрощенный пример

Следующий пример кода продемонстрирует, как считывает сигналы Arduino на датчике энкодера. Он просто обновляет счетчик (encoder0Pos) каждый раз, когда энкодер поворачивается на один шаг, а параметры вращения отправляются на порт ПК.

Код:
Следует обратить внимание на то, что приведенный выше код не является высокопроизводительным. Он предоставлен для демонстрационных целей

Виды энкодера

Основные типы, которые на слуху у всех специалистов, занимающихся автоматизацией:

  • абсолютные (absolute) – всегда знают свое положение
  • инкрементные (incremental) – относительные, считают только при включенном питании и вращении.

С развитием технологии, абсолютные энкодеры занимают все более прочные позиции на рынке. Если раньше соотношение было 70 на 30 и даже 80 на 20 % в пользу икнрементальных, то теперь их позиции равны. А в некоторых отраслях абсолютные преобладают.

Отдельно здесь можно выделить многооборотные энкодеры. Которые не только «запоминают» позицию внутри оборота, но и знают на каком обороте находятся. Количество оборотов зависит от используемого многооборотного модуля. У редукторного механического модуля количество регистрируемых оборотов как правило ограничено 12 (4096) или 14 битами (16384). У модуля со встроенной в энкодер батарейкой – до 18 (262144) и более бит. Многооборотный модуль, построенный на сенсорах Виганда, считает до 31 (2147483648) бит оборотов.

По конструкции выделяют угловые преобразователи следующих типов:

  • С полым валом (hollow shaft): Сквозным (thru hollow)
  • Глухим (тупиковым)(blind hollow).

С цельным валом (solid shaft) с:

  • Cинхро фланцем (synchro flange)

Зажимным (clamping)
Квадратным (square)
Пилотным (pilot).

Самое полное портфолио энкодеров на рынке вы найдете на сайте f-enco.ru

Принципы работы и устройство энкодеров

Существует два вида энкодеров по конструкции и виду выходного сигнала – инкрементальный (инкрементный) и абсолютный.

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

Разрешение и максимальная частота вращения обратнозависимы – ведь не может же частота выходных импульсов исчисляться гигагерцами. Обычно выходная частота ограничена значением около 500 кГц. Да и не всякий контроллер “скушает” такую частоту. Делаем вывод: энкодер с разрешением 1000 имп/оборот (наиболее распространенный) не может крутиться с частотой выше 500 Гц или 30000 об/мин. Но такие скорости в механике я лично не встречал. Делаем второй вывод: высокое разрешение не всегда хорошо.

Пример, поясняющий работу энкодера:

Конструкция, поясняющая работу оптического энкодера

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

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

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

Абсолютные энкодеры работают в сложном оборудовании – там, где в любой момент времени (в том числе, в момент подачи питания) нужно знать точное положение объекта. Но сейчас, с появлением дешевых контроллеров с энергонезависимой памятью, в 99% используются инкрементальные энкодеры. Тем более учитывая, что их цена в несколько раз ниже, чем у абсолютных. Да и обрабатывать последовательные импульсы гораздо проще, чем параллельный код.

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