Каталог товарів
Клієнту
Тема сайту:
+38 (066) 305-77-25
Наша адреса
Україна, тимчасово - доставка тільки Новою Поштою, УкрПоштою, МістПошта, ROZETKA Delivery
Телефони
Графік роботи
  • Пн-Пт: з 9 до 18
  • Сб: з 10 до 17
  • Нд: з 11 до 16
E-mail
Ми в соцмережах
Перейти до контактів
0 0
Каталог
Головна
Закладки
0
Порівняти
0
Контакти

Енкодер замість потенціометра: як одна ручка керує цілим меню

Чи була корисною ця стаття?
Енкодер замість потенціометра: як одна ручка керує цілим меню

Інтерфейси для мікроконтролерів

Енкодер замість потенціометра: як одна ручка керує цілим меню

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

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

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

Зміст статті

Ручки-близнюки, але не родичі

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

У потенціометра положення вала пов’язане зі станом резистивного подільника. Якщо ручка повернута приблизно наполовину, контролер може виміряти відповідну частку напруги. Енкодер працює інакше: він не каже «я стою на 47%». Він каже «щойно був перехід у цей бік» — і залишає програмі всю бухгалтерію.

«Замість потенціометра» — не означає «в ту саму схему».

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

Порівняння потенціометра, що формує напругу за положенням повзунка, та енкодера з каналами A і B
Потенціометр віддає електричне відношення, пов’язане з положенням. Енкодер віддає послідовність переходів, а значення створює програма.

Що повідомляє потенціометр

У найвідомішому режимі потенціометр — це резистивна доріжка з двома кінцями та рухомим повзунком. Між крайніми контактами подаємо напругу, а з повзунка отримуємо її частку. Вихідне відношення залежить від положення, хоча в реальному колі на нього також впливають навантаження, кінцевий опір і характеристика самої доріжки.[1]

Сильна сторона потенціометра

Положення ручки саме по собі зберігає уставку. Вимкнули живлення, повернулися завтра — вал нікуди не подівся. Фізична риска на панелі досі щось означає.

Його обмеження

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

Тому потенціометр чудово почувається у простому аналоговому регуляторі, на панелі з підписаною шкалою або там, де пристрій має працювати без мікроконтролера. Йому не потрібне меню, щоб бути корисним. Іноді це не старомодність, а дуже здорова інженерна лінь.

Що повідомляє інкрементальний енкодер

Механічний інкрементальний енкодер зазвичай має два канали — A і B — та спільний контакт C. Під час обертання контакти перемикаються у визначеному порядку. Контролер бачить послідовність логічних станів і з неї відновлює напрямок та кількість переходів. Сам абсолютний кут така деталь не повідомляє.[2]

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

«360°» тут означає безперервне обертання.

Ручку можна крутити без механічних кінцевих упорів. Це не обіцянка отримати число кута від 0° до 360°.

А де кнопка?

Багато панельних енкодерів мають окремий натискний контакт на валу. Він електрично не є частиною квадратурних каналів: це звичайна кнопка, яку програма може використати для підтвердження, входу в режим редагування або повернення. Але слово «EC11» ще не гарантує ані кнопки, ані конкретної кількості фіксацій. Офіційна серія Alps EC11E містить різні комбінації імпульсів, фіксацій і виконань із кнопкою або без неї.[4]

Чотири стани квадратури: де ховається напрямок

Два входи дають чотири можливі комбінації: 00, 01, 11 і 10. У правильному сусідньому переході змінюється лише один біт. Один умовний напрямок виглядає так:

Навчальна модель

Напрямок 1: 0001111000
Напрямок 2: 0010110100

Який із них фізично буде «праворуч», залежить від маркування каналів, орієнтації деталі та порядку підключення A/B.

Саме порядок станів, а не один окремий рівень, показує напрямок. У документації TI цей принцип описано як визначення того, який із двох сигналів випереджає інший.[3]

Кільце станів квадратурного енкодера 00, 01, 11 і 10 з напрямками переходів
Напрямок ховається не в одному рівні A чи B, а в порядку переходів між чотирма станами.

Навіщо дивитися на обидва біти

Стрибок 00 → 11 змінює обидва біти одночасно. Для ідеальної квадратури це не сусідній стан. Така подія означає, що програма пропустила проміжну вибірку, контакти створили заваду або сигнал обробляється надто грубо. Таблиця переходів дозволяє не приймати кожен фронт на віру.

Клік, імпульс, фронт і count: четверо біля однієї ручки

