Набор блоков ЭНКОДЕР

Пользовательские блоки расширяющие базовый функуионал программы по работе с различными датчиками и энкодерами
Правила форума
Рекомендации по размещению блоков:
Автор блока создает подробное описание блока, отличие от подобных(если есть на данный момент).Сложные блоки очень желательно с примерами.
При выходе новых версий редактирует/дополняет свой первый пост с указанием даты, версии, причины.
В каждой теме обсуждается только выложенный автором блок - баги, возможность (или предложение) доработки и прочие хотелки.
Свои блоки, переработанные, с другими библиотеками, протоколами и т.д.- размещаем либо сами отдельно, либо обсуждаем и дорабатываем в форуме Разработка блоков.
Пользователи улучшив блок автора и проверив его работоспособность - могут обратиться к автору или модераторам с просьбой добавить их версию блока в первое сообщение темы.
Аватара пользователя
Dryundel
Полковник
Сообщения: 2401
Зарегистрирован: 22.05.2017{, 23:15}
Репутация: 783
Откуда: Ярославль
Имя: Андрей
Контактная информация:

Набор блоков ЭНКОДЕР

#1

Сообщение Dryundel » 13.03.2019{, 23:00}

Тема устарела и морально и технически.
Новый блок EncoderPro здесь.

Сколько ни пытался найти удовлетворяющий меня блок энкодера, не получилось.
Выкладываю свои варианты. Здоровая критика приветствуется.
1.jpg
Скачать все одним архивом:
Энкодеры от Dryundel.ubl
(664.68 КБ) 1107 скачиваний
Блоки написаны на основе библиотеки Encoder.h
Могут работать на любых пинах, но на пинах поддерживающих прерывание результат самый лучший.
***
Энкодер_импульсный_v1.0_(CODE).ubi
(119.81 КБ) 501 скачивание
Энкодер_импульсный_v1.1_(CODE).ubi
(135.99 КБ) 698 скачиваний
2.jpg
2.jpg (6.11 КБ) 19935 просмотров
Эти два блока выдают тики на выходах Up и Down (Вперед / Назад)
Отличие Энкодер_импульсный_v1.1 в том, что в нем можно настроить количество импульсов выдаваемых энкодером за один физический шаг.

Описание:
Энкодер_импульсный_v1.0
СпойлерПоказать
Энкодер импульсный v1.0

EncTic v1.0 - отслеживает импульсы датчиков энкодера, используея квадратурный медот подсчета импульсов и определяет напавление вращения.
В зависимости от направления вращения, на выходах Up или Down формируются импульсы, соответствующие одному физическому шагу энкодера..
В параметрах пользователя необходимо:
1. Указать 2 пина к которым подключены CLK и DT энкодера.

Есть три варианта подключения (из описания библиотеки):
1. Лучший результат - используются два пина поддерживающие прерывания.
2. Хорошая производительность - один из пинов поддерживает прерывания.
3. Низкая поизводительность - оба пина не поддерживают прерывания.

Ограничения:
1, Не рекомендуется использовать пины к которым подключена светодиодная индикация (в большинстве случаев Pin 13)!!!
2. Если одним энкодером задействованы два пина пина поддерживающие прерывание, то в проекте нельзя использовать более одного блока. Если хотя бы один из пинов к которому подключен энкодер не поддерживает прерывание, ограничение снимается.

При использовании длинных проводов между энкодером и платой можно поставить подтягивающий резистор 1К.

Пины поддерживающие прерывания на различных платах Arduino:
UNO - Pin 2,3
LEONARDO - Pin 0,1,2,3
MEGA - Pin 2,3,18,19,20,21
DUE - все

На основе библиотеки http://www.pjrc.com/teensy/td_libs_Encoder.html

Энкодер_импульсный_v1.1
СпойлерПоказать
Энкодер импульсный v1.1

