Главная

Популярная публикация

Научная публикация

Случайная публикация

Обратная связь

ТОР 5 статей:

Методические подходы к анализу финансового состояния предприятия

Проблема периодизации русской литературы ХХ века. Краткая характеристика второй половины ХХ века

Ценовые и неценовые факторы

Характеристика шлифовальных кругов и ее маркировка

Служебные части речи. Предлог. Союз. Частицы

КАТЕГОРИИ:






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




Автор Белов А. В.

04.05.2008 г.

 

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

 

В связи с тотальным переходом к микропроцессорному управлению бытовыми и другими электронными приборами изменились и органы регулировки, применяемые в этих приборах. Если раньше для того, что бы отрегулировать громкость радиоприемника или телевизора вы должны были просто покрутить соответствующую ручку, то теперь вы зачастую вынуждены пользоваться двумя кнопками: "Громкость +" и "Громкость -". А если нужно регулировать не только громкость? Для многих пользователей это просто не удобно. К тому же страдает оперативность регулировки. Нажав кнопку уменьшения громкости нужно еще подождать какое то время, пока громкость доползет до нужного уровня. И все это время приходится страдать от громкого звука. Совместить преимущества традиционных регуляторов и при этом не потерять новые возможности, которые нам дают микроконтроллеры призвано новое устройство ввода информации, которое получило название энкодер. По внешнему виду и установочным размерам энкодер очень похож на обычный переменный резистор, который использовался в традиционных аналоговых устройствах. Но по внутреннему устройству он кардинально отличается. Энкодер так же, как и резистор имеет выступающую вперед ось, на которую можно надеть такую же самую ручку, какую обычно одевают на резистор. Вращение рукоятки энкодера приводит к вырабатыванию им последовательности импульсов, которые затем поступают на микроконтроллер и дают ему информацию о том, на сколько нужно уменьшить либо увеличить то либо иное значение. Например, насколько нужно увеличить или уменьшить громкость сигнала и т.п. Причем устройство энкодера таково, что микроконтроллер может различать не только величину, на которую нужно изменить параметр, но и направление этого изменения. Это позволяет, например, при вращении оси энкодера в одну сторону увеличивать громкость, а при вращении в другую - уменьшать.

 

Рис. 1. Принцип работы энкодера

 

Рассмотрим, как же устроен энкодер. На рисунке 1 показано устройство простого механического энкодера. Как видно из рисунка, основой энкодера является диск из изоляционного материалла закрепленный на оси, на которую и насаживается рукоятка для ее вращения. По периметру диска равномерно расположены специальные прорези. Прорези делят всю окружность на несколько (обысно 6-8) равных секторов. Причем ширина прорезей равна ширине промежутков между ними. Кроме того, имеется две группы контактов, которые установлены таким образом, что при вращении диска они то замыкаются попав в прорезь, то размыкаются в промежутке между прорезями. Очень важно расположение этих пар контактов относительно прорезей. Контакты расположены таким образом, что в тот момент, когда одна пара находится на краю какой либо прорези, вторая пара контактов находится ровно посредине между двумя соседними прорезями. Именно такое расположение и показано на рисунке. В результате реализуется следующий порядок замыкания/размыкания контактов:

Замыкается первая группа контактов

Замыкается вторая группа контактов

Размыкается первая группа контактов

Размыкается вторая группа контактов

5. Все повторяется сначала.

 

 

Рис. 2. Схема энкодера Рис. 3. Диаграмма работы

 

На рисунке 2 приведена внутренняя электрическая схема простого механического энкодера. Энкодер имеет всего три вывода (что делает его еще больше похожим на переменный резистор). Нижний по схеме вывод - общий для обеих пар контактов. В результате, при вращении рукоятки энкодера на выходе мы получим две последовательности импульсов. При равномерном вращении в одну сторону это будут два меандра, сдвинутых по фазе на 90 градусов. Для наглядности этот процесс показан на рисунке 3. Как микроконтроллер определяет угол поворота оси энкодера надеюсь понятно. Он просто подсчитывает число импульсов. Причем можно считать импульсы приходящие от любой из группы контактов. Основной фокус - как определить направления вращения. Как раз тут и помогает последовательность замыкания и размыкания контактов. При вращении оси энкодера в одну из сторон каждый раз, когда первая группа контактов переходит из замкнутого состояния в разомкнутое, вторая группа контактов оказывается замкнута. Причем момент перехода первой группы приходится как раз на середину отрезка времени, когда вторая группа замкнута. То есть, дребезг уже закончился и все переходные процессы улеглись. При вращении в другую сторону порядок размыканий и замыканий сменяется на обратный. Поэтому в момент, когда первая группа контактов переходит из замкнутого состояния в разомкнутое, вторая группа всегда оказывается разомкнута. Именно по этому факту микроконтроллер и определяет направление вращения.

 

 

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

 

