Энкодер KY-040

Использование прочих датчиков и энкодеров и пользовательских блоков к ним
Oleg1345140
Лейтенант
Сообщения: 539
Зарегистрирован: 06.09.2015{, 07:09}
Репутация: 1
Откуда: Курган

Энкодер KY-040

#41

Сообщение Oleg1345140 » 04.07.2016{, 20:03}

DWD писал(а):Ещё один вариант подключения энкодера.
А со соростью счета как дела обстаят

DWD
Лейтенант
Сообщения: 353
Зарегистрирован: 18.10.2015{, 13:51}
Репутация: 5
Откуда: Кривой Рог

Энкодер KY-040

#42

Сообщение DWD » 05.07.2016{, 11:42}

В сравнении с вариантом из поста №4 предложенный вариант более резвый и считает правильно при более  быстром вращении ручки энкодера. Вариант из поста №4 при этом начинает тормозить и почти не считает.
Последний раз редактировалось DWD 05.07.2016{, 13:34}, всего редактировалось 1 раз.
Изображение

vry
Рядовой
Сообщения: 4
Зарегистрирован: 16.05.2016{, 08:05}
Репутация: 0

Энкодер KY-040

#43

Сообщение vry » 08.07.2016{, 14:42}

купил такой же энкодер, быстро крутишь не считает, только когда медленно крутишь, иногда наоборот считает

Слимпер
Майор
Сообщения: 1009
Зарегистрирован: 06.09.2015{, 16:56}
Репутация: 27
Откуда: Новосибирск

Энкодер KY-040

#44

Сообщение Слимпер » 10.07.2016{, 09:39}

В сообщении №37 я выкладывал блок энкодера, но когда сам его протестировал в реальном проекте понял, что если есть что то кроме самого  энкодера, то уже начинаются проблемы.

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

И того получилось два блока

Encoders_D

СпойлерПоказать
Энкодер Детектор
Блок
служит для детектирования переключения Энкодера.

Параметры
Set
-Импульсов на щелчок
Так как унекоторых энкодеров есть еще тактильные щелчки при вращении, и при одном щелчке
бывает выдает не 1 импульс а 2 или 4 ( может и больше)
Велделитель для получения соответствия щелчок-изменение числа.

DT , CLK - номера пинов подключенных одноименные выхода энкодера (можно
использовать любые пины)

period -Период опроса состояния энкодера, в микросекундах, завесить от энкодора
Намеханических энкодерах достаточно 1000мкс

!!!!Возможныконфликты с блоками где используется Timer1 (из известных мне Rremote, Servo)
!!!!Нельзяиспользовать совместно с ШИМ на
ArduinoUno 9, 10
ArduinoLeonardo 9, 10, 11
ArduinoMega 11, 12, 13
Encoders_S


СпойлерПоказать
Энкодер Счетчик
Блок производит счет на увеличения/уменьшения.
С возможностью установки нижнего/верхнегопределов, досчитывая до которых счетчик останавливается.
Так же есть вход разрешения (EN).

Параметры
MAX - верхний предел увеличения, счет прекращается
MIN - нижний предел уменьшения, счет прекращается

Входа
Pulses - Количество щелчков на энкодоре с последнегопрограммного цикла.
Value_N - Значение которое будет установлено вблок при наличии 1 на входе set
set - вход установки значения (пока подано 1 вбоке устанавливается значения с входа V)
En - вход разрешения работы блока.
Использовать второй не обязательно, но мне так удобнее. А разделил на два, для того чтобы можно было одним энкоредом настраивать несколько величин, переключаясь между ними.


!!!!Возможны конфликты с блоками, где используется Timer1 (из известных мне Rremote, Servo)
!!!!Нельзя использовать совметсно с ШИМ на
Arduino Uno 9, 10
Arduino Leonardo 9, 10, 11
Arduino Mega 11, 12, 13


Если очень нужен ШИМ можно использовать мой блок PWM_CONST_(CODE), он сделан на базе той же библиотеки и вмести работают.
ШИИМ 10 БИТ пользовательский блока на Си
Вложения
9268809.png
Encoders_S-CODE.ubi
(100.41 КБ) 132 скачивания
Encoders_D-CODE.ubi
(70.73 КБ) 118 скачиваний
Последний раз редактировалось Слимпер 10.07.2016{, 11:01}, всего редактировалось 1 раз.

DWD
Лейтенант
Сообщения: 353
Зарегистрирован: 18.10.2015{, 13:51}
Репутация: 5
Откуда: Кривой Рог

Энкодер KY-040

#45

Сообщение DWD » 10.07.2016{, 10:36}

Слимпер писал(а):когда сам его протестировал в реальном проекте понял, что если есть что кроме самого  энкодера, то уже начинаются проблемы.
Это понятно.
Но я, передед тем, как предложить "свой" вариант на одном счётчике, протестировал все имеющиеся варианты на "голом" МК. То есть, использовал только блоки обработки энкодера и вывода результата на дисплей для наглядности.

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

