Мобільна версія Форум Arduino Документація Гарантійні умови 0 0
UA RU
Графік роботи магазину:
Пн-Пт: 8.00 - 19.00
Сб: 10.00 - 17.00
Нд: вихідний
Каталог
Напиши статтю і отримай знижку!

Підключення енкодера до Ардуіно

2019-07-20

Всі статті →

Енкодери можна використовувати в Arduino проектах коли потрібно вирахувати кут нахилу або точно

покрутити сервопривод. Також енкодер можна використовувати для регулювання швидкістю мотора

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

багато раз клацати по кнопкам можна прокрутити енкодер.

 

Види енкодерів:

Абсолютні енкодери

Основною характеристикою абсолютних енкодерів - як оптичних, так і магнітних - є число кроків,

тобто унікальних кодів на оберт і кількість таких обертів. При цьому не потрібне початкове

встановлення «нуля» та ініціалізації. Найпоширеніші типи вихідного сигналу — це паралельний код.

Оптичні енкодери

Оптичні енкодери мають жорстко закріплений на валу скляний диск із прецизійною оптичною

шкалою. При обертанні об`єкта з закріпленим на ньому диском оптопара зчитує інформацію, а

електронна схема перетворює її в послідовність дискретних електричних імпульсів. Абсолютні оптичні

енкодери — це датчики кута повороту, де кожному положенню вала відповідає унікальний цифровий

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

Магнітні енкодери

Магнітні енкодери з високою точністю реєструють проходження магнітних полюсів магнітного

елемента, що обертається на малій відстані від чутливого елемента, і перетворюють цю

інформацію у відповідний цифровий код.

Механічні та оптичні енкодери з послідовним виходом

Мають у своєму складі діелектричний чи скляний диск з нанесеними на нього випуклими,

провідними чи непрозорими ділянками, відповідно до конкретної конструкції приладу. Визначення

абсолютного кута повороту диска виконується лінійкою вимикачів чи контактів у випадку механічної

схеми, або лінійкою оптопар, у випадку оптичної схеми. Вихідні сигнали являють собою код Грея,

який дозволяє позбутися неоднозначності інтерпретації сигналу.

https://i0.wp.com/alexgyver.ru/wp-content/uploads/2019/01/encoder-600x489.jpeg

Так як ми розглядаємо застосування енкодера в парі з Arduino - логічніше буде розглядати готові

енкодерние модулі, яких у китайців є кілька різних.

 

https://i0.wp.com/alexgyver.ru/wp-content/uploads/2019/01/96encoder.jpghttps://i0.wp.com/alexgyver.ru/wp-content/uploads/2019/01/enc2.jpghttps://i0.wp.com/alexgyver.ru/wp-content/uploads/2019/01/enc33.jpg

 

 

               Класичний                                     Продвинутий                                                     Промисловий

 

Підключення

Підключається модуль енкодера дуже просто: харчування на живлення (GND і VCC), логічні Піни CLK,

DT (тактові висновки енкодера) і SW (вивід кнопки) на будь-які Піни Arduino (D або A). У круглих

модулів виводи енкодера підписані як S1 і S2, а вивод кнопки як Key, підключаються точно так же. Від

порядку підключення тактових висновків енкодера залежить "напрямок" його роботи, але це можна

поправити в програмі.

https://i0.wp.com/alexgyver.ru/wp-content/uploads/2019/01/encS-1-600x338.jpg

У модулів енкодера тактові висновки підтягнуті до землі і дають високий сигнал при спрацьовуванні,

також на них стоять конденсатори. Контакт кнопки нікуди не підтягнутий! Промисловий енкодер

підключається точно так же, чорний і червоний дроти у ньогоживлення, інші - тактові виходи.

 

Програмування

Почнемо з того, що буває два типи енкодерів, я назвав їх одноімпульсні і двухімпульсні, тип енкодера

можна визначити за зовнішнім виглядом самого енкодера:

https://i0.wp.com/alexgyver.ru/wp-content/uploads/2019/01/types-1.jpg

Чим відрізняються енкодери на практиці: якщо опитувати одноімпульсний енкодер як

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

опитувати двухімпульсний як одноімпульсний, то для відпрацювання одного тика потрібно повернути

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

 

Я не знайшов в інтернеті нормальних бібліотек для енкодера з хорошою функціональністю, тому

написав свою, GyverEncoder. Що вміє:

  • Відпрацювання повороту рукоятки енкодера
  • Відпрацювання "натиснутого повороту" енкодера
  • Відпрацювання "швидкого повороту" енкодера
  • Робота з двома типами енкодерів
  • Відпрацювання натискання / кліка / утримання кнопки з антидребезга контактів

Увага! Параметри захисту віддрі брязкоту контактів і таймаут утримання кнопки налаштовується у

файлі .h бібліотеки майже на самому початку.

 

Основні функції та методи бібліотеки:

Encoder (uint8_t clk, uint8_t dt); // CLK, DT

Encoder (uint8_t, uint8_t, uint8_t); // CLK, DT, SW

Encoder (uint8_t, uint8_t, uint8_t, boolean); // CLK, DT, SW, тип (TYPE1 / TYPE2): TYPE1 однокроковий, TYPE2 двохкроковий. Якщо ваш енкодер працює дивно, змініть тип

void tick (); // опитування енкодера, потрібно викликати постійно або в перериванні

void setType (boolean type); // TYPE1 / TYPE2 - тип енкодера TYPE1 однокроковий, TYPE2 двохкроковий. Якщо ваш енкодер працює дивно, змініть тип

void setTickMode (boolean tickMode); // MANUAL / AUTO - ручний або автоматичний опитування

енкодера функцією tick (). (За замовчуванням ручний)

void setDirection (boolean direction); // NORM / REVERSE - напрямок обертання енкодера

void setFastTimeout (int timeout); // установка таймаута швидкого повороту

boolean isTurn (); // повертає true при будь-якому повороті, сама скидається в false

boolean isRight (); // повертає true при повороті направо, сама скидається в false

boolean isLeft (); // повертає true при повороті наліво, сама скидається в false

boolean isRightH (); // повертає true при утриманні кнопки і повороті направо, сама скидається в false

boolean isLeftH (); // повертає true при утриманні кнопки і повороті наліво, сама скидається в false

boolean isFastR (); // повертає true при швидкому повороті

boolean isFastL (); // повертає true при швидкому повороті

boolean isPress (); // повертає true при натисканні кнопки, сама скидається в false

boolean isRelease (); // повертає true при відпуску кнопки, сама скидається в false

boolean isClick (); // повертає true при натисканні і відпусканні кнопки, сама скидається в false

boolean isHolded (); // повертає true при утриманні кнопки, сама скидається в false

boolean isHold (); // повертає true при утриманні кнопки, не скидати

 

Підключення двох енкодерів

// два енкодера

#include "GyverEncoder.h"

Encoder enc1(4, 3, 2);

Encoder enc2(7, 6, 5);

void setup() {

Serial.begin(9600);

}

void loop() {

// обов`язкова функція відпрацювання. Повинна постійно опитуватись

