Оптический инкрементный энкодер: измеряем размеры рычагом

Оптический инкрементный энкодер: измеряем размеры рычагом

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

Что это за устройство

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

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

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

Разрешение и сигналы

Главное различие моделей заключается в количестве импульсов на оборот вала. У ходовых вариантов оно лежит в пределах от 10 до 5000.

Брать разрешение с большим запасом не стоит. Чем оно выше и чем быстрее вращается вал, тем короче импульсы и тем чаще контроллеру приходится опрашивать входы. Например, при 1000 импульсах на оборот и одном обороте в секунду состояния HIGH и LOW сменяются каждые 0,5 мс. Если частота опроса окажется недостаточной, часть импульсов потеряется и результат исказится.

Маска с прорезями для оптопар энкодера

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

Сигналы двух основных фаз энкодера при вращении вала

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

Сигналы фаз и импульс полного оборота на анализаторе

Подключение к Arduino

В примере используется энкодер OMRON на 2000 импульсов на оборот. Вал у него вращается свободно, без заметного сопротивления. Питание допускается от 5 до 12 В, так что со стандартной Arduino он работает напрямую. Для контроллеров с логикой 3,3 В потребуются преобразователь уровней и отдельное питание.

Из кабеля выходят пять цветных проводов и оплётка. Назначение по даташиту такое:

  • коричневый: питание, в примере +5 В;
  • синий и оплётка: земля (GND);
  • чёрный: фаза A, подключается к пину 8;
  • белый: фаза B, подключается к пину 9;
  • оранжевый: сигнал полного оборота, в примере не задействован.

Опрос по таймеру

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

Опрос выполняется в прерывании таймера 1 на ATmega328: делитель 8, сброс по совпадению, регистр сравнения OCR1A = 0x0028. Состояние входов читается прямо из регистра PINB, так как пины 8 и 9 соответствуют нулевому и первому битам порта B. Обработчик хранит предыдущее и текущее значение порта. Когда нулевой бит переходит из 0 в 1, зафиксирован шаг, а первый бит показывает направление. По нему переменная NUM увеличивается или уменьшается на единицу. Основная программа в любой момент может взять из NUM текущее положение вала.

Измеритель с рычагом

Для опыта на 3D-принтере печатают рычаг на вал и фиксатор корпуса энкодера. Под рычагом проводят предметы, он отклоняется от нулевой отметки, и по величине отклонения вычисляют размер. За ноль принято значение счётчика 1000, чтобы не получать отрицательных чисел.

Прибор получился очень чувствительным: показания меняются даже от постукивания пальцем по стенду, поэтому стенд приходится плотно прижимать к столу. Жало отвёртки диаметром 5 мм дало отклонение 34–35 единиц, откуда принято соотношение 7 импульсов на миллиметр. Проверка на батарейке диаметром 10 мм показала пик 70 единиц, что соответствует расчёту.

Итоговый скетч каждые 10 мс обновляет максимум, раз в две секунды выводит его в порт на скорости 19200 в миллиметрах по формуле (MAX-997)/7 и обнуляет. Если показания не меняются в течение 200 мс, счётчик возвращается к 1000, что компенсирует люфты и проскальзывания. У такой программы есть ограничения: отчёт привязан ко времени, а не к прохождению предмета, результат грубо округляется до целого в меньшую сторону, а из двух предметов, прошедших за один интервал, будет показан больший.

Где применяют и что учитывать

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

К достоинствам относят высокую точность (до 14 импульсов на угловой градус), простое подключение, надёжность и свободное вращение вала. Из недостатков отмечен небольшой дрейф: после возврата вала в исходное положение счётчик не всегда приходит к нулю. Причиной может быть недостаточная жёсткость стенда. Расхождение компенсируют программно, в том числе с помощью сигнала полного оборота.

Максимальная частота выходного сигнала по даташиту составляет от 50 до 100 кГц в зависимости от модели, импульсы при этом длятся 10–20 мкс. К одному порту ATmega328 можно подключить до четырёх энкодеров без сигнала оборота или два с ним, и нагрузка на обработчик вырастет незначительно. Если вал вращается редко, вместо таймера удобнее использовать внешние прерывания. У ATmega328 для них есть два пина.

← Все статьи