Так что не малую роль играет алгоритм обработки.

А когда я попробовал вместо энкодера использовать 3-х фазный двигатель, то понял, что и сам энкодер накладывает существенное ограничение на скорость отработки.
Посмотрел несколько вариантов и видел, что у многтх энкодеров не одинаковый сдвиг импульсов с выходов А и В.

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

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

По этому, показывая свой вариант программы обработки того же энкодера, нужно обязательно указывать и его марку. Для сравнения и анализа.
Изображение

Слимпер
Майор
Сообщения: 1009
Зарегистрирован: 06.09.2015{, 16:56}
Репутация: 27
Откуда: Новосибирск

Энкодер KY-040

#46

Сообщение Слимпер » 10.07.2016{, 11:00}

DWD писал(а):Так что не малую роль играет алгоритм обработки.
Ну алгоритм я не сам придумал, скопировал из статьи 
AVR. Учебный Курс. Инкрементальный энкодер.
Но так как в прерываниях я не очень хорошо понимаю, то поискав остановился на библиотеки TimerOne.   
DWD писал(а):По этому, показывая свой вариант программы обработки того же энкодера, нужно обязательно указывать и его марку. Для сравнения и анализа.
А на нем не чего не написано, но если судить по картинкам, то вроде "Энкодер KY-040".

К тому же для возможности подстройке под свой, есть два настраиваемых параметра.

DWD
Лейтенант
Сообщения: 353
Зарегистрирован: 18.10.2015{, 13:51}
Репутация: 5
Откуда: Кривой Рог

Энкодер KY-040

#47

Сообщение DWD » 10.07.2016{, 11:23}

Слимпер писал(а):Ну алгоритм я не сам придумал, скопировал из статьи
Тем более! В этом случае не учитывается ещё один параметр - программная среда. :)
Ведь одно дело написать прогу на Асме, и совсем другое - на С или FLP.
Слимпер писал(а):остановился на библиотеки TimerOne.
Мне лично не подходит Ваш вариант из-за запрета использования ШИМ аж с двух выходов.
Я в последнее время всё больше сталкиваюсь с нехваткой портов... :(
Слимпер писал(а):А на нем не чего не написано
Согласен. Свои знаю только потому, что покупал... :)
Ну, тогда, хотя бы, фотку внешнего вида приводить.
В общем, мне кажется, чего-то универсального наверно не получится.
Последний раз редактировалось DWD 10.07.2016{, 11:24}, всего редактировалось 1 раз.
Изображение

Слимпер
Майор
Сообщения: 1009
Зарегистрирован: 06.09.2015{, 16:56}
Репутация: 27
Откуда: Новосибирск

Энкодер KY-040

#48

Сообщение Слимпер » 10.07.2016{, 13:14}

DWD писал(а):В общем, мне кажется, чего-то универсального наверно не получится.
Полностью согласен, и даже не претендую на универсальность.
Делал исходно для себя, но решил выложить, может еще кому пригодится.
DWD писал(а):Мне лично не подходит Ваш вариант из-за запрета использования ШИМ аж с двух выходов.Я в последнее время всё больше сталкиваюсь с нехваткой портов... :(
Ну тут особенность работы с использовании прерывания по таймеру. 
Использование TimerOne приводит к тому, что нельзя использовать штатный Arduino ШИМ.
А сама библиотека позволяла реализовать другой ШИМ, сделал Блок и такой блок (ссылку давал выше).
Так что ШИМ на этих выходах использовать можно, но это будет шим с другими параметрами. 

Naladchik
Капитан
Сообщения: 823
Зарегистрирован: 04.10.2015{, 19:10}
Репутация: 153
Откуда: Новосибирск
Имя: Павел

Энкодер KY-040

#49

Сообщение Naladchik » 17.07.2016{, 16:40}

DWD писал(а):Ещё один вариант подключения энкодера. Наверное, самый простой. :)
Действительно самый простой и работоспособный, но есть существенный минус, теряет половину "щелчков" энкодера.
Конечно это можно обойти параллельным включением двух счетчиков, на входа одного из них подавая прямые сигналы а на входа другого инвертированные с последующим суммированием результатов но тут сразу возникают сложности с предустановкой и реализацией верхней и нижней границ счета.
Win10-64. FLProg Portable.
Изображение

DWD
Лейтенант
Сообщения: 353
Зарегистрирован: 18.10.2015{, 13:51}
Репутация: 5
Откуда: Кривой Рог

Энкодер KY-040

#50

Сообщение DWD » 17.07.2016{, 18:56}

Naladchik, какой энкодер использовали?
Как подключали к Ардуино (подтягивающие резисторы, фильтрующие цепочки)?
Как программно считали и фиксировали импульсы?
Изображение

Naladchik
Капитан
Сообщения: 823
Зарегистрирован: 04.10.2015{, 19:10}
Репутация: 153
Откуда: Новосибирск
Имя: Павел

Энкодер KY-040

#51