EncTic v1.1 - отслеживает импульсы датчиков энкодера, используея квадратурный медот подсчета импульсов и определяет напавление вращения.
В зависимости от направления вращения, на выходах Up или Down формируются импульсы, соответствующие одному физическому шагу энкодера..
В параметрах пользователя необходимо:
1. Указать 2 пина к которым подключены CLK и DT энкодера.
2. Установить значение TicStep соответствующее количеству тиков на один физический шаг энкодера.
Пример: При использовании энкодера EC-11 ( KY-040) на один физический шаг EncTic выдает 2 тика, поэтому надо поставить TicStep = 2.

Есть три варианта подключения (из описания библиотеки):
1. Лучший результат - используются два пина поддерживающие прерывания.
2. Хорошая производительность - один из пинов поддерживает прерывания.
3. Низкая поизводительность - оба пина не поддерживают прерывания.

Ограничения:
1, Не рекомендуется использовать пины к которым подключена светодиодная индикация (в большинстве случаев Pin 13)!!!
2. Если одним энкодером задействованы два пина пина поддерживающие прерывание, то в проекте нельзя использовать более одного блока. Если хотя бы один из пинов к которому подключен энкодер не поддерживает прерывание, ограничение снимается.

При использовании длинных проводов между энкодером и платой можно поставить подтягивающий резистор 1К.

Пины поддерживающие прерывания на различных платах Arduino:
UNO - Pin 2,3
LEONARDO - Pin 0,1,2,3
MEGA - Pin 2,3,18,19,20,21
DUE - все

На основе библиотеки http://www.pjrc.com/teensy/td_libs_Encoder.html

Другие блоки для энкодера:
Тестер для энкодера
Блок энкодера для одноуровневого меню
Последний раз редактировалось Dryundel 10.09.2021{, 14:44}, всего редактировалось 3 раза.

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

Набор блоков ЭНКОДЕР

#41

Сообщение Dryundel » 02.12.2019{, 08:54}

Олега, Вы попробовали 3.0.1 ?
Работает? Замораживает значение через En?

Олега
Рядовой
Сообщения: 3
Зарегистрирован: 09.01.2018{, 21:29}
Репутация: 0
Имя: Олег

Набор блоков ЭНКОДЕР

#42

Сообщение Олега » 02.12.2019{, 13:45}

Попробовал Plus v 3.0.1 Да!! этот действительно работает так как мне надо. Значения замораживаются. все отлично! Спасибо за блок. Удачи :smile9:

starik2000
Рядовой
Сообщения: 14
Зарегистрирован: 04.03.2020{, 11:40}
Репутация: 0
Имя: Павел

Набор блоков ЭНКОДЕР

#43

Сообщение starik2000 » 05.03.2020{, 22:16}

может кто поделится блоком енкодера на 8266. Сколько перепробовал - ни один не работает

Andrejka
Рядовой
Сообщения: 40
Зарегистрирован: 13.12.2018{, 19:40}
Репутация: 1
Имя: Андрей

Набор блоков ЭНКОДЕР

#44

Сообщение Andrejka » 06.03.2020{, 03:50}

starik2000 писал(а):
05.03.2020{, 22:16}
может кто поделится блоком енкодера на 8266. Сколько перепробовал - ни один не работает
Добрый день. Вот рабочий проект в FLPROG 6.31, правда IDE брал от FLROG 5.3 (V1.8.9).
Вложения
Тест ESP ENC+1306 (IDE F530).flp
(707.65 КБ) 131 скачивание

Аватара пользователя
Goosr
Сержант
Сообщения: 184
Зарегистрирован: 07.06.2016{, 08:25}
Репутация: 16
Откуда: Тольятти
Имя: Дмитрий

Набор блоков ЭНКОДЕР

#45

Сообщение Goosr » 12.06.2020{, 22:25}

Хоть тема старая, но спрошу.
Какую частоту входящих импульсов от энкодера может обработать uno, mega или due?

