інкрементний енкодер

Раніше в своїх виробах на мікроконтролерах завжди обходився кнопками, але ось недавно на розбирання випадково потрапила в руки аппаратурка з енкодер, ось і вирішив спробувати цей девайс в справі.

Енкодери зазвичай застосовуються в магнітофонах для регулювання гучності та інших настройок: тембр, баланс, вибір меню, налаштування радіостанцій. Загалом застосовуються енкодери там, де раніше використовували змінні резистори.

Зовні енкодер дуже схожий на змінний резистор, але конструктивно є принципові відмінності

Головна перевага енкодера перед змінними резисторами в тому, що він обертається безперервно. В принципі, резистор теж можна доопрацювати, щоб він безперервно обертався, але для його обробки потрібно АЦП, а це вже збільшення бюджету апаратури. Та й до того ж не всі мікроконтролери мають вбудований АЦП.

Для підключення енкодер має три виходи. Центральний висновок загальний, а два крайніх при обертанні періодично замикаються із середнім висновком, формуючи імпульси.

Середній висновок загальний. Два крайніх висновок замикаються із середнім при обертанні вала енкодера.

Принцип роботи інкрементного енкодера полягає в тому, що при обертанні ручки на двох виходах формуєте імпульси. За кількістю імпульсів можна визначити кут повороту вала, а по фазовому зрушенню між двома сигналами визначають напрямок обертання. Якщо першим прийшов імпульс на правому контакті, то вал вращаетя в право. Якщо імпульс прийшов першим на лівому виведення, то вал відповідно обертається на ліво. Як правило енкодер дає 24 імпульсу на один повний оборот.

Графік сигналів енкодера при обертанні вала в різні боки

До мене в руки потрапили енкодери двох різних конструкцій, але результат їх роботи при цьому однаковий.

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

При обертанні вала радіальні контакти диска замикаються з пружними контактами.

Більш проста конструкція містить три обертових пружинних контакту і один нерухомий диск. На поверхні диска нанесена ізоляційна маска, яка при обертанні вала періодично перериває електричний контакт між висновками енкодера.

Вал енкодера має три контакти, які обертаються по диску з діелектричним малюнком. В результаті контакти замикаються між собою.

Зі зворотного боку вал має зубчики, які підпираються ресорами, для ефекту фіксації положень при обертанні вала.

Як випробуваного взяв першу потрапила тестову плату на мікроконтролері ATmega8. Крім контролера на платі мене цікавив роз'єм для програмування, контакти для підключення енкодера і інтерфейс для підключення до COM порту комп'ютера. Для забезпечення стабільності зв'язку мікроконтролера з ПК на платі передбачений кварцовий резонатор на 4МГц.

Тестова плата на основі МК ATmega8

Схема підключення енкодера дуже проста:
Середній висновок підключаємо на землю;
Правий вихід підключаємо до 4 висновок МК;
Лівий висновок підключаємо до 5 висновку МК ;.

Зазвичай правий і лівий контакт підтягують резистори до плюса харчування, але я цього робити не став, тому що порти МК вже мають вбудовані підтягують резистори 100кОм до висновку Vcc.

Далі в CodeVisionAVR на швидку руку написав простеньку тестову програму. В результаті її роботи мікроконтролер видає в термінал комп'ютера вміст лічильника і стан правого і лівого контактів енкодера. Станом контактів дуже добре стає зрозуміло, як працює енкодер.

Лічильник збільшується при обертанні енкодера вправо і зменшується при обертанні вліво.

Ось і сам текст програми (сміливо вставляємо його в проект для CodeVisionAVR, там все буде красиво і акуратно виглядати, а тут оформлення тексту програми сильно кульгає):

// -------- настройка USART -------------------------------------- --------------------------
UCSRB = 1<UCSRC = 1<UBRRH = 0x00; // швидкості передачі даних 9600 бод
UBRRL = 0x19;

// -------- настройка зовнішнього переривання ------------------------------------- -------------
GICR | = (0<MCUCR = (0<GIFR = (0<

SREG.7 = 1; // дозволяємо загальне переривання

printf ( "AVRmegaboard is ON! \ n \ r"); // контрольне повідомлення для ПК

Прошиваю його в мікроконтролер і ... ніфіга не працює, що не дивно! Якщо уважно подивитися на контактні доріжки енкодера, то добре видно вироблення, що труться. У слідстві чого спостерігається ефект дребезка контактів при їх перемиканні. А швидкодії МК досить щоб брязкіт багаторазово обробити як реальне спрацьовування енкодера.

Для боротьби з дребезгом вирішив не морочитися і не писати програмну захист від брязкоту контактів, а вступив старим дідівським способом - між виходами енкодера припаяв два конденсатора по 10нФ, видерті з тієї ж шарманки, що і енкодери. В результаті все запрацювало як треба! Підключаємо МК в COM порт і спостерігаємо покладені 24 імпульсу на один оборот валу енкодера.

Конденсатори припаяні між висновками енкодера для компенсації ефекту брязкоту контактів

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

P.S. В процесі випробувань жодного радіоелементу не постраждало! Енкодери благополучно зібрані назад і продовжують виконувати свої функції.

10 міс. Мітки: avr, енкодер

Схожі статті