- Поворотний кодер та його типи
- KY-040 Поворотний кодер Розпіновка та опис
- Як працює поворотний кодер
- Потрібні компоненти
- PIC16F877A Схема взаємодії поворотного кодера
- Пояснення коду
Регулятор, що обертається являє собою пристрій введення, яке дозволяє користувачеві взаємодіяти з системою. Він більше схожий на радіопотенціометр, але виводить послідовність імпульсів, що робить його застосування унікальним. Коли обертається регулятор кодера, він обертається у вигляді невеликих кроків, що допомагає використовувати його для керування кроковим / сервомотором, навігації по послідовності меню та збільшення / зменшення значення числа та багато іншого.
У цій статті ми дізнаємося про різні типи поворотних кодерів та як це працює. Ми також будемо взаємодіяти з мікроконтролером PIC16F877A та контролювати значення цілого числа, обертаючи кодер, і відображати його значення на РК-екрані 16 * 2. Наприкінці цього підручника вам буде зручно використовувати поворотний кодер для ваших проектів. Тож давайте почнемо…
Поворотний кодер та його типи
Поворотний кодер часто називають датчиком вала. Це електромеханічний перетворювач, тобто він перетворює механічні рухи в електронні імпульси або, іншими словами, перетворює кутове положення або рух або положення вала у цифровий або аналоговий сигнал. Він складається з ручки, яка при обертанні рухатиметься крок за кроком і створюватиме послідовність імпульсних послідовностей із заздалегідь визначеною шириною для кожного кроку.
На ринку існує багато типів поворотних кодерів, які дизайнер може вибрати один відповідно до своєї заявки. Найпоширеніші типи перелічені нижче
- Інкрементний кодер
- Абсолютний кодер
- Магнітний кодер
- Оптичний кодер
- Лазерний кодер
Ці кодери класифікуються на основі вихідного сигналу та технології зондування, інкрементальний кодер та абсолютні кодери класифікуються на основі вихідного сигналу, а магнітний, оптичний та лазерний кодери класифікуються на основі технології зондування. Кодувальника тут використовується тип датчика Інкрементальний.
Абсолютний кодер зберігає інформацію про позицію навіть після відключення живлення, і інформація про позицію буде доступна, коли ми знову застосуємо до неї живлення.
Інший базовий тип, інкрементний кодер, надає дані, коли кодер змінює своє положення. Він не міг зберегти інформацію про позицію.
KY-040 Поворотний кодер Розпіновка та опис
Розпінації поворотного кодера типу KY-040 показані нижче. У цьому проекті ми взаємодіємо цей поворотний кодер з популярним мікроконтролером PIC16F877A від мікрочіпу.
Перші два висновки (Ground і Vcc) використовуються для живлення кодера, як правило, використовується джерело живлення + 5 В. Окрім обертання ручки за годинниковою стрілкою та проти годинникової стрілки, кодер також має перемикач (активний низький), який можна натиснути, натиснувши на ручку всередині. Сигнал від цього перемикача отримується через штифт 3 (SW). Нарешті, він має два вихідні штифти (DT і CLK), які виробляють сигнали, як уже обговорювалося нижче. Ми вже поєднували цей поворотний кодер з Arduino.
Як працює поворотний кодер
Вихід повністю залежить від внутрішніх мідних колодок, які забезпечують з'єднання GND і VCC з валом.
Є дві частини Ротаційного кодера. Колесо вала, яке з'єднане з валом і обертається за годинниковою стрілкою або проти годинникової стрілки в залежності від обертання вала і основи, де виконано електричне підключення. Основа має порти або точки, які підключені до DT або CLK таким чином, що коли колесо вала обертається, воно з'єднуватиме базові точки і надаватиме квадратну хвилю як на порту DT, так і на CLK.
Вихід буде таким, як коли вал обертається-
Два порти забезпечують прямокутну хвилю, але є невелика різниця в термінах. Завдяки цьому, якщо ми приймаємо вихід як 1 і 0, може бути лише чотири стани, 0 0, 1 0, 1 1, 0 1. Послідовність двійкового виходу визначає поворот за годинниковою стрілкою або проти годинникової стрілки. Як, наприклад, якщо поворотний кодер забезпечує 1 0 в режимі очікування і надає 1 1 після цього, це означає, що кодер змінює своє положення на один крок у напрямку за годинниковою стрілкою, але якщо він надає 0 0 після простою 1 0, означає, що вал одним кроком змінює свої позиції проти годинникової стрілки.
Потрібні компоненти
Настав час визначити, що нам потрібно для взаємодії поворотного кодера з мікроконтролером PIC,
- PIC16F877A
- Резистор 4.7k
- 1k резистор
- 10к горщик
- 33pF керамічний дисковий конденсатор - 2шт
- Кристал 20 МГц
- Дисплей 16x2
- Поворотний кодер
- Адаптер 5 В.
- Хлібна дошка
- Підключення проводів.
PIC16F877A Схема взаємодії поворотного кодера
Нижче наведено зображення остаточного налаштування після підключення компонентів відповідно до принципової схеми:
Ми замість потенціометра використовували один резистор 1К для контрастності РК-дисплея. Також перевірте повне робоче відео, подане в кінці.
Пояснення коду
Повний код PIC наведено в кінці цього проекту з демонстраційним відео, тут ми пояснюємо кілька важливих частин коду. Якщо ви новачок у мікроконтролері PIC, дотримуйтесь наших посібників з PIC з самого початку.
Як ми вже обговорювали раніше, нам потрібно перевірити вихідні дані та диференціювати двійковий вихід як для DT, так і для CLK, тому ми створили частину if-else для операції.
if (Encoder_CLK! = position) { if (Encoder_DT! = position) { // lcd_com (0x01); лічильник ++; // Збільшити лічильник, який буде надруковано на рідкокристалічному lcd_com (0xC0); lcd_puts (""); lcd_com (0xC0); lcd_bcd (1, лічильник); } ще { // lcd_com (0x01); lcd_com (0xC0); лічильник--; // зменшити лічильник lcd_puts (""); lcd_com (0xC0); lcd_bcd (1, лічильник); // lcd_puts ("Ліворуч"); } }
Нам також потрібно зберігати позицію на кожному кроці. Для цього ми використали змінну “position”, яка зберігає поточну позицію.
position = Encoder_CLK; // Він зберігає позицію годинника кодера для змінної. Може бути 0 або 1.
Крім цього, передбачена опція сповіщення про натискання перемикача на РК-дисплеї.
if (Encoder_SW == 0) { sw_delayms (20); // затримка розмови якщо (Encoder_SW == 0) { // lcd_com (1); // lcd_com (0xC0); lcd_puts ("перемикач натиснутий"); // itoa (лічильник, значення, 10); // lcd_puts (значення);
System_init функція використовується для ініціалізації контактного I / O операції, LCD і зберігати позицію кругового датчика.
void system_init () { TRISB = 0x00; // ПОРТ B як вихід, цей порт використовується для РК-дисплеїв TRISDbits.TRISD2 = 1; TRISDbits.TRISD3 = 1; TRISCbits.TRISC4 = 1; lcd_init (); // Це ініціалізує позицію РК-дисплея = Encoder_CLK; // Позначає позицію CLK у системному ініціаліті до початку циклу while. }
Функція LCD записується в бібліотеці lcd.c та lcd.h, де оголошуються lcd_puts (), lcd_cmd ().
Для оголошення змінної, бітів конфігурації та інших фрагментів коду, будь ласка, знайдіть повний код нижче.