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

Энкодер KY-040

Добавлено: 04.07.2016{, 20:03}
Oleg1345140
DWD писал(а):Ещё один вариант подключения энкодера.
А со соростью счета как дела обстаят

Энкодер KY-040

Добавлено: 05.07.2016{, 11:42}
DWD
В сравнении с вариантом из поста №4 предложенный вариант более резвый и считает правильно при более  быстром вращении ручки энкодера. Вариант из поста №4 при этом начинает тормозить и почти не считает.

Энкодер KY-040

Добавлено: 08.07.2016{, 14:42}
vry
купил такой же энкодер, быстро крутишь не считает, только когда медленно крутишь, иногда наоборот считает

Энкодер KY-040

Добавлено: 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 БИТ пользовательский блока на Си

Энкодер KY-040

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

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

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

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

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

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

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

Энкодер KY-040

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

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

Энкодер KY-040

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

Энкодер KY-040

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

Энкодер KY-040

Добавлено: 17.07.2016{, 16:40}
Naladchik
DWD писал(а):Ещё один вариант подключения энкодера. Наверное, самый простой. :)
Действительно самый простой и работоспособный, но есть существенный минус, теряет половину "щелчков" энкодера.
Конечно это можно обойти параллельным включением двух счетчиков, на входа одного из них подавая прямые сигналы а на входа другого инвертированные с последующим суммированием результатов но тут сразу возникают сложности с предустановкой и реализацией верхней и нижней границ счета.

Энкодер KY-040

Добавлено: 17.07.2016{, 18:56}
DWD
Naladchik, какой энкодер использовали?
Как подключали к Ардуино (подтягивающие резисторы, фильтрующие цепочки)?
Как программно считали и фиксировали импульсы?

Энкодер KY-040

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

Энкодер KY-040

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

Энкодер KY-040

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

В итоге после всех моих экспериментов и переделки блоков Слимпера родил свой вариант (для меня конечный).
Суть в использовании прерываний по входам 2 и 3, т.е. выходы энкодера CLK и DT могут подключаться только на эти входа ардуинки, зато вполне приличное быстродействие и четкость позиционирования. Лично меня устраивает. Сделал в 3х вариантах: вывод значения позиции с пред установкой, значение с пред установкой и направлением вращения и с использованием библиотеки CyberLib.
Любопытная библиотека. Тому, кто гонится за быстродействием стоит обратить внимание.

Энкодер KY-040

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

Энкодер KY-040

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