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

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

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

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

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

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

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

Двухканальный инкрементальный энкодер

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

Энкодеры. Подробный обзор с экспериментами!

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

Разновидности

Различаются следующие виды энкодеров:

  • абсолютного типа;
  • инкрементального типа.

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

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

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

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

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

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

Применяемые технологии

Типы энкодеров

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

Квадратура выхода (выходы А и В)

Обработка сигнала.webp

Энкодеры обычно производят два сигнала (A и B), которые сдвинуты по фазе на 90 градусов. Это позволяет не только определить количество импульсов, соответствующих перемещению, но и направление вращения. Например, если A опережает B, вал вращается в одном направлении, и наоборот. Сигнал можно настраивать самостоятельно с помощью языка программирования C++.

Основные параметры

Максимальная частота ответа

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

Разрешение

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

Указатель нулевой отметки / импульс полного оборота (выход N)

Что такое указатель нулевой отметки энкодера?

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

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

Зачем он нужен?

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

Как это работает?

Интеграция с контроллерами: сигнал подается на контроллеры или ЧПУ, где он используется для определения точки отсчета в движениях или операциях. Там, где требуется высокая повторяемость позиционирования, таких как автоматизированные сборочные линии, используется для гарантирования того, что каждый цикл начинается с одной и той же позиции.

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

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

Интерфейс

  • Основное Применение: широко используется в цифровой электронике.
  • Технические Особенности: работает на низком уровне напряжения (обычно 5 В).
  • Преимущества: Высокая скорость работы, простота в интеграции с большинством микроконтроллеров и цифровых устройств.
  • Недостатки: Ограниченная длина передачи данных, подверженность электрическим помехам на больших расстояниях.
  • Основное Применение: Используется в промышленных энкодерах для устойчивости к электрическим помехам.
  • Технические Особенности: Работает на более высоком напряжении (обычно от 10 до 30 В).
  • Преимущества: Устойчивость к помехам, подходит для применения в условиях промышленной среды.
  • Недостатки: Более высокие требования к источникам питания.
  • Основное Применение: Идеальны для передачи данных на длинные расстояния в промышленных условиях.
  • Технические Особенности: Дифференциальная передача, что повышает устойчивость к шумам.
  • Преимущества: Дальность передачи до 1,2 км (RS-485), способность подключения множества устройств к одной шине.
  • Недостатки: Сложность в реализации и требование к точной настройке.
  • Основное Применение: Цифровая передача данных в приложениях, требующих высокой точности.
  • Технические Особенности: Передача данных происходит по двум линиям: одна для сигнала данных, другая для сигнала синхронизации.
  • Преимущества: Высокая точность передачи, простота в интеграции, меньше подвержен помехам.
  • Недостатки: Ограниченная длина кабеля.
  • Основное Применение: Используются в промышленных сетевых приложениях для быстрой и надежной передачи данных.
  • Технические Особенности: Основаны на стандартных Ethernet-протоколах, поддерживают высокую скорость передачи данных.
  • Преимущества: Высокая скорость передачи данных, возможность интеграции в сетевые системы, устойчивость к помехам, гибкость в конфигурации системы.
  • Недостатки: Сложность в настройке и управлении сетью, высокая стоимость компонентов.

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

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

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

  • полагаются на нелинейное позиционирование
  • обрабатывают большие детали
  • имеют длительный рабочий цикл

В реальной жизни абсолютные энкодеры обеспечивают более высокую точность работы оборудования:

  • Обратная связь в многоосевых станках с ЧПУ, используемых при производстве всевозможных деталей
  • Автоматическое определение высоты больничных коек с подъемным механизмом ножничного типа
  • Точное перемещение портальных осей для больших транспортных средств, таких как краны или морские / карьерные подъемники
  • Перемещение автоматических дверей или отсеков без конечных выключателей
  • Непрерывное точное роботизированное движение даже после сбоя питания

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

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

Сигнал инкрементного энкодера.png