У картках товарів і бібліотеках ці слова часто гуляють без бейджиків. Звідси народжується дивна арифметика: той самий енкодер в одному прикладі має 20 кроків, у другому — 40, а в третьому раптом 80.

Що саме ми рахуємо
Термін Що це Хто це бачить
Фіксація, detent Механічне положення, яке відчувається пальцем як «клік». Людина
Імпульс / цикл Повторювана електрична форма сигналу; визначення залежить від datasheet. Осцилограф або специфікація
Фронт Одна зміна LOW→HIGH або HIGH→LOW на каналі. GPIO, переривання
Count Одиниця, яку додає програмний або апаратний декодер. Алгоритм

У конкретній демонстрації TI енкодер із 20 механічними фіксаціями давав чотири лічильні зміни між сусідніми фіксаціями. Це корисний приклад, але не універсальний закон для кожного KY-040 чи EC11.[3] Виробники прямо випускають моделі, де кількість фіксацій і імпульсів не збігається.[4]

Відмінність між механічною фіксацією, електричним імпульсом, фронтом сигналу та програмним відліком
Клік відчуває палець, фронт бачить GPIO, а count визначає алгоритм. Це родичі, але не синоніми.

Чому значення стрибає назад: брязкіт і пропущені переходи

У механічному контакті металеві поверхні не завжди переходять із розімкненого стану в замкнений одним ідеальним рухом. Вони можуть кілька разів коротко торкнутися й розійтися. На екрані це виглядає як зайві кроки, короткий рух у протилежний бік або пропущена команда. Контактні енкодери потребують debounce так само серйозно, як кнопки.[2]

Чому одного delay() мало

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

Надійніша стратегія
  • регулярно читати обидва канали;
  • приймати лише сусідні квадратурні переходи;
  • накопичувати повну валідну послідовність;
  • лише після неї видавати подію меню;
  • окремо фільтрувати натискну кнопку.

Апаратні C/R-ланцюги можуть допомогти, але не видають довідку про безумовне звільнення програміста від відповідальності. Alps радить враховувати швидкість обертання, час вибірки, masking time та конкретне виконання енкодера.[5]

Polling чи interrupts?

Для ручки меню регулярне неблокувальне опитування часто достатнє, якщо цикл гарантовано встигає побачити переходи. Переривання корисні, коли основний код може надовго зайняти процесор або контролер має апаратний квадратурний лічильник. Але ISR не повинна оновлювати дисплей, записувати пам’ять чи вирішувати долю всього меню. Її робота — швидко зафіксувати стан або подію.

Як електричні переходи стають цілим меню

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

  1. Вхідний шар читає A/B та, якщо вона виведена, кнопку SW.
  2. Декодер перетворює валідні послідовності на LEFT, RIGHT, PRESS.
  3. Інтерпретатор додає довге натискання або прискорення.
  4. Стан меню вирішує: перейти до іншого пункту, змінити число чи підтвердити вибір.
Три шари обробки енкодера від контактів A B і кнопки до подій та стану меню
Надійне меню починається з розділення відповідальності: контакти дають переходи, декодер — події, а меню вирішує їхнє значення.

Мінімальний декодер повного електричного циклу

Нижче — незалежний навчальний фрагмент, який приймає вже прочитані рівні A/B. Таблиця нараховує лише сусідні переходи; діагональний стрибок скидає незавершену послідовність. Знак напрямку умовний: якщо ручка рахує навпаки, поміняйте A і B місцями або інвертуйте подію.

C++ / Arduino-style — один крок на повний електричний цикл
#include <stdint.h>

enum EncoderStep : int8_t {
  ENC_LEFT  = -1,
  ENC_NONE  =  0,
  ENC_RIGHT =  1
};

EncoderStep decodeEncoder(bool a, bool b) {
  static bool initialized = false;
  static uint8_t previous = 0;
  static int8_t quarterSteps = 0;

  static const int8_t move[16] = {
     0, +1, -1,  0,
    -1,  0,  0, +1,
    +1,  0,  0, -1,
     0, -1, +1,  0
  };

  const uint8_t current = (uint8_t(a) << 1) | uint8_t(b);

  if (!initialized) {
    previous = current;
    initialized = true;
    return ENC_NONE;
  }

  const int8_t delta = move[(previous << 2) | current];

  if (delta == 0 && current != previous) {
    quarterSteps = 0;          // пропущений або спотворений стан
  } else {
    quarterSteps += delta;
  }

  previous = current;

  if (quarterSteps >= 4) {
    quarterSteps = 0;
    return ENC_RIGHT;
  }
  if (quarterSteps <= -4) {
    quarterSteps = 0;
    return ENC_LEFT;
  }

  return ENC_NONE;
}
Число 4 у коді — межа повного електричного циклу, а не обіцянка «один клік = чотири фронти».