Сообщение Naladchik » 17.07.2016{, 19:23}

DWD, Энкодер обычный, KY-040, тот, что уже на плате распаян. Никаких фильтров и подтяжек не использовал, так как на плате уже свои подтяжки стоят. Подключение к 2 и 3 входам
DWD писал(а):Как программно считали и фиксировали импульсы?
А вот тут вопрос не понятен. Если про Ваш вариант с подключению к обычному счетчику то им и считал. Если вопрос про сам энкодер, то у него 30 фиксируемых положений, 60 состояний.
Последний раз редактировалось Naladchik 17.07.2016{, 19:29}, всего редактировалось 1 раз.
Win10-64. FLProg Portable.
Изображение

DWD
Лейтенант
Сообщения: 353
Зарегистрирован: 18.10.2015{, 13:51}
Репутация: 5
Откуда: Кривой Рог

Энкодер KY-040

#52

Сообщение DWD » 17.07.2016{, 20:42}

Naladchik писал(а):Никаких фильтров и подтяжек не использовал, так как на плате уже свои подтяжки стоят.
Судя по фоткам - подтяжка стоит, но фильтров нет. А должны быть.
Вот типовая схема включения, рекомендованная производителем:
Изображение
На Ардуино сигнал подаётся через фильтрующую RC цепочку (10КОм, 0,01мкФ).
Без этой цепочки у меня любой энкодер сбоит.
Naladchik писал(а):А вот тут вопрос не понятен. Если про Ваш вариант с подключению к обычному счетчику то им и считал.
Это понятно. Имелось в виду, чем смотрели импульсы?
Я, например, состояние счётчика выводил на дисплей и вращая ручку, смотрел как чередуются цифры при медленом или быстром вращении.
Изображение

Naladchik
Капитан
Сообщения: 823
Зарегистрирован: 04.10.2015{, 19:10}
Репутация: 153
Откуда: Новосибирск
Имя: Павел

Энкодер KY-040

#53

Сообщение Naladchik » 17.07.2016{, 21:06}

DWD писал(а):Без этой цепочки у меня любой энкодер сбоит.
Я и хотел добиться того, чтобы без дополнительных элементов получить приемлемую работу энкодера.
Энкодер KY-040 для чего то серьезного явно не годится, а вот для выбора позиции меню на дисплее в самый раз.
DWD писал(а):Я, например, состояние счётчика выводил на дисплей и вращая ручку, смотрел как чередуются цифры при медленом или быстром вращении.
Я контролировал точно так же.

В итоге после всех моих экспериментов и переделки блоков Слимпера родил свой вариант (для меня конечный).
Суть в использовании прерываний по входам 2 и 3, т.е. выходы энкодера CLK и DT могут подключаться только на эти входа ардуинки, зато вполне приличное быстродействие и четкость позиционирования. Лично меня устраивает. Сделал в 3х вариантах: вывод значения позиции с пред установкой, значение с пред установкой и направлением вращения и с использованием библиотеки CyberLib.
Любопытная библиотека. Тому, кто гонится за быстродействием стоит обратить внимание.
Вложения
_2.rar
(375.35 КБ) 137 скачиваний
Последний раз редактировалось Naladchik 17.07.2016{, 21:35}, всего редактировалось 1 раз.
Win10-64. FLProg Portable.
Изображение

Аватара пользователя
Dryundel
Полковник
Сообщения: 2401
Зарегистрирован: 22.05.2017{, 23:15}
Репутация: 783
Откуда: Ярославль
Имя: Андрей
Контактная информация:

Энкодер KY-040

#54

Сообщение Dryundel » 03.06.2017{, 12:53}

Слимпер писал(а):В сообщении №37 я выкладывал блок энкодера, но когда сам его протестировал в реальном проекте понял, что если есть что то кроме самого энкодера, то уже начинаются проблемы.По этому пришлось делать другой блок, работающий на прерываниях по таймеру, так что от величины программы его работа не зависит.
Идея очень даже не плохая.
Слимпер писал(а):DT , CLK - номера пинов подключенных одноименные выхода энкодера (можноиспользовать любые пины)
А возможно ли использовать для этого аналоговые пины и если да, то как?

Слимпер
Майор
Сообщения: 1009
Зарегистрирован: 06.09.2015{, 16:56}
Репутация: 27
Откуда: Новосибирск

Энкодер KY-040

#55

Сообщение Слимпер » 03.06.2017{, 13:07}

Dryundel
Dryundel писал(а):А возможно ли использовать для этого аналоговые пины и если да, то как?
Давно делал, сейчас уже не помню проверял или нет.
Но по идеи должно работать.
А использовать можно так? на UNO и им подобным платам в коде аналоговые входа можно  использовать задавая в место них следующие коды:
СпойлерПоказать
A0-14
A1-15
A2-16
A3-17
A4-18
A5-19
 Вот эти коды и надо попробовать подставить в настройках блока.

Ответить

Вернуться в «Прочие датчики и энкодеры»