Устройство выдает определенное количество импульсов за один оборот вала. Выходом может быть одиночный канал (часто называют «A») или два канала («A», «B»), которые смещены относительно друг друга для. Смещение каналов позволяет выявить направление вращения. Смещение фаз двух сигналов называется квадратурой. Стандартно прибор состоит из оптико-механического подшипникового узла, печатной платы, корпуса, выходного соединителя. Печатная плата содержит сенсорную матрицу, которая регистрирует два первичных сигнала с целью дальнейшей обработки.
Дополнительные выходы датчиков:
Канал референтной (ноль) метки (его называют «Z» или «R») в виде одного импульса на оборот служит для поиска нолевой позиции или для контроля работы выходов A, B. Эта метка может быть привязана к A или B в их различных состояниях. Она также может быть различной по ширине.
Коммутация с помощью U, V, W треков может быть предусмотрена в некоторых преобразователях. Треки согласуются с коммутирующими обмотками серводвигателей. Они также обеспечивают возможность подачи с электропривода или усилителя в каждую обмотку двигателя тока нужной силы в правильной последовательности.
Альтернативы инкрементальным энкодерам: резольверы, абсолютные энкодеры, энкодеры с аналоговым сигналом.

Применение инкрементальных энкодеров

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

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

Оптические угловые энкодеры

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

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

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

– доступная стоимость;
– простота эксплуатации;
– экономичность;
– масштабируемость;
– использование магнитного принципа измерения.

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

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

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

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

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

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

Соединительный вал

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

Сопутствующие товары и статьи

Принцип формирования заказного кода в зависимости от требований к уровню и формату сигналов на выходе и др. параметров заказываемого энкодера Wachendorff.

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

Инкрементальный энкодер: принцип действия, схемы подключения, работа с Arduino

Инкрементальный ( или инкрементный, от англ. increment — « увеличение») энкодер ( датчик угла поворота) — это устройство, которое преобразовывает вращательное движение вала в серию электрических импульсов, позволяющих определить направление и угол его вращения. Также, исходя из найденных величин, можно определить и скорость вращения. Основным отличием инкрементальных энкодеров от абсолютных является то, что они могут сообщать лишь о величине изменения их положения, а не об абсолютном своем состоянии. Самым популярным примером использования инкрементального энкодера в повседневной жизни, является ручка регулировки громкости автомобильной магнитолы.

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

Инкрементальные энкодеры бывают оптическими, магнитными, механическими и т.д. Вне зависимости от принципа устройства все инкрементальные энкодеры на выходе генерируют 2 линии ( A и B) с импульсами смещенными относительно друг друга. Именно по смещению импульсов можно судить о направлении вращения. А по количеству импульсов — об угле поворота.

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

Проверено — автор рекомендует:

Каждый инкрементальный энкодер имеет следующую основную характеристику — дискретность ( количество шагов, положений между импульсами, на один оборот вала). Благодаря дискретности, можно вычислить угол единичного изменения положения. В нашем примере, энкодер ЕС11 за полный оборот генерирует 20 серий импульсов. А это значит, что каждый шаг эквивалентен повороту на 18°. Помимо этого, вал энкодера фиксируется в каждом положении между каждой серией импульсов.

Внешний вид устройства:

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

Проверено — автор рекомендует:
Ручка черная d 6мм разных размеров для инкрементального энкодера EC11

Энкодер с кнопкой имеет 5 выходов — 2 выхода ( D и E) отвечают за переключатель ( кнопку), 1 ( С) — общий ( GND , земля), а оставшихся 2 ( A и B) — импульсные линии, сигнализирующие о вращении.

Схематичное представление энкодера

Поскольку подключение кнопки вала энкодера ( контакты D и E) не отличаются от подключения обычной кнопки, информация по ней будет опущена.

Схематично работу инкрементального энкодера можно представить следующим образом:

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

После чего в состоянии покоя на обоих сигнальных выходах будет присутствовать логическая единица ( 5 В). При вращении по часовой, или против часовой стрелки на сигнальных линиях, с противоположным смещением друг относительно друга, будут появляться отрицательные импульсы — по одному на 1 шаг на каждой линии:

В состоянии покоя подтягивающие резисторы ( 10КОм) подтягивают сигнальные линии к логической единице
Если анимация не загружается её можно скачать (1,98 MB) и посмотреть отдельно.

Реальная осциллограмма вращения энкодера немного отличается от идеальной.

Слева осциллограмма вращения по часовой стрелке, справа — против часовой стрелки

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

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

Программное устранение дребезга

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

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

После того как энкодер подключен к Arduino ( на примере Arduino Uno):

Сигнальные линии энкодера подключены к 2 и 3 пину Arduino Uno, так как на этих выходах реализованы прерывания. Замена пинов подключения приведет к неработоспособности примера. Скетч:

Суть работы кода можно изобразить графически:

При корректном выполнении сценария, по завершению каждого шага переменная state будет иметь состояние 4 или -4 . Если что-то пойдет не так, программа никак не это не отреагирует. Но если программа увидит, что в состоянии покоя ( A=1 и B=1 ), переменная state не равна нулю, то вернет её в исходное состояние.

Аппаратное устранение дребезга

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

Инвертирующий триггер Шмитта 74HC14N необходим для преобразования аналогового сигнала в цифровой, именно из-за него изменена полярность подключения

О том, почему изменена полярность подключения и для чего необходим инвертирующий триггер Шмитта 74HC14N, можно почитать в статье Arduino: Дребезг — программное и аппаратное устранение.

Проверено — автор рекомендует:

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

Вторая линия подключена к 7 пину, освобождая 3 пин для других источников прерываний

Дополнительным бонусом может служить высвобождение одного из двух ( для Arduino Uno) пинов с функционалом прерывания. Таким образом прерывание будет провоцироваться импульсом только одной линии, а далее, в обработчике, можно смотреть на состояние второй линии и делать выводы:

Этот пример работает корректно.

Навигация при помощи энкодера

Теперь можно организовать управление чем-либо при помощи энкодера. Его уникальность состоит в том, что одним элементом управления можно запрограммировать 4 реакции на действия: вращение вправо/влево, короткое нажатие и длинное нажатие ( реакция на нажатия реализуется программно).

Освободившийся 3 пин ( с прерываниями) теперь используется для перехвата нажатия кнопки

int pinA = 2; //Пин прерывания сигнальной линии int pinButton = 3; //Пин прерывания нажатия кнопки int pinB = 7; //Любой другой пин long timeButtonPressed = 1500; // Долгое удержание кнопки после 1,5 секунд volatile int state = 0; // Переменная хранящая статус вращения // Переменные хранящие состояние действия до его выполнения volatile bool flagCW = false ; // Было ли вращение по часовой стрелке volatile bool flagCCW = false ; // Было ли вращение против часовой стрелки volatile bool flagButton = false ; // Было ли нажатие кнопки volatile bool flagButtonLong = false ; // Было ли долгое удержание кнопки volatile long timeButtonDown = 0; // Переменная хранящая время нажатия кнопки volatile bool isButtonDown = false ; // Переменная хранящая время нажатия кнопки volatile bool longPressReleased = false ; // Переменная для фиксации срабатывания долгого нажатия void setup () < pinMode (pinA, INPUT ); // Пины в режим приема INPUT pinMode (pinB, INPUT ); // Пины в режим приема INPUT pinMode (pinButton, INPUT ); // Пины в режим приема INPUT attachInterrupt (0, A, CHANGE); // Настраиваем обработчик прерываний по изменению сигнала на линии A attachInterrupt (1, Button, CHANGE); // Настраиваем обработчик прерываний по изменению сигнала нажатия кнопки Serial.begin(9600); // Включаем Serial >void loop () < if ( millis () — timeButtonDown >timeButtonPressed isButtonDown) < // Время длительного удержания наступило flagButtonLong = true ; >if (flagCW) < // Шаг вращения по часовой стрелке // . Serial.println( «turn_right» ); flagCW = false ; // Действие обработано — сбрасываем флаг >if (flagCCW) < // Шаг вращения против часовой стрелки // . Serial.println( «turn_left» ); flagCCW = false ; // Действие обработано — сбрасываем флаг >if (flagButton) < // Кнопка нажата // . Serial.println( «short_press» ); flagButton = false ; // Действие обработано — сбрасываем флаг >if (flagButtonLong isButtonDown) < // Кнопка удерживается if (! digitalRead (pinButton) millis () — timeButtonDown >timeButtonPressed) < // Защита от ложного срабатывания // . Serial.println( «long_press» ); >

// Чтобы событие long_press во время удержания срботало только один раз, необходимо раскомментировать блок и закомментировать следующий

//isButtonDown = false; // Программно «отжимаем» кнопку

// Эти две строки отвечают за то, чтобы при долгом удержании кнопки, событие long_press повторялось каждые 1,5 секунды

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

timeButtonDown = millis (); // Сбрасываем таймер

longPressReleased = true ; // Флаг срабатывания долгого удержания, чтобы отсечь генерацию обычного нажатия при отпускании кнопки

Оцените статью
TutShema
Добавить комментарий