ELECTRONICS

Энкодер для Arduino: инкрементальный, абсолютный и оптический — какой выбрать

Энкодер сообщает не положение, а приращение: «повернули на один щелчок вправо». У него нет крайних положений, крутить можно бесконечно в любую сторону. Именно поэтому его ставят в меню приборов, в 3D-принтеры и в самодельные пульты — значение можно менять и ручкой, и из программы, и они не спорят между собой.

Разница между видами энкодеров сводится к тому, как именно считываются повороты: механическими контактами, оптикой или магнитом.

Разборы конкретных моделей

Виды энкодеров

Механический инкрементальный (KY-040, EC11)

Самый распространённый и дешёвый. Внутри контакты, замыкаемые через прорези диска, двадцать щелчков на оборот, обычно есть кнопка на нажатие оси. Главная беда — дребезг контактов, из-за которого один щелчок считается несколькими. Ресурс несколько десятков тысяч поворотов.

Оптический инкрементальный

Вместо контактов светодиод и фотоприёмник, между ними диск с прорезями. Дребезга нет вообще, разрешение выше — сотни импульсов на оборот, ресурс практически неограничен. Дороже, крупнее и требует питания на подсветку. Ставят на станки и точные механизмы.

Магнитный абсолютный (AS5600)

Единственный из списка, который сообщает абсолютный угол: после выключения питания он помнит положение, точнее — измеряет его заново по магниту на валу. Разрешение двенадцать бит, то есть четыре тысячи положений на оборот, износа нет вовсе, подключение по I2C.

Инкрементальный или абсолютный

Инкрементальный энкодер знает только «на сколько щелчков повернули с момента включения». Выключили питание — счёт начинается с нуля. Для регулировки громкости или пункта меню это неважно, для позиционирования механизма — критично: после включения устройство не знает, где находится, и требует калибровки.

Абсолютный энкодер сообщает реальный угол в любой момент, без калибровки. За это платят ценой и сложностью подключения.

Дребезг: почему счётчик прыгает

Механические контакты в момент переключения не замыкаются один раз — они несколько раз стучат за пару миллисекунд. Микроконтроллер успевает посчитать этот стук как десяток поворотов, и счётчик прыгает или дёргается туда-сюда.

Лечится двумя способами сразу: программно игнорировать срабатывания чаще, чем раз в две-три миллисекунды, и аппаратно поставить конденсаторы на сто нанофарад между каждым фазовым выводом и землёй. У оптических и магнитных энкодеров этой проблемы нет по конструкции.