На рисунке 4 показана схема подключения энкодера к микроконтроллеру. Контакты энкодера подключаются таким же образом, как подключается простая отдельная кнопка (см. статью "Подключение кнопок"). Линии порта PD2 и PD3 должны быть настроены как входы и внутренний нагрузочный резистор на обоих входах должен быть включен. Подробнее о настройке линий порта и внутренних нагрузочных резисторах читайте в упомянутой выше статье "Подключение кнопок". Общий вывод энкодера, как видно из схемы, подключается к общему проводу всего устройства.

 

Программа обработки сигнала от энкодера предельно проста. Обратите внимание, что на схеме (рис. 4) для подключения энкодера выбраны линии PD2 и PD3. И это не случайно. В микроконтроллере ATtiny2313 альтернативной функцией этих выводов является функция входов внешнего прерывания INT0 и INT1. Для работы с энкодером как раз и используется одно из этиз прерываний. Например, можно использовать прерывание по внешнему входу INT0. То есть по входу PD2 (вывод 6). Из чего же состоит программа? Ну, во первых, сначала нужно разрешить прерывание по INT0. Причем необходимо выбрать такой режим, когда прерывание происходит по фрону (или спаду) импульса на этом входе. Ну а затем еще нужна простейшая подпрограммка обработки этого прерывания. Эта подпрограммка должна просто проверять значение линии порта PD3 и в зависимости от того, равно оно нули либо единице уменьшать либо увеличивать регулируемое значение.

 

Рассмотрим это подробнее. Допустим, что мы выбрали режим прерывания по фронту импульса. Представим, что контроллер выполняет основную программу, не связанную с энкодером. В какой то момент пользователь вращает рукоятку энкодера, например, влево. Контакты начинают замыкаться и размыкаться. По фронту импульса на входе INT0 в микроконтроллере происходит вызов прерывания. Это значит, что работа основной программы временно прерывается и контроллер переходит к подпрограмме обработки прерывания. Эта подпрограмма читает информацию из порта PD и оценивает содержимое разряда PD3. Так как рукоятка энкодера была повернута (мы договорились) вправо, то в этом разряде микроконтроллер обнаружит логическую единицу. Обнаружив единицу подпрограмма обработки прерывания увеличивает значение специальной ячейки, где хранится код, соответствующий текущей громкости. Код увеличивается на единицу. После этого подпрограмма заканчивает свою работу. Микроконтроллер снова переходит к выполнению своей основной программы. Если вращение в ту же сторону продолжается, то по фронту следующего импульса на INT0 опять будет вызвано прерывание и значение громкости снова увеличится на единицу. И так до тех пор, пока не прикратится вращение рукоятки энкодера либо не переполнится значение громкости. Подпрограмма должна проверять это значение и не увеличивать громкость, если она достигла максимума.

 

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

 

До сих пор мы говорили о простом механическом энкодере. Но наличие механических контактов всегда связано с такими явлениями, как дребезг, а так же помехи, вызванные плохим контактом в связи с засорением или износом. Все это приводит к низкой надежности работы механического энкодера. Поэтому в последнее время получают все болшее распространение оптоэлектрические энкодеры. В оптоэлектрическом энкодере вместо механических контактов используются оптопары: светодиод-фотодиод. Такой энкодер требует дополнительного внешнего питания, поэтому он имеет еще один вывод - вывод питания. Питаются такие энкодеры обычно от стабилизированного источника +5В и выдают на выходе сигналы, близкие к стандартным логическим уровням. В связи с этим, отпадает необходимость включать внутренние резисторы нагрузки для тех входов микроконтроллера, к которым подключен такой энкодер. В остальном, работа с оптоэлектронными энкодерами аналогична работе с простыми механическими моделями. К сожалению, использование оптоэлектронных энкодеров ограничено их высокой стоимостью.

 

 

Последнее обновление (04.05.2008 г.)

 






Не нашли, что искали? Воспользуйтесь поиском:

vikidalka.ru - 2015-2024 год. Все права принадлежат их авторам! Нарушение авторских прав | Нарушение персональных данных