Аватара пользователя
Di123
Капитан
Сообщения: 828
Зарегистрирован: 03.11.2018{, 19:38}
Репутация: 29
Имя: Дмитрий

Набор блоков ЭНКОДЕР

#46

Сообщение Di123 » 01.07.2020{, 14:13}

у блока есть минус
он не понимает что нужно остановится
2020-07-01_180457.png
2020-07-01_180457.png (2.55 КБ) 2051 просмотр
мне нужны импулься от 0-100 что мне и выделяет блок лимита
но стоит при достижении 100 убежать чуть дальше как при попытке начать крутить обратно он не убавляет пока ручка не врнётся в положении 100 и только тогда начнёт убавляться
тоесть каждый раз приходится искать значние 100 при убавлении а точнее предвкушать его что вот вот оно начнёт убавляться
в общем это чуство поиска напрягает :smile37:

Ingwar
Полковник
Сообщения: 1929
Зарегистрирован: 28.10.2015{, 22:47}
Репутация: 223
Откуда: Ленобласть
Имя: Игорь

Набор блоков ЭНКОДЕР

#47

Сообщение Ingwar » 01.07.2020{, 15:37}

Попробуйте этот
СпойлерПоказать
Безымянный.png
Безымянный.png (6.86 КБ) 2043 просмотра
Люди в своем большинстве живо интересуются всем на свете, за исключением того, что действительно стоит знать.

Аватара пользователя
Di123
Капитан
Сообщения: 828
Зарегистрирован: 03.11.2018{, 19:38}
Репутация: 29
Имя: Дмитрий

Набор блоков ЭНКОДЕР

#48

Сообщение Di123 » 01.07.2020{, 15:50}

я встречал там похожий 3,1
но нет информации по нему и остановился пока на этом

Andrejka
Рядовой
Сообщения: 40
Зарегистрирован: 13.12.2018{, 19:40}
Репутация: 1
Имя: Андрей

Набор блоков ЭНКОДЕР

#49

Сообщение Andrejka » 02.07.2020{, 08:14}

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

Отправлено спустя 1 минуту 45 секунд:
Andrejka писал(а):
02.07.2020{, 08:14}
Добрый день. Прошу поделиться блоком для ESP33, не смог найти.
ESP 32..

Аватара пользователя
Davit07
Сержант
Сообщения: 119
Зарегистрирован: 05.01.2020{, 03:39}
Репутация: 5
Имя: Давит

Набор блоков ЭНКОДЕР

#50

Сообщение Davit07 » 02.07.2020{, 22:31}

Доброго дня.
Приобрел инкрементальный энкодер (Omron E6B2-CWZ6C, 1000 импульсов , 3х фазный.
Большинство блоком с 2 входами, данный же энкодер 3 выходами (A.B.Z.)
Подскажите, каким блоком можно получить точную скорость вращения с данного энкодера?

Отправлено спустя 3 часа 22 минуты 46 секунд:
Хочу услышать Ваше мнение.
Получиться считать обороты энкодера ?
Вложения
датчик скорости.flp
(216.48 КБ) 66 скачиваний

Аватара пользователя
Davit07
Сержант
Сообщения: 119
Зарегистрирован: 05.01.2020{, 03:39}
Репутация: 5
Имя: Давит

Набор блоков ЭНКОДЕР

#51

Сообщение Davit07 » 05.07.2020{, 18:23}

Всем привет.
Парни, подскажите пожалуйста как блоком можно получить точные показание с Энкодер?
Энкодер инкрементальный, выход NPN, фазы A, B, Z, разрешение 1000имп/об, питание 5-24В,Omron E6B2-CWZ6C.
Перелистал форум, попробовал кучу блоков , но без результата :smile390:. Энкодер соединил с ШД для проверки на полним обороте, по показаниям энкодера не хватает несколько десятков импульса, то излишки .
Данным энкодером хочу считывать обороты шпинделя на фрезерном станке, обороты не более 400 об\мин
Прошу Вашей помощи в подборе блока
Всем спасибо

Аватара пользователя
Davit07
Сержант
Сообщения: 119
Зарегистрирован: 05.01.2020{, 03:39}
Репутация: 5
Имя: Давит

Набор блоков ЭНКОДЕР

#52

Сообщение Davit07 » 05.07.2020{, 20:28}

av, посоветуй решение . Любое ))))

