цифровая электроника
вычислительная техника
встраиваемые системы

 

Подключение оптического энкодера к Arduino

Автор: Mike(admin) от 15-09-2014, 10:25

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


Плату Arduino также можно научить работать с оптическим энкодером, что позволит реализовать больше интересных и практичных устройств.


Оптопрерыватель


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


Оптопрерыватель

Диск энкодера


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


Диск энкодера

Следует заметить, что ширина щели и ширина непрозрачных частей являются важными параметром диска. Для каждой модели оптопрерывателя желательно подобрать рекомендуемую ширину соответствии с документацией на это прерыватель. При этом ширину лучше взять с запасом. Например, если рекомендуемая ширина 1 мм, то ширину непрозрачных полос и щелей лучше сделать 2 мм. Если частота вращения диска составляет 60 оборотов в минуту, то за одну секунду диск повернется на один оборот. Если диск имеет 36 полос, то частота импульсов составит 36 Гц, что может быть легко обработано фотопрерывателем.


Аппаратная часть


Для начала нужно собрать представленную ниже схему, которая состоит из Arduino и оптопрерывателя с обвязкой. Резистор R2 является подтягивающим. Значение резистора R1 зависит от того, какой прерыватель вы используете. К выводу D13 подключается светодиод, который срабатывает при прерывании луча. D12 представляет собой вспомогательный выход, который может быть использован для мониторинга сигнала энкодера на экране осциллографа.


Подключение оптического энкодера к Arduino

Проверка


После подключения электроники и прошивки Arduino вставьте диск в выемку оптопрерывателя. Подключите осциллограф к D12 и вращайте диск. Если нет под рукой осциллографа, то наблюдайте за подключенным к D13 светодиодом. В данном случае вращайте диск медленно, чтобы импульсы были визуально заметны.


Подключение оптического энкодера к Arduino

Код



const int encoderIn = 8; // вход для прерывателя
const int statusLED = 13; // выход для индикации
const int pulseOutput = 12; // выход для осциллографа
int detectState=0; // переменная для чтения состояния энкодера
void setup()
{
pinMode(encoderIn, INPUT); //Настраиваем контакт 8 на вход
pinMode(statusLED, OUTPUT); //Настраиваем контакт 13 на выход
pinMode(pulseOutput, OUTPUT); // Настраиваем контакт 12 на выход
}
void loop() {
detectState=digitalRead(encoderIn);
if (detectState == HIGH) { //Если выход энкодера в высоком логическом состоянии
digitalWrite(statusLED, HIGH); //включаем светодиод
digitalWrite(pulseOutput,HIGH); //выход 13 устанавливаем в высокое логическое состояние
}
else {
digitalWrite(statusLED, LOW); //выключаем светодиод
digitalWrite(pulseOutput,LOW); //выход 13 устанавливаем в низкое логическое состояние
}
}

Возможности улучшения кода


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




© digitrode.ru


<Via>


Теги: Arduino




Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.

Комментарии:

Оставить комментарий