Счетчик оборотов с энкодером
Энкодеры. Виды и работа. Особенности и применение
Коротко энкодеры можно назвать преобразователями угловых перемещений. Они служат для модификации угла поворота объекта вращения, например, вала какого-либо механизма, в сигнал электрического тока. При этом определяется не только угол поворота вала, но и его направление вращения, а также скорость вращения и текущая позиция относительно первоначального положения.
Наиболее популярными энкодеры стали при их использовании в системах точного перемещения, на станкостроительных заводах, в производственных комплексах с применением робототехники, в измерительных устройствах, в которых необходима регистрация точных измерений наклонов, поворотов, вращений и углов.
Поворотные энкодеры против потенциометров
Поворотные энкодеры являются современным цифровым эквивалентом потенциометра и они более универсальны, чем потенциометры. Они могут полностью вращаться без концевых упоров, в то время как потенциометр может вращаться только примерно на 3/4 круга.
Потенциометры лучше всего подходят в ситуациях, когда вам нужно знать точное положение ручки. Однако поворотные энкодеры лучше всего подходят в ситуациях, когда вам нужно знать изменение положения, а не точное положение.
Датчики углового и линейного перемещения, датчики наклона
Инкрементальные энкодеры
Инкрементальный энкодер (Incremental Encoder) регистрирует относительное перемещение (приращение). Разрешение (Resolution) углового энкодера определяется количеством импульсов на один оборот (на рисунке изображён оптический дик с разрешением 8 имп/об).
Частота импульсов на выходе энкодера пропорциональна скорости вращения.
Система управления должна подсчитывать импульсы, чтобы вычислить угол поворота энкодера относительно точки отсчёта.
В системах, работающих с абсолютными координатами (станок с ЧПУ), перед началом работы (после включения питания) необходимо выставить ноль – вывести рабочий орган машины в опорную (реперную) точку и в ней обнулить счётчик импульсов.
Синусно-косинусные инкрементальные датчики положения sin/cos 1-Vss и 1-Vpp
Синусоидальные выходные сигналы А и В сдвинуты друг относительно друга на 90 градусов, что позволяет определять направление вращения. Сигнал нулевой метки R используется для синхронизации с точкой отсчёта. Для повышения помехозащищённости датчик выдаёт ещё три инверсных сигнала: A, B, R. Оцифровываются эти сигналы в системе измерения.
Датчики с интерфейсом 1-Vpp используются в сервосистемах, т.к. как позволяют получать очень высокое разрешение. Так, например, если датчик выдаёт 2048 периодов синусоиды (импульсов) на оборот, а система управления в каждой такой синусоиде различает 2048 дискретных уровней, то общее разрешение датчика составит 2048 х 2048 = 4194304 импульсов на оборот.
Инкрементальные датчики с интерфейсом TTL или HTL
Эти датчики сами оцифровывают синусоидальные сигналы – у них на выходе 6 прямоугольных сигналов — три прямых: A, B, R и три инверсных: A, B, R. Для сигнализации неисправности датчика используется инверсный сигнал помехи (если нет неисправности, то сигнал помехи равен 1).
Абсолютные энкодеры
Разрешение абсолютного энкодера (Absolute Encoder) определяется количеством уникальных кодов на один оборот. Однооборотные (Single-turn) абсолютные энкодеры определяют положение в пределах одного оборота, многооборотные (Multi-turn) – в пределах определённого числа оборотов.
Абсолютные датчики положения не требуют для начала работы выхода в опорную точку – при включении питания датчик сразу определяет координату, сканируя кодовые дорожки.
Резольверы
Резольвер (Resolver) – это аналоговый электромагнитный абсолютный однооборотный датчик, работающий по принципу вращающегося электрического трансформатора.
Рассмотрим работу бесщёточного резольвера.
На статоре расположены три обмотки: первичная обмотка возбуждения вращающегося трансформатора (на неё подаётся переменное напряжение) и две двухфазные обмотки, механически повёрнутые друг относительно друга на 90 градусов: синусная и косинусная. На роторе расположена вторичная обмотка вращающегося трансформатора, которая возбуждается от первичной обмотки на статоре за счёт электромагнитной индукции. Обмотка ротора в свою очередь индуцирует в синусной обмотке статора напряжение пропорциональное синусу угла поворота ротора, а в косинусной обмотке — напряжение пропорциональное косинусу угла поворота ротора.
Резольверы отличаются высокой надёжностью (они не бьются и не запотевают, как оптические) и точностью (аналоговые, а не дискретные).
Код Грея
Код Грея (Gray Code) – это двоичный код, в котором два соседних значения отличаются только одним разрядом.
Десятичное число | Двоичное число | Код Грея |
---|---|---|
000 | 000 | |
1 | 001 | 001 |
2 | 010 | 011 |
3 | 011 | 010 |
4 | 100 | 110 |
5 | 101 | 111 |
6 | 110 | 101 |
7 | 111 | 100 |
Формула побитного преобразования двоичного кода в код Грея
Gi = Bi⊕Bi+1,
биты нумеруются справа налево, ⊕ – исключающее ИЛИ (если биты равны, то результат равен 0; если биты не равны, то результат равен 1).
Код Грея используется для кодирования положений в абсолютных датчиках, так как обладает большей помехозащищённостью, чем обычное двоичное кодирование (Natural Binary).
На рисунке изображён оптический диск с 3-х разрядным (8 положений) кодом Грея.
Тахогенераторы
Тахогенераторы предназначены для определения скорости и направления вращения. Напряжение на выходе тахогенератора пропорционально скорости вращения вала.
Простое приложение
Мы создадим приложение, демонстрирующее, как использовать поворотный энкодер в проекте на Arduino. Мы будем использовать энкодер для навигации, ввода данных и выбора. Ниже приведена принципиальная схема приложения.
Принципиальная схема примера приложения с использованием поворотного энкодера на Arduino
Схема построена на базе платы Arduino Uno. Для графического интерфейса используется LCD дисплей Nokia 5110. В качестве средств управления добален механический поворотный энкодер с кнопкой и RC-фильтрами.
Собранная схема примера использования поворотного энкодера на Arduino
Мы разработаем простое программное меню, в котором и продемонстрируем работу поворотного энкодера.
Настройка энкодера, юстировка
После программирования энкодера следует его настройка (юстировка). У каждого производителя Настройка энкодера, юстировка индивидуальная.
Самые распространенные производители энкодеров:
- Siemens
- Heidenhain
- Kubler
- Omron
- Sick
Также Настройка энкодера, юстировка будет зависеть от двигателя, на котором он установлен.
СИ10-24.Щ3 Овен простой счетчик импульсов
Счетчики импульсов : СИ10-24.Щ3 Овен простой счетчик импульсов . Абсолютно простой счетчик , не требующий никаких дополнительных настроек. Нужно только подключить датчик и подать питание на прибор. Счетчик импульсов ОВЕН СИ10 входит в состав новой линейки счетчиков импульсов , отличающейся повышенной устойчивостью к различным видам электромагнитных .
В наличии / Опт и розница
Управление инкрементальным энкодером на AVR
Я думаю многие радиолюбители и профессионалы разработчики сталкивались в своей работе с инкрементальными энкодерами, например, для управления громкостью в автомагнитолах, в компьютерных мышах и др. С помощью энкодера можно сделать удобный интерфейс управления для любого устройства, ну даже, скажем, для токарного станка. В этой статье я хочу предложить метод обработки сигналов от энкодера микроконтроллером AVR, который был предложен как раз для управления коробкой передач токарного станка здесь. Вообще энкодеры бывают разных типов, сейчас же остановимся на обыкновенном механическом инкрементальном энкодере, который чем-то напоминает переменный резистор, но в отличие от него не имеет ограничений по прокручиванию ни в одну из сторон, т.е. можно сделать довольно неплохой счетчик оборотов.
Принцип работы энкодера
Принцип работы нашего энкодера до безобразия прост, при отладке прошивки я не имел под рукой аналогичного энкодера, поэтому эмулировал его работу двумя кнопками) Итак, рассмотрим диаграмму импульсов от энкодера.
Как я уже сказал, электрически энкодер представляет собой две кнопки, которые срабатывают поочередно, сначала одна, потом вторая и так по кругу. В зависимости от того, какая срабатывает кнопка раньше мы имеем определенное направление вращения энкодера. Не забываем, что сигнальные ножки энкодера должны быть подтянуты к плюсу питания либо внешними резисторами, либо включением подтяжки pull-up на портах микроконтроллера.
Собственно диаграмма нам показывает, что при вращении контакты энкодера поочередно замыкаются на землю, в устойчивом состоянии на контактах энкодера плюс напряжения питания т.е. 11 в двоичном виде, если начинаем вращать по часовой стрелке замыкаем сперва одну кнопку – 01, далее замыкается вторая кнопка – 00, вращаем еще, размыкаем первую кнопку – 10, ну и возвращаемся в устойчивое состояние – 11 при котором как раз и слышится характерный механический щелчок энкодера. При вращении против часовой стрелки все то же самое только наоборот. Ну вроде разобрались с принципом работы, наш энкодер имеет 4 состояния в процессе вращения, именно эти 4 состояния нужно обрабатывать в программе управления энкодером на МК AVR.
Описание эксперимента
В своем эксперименте я подключал «энкодер» или точнее кнопки к ножкам PD2 и PD3 микроконтроллера Atmega328P, который находился на борде Arduino Nano, я вообще очень люблю использовать платы arduino в качестве отладки для своего кода, программирую в Atmel Studio, а прошиваю AVR Dragon через ISP. Считывать состояние ножек буду простым логическим И — &. Var = PIND & 0b00001100 или 12 в шестнадцатеричной системе счисления. Все, в принципе, больше никаких особых тем при обработке данных от энкодера нет, можно писать код. У меня будет переменная sw34 (почему такое имя не знаю, так уж исторически сложилось), которую я буду изменять увеличивая или уменьшая ее значение в зависимости от вращения энкодера.
Код программы
Чтобы долго не томить выложу сразу весь код, а потом немного пояснений:
next_state = PIND & PIND_MASK; — так считываем состояние ножек энкодера.
В прерывании конструкция switch (prev_state) определяет в какую сторону крутится энкодер.
if (next_state != prev_state) — если состояние не изменилось значит энкодер не вращался.
В основном цикле все просто, 1 раз за 4 импульса от энкодера, т.е. от «щелчка до щелчка» изменяем состояние нужной переменной sw34 — передача станка.
Timer1 настроен на прерывание по совпадению с регистром OCR1A, генерирует прерывание 1000 раз в секунду.