Ingwar
Полковник
Сообщения: 1929
Зарегистрирован: 28.10.2015{, 22:47}
Репутация: 223
Откуда: Ленобласть
Имя: Игорь

Набор блоков ЭНКОДЕР

#53

Сообщение Ingwar » 05.07.2020{, 21:45}

Davit07 писал(а):
05.07.2020{, 18:23}
Данным энкодером хочу считывать обороты шпинделя на фрезерном станке, обороты не более 400 об\мин
Если вопрос только в измерении скорости вращения - используйте одну фазу из энкодера и скоростной счетчик...
Люди в своем большинстве живо интересуются всем на свете, за исключением того, что действительно стоит знать.

Аватара пользователя
Davit07
Сержант
Сообщения: 119
Зарегистрирован: 05.01.2020{, 03:39}
Репутация: 5
Имя: Давит

Набор блоков ЭНКОДЕР

#54

Сообщение Davit07 » 05.07.2020{, 22:34}

av, Ingwar, Парни , спасибо !

Отправлено спустя 18 минут 45 секунд:
К примеру , если с 2х счётчиков суминовать показания и разделить на количество счётчиков , то мы получим среднее показания . Будет ли работать данный блок и не будет запаздывать математическое решение для определение скорости ?

Аватара пользователя
Davit07
Сержант
Сообщения: 119
Зарегистрирован: 05.01.2020{, 03:39}
Репутация: 5
Имя: Давит

Набор блоков ЭНКОДЕР

#55

Сообщение Davit07 » 06.07.2020{, 09:02}

av, показания счётчика скачут , в характеристиках энкодер на 1000 импульсов на оборот , счётчик нашитует 1337,+- 10 импульсов. Для расчета скорости надо постоянное значение, для этого пытался вывести среднее среднее показания двух счётчиков . Возможно ошибаюсь .
Благодарю за помощь . Буду ломать голову дальше )

Ingwar
Полковник
Сообщения: 1929
Зарегистрирован: 28.10.2015{, 22:47}
Репутация: 223
Откуда: Ленобласть
Имя: Игорь

Набор блоков ЭНКОДЕР

#56

Сообщение Ingwar » 06.07.2020{, 09:56}

Эх... Вот смотрите ЧТО и КАК считаем. В примере сигнал от генератора, но для примера модифицированый. Частота неизменна и выделена красным. Для вашего варианта примерно 366,6 об/мин.
Пример 1
На входной ноге контроллера (завален фронт)
СпойлерПоказать
ч3.png
В программе
СпойлерПоказать
ч1.png
Пример 2 (сигнал немного приблизили к правильному)
На входной ноге контроллера
СпойлерПоказать
ч4.png
В программе
СпойлерПоказать
ч2.png
Это к тому, что для начала нужно сформировать входной сигнал.

Отправлено спустя 19 минут 21 секунду:
Davit07 писал(а):
06.07.2020{, 09:02}
пытался вывести среднее среднее показания двух счётчиков . Возможно ошибаюсь .
Не нужно это. Делайте замер не 1 секунду, а 2, 3 или больше и будет Вам точность.
Люди в своем большинстве живо интересуются всем на свете, за исключением того, что действительно стоит знать.

SSSergeich
Капитан
Сообщения: 708
Зарегистрирован: 06.02.2016{, 11:01}
Репутация: 37
Откуда: Ярославль
Имя: Сергей

Набор блоков ЭНКОДЕР

#57

Сообщение SSSergeich » 06.07.2020{, 10:35}