У конкретного енкодера механічна фіксація може припадати на іншу частину циклу. Спочатку перевірте послідовність своєї деталі, потім визначайте, де саме інтерфейс має видати один користувацький крок.

Прискорення — властивість програми

Якщо валідні події надходять повільно, меню змінює параметр по одиниці. Якщо швидко — крок можна збільшити до 5, 10 або іншого доречного значення. Це зручно для частоти, таймера чи лабораторного джерела живлення: повільно налаштовуємо точно, швидко проходимо великий діапазон. Сам енкодер про прискорення нічого не знає.

Підтягування та логічні рівні: де 5 В перестають бути дрібницею

Механічний контакт не створює HIGH сам по собі. Коли канал розімкнений, вхід потрібно підтягнути до визначеного логічного рівня. Коли контакт замикається на common/GND, вхід стає LOW. Для кнопки між входом і GND Arduino документує той самий активний LOW із режимом INPUT_PULLUP.[7]

На ATmega328P внутрішні підтягувальні резистори мають гарантований діапазон 20–50 кОм — це параметр саме цього мікроконтролера, а не універсальна константа для всіх плат.[6]

Підтягуйте сигнал до логічного домену контролера.

Якщо модуль має зовнішні резистори до 5 В, його вихід може піднятися до 5 В. Це неприйнятно для GPIO, які допускають лише 3,3 В. Наприклад, офіційна документація Raspberry Pi прямо обмежує вхід GPIO максимумом 3,3 В.[8]

Перед підключенням 3,3-вольтового контролера подивіться не лише на назву модуля, а й на його схему: куди під’єднані pull-up, де common, чи є послідовні резистори та конденсатори. Механічному енкодеру живлення як таке часто не потрібне — воно потрібне платі навколо нього, щоб сформувати рівні й фільтрацію.

Коли енкодер справді кращий — а коли залишити потенціометр

Вибір за задачею, а не за модою
Задача Кращий кандидат Чому
Пряме аналогове регулювання Потенціометр Працює без прошивки та одразу формує електричне відношення.
Ручка зі шкалою 0…100% Потенціометр Фізичне положення залишається видимою уставкою.
Навігація дисплейним меню Енкодер Необмежене прокручування, контекстні команди та натискання.
Великий числовий діапазон Енкодер Програмний крок і прискорення без механічної шкали.
Значення змінюється також дистанційно Енкодер Ручка не претендує на абсолютне положення й не суперечить стану програми.
Уставка має пережити вимкнення без пам’яті Потенціометр Механічне положення зберігається фізично.

Три модулі MyProject: схожа ручка, різні контакти

У каталозі є три модулі, які підходять для експериментів із квадратурним введенням. Тут важливіше не вгадати «найкращий», а прочитати маркування саме своєї плати.

Практичні відмінності видимих інтерфейсів
Модуль Контакти на платі Вихід кнопки Практичний сценарій
KY-040, SKU 1228 GND, +, SW, DT, CLK Окремо позначений SW Макетування меню з обертанням і підтвердженням.
EC11 на круглій PCB, SKU 1414 GND, S1, S2, KEY, 5V Окремо позначений KEY Панельна ручка для меню; точне співвідношення кліків і переходів слід перевірити.
Модуль A/C/B, SKU 1702 VCC, GND, A, C, B Не виведений Обертання й регулювання; для підтвердження меню потрібна окрема кнопка.

Для SKU 1702 постачальник заявляє виконання на 20 імпульсів за оберт. Це не слід автоматично перекладати як «20 механічних кліків»: кількість фіксацій і спосіб програмного підрахунку — окремі характеристики.

Модулі енкодерів MyProject KY-040, EC11 з виходом KEY та модуль A C B без виходу кнопки
Схожа ручка не гарантує однаковий інтерфейс: перед підключенням читаємо маркування саме своєї плати.

Чекліст перед першим обертанням

  • Знайдіть A/B або CLK/DT і не плутайте їх із кнопкою.
  • Визначте common та перевірте, куди він під’єднаний.
  • З’ясуйте, до якої напруги підтягнуті виходи.
  • Не подавайте 5 В на 3,3-вольтовий GPIO без перевірки.
  • Зчитайте обидва біти й перевіряйте допустимі переходи.
  • Не використовуйте довгий блокувальний delay() як єдиний debounce.
  • Перевірте один повний оберт і порахуйте реальні події.
  • Відокремте декодер від логіки дисплея та меню.
  • Зберігайте уставку програмно, якщо вона має пережити вимкнення.
  • Перевірте, чи кнопка справді виведена на контакти модуля.