enc1.tick();

enc2.tick();

if (enc1.isLeft()) Serial.println("enc 1 left");

if (enc1.isRight()) Serial.println("enc 1 right");

if (enc2.isLeft()) Serial.println("enc 2 left");

if (enc2.isRight()) Serial.println("enc 2 right");

}

 

Режим швидкого повороту

#define CLK 2

#define DT 3

#define SW 4

#include "GyverEncoder.h"

Encoder enc1 (CLK, DT, SW);

int value = 0;

void setup () {

Serial.begin (9600);

enc1.setType (TYPE1); // тип енкодера TYPE1 однокроковий, TYPE2 двохкроковий. Якщо ваш енкодер

працює дивно, змініть тип \ =

enc1.setFastTimeout (40); // таймаут на швидкість isFastR. Стандарт. 50

 

}

void loop () {

// обовёязкова функція відпрацювання. Повинна постійно опитуватись

enc1.tick ();

if (enc1.isRight ()) value ++; // якщо був поворот направо, збільшуємо на 1

if (enc1.isLeft ()) value--; // якщо був поворот наліво, зменшуємо на 1

if (enc1.isRightH ()) value + = 5; // якщо було утримання + поворот направо, збільшуємо на 5

if (enc1.isLeftH ()) value - = 5; // якщо було утримання + поворот наліво, зменшуємо на 5

if (enc1.isFastR ()) value + = 10; // якщо був швидкий поворот направо, збільшуємо на 10

if (enc1.isFastL ()) value - = 10; // якщо був швидкий поворот наліво, зменшуємо на 10

if (enc1.isTurn ()) {// якщо був здійснений поворот (індикатор повороту в будь-яку сторону)

Serial.println (value); // виводимо значення при повороті

}

}

 

У бібліотеці містяться додаткові приклади роботи з енкодером

 

Застосування енкодерів

Оптичні енкодери набули найбільшого поширення в промисловості, станочному обладнанні,

виробничих лініях, роботизованих механізмах - всюди, де потрібно контролювати рух або

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

відпрацьована і давно зробила крок до країн Південно-Східної Азії.

 

Області застосування енкодерів

В даний час найбільш затребувані оптичні енкодери з порожнистим валом - вони надійні в роботі, їх

легше встановлювати, зручніше налаштовувати і обслуговувати.

 

Посилання:

Ваша оцінка статті:

Відмінно
Добре
Задовільно
Погано
Дуже погано

Загальна оцінка:

Оцінка "Підключення енкодера до Ардуіно"
2 з 5
зроблена на основі 5 оцінок 5 клієнтських відгуків.

Дякуємо Вам за звернення! Ваш відгук з'явиться після модерації адміністратором.
вася
05.12.2019 12:22:40
жах
ВАСИЛИЙ
19.11.2019 23:27:40
Страшно корявый перевод и если судить по дате первого отзыва, а это уже почти три месяца, то наверно никто перевод исправлять не будет. Правильнее будет если разместить ссылку на первоисточник.
Олександр
28.10.2019 16:31:49
Немає форматування коду, мова й дійсно не зрозуміла
Guest
30.09.2019 12:20:41
Мова статті жахлива. Переклад Gyver''s
Тарас Шевченко
29.08.2019 08:46:45
Мова статті жахлива. Таке враження, що перекладено з іншо мови з використанням GoogleTranslate без редактування.
оплата картами Visa і MasterCard