Offtop
СпойлерПоказать
Davit07 писал(а):
05.07.2020{, 18:23}
Энкодер инкрементальный, выход NPN, фазы A, B, Z, разрешение 1000имп/об, питание 5-24В,Omron E6B2-CWZ6C.
Цена в чипдипе :shok:

Аватара пользователя
Davit07
Сержант
Сообщения: 119
Зарегистрирован: 05.01.2020{, 03:39}
Репутация: 5
Имя: Давит

Набор блоков ЭНКОДЕР

#58

Сообщение Davit07 » 06.07.2020{, 10:53}

av писал(а):
06.07.2020{, 09:32}
Davit07, чем замеряете обороты вала (соответственно энкодера). Ведь энкодер считывает на один импульс угол поворота вала 0,36 градусов.
Благодарю ещё раз за ответ.
av, раскроете Вашу мысль более подробно .
Я понял ,что Вы имеете в виду , но как то не до конца )) понял , но не понял )).

Отправлено спустя 1 минуту 54 секунды:
SSSergeich писал(а):
06.07.2020{, 10:35}
Offtop
СпойлерПоказать
Davit07 писал(а):
05.07.2020{, 18:23}
Энкодер инкрементальный, выход NPN, фазы A, B, Z, разрешение 1000имп/об, питание 5-24В,Omron E6B2-CWZ6C.
Цена в чипдипе :shok:
Золотой )))
Покупал в Китае за 1,8р

Отправлено спустя 8 минут :
Ingwar, спасибо за развернутый ответ . Буду пробовать .
Замер производил за 100 милилекунд.
Построил такую прибуду для подсчёта сигналов на оборот. Наверно в этом моя ошибка .
Ingwar, av, спасибо вам за помощь

Отправлено спустя 1 минуту 5 секунд:
Davit07 писал(а):
06.07.2020{, 11:03}
av писал(а):
06.07.2020{, 09:32}
Davit07, чем замеряете обороты вала (соответственно энкодера). Ведь энкодер считывает на один импульс угол поворота вала 0,36 градусов.
Благодарю ещё раз за ответ.
av, раскроете Вашу мысль более подробно .
Я понял ,что Вы имеете в виду , но как то не до конца )) понял , но не понял )).

Отправлено спустя 1 минуту 54 секунды:
SSSergeich писал(а):
06.07.2020{, 10:35}
Offtop
СпойлерПоказать
Золотой )))
Покупал в Китае за 1,8р

Отправлено спустя 8 минут :
Ingwar, спасибо за развернутый ответ . Буду пробовать .
Замер производил за 100 милилекунд.
Построил такую прибуду для подсчёта сигналов на оборот. Наверно в этом моя ошибка .
Ingwar, av, спасибо вам за помощь
Вложения
IMG_20200706_104354.jpg

Аватара пользователя
Davit07
Сержант
Сообщения: 119
Зарегистрирован: 05.01.2020{, 03:39}
Репутация: 5
Имя: Давит

Набор блоков ЭНКОДЕР

#59

Сообщение Davit07 » 06.07.2020{, 11:57}

av писал(а):
06.07.2020{, 11:21}
Davit07 писал(а):
06.07.2020{, 11:04}
av, раскроете Вашу мысль более подробно .
Я понял ,что Вы имеете в виду , но как то не до конца )) понял , но не понял )).
Я имел ввиду, что на один градус получается 3 с лишним импульса. А вот как вы замерили один оборот вала визуально или каким то прибором. Может из за этого такая большая погрешность в измерениях количества импульсов на оборот.
В предещушем сообщении есть фото привода ШД и энкодера. Проверял какое количество импульсов на полный оборот ШД

Аватара пользователя
Davit07
Сержант
Сообщения: 119
Зарегистрирован: 05.01.2020{, 03:39}
Репутация: 5
Имя: Давит

Набор блоков ЭНКОДЕР

#60

Сообщение Davit07 » 07.07.2020{, 12:23}