Поширені запитання

Чи можна під’єднати енкодер до будь-яких цифрових входів?
Якщо ці входи підтримують потрібні логічні рівні й програма читає їх достатньо часто — так. Для переривань або апаратного квадратурного блока вибір пінів уже залежить від конкретного MCU.
Чи обов’язково використовувати переривання?
Ні. Для ручного введення регулярне неблокувальне опитування може бути достатнім. Важливо не саме слово «interrupt», а гарантія, що всі потрібні переходи будуть побачені.
Чому після перезавантаження значення стало нульовим?
Інкрементальний енкодер не зберігає абсолютне положення. Значення потрібно відновити з незалежної пам’яті або задати початково.
Чому напрямок у моєму скетчі зворотний?
Порядок A/B відносний. Поміняйте канали місцями або інвертуйте знак події. Це не несправність енкодера.
Чи означає напис «20 pulses» двадцять кліків?
Не обов’язково. Потрібно окремо знати кількість механічних фіксацій, визначення pulse у datasheet і режим підрахунку програми.
Чи може енкодер керувати аналоговою гучністю?
Так, але опосередковано: контролер має змінювати цифровий потенціометр, ЦАП, кодек або інший електронний регулятор. Сам механічний енкодер не стоїть у сигнальному тракті як резистивний подільник.

Головне правило ручки

Потенціометр відповідає на питання «де я стою?». Інкрементальний енкодер — «куди й наскільки щойно зрушили?». Перший зручний там, де фізичне положення саме є уставкою. Другий — там, де значення живе у програмі, змінюється з різних джерел і залежить від контексту екрана.

Щоб одна ручка справді керувала цілим меню, не потрібна таємна бібліотека. Потрібні чотири дисципліновані кроки: правильно сформувати логічні рівні, прочитати обидва канали, приймати лише валідні переходи й віддати чисті події окремому автомату меню. Решта — вже дизайн інтерфейсу, де навіть один клік має знати свою посадову інструкцію.

Технічні джерела

  1. BournsThe Potentiometer Handbook — підтримує модель потенціометра як подільника, зв’язок виходу з положенням повзунка та практичні похибки.
  2. Texas InstrumentsIncremental Rotary Encoders, SBOA200B, revised December 2021 — підтримує інкрементальну модель, двоканальне визначення напрямку та потребу debounce для контактних енкодерів.
  3. Texas InstrumentsQuadrature Encoder Position Counter With MSP430 MCUs, SLAA795, 2017 — підтримує квадратурний автомат станів і показує межі перенесення count-per-detent між моделями.
  4. Alps AlpineEC11E Series, 11 mm Size Metal Shaft Type — підтримує різноманіття фіксацій, імпульсів і виконань із кнопкою/без кнопки в одному сімействі.
  5. Alps AlpineMetal Shaft Encoder Product Catalog, update 2510 — підтримує вимоги враховувати швидкість, sampling/masking time та C/R-фільтри.
  6. MicrochipATmega328P Datasheet, 7810D–AVR–01/15 — підтримує параметри внутрішніх pull-up і пороги GPIO саме ATmega328P.
  7. ArduinoINPUT_PULLUP та Digital Input Pull-Up Resistor — підтримує активний LOW для контакту між входом і GND.
  8. Raspberry PiA history of GPIO usage on Raspberry Pi devices and current best practices — підтримує межу 3,3 В для входів GPIO Raspberry Pi.

© 2026 Мій Проект. Автор: Jazzzman. Використання матеріалів дозволено лише з посиланням на джерело.

Рекомендовані товари
Схожі статті
Як подружитися з даташитом: на прикладі MOSFET IRF840
Як подружитися з даташитом: на прикладі MOSFET IRF840
Блог, Інструкції Підключення та Огляди
25 квітня 2025
Таємниці логічних рівнів
Таємниці логічних рівнів
Блог, Електроніка для початківців
25 травня 2025
ШІМ (PWM): як керувати яскравістю світлодіодів та швидкістю моторів
ШІМ (PWM): як керувати яскравістю світлодіодів та швидкістю моторів
Блог, Електроніка для початківців
14 грудня 2025
Перекладачі реальності: Як АЦП та ЦАП з'єднують наш світ із цифровим
Перекладачі реальності: Як АЦП та ЦАП з'єднують наш світ із цифровим
Блог, Електроніка для початківців
25 грудня 2025