Для начала разберёмся детальнее, что такое энкодер.
Энкодер – это устройство, предназначенное для определения угла поворота и преобразующее данные в электрический сигнал. Другое название энкодера – "датчик угла поворота".
По выходному сигналу различают:
- Инкрементные энкодеры - на выходе формируется две последовательности импульсных сигналов (нулей и единиц), при этом каждая "единица" соответствует фиксированному углу (зависит от точности датчика). Отслеживание полного поворота происходит по специальному сигналу (программному), а направление вращения определяется по смещению второй последовательности относительно первой. Для понимания принципа работы инкрементных датчиков угла лучше всего изучить изображение ниже.
Рис. 1. Изображение выходного сигнала инкрементного энкодера
С анимацией.
Рис. 2. Схема инкрементного энкодера
- Абсолютные энкодеры – на выходе формируются не просто "единицы", а сразу последовательности фиксированной длины (зависит от точности измерения), которые явно говорят о конкретном угле, то есть значение угла поворота специальным образом кодируется (код Грея). Понять принцип его работы лучше поможет следующая схема.
Рис. 3. Схема принципа работы абсолютного энкодера
Или эта.
Рис. 4. Схема принципа работы абсолютного энкодера
Конструктивно (в зависимости от технологии измерения) экодеры могут быть:
- Оптическими;
- Магнитными;
- Резисторными.
Подключение и работа с энкодерами в Arduino в первую очередь зависит от способа кодирования угла.
Начнём с инкрементных датчиков.
Подключение инкрементных энкодеров
Чтобы притянуть контакты датчика к логической единице, необходимо использовать резисторы (10кОм). Типовая схема выглядит следующим образом (плата выбрана для примера, входные контакты на Ардуино могут быть изменены на другие).
Рис. 5. Типовая схема
Здесь приведён пример с использованием энкодера с кнопкой (есть и такие модели, кнопкой служит сама ручка).
При использовании Atmega можно просто включить встроенные резисторы микроконтроллера специальной командой.
Если вы сталкиваетесь с дребезгом датчика (довольно частое явление для замыкающихся контактов, а именно они используются в инкрементных энкодерах), можно аппаратно решить проблему путём сборки следующей схемы.
Рис. 6. Типовая схема
Существует и программный способ сглаживания дребезга за счёт использования логики прерываний (смотри скетч во вложениях к материалу). Но подключение прибора следует выполнять только на 2 и 3 пины.
Простейший код для обработки данных с датчика выглядит следующим образом.
Для более сложных задач можно использовать готовые библиотеки, например:
- https://github.com/GreyGnome/AdaEncoder
- https://github.com/PaulStoffregen/Encoder
- https://github.com/mathertel/RotaryEncoder
- и другие.
Во вложении можно найти готовый скетч (см. здесь) с подробными комментариями для работы с меню (часто используемый функционал для энкодеров с кнопкой).
Отрабатывается перемещение по иерархии меню и выбор между доступными пунктами.
Подключение абсолютных энкодеров
Абсолютные энкодеры не так распространены, как инкрементные. И схема подключения во многом зависит от требований производителя. Так, например, высокоточный 128-битный датчик Bourns ACE-128 легко подключается к Ардуино или Raspberry Pi. Производитель предлагает свои собственные библиотеки для работы с энкодером и даже типовую схему для тестирования функционала.
Схема соединения выглядит так.
Рис. 7. Схема соединения энкодеров
А схема для тестирования с выводом числового показателя угла поворота на дисплей, так.
Рис. 8. Схема для тестирования с выводом числового показателя угла поворота на дисплей
Готовая библиотека для Arduino, подробные инструкции и примеры скетчей можно найти на ГитХабе: https://github.com/arielnh56/ACE128
Аналогично и с изделиями других производителей – необходимо изучать их рекомендации.
Автор: RadioRadar