Всем привет.
Искал в интернете похожие работы с энкодером и попалась страница, где туземец написал скетч для энкодера .
Ссылка:
https://electricdiylab.com/how-to-conne ... h-arduino/
Проверил через монитор порт, как в описание по ссылке. Результат показаний удивил своей точностью из последних опытов с энкодером, +-1-3 импульса на оборот

Хочу к Вам обратиться за помощью в создании блока из скетча. К сожалению в этом вопросе мой опыт и познания пока, ранен нулю.
Наверно надо удалит из скетча монитор порта и также хотелось бы добавить в блок деление показаний на 2, что бы можно было получать показания на выходе равные указанным характеристикам на экодере. Так же, требуется выход для использование блока с другими блоками.

Скетч:

volatile long temp, counter = 0 ; //This variable will increase or decrease depending on the rotation of encoder

void setup( ) {
Serial.begin ( 9600 );
pinMode( 2, INPUT_PULLUP) ; // internal pullup input pin 2

pinMode( 3, INPUT_PULLUP) ; // internalเป็น pullup input pin 3
//Setting up interrupt
//A rising pulse from encodenren activated ai0(). AttachInterrupt 0 is DigitalPin nr 2 on moust Arduino.
attachInterrupt( 0, ai0, RISING);

//B rising pulse from encodenren activated ai1(). AttachInterrupt 1 is DigitalPin nr 3 on moust Arduino.
attachInterrupt( 1, ai1, RISING);
}

void loop( ) {
// Send the value of counter
if( counter != temp ){
Serial.println (counter);
temp = counter;
}
}

void ai0() {
// ai0 is activated if DigitalPin nr 2 is going from LOW to HIGH
// Check pin 3 to determine the direction
if(digitalRead( 3) ==LOW) {
counter++;
} else{
counter--;
}
}

void ai1() {
// ai0 is activated if DigitalPin nr 3 is going from LOW to HIGH
// Check with pin 2 to determine the direction
if(digitalRead( 2) ==LOW) {
counter--;
} else{
counter++;
}
}


Вот еще один . Посмотрите какой проще и луче для создание блока. Но этот скетч не переходит в отрицательное значение как предыдущий . Выглядит это так :
Скетч 1) 3,2,1,0,-1,-2,-3
скетч 2) 3,2,1,65535, 65534. При вращении в положительную сторону и достижении 65535 отсчет начинается с нуля до этого значения по кругу . Наверно данный скетч хуже. Судить не могу, не знаю )

by Ben-Tommy Eriksen

https://github.com/BenTommyE/BenRotaryEncoder

*/

// Encoder connect to digitalpin 2 and 3 on the Arduino.

volatile unsigned int counter = 0; //This variable will increase or decrease depending on the rotation of encoder

void setup() {
Serial.begin (9600);

pinMode(2, INPUT); // set pin to input
pinMode(3, INPUT); // set pin to input

digitalWrite(2, HIGH); // turn on pullup resistors
digitalWrite(3, HIGH); // turn on pullup resistors


//Setting up interrupt
//A rising pulse from encodenren activated ai0(). AttachInterrupt 0 is DigitalPin nr 2 on moust Arduino.
attachInterrupt(0, ai0, RISING);

//B rising pulse from encodenren activated ai1(). AttachInterrupt 1 is DigitalPin nr 3 on moust Arduino.
attachInterrupt(1, ai1, RISING);
}

void loop() {
// Send the value of counter
Serial.println (counter);
}

void ai0() {
// ai0 is activated if DigitalPin nr 2 is going from LOW to HIGH
// Check pin 3 to determine the direction
if(digitalRead(3)==LOW) {
counter++;
}else{
counter--;
}
}

void ai1() {
// ai0 is activated if DigitalPin nr 3 is going from LOW to HIGH
// Check with pin 2 to determine the direction
if(digitalRead(2)==LOW) {
counter--;
}else{
counter++;
}
}

Спасибо за помощь

Ответить

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