Страница 1 из 1

Энкодер для ESP32

Добавлено: 16 июл 2025, 20:59
Dryundel
Энкодер для ESP32
.
Параметры.jpg
Энкодер_для_ESP32_v1.0(b).ubi
.
Тест-проект EncESP32.jpg
Test Encoder ESP32 v1.0(b).flp
.
Блок EncESP32 стабильно работает на ESP32 Dev Module
Другие платформы не тестировались.
Написано в FLProg 9.4.0

Поддерживается до 8 энкодеров в одном проекте.
Если у вас самый дешевый и убитый энкодер без обвязки, то есть шанс что заработает. :)

Для работы необходимо установить библиотеку ESP32Encoder (Kevin Harrington)
Из Менеджера библиотек в Arduino IDE (Обновления рекомендуются)

Re: Энкодер для ESP32

Добавлено: 16 июл 2025, 21:00
Dryundel
Черновик описания.

Несмотря на обилие настроек и расширенный функционал, блок генерирует минимум кода. Неиспользуемые функции вырезаются. Библиотека ESP32Encoder (Kevin Harrington) так же показала себя скромно по ресурсозатратности. Однако работает она, на мой взгляд весьма эффективно. Кроме того есть возможности как улучшить качество считывания, так и облегчить работу процессора. Первое полезно в случае позиционирования чего то с помощью энкодера. Второе даёт возможность навесить достаточно много энкодеров на контроллер, без особого ущерба производительности.
Для этого предусмотрены все 3 режима считывания данных.
Информацию о том, как устроен инкрементный энкодер, вы легко найдёте в Интернете.

Кратко про считывание (требуется для понимания при настройке):
У энкодера 2 квадратурных канала. На каждом канале есть фронты и спады(задние фронты).
FullQuad (полный квадрат) выполняет инкремент счётчика по всем 4 фронтам с помощью прерываний.
HalfQuad (полуквадрат) — по нарастающему и спадающему фронтам одного канала.
SingleEdge (одиночный край) — только по нарастающему фронту канала A.

Соответственно у FullQuad самое высокое разрешение. Для обычного дешевого KY-040 это даёт 80 точек положения которые можно отследить. И если убрать трещётку, то легко можно сделать псевдо-абсолютный энкодер с шагом 4,5 градуса.

Кроме параметра режима считывания есть параметр - квадратурный делитель. С помощью него и пересчитывается количество импульсов в целом обороте энкодера на один физический щелчок вашего девайса. Поэтому для разных режимов считывания требуется свой квадратурный делитель.

SingleEdge - самый лёгкий (программно) режим. Однако без помощи фильтра дребезга, KY-040 на нём будет глючить. Поставив на вскидку значение фильтра 500, я получил адекватную работу своего девайса. Но под рукой оказался не самый плохой. Такие энкодеры я бы рекомендовал к применению.
.
Фото энкодера.jpg
.
И хотя фильтры являются дополнительными ресурсозатратами, это гораздо меньшее "зло" чем 8 прерываний на один физический щелчок энкодера. Находите золотую середину и удача вам улыбнётся.

Теперь о подтяжке пинов.

Подтяжка энкодеру необходима. Но это не означает что её надо обязательно включать в настройках. Если у вас энкодер имеет нормальную RC обвязку, то подтяжка там уже выполнена физически и ничего добавлять не надо. Если же вы пытаетесь подключить "голый" энкодер то можно воспользоваться и внутренней (программной) подтяжкой. PULL_UP подтягивает к VCC, а PULL_DOWN - к GND. Куда подтягивать разницы нет. Главное оба пина одинаково. Это повлияет лишь на направление вращения, которое можно изменить поменяв пины местами.
Внимание! Эта настройка является общей для всех энкодеров проекта. При смене её в одном блоке, во всех остальных она изменится автоматически.
Важно помнить!
На ESP не все пины имеют внутреннюю подтяжку. И даже те, на которых она заявлена даташитом не всегда работают. Например пин D2 на ESP32 Dev Module занят пользовательским светодиодом тянущим его к GND. Поэтому PULL_UP на нём бесполезен, но сработает PULL_DOWN.
Всё же я бы рекомендовал использовать для подтяжки физические резисторы 1-10 кОм.

Фильтры дребезга.
Как и все механические девайсы, KY-040 страдает износом контактов, что создаёт дребезг. Избавиться от неадекватного поведения такого устройства помогают программные фильтры. Блок имеет такую настройку. Иногда она очень помогает. С помощью неё есть вероятность заставить работать даже убитый энкодер, который с другими блоками нормально запустить не удалось. Задав значение от 1 до 1023 можно экспериментально подобрать удовлетворительный режим. Если поставить "0", то фильтр будет отключён.

Стартовое значение.
Ну тут всё просто. Это значение будет на выходе Num всякий раз при включении или перезагрузке контроллера.

Вход предустановки Set.
С помощью этого входа значение на выходе Num принудительно становится равно значению на входе Num.

Вход Rst сбрасывает значение выхода Num в "0".

Лимиты энкодера.
Это те значения, которые будут максимумом и минимумом на выходе Num. Достигнув их счет остановится. Если же отключить лимиты, то счёт будет идти до условной бесконечности, а именно от -2 147 483 648 до 2 147 483 647. Даже если вы будете интенсивно крутить рукой свой девайс, без перерыва на еду и сон, до переполнения счетчика у вас уйдёт пара лет, и это только в одну сторону.

Импульсные (инкрементные) выходы Up и Dn.
На этих выходах возникает импульс длительностью в один цикл программы на каждую единицу счёта. Соответственно один в два цикла. Устроены они так, что ОБЯЗАТЕЛЬНО произойдёт столько импульсов, на сколько прибавилось или убавилось значение на выходе Num. И даже если ваша программа супер-тормозная, импульсы отсчитают своё, хоть это может происходить и с задержкой.
Выход на котором будут импульсы зависит от направления вращения ручки энкодера.


Внимание! Требуется помощь в тестировании.
Интересуют следующие моменты:
- Стабильность работы энкодеров и всей программы при максимальном количестве (до 8) устройств одновременно.
- Способность работать со старыми убитыми девайсами, в том числе и без обвязки с подбором режимов.

Результаты будут добавлены в данное описание.



.

Re: Энкодер для ESP32

Добавлено: 18 июл 2025, 19:00
skrickis
на ESP32 S3 Dev kit не могу выбрать пины--нету.
если вручную прописать то они не сохраняетсяюся.
или этот блок работает только на ESP32 Dev module?

Re: Энкодер для ESP32

Добавлено: 18 июл 2025, 19:11
Dryundel
skrickis писал(а): 18 июл 2025, 19:00 на ESP32 S3 Dev kit не могу выбрать пины--нету.
Странно.
Попробуйте следующее...
По правому клику войдите в редактирование...
Нет пинов на Dev Kit.jpg

Re: Энкодер для ESP32

Добавлено: 18 июл 2025, 19:22
skrickis
Нет не прокатывает этот вариант
выбор пинов пустой всё равно :smile37:
не по темы но ещё косяк 9.4.1
на входах нету подтяжки к VCC у ESP32 S3

Re: Энкодер для ESP32

Добавлено: 18 июл 2025, 19:35
Dryundel
skrickis писал(а): 18 июл 2025, 19:22 Нет не прокатывает этот вариант
выбор пинов пустой всё равно :smile37:
не по темы но ещё косяк 9.4.1
на входах нету подтяжки к VCC у ESP32 S3
Советую написать это в тему тестирования FLProg
Тут я бессилен.

Ну или как вариант - Берёте даташит и делаете пользовательское описание вашего контроллера. Люди Вам спасибо скажут если выложите.

Re: Энкодер для ESP32

Добавлено: 18 июл 2025, 19:40
Dryundel
skrickis писал(а): 18 июл 2025, 19:22 выбор пинов пустой всё равно
А к стати, Вы куда нажимаете? На поле ввода? Если так, то выбора и не будет. Надо жать на кнопочку правее.

Re: Энкодер для ESP32

Добавлено: 18 июл 2025, 19:44
skrickis
Dryundel писал(а): 18 июл 2025, 19:40
skrickis писал(а): 18 июл 2025, 19:22 выбор пинов пустой всё равно
А к стати, Вы куда нажимаете? На поле ввода? Если так, то выбора и не будет. Надо жать на кнопочку правее.
так и делаю :yes: