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

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

Добавлено: 13.03.2019{, 23:00}
Dryundel
Тема устарела и морально и технически.
Новый блок EncoderPro здесь.

Сколько ни пытался найти удовлетворяющий меня блок энкодера, не получилось.
Выкладываю свои варианты. Здоровая критика приветствуется.
1.jpg
Скачать все одним архивом:
Энкодеры от Dryundel.ubl
(664.68 КБ) 1143 скачивания
Блоки написаны на основе библиотеки Encoder.h
Могут работать на любых пинах, но на пинах поддерживающих прерывание результат самый лучший.
***
Энкодер_импульсный_v1.0_(CODE).ubi
(119.81 КБ) 528 скачиваний
Энкодер_импульсный_v1.1_(CODE).ubi
(135.99 КБ) 716 скачиваний
2.jpg
2.jpg (6.11 КБ) 21323 просмотра
Эти два блока выдают тики на выходах 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

Другие блоки для энкодера:
Тестер для энкодера
Блок энкодера для одноуровневого меню

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

Добавлено: 02.12.2019{, 08:54}
Dryundel
Олега, Вы попробовали 3.0.1 ?
Работает? Замораживает значение через En?

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

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

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

Добавлено: 05.03.2020{, 22:16}
starik2000
может кто поделится блоком енкодера на 8266. Сколько перепробовал - ни один не работает

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

Добавлено: 06.03.2020{, 03:50}
Andrejka
starik2000 писал(а):
05.03.2020{, 22:16}
может кто поделится блоком енкодера на 8266. Сколько перепробовал - ни один не работает
Добрый день. Вот рабочий проект в FLPROG 6.31, правда IDE брал от FLROG 5.3 (V1.8.9).

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

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

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

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

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

Добавлено: 01.07.2020{, 15:37}
Ingwar
Попробуйте этот
СпойлерПоказать
Безымянный.png
Безымянный.png (6.86 КБ) 2194 просмотра

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

Добавлено: 01.07.2020{, 15:50}
Di123
я встречал там похожий 3,1
но нет информации по нему и остановился пока на этом

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

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

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

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

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

Отправлено спустя 3 часа 22 минуты 46 секунд:
Хочу услышать Ваше мнение.
Получиться считать обороты энкодера ?

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

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

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

Добавлено: 05.07.2020{, 20:28}
Davit07
av, посоветуй решение . Любое ))))

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

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

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

Добавлено: 05.07.2020{, 22:34}
Davit07
av, Ingwar, Парни , спасибо !

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

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

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

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

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

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

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

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

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

Добавлено: 06.07.2020{, 10:53}
Davit07
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, спасибо вам за помощь

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

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

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

Добавлено: 07.07.2020{, 12:23}
Davit07
Всем привет.
Искал в интернете похожие работы с энкодером и попалась страница, где туземец написал скетч для энкодера .
Ссылка:
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++;
}
}

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