Микроконтроллеры

Подключение энкодера к микроконтроллеру

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

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

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

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

В нашем примере мы подключим инкрементный энкодер с микроконтроллером. Энкодер PEC12 422OF SOO24 который имеет 24 импульса за 1 оборот.

enkoder-i-mikrokontroller

Энкодер имеет 5 выводов, 3 из них это выводы самого энкодера, а другие два это кнопка. У выводов энкодера одни вывод общий а 2 другие сигнальные. Схема подключения ничем не отличается от схемы подключения обычной кнопки. Сигнальные выводы подключаются в портам ввода/вывода микроконтроллера. А общий вывод котоый посередине соединяется к земле. С целью защиты от дребезга контактов можно добавить конденсаторы емкостью несколько нФ. Выводы к которым мы подключили энкодер настраиваем в программе как входы и включаем подтягивающие резисторы, можно подключить внешние резисторы.

Схема подключения энкодера к микроконтроллеру

Энкодер и микроконтроллер

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

enkoder-i-mikrokontroller1

Но так как имеется друбезг контактов в любых картина будет выглядить следующим образом.

enkoder-i-mikrokontroller2

Алгоритм работы программы микроконтроллера

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

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

В архиве есть 2 файла encoder.h и encoder.c. Изначалоно нужно задать порт и номер выводов к которым производится подключение это переменные LEFT_SPIN и RIGHT_SPIN. В файле "c" находится реализация функций.

  • void InitEncoder(void) - фукнция которая инициализирует выводы;
  • void PollEncoder(void) - функция опроса энкодера, если есть вращение то пишем значение в функцию, если нет то просто выходим из функции так как нам нечего тут делать;
  • unsigned char GetStateEncoder(void) - переменная возвращает содержимое буфера и очищает его.

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

Исходник программы под микроконтроллер

Добавить комментарий


Защитный код
Обновить

Последние комментарии

Последнии темы форума

  • Нет сообщений для показа