А со соростью счета как дела обстаятDWD писал(а):Ещё один вариант подключения энкодера.
Энкодер KY-040
-
- Лейтенант
- Сообщения: 539
- Зарегистрирован: 06 сен 2015, 07:09
- Откуда: Курган
Энкодер KY-040
Энкодер KY-040
В сравнении с вариантом из поста №4 предложенный вариант более резвый и считает правильно при более быстром вращении ручки энкодера. Вариант из поста №4 при этом начинает тормозить и почти не считает.
Последний раз редактировалось DWD 05 июл 2016, 13:34, всего редактировалось 1 раз.
Энкодер KY-040
купил такой же энкодер, быстро крутишь не считает, только когда медленно крутишь, иногда наоборот считает
Энкодер KY-040
В сообщении №37 я выкладывал блок энкодера, но когда сам его протестировал в реальном проекте понял, что если есть что то кроме самого энкодера, то уже начинаются проблемы.
По этому пришлось делать другой блок, работающий на прерываниях по таймеру, так что от величины программы его работа не зависит.
И того получилось два блока
Encoders_D
[spoiler=Спойлер]Энкодер Детектор
Блок
служит для детектирования переключения Энкодера.
Параметры
Set
-Импульсов на щелчок
Так как унекоторых энкодеров есть еще тактильные щелчки при вращении, и при одном щелчке
бывает выдает не 1 импульс а 2 или 4 ( может и больше)
Велделитель для получения соответствия щелчок-изменение числа.
DT , CLK - номера пинов подключенных одноименные выхода энкодера (можно
использовать любые пины)
period -Период опроса состояния энкодера, в микросекундах, завесить от энкодора
Намеханических энкодерах достаточно 1000мкс
!!!!Возможныконфликты с блоками где используется Timer1 (из известных мне Rremote, Servo)
!!!!Нельзяиспользовать совместно с ШИМ на
ArduinoUno 9, 10
ArduinoLeonardo 9, 10, 11
ArduinoMega 11, 12, 13[/spoiler]
Encoders_S
[spoiler=Спойлер]Энкодер Счетчик
Блок производит счет на увеличения/уменьшения.
С возможностью установки нижнего/верхнегопределов, досчитывая до которых счетчик останавливается.
Так же есть вход разрешения (EN).
Параметры
MAX - верхний предел увеличения, счет прекращается
MIN - нижний предел уменьшения, счет прекращается
Входа
Pulses - Количество щелчков на энкодоре с последнегопрограммного цикла.
Value_N - Значение которое будет установлено вблок при наличии 1 на входе set
set - вход установки значения (пока подано 1 вбоке устанавливается значения с входа V)
En - вход разрешения работы блока.[/spoiler]
Использовать второй не обязательно, но мне так удобнее. А разделил на два, для того чтобы можно было одним энкоредом настраивать несколько величин, переключаясь между ними.
!!!!Возможны конфликты с блоками, где используется Timer1 (из известных мне Rremote, Servo)
!!!!Нельзя использовать совметсно с ШИМ на
Arduino Uno 9, 10
Arduino Leonardo 9, 10, 11
Arduino Mega 11, 12, 13
Если очень нужен ШИМ можно использовать мой блок PWM_CONST_(CODE), он сделан на базе той же библиотеки и вмести работают.
ШИИМ 10 БИТ пользовательский блока на Си
По этому пришлось делать другой блок, работающий на прерываниях по таймеру, так что от величины программы его работа не зависит.
И того получилось два блока
Encoders_D
[spoiler=Спойлер]Энкодер Детектор
Блок
служит для детектирования переключения Энкодера.
Параметры
Set
-Импульсов на щелчок
Так как унекоторых энкодеров есть еще тактильные щелчки при вращении, и при одном щелчке
бывает выдает не 1 импульс а 2 или 4 ( может и больше)
Велделитель для получения соответствия щелчок-изменение числа.
DT , CLK - номера пинов подключенных одноименные выхода энкодера (можно
использовать любые пины)
period -Период опроса состояния энкодера, в микросекундах, завесить от энкодора
Намеханических энкодерах достаточно 1000мкс
!!!!Возможныконфликты с блоками где используется Timer1 (из известных мне Rremote, Servo)
!!!!Нельзяиспользовать совместно с ШИМ на
ArduinoUno 9, 10
ArduinoLeonardo 9, 10, 11
ArduinoMega 11, 12, 13[/spoiler]
Encoders_S
[spoiler=Спойлер]Энкодер Счетчик
Блок производит счет на увеличения/уменьшения.
С возможностью установки нижнего/верхнегопределов, досчитывая до которых счетчик останавливается.
Так же есть вход разрешения (EN).
Параметры
MAX - верхний предел увеличения, счет прекращается
MIN - нижний предел уменьшения, счет прекращается
Входа
Pulses - Количество щелчков на энкодоре с последнегопрограммного цикла.
Value_N - Значение которое будет установлено вблок при наличии 1 на входе set
set - вход установки значения (пока подано 1 вбоке устанавливается значения с входа V)
En - вход разрешения работы блока.[/spoiler]
Использовать второй не обязательно, но мне так удобнее. А разделил на два, для того чтобы можно было одним энкоредом настраивать несколько величин, переключаясь между ними.
!!!!Возможны конфликты с блоками, где используется Timer1 (из известных мне Rremote, Servo)
!!!!Нельзя использовать совметсно с ШИМ на
Arduino Uno 9, 10
Arduino Leonardo 9, 10, 11
Arduino Mega 11, 12, 13
Если очень нужен ШИМ можно использовать мой блок PWM_CONST_(CODE), он сделан на базе той же библиотеки и вмести работают.
ШИИМ 10 БИТ пользовательский блока на Си
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Последний раз редактировалось Слимпер 10 июл 2016, 11:01, всего редактировалось 1 раз.
Энкодер KY-040
Это понятно.Слимпер писал(а):когда сам его протестировал в реальном проекте понял, что если есть что кроме самого энкодера, то уже начинаются проблемы.
Но я, передед тем, как предложить "свой" вариант на одном счётчике, протестировал все имеющиеся варианты на "голом" МК. То есть, использовал только блоки обработки энкодера и вывода результата на дисплей для наглядности.
В общем, отличие было только в способах обработки. И даже в этом случае скорости отработки и глюки были разные.
При том, что основные варианты по сложности и количеству применяемых блоков были более-менее одинаковы.
Так что не малую роль играет алгоритм обработки.
А когда я попробовал вместо энкодера использовать 3-х фазный двигатель, то понял, что и сам энкодер накладывает существенное ограничение на скорость отработки.
Посмотрел несколько вариантов и видел, что у многтх энкодеров не одинаковый сдвиг импульсов с выходов А и В.
В совокупности получается аж два параметра, сильно влияющих на скорость и точность отработки импульсов с энкодера: сам энкодер и программа.
Энкодеров много, и вариантов программ тоже. Получается, что можно в хорошо работающем устройстве заменть энкодер на другой, и оно может начать глючить.
По этому, показывая свой вариант программы обработки того же энкодера, нужно обязательно указывать и его марку. Для сравнения и анализа.
Энкодер KY-040
Ну алгоритм я не сам придумал, скопировал из статьиDWD писал(а):Так что не малую роль играет алгоритм обработки.
AVR. Учебный Курс. Инкрементальный энкодер.
Но так как в прерываниях я не очень хорошо понимаю, то поискав остановился на библиотеки TimerOne.
А на нем не чего не написано, но если судить по картинкам, то вроде "Энкодер KY-040".DWD писал(а):По этому, показывая свой вариант программы обработки того же энкодера, нужно обязательно указывать и его марку. Для сравнения и анализа.
К тому же для возможности подстройке под свой, есть два настраиваемых параметра.
Энкодер KY-040
Тем более! В этом случае не учитывается ещё один параметр - программная среда.Слимпер писал(а):Ну алгоритм я не сам придумал, скопировал из статьи

Ведь одно дело написать прогу на Асме, и совсем другое - на С или FLP.
Мне лично не подходит Ваш вариант из-за запрета использования ШИМ аж с двух выходов.Слимпер писал(а):остановился на библиотеки TimerOne.
Я в последнее время всё больше сталкиваюсь с нехваткой портов...

Согласен. Свои знаю только потому, что покупал... :)Слимпер писал(а):А на нем не чего не написано
Ну, тогда, хотя бы, фотку внешнего вида приводить.
В общем, мне кажется, чего-то универсального наверно не получится.
Последний раз редактировалось DWD 10 июл 2016, 11:24, всего редактировалось 1 раз.
Энкодер KY-040
Полностью согласен, и даже не претендую на универсальность.DWD писал(а):В общем, мне кажется, чего-то универсального наверно не получится.
Делал исходно для себя, но решил выложить, может еще кому пригодится.
Ну тут особенность работы с использовании прерывания по таймеру.DWD писал(а):Мне лично не подходит Ваш вариант из-за запрета использования ШИМ аж с двух выходов.Я в последнее время всё больше сталкиваюсь с нехваткой портов...
Использование TimerOne приводит к тому, что нельзя использовать штатный Arduino ШИМ.
А сама библиотека позволяла реализовать другой ШИМ, сделал Блок и такой блок (ссылку давал выше).
Так что ШИМ на этих выходах использовать можно, но это будет шим с другими параметрами.
-
- Капитан
- Сообщения: 908
- Зарегистрирован: 04 окт 2015, 19:10
- Откуда: Новосибирск
- Имя: Павел
- Благодарил (а): 20 раз
- Поблагодарили: 22 раза
Энкодер KY-040
Действительно самый простой и работоспособный, но есть существенный минус, теряет половину "щелчков" энкодера.DWD писал(а):Ещё один вариант подключения энкодера. Наверное, самый простой. :)
Конечно это можно обойти параллельным включением двух счетчиков, на входа одного из них подавая прямые сигналы а на входа другого инвертированные с последующим суммированием результатов но тут сразу возникают сложности с предустановкой и реализацией верхней и нижней границ счета.
Энкодер KY-040
Naladchik, какой энкодер использовали?
Как подключали к Ардуино (подтягивающие резисторы, фильтрующие цепочки)?
Как программно считали и фиксировали импульсы?
Как подключали к Ардуино (подтягивающие резисторы, фильтрующие цепочки)?
Как программно считали и фиксировали импульсы?
-
- Капитан
- Сообщения: 908
- Зарегистрирован: 04 окт 2015, 19:10
- Откуда: Новосибирск
- Имя: Павел
- Благодарил (а): 20 раз
- Поблагодарили: 22 раза
Энкодер KY-040
DWD, Энкодер обычный, KY-040, тот, что уже на плате распаян. Никаких фильтров и подтяжек не использовал, так как на плате уже свои подтяжки стоят. Подключение к 2 и 3 входам
А вот тут вопрос не понятен. Если про Ваш вариант с подключению к обычному счетчику то им и считал. Если вопрос про сам энкодер, то у него 30 фиксируемых положений, 60 состояний.DWD писал(а):Как программно считали и фиксировали импульсы?
Последний раз редактировалось Naladchik 17 июл 2016, 19:29, всего редактировалось 1 раз.
Энкодер KY-040
Судя по фоткам - подтяжка стоит, но фильтров нет. А должны быть.Naladchik писал(а):Никаких фильтров и подтяжек не использовал, так как на плате уже свои подтяжки стоят.
Вот типовая схема включения, рекомендованная производителем:

На Ардуино сигнал подаётся через фильтрующую RC цепочку (10КОм, 0,01мкФ).
Без этой цепочки у меня любой энкодер сбоит.
Это понятно. Имелось в виду, чем смотрели импульсы?Naladchik писал(а):А вот тут вопрос не понятен. Если про Ваш вариант с подключению к обычному счетчику то им и считал.
Я, например, состояние счётчика выводил на дисплей и вращая ручку, смотрел как чередуются цифры при медленом или быстром вращении.
-
- Капитан
- Сообщения: 908
- Зарегистрирован: 04 окт 2015, 19:10
- Откуда: Новосибирск
- Имя: Павел
- Благодарил (а): 20 раз
- Поблагодарили: 22 раза
Энкодер KY-040
Я и хотел добиться того, чтобы без дополнительных элементов получить приемлемую работу энкодера.DWD писал(а):Без этой цепочки у меня любой энкодер сбоит.
Энкодер KY-040 для чего то серьезного явно не годится, а вот для выбора позиции меню на дисплее в самый раз.
Я контролировал точно так же.DWD писал(а):Я, например, состояние счётчика выводил на дисплей и вращая ручку, смотрел как чередуются цифры при медленом или быстром вращении.
В итоге после всех моих экспериментов и переделки блоков Слимпера родил свой вариант (для меня конечный).
Суть в использовании прерываний по входам 2 и 3, т.е. выходы энкодера CLK и DT могут подключаться только на эти входа ардуинки, зато вполне приличное быстродействие и четкость позиционирования. Лично меня устраивает. Сделал в 3х вариантах: вывод значения позиции с пред установкой, значение с пред установкой и направлением вращения и с использованием библиотеки CyberLib.
Любопытная библиотека. Тому, кто гонится за быстродействием стоит обратить внимание.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Последний раз редактировалось Naladchik 17 июл 2016, 21:35, всего редактировалось 1 раз.
- Dryundel
- Полковник
- Сообщения: 2473
- Зарегистрирован: 22 май 2017, 23:15
- Откуда: Ярославль
- Имя: Андрей
- Благодарил (а): 10 раз
- Поблагодарили: 40 раз
Энкодер KY-040
Идея очень даже не плохая.Слимпер писал(а):В сообщении №37 я выкладывал блок энкодера, но когда сам его протестировал в реальном проекте понял, что если есть что то кроме самого энкодера, то уже начинаются проблемы.По этому пришлось делать другой блок, работающий на прерываниях по таймеру, так что от величины программы его работа не зависит.
А возможно ли использовать для этого аналоговые пины и если да, то как?Слимпер писал(а):DT , CLK - номера пинов подключенных одноименные выхода энкодера (можноиспользовать любые пины)
Энкодер KY-040
Dryundel,
Но по идеи должно работать.
А использовать можно так? на UNO и им подобным платам в коде аналоговые входа можно использовать задавая в место них следующие коды:
[spoiler=Спойлер]A0-14
A1-15
A2-16
A3-17
A4-18
A5-19[/spoiler] Вот эти коды и надо попробовать подставить в настройках блока.
Давно делал, сейчас уже не помню проверял или нет.Dryundel писал(а):А возможно ли использовать для этого аналоговые пины и если да, то как?
Но по идеи должно работать.
А использовать можно так? на UNO и им подобным платам в коде аналоговые входа можно использовать задавая в место них следующие коды:
[spoiler=Спойлер]A0-14
A1-15
A2-16
A3-17
A4-18
A5-19[/spoiler] Вот эти коды и надо попробовать подставить в настройках блока.
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость