Энкодер Pro

Encoder EncoderPro EncPro

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

Энкодер Pro

#1

Сообщение Dryundel » 10.09.2021{, 13:57}

Если возникли проблемы с компиляцией Читай пост #12 (временно)
Энкодер Pro (EncPro)
(AVR, ESP32)
.
На самом деле эта тема является логическим продолжением:
Набор блоков ЭНКОДЕР
.
Новый блок EncPro содержит возможности всех ранее представленных блоков вместе взятых.
Полностью переработан алгоритм работы с используемой библиотекой Encoder, благодаря чему повысилась эффективность и надежность работы блока.

ВНИМАНИЕ! Для корректной работы блока, удалите старые библиотеки, такие как Encoder, Encoder-master, Encoder1.4.1. Данный блок работает с последней версией - Encoder1.4.2 Устанавливать ничего не нужно, библиотека вшита в блок.
Пути для удаления (по умолчанию):
1. ...\FLProg\ideV7\libraries
2. ...\FLProg\ideV7\portable\sketchbook\libraries

.
EncPro_1.jpg
.
Актуальная версия.
Энкодер_Pro_V1.1_(Code_-_Professional).rar
- Добавлен параметр "Дополнительные настройки"
- Оптимизирован алгоритм компиляции
- Исправлена ошибка компиляции при отсутствии выходов Up и Down
.
История версий.
Энкодер_Pro_V1.0_(Code_-_Professional).rar
Данный релиз является бета-версией и будет дорабатываться, хотя и полностью работоспособен.
.
Краткое описание:

Энкодер Pro (EncPro) это универсальный блок с возможностью настройки.
Все настройки интуитивно понятны и имеют описание и подсказки.
Благодаря отличному алгоритму библиотеки Encoder (https://github.com/PaulStoffregen/Encoder/releases),
которую я по праву считаю лучшей в своем классе, пропуск шагов практически исключен.
В описании библиотеки гарантирована работа на частоте до 100 кГц - 127 кГц.
Если у вас нормальный, не убитый энкодер, имеющий RC фильтры, то при подключении
сигнальных пинов на пины контроллера, поддерживающие прерывания, качественная работа
блока гарантирована. Если же такой возможности нет, то используйте хотя бы один пин
поддерживающий прерывания. У таких контроллеров как UNO и NANO это D2 и D3.
Счетный выход блока Count выдает результат моментально.
Скорость работы импульсных выходов Up и Down зависит от вашей программы.
Блок физически не может выдавать больше одного импульса за два цикла.
Однако импульсов будет ровно столько, сколько покажет моментальный выход Count,
хотя они могут совершаться с задержкой.

Блок выдает количество шагов, направление и импульсы для каждого шага.

Возможности блока и работа с ним:

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

Варианты настройки блока:
EncPro_Варианты.jpg
.
Настройки:

- Pin1 и Pin2 - выбор пинов контроллера к которым подключены дата-пины энкодера (DT, CLK).
- Тиков на шаг - Количество тиков, выдаваемых энкодером, за один физический шаг(щелчок). Энкодер типа EC-11 ( KY-040) выдает 4 или 2 тика на шаг. Зависит от производителя. Если энкодер не имеет дискретного (ступенчатого) шага, можно ввести количество тиков, кратно которому будет выдаваться один импульс.
- Выходы импульсные Up и Down - это инкрементный и декрементный выходы. При правильно настроенном энкодере,на одном из этих выходов, в зависимости от направления вращения энкодера, появляются импульсы.
Один импульс на один шаг.
- Выход счетчика Count - это числовой выход счетчика импульсов. При вращении в одну стороку значение на нем увеличивается, в другую - уменьшается. Значения могут быть как положительными так и отрицательными. Макс и мин ограничены long ( -2 147 483 648 до 2 147 483 647 ).
- Вход сброса Reset - это вход сброса счетчика. При наличии на нем логической единицы, выход Count принимает значение "0".
- Вход предустановки Preset - это вход предустановки. При наличии на нем логической единицы, выход Count принимает значение со входа VP (Value Preset). Работает только с локальным выходом Count.
Это например, может быть актуально для использования начального значения из EEPROM.
- Количество групп выходов / входов - Блок может иметь несколько счетчиков и групп Up/Down.
Это актуально если с одного энкодера требуется передавать данные на разные блоки (входы блоков).
При использовании более одной группы таких выходов, Reset и Preset работают с активной группой.
Кроме этого можно использовать ResetAll и PresetAll - Общиt сброс и предустановка для всех счетчиков.
- Вход общего сброса ResetAll и Вход общей предустановки PresetAll - эти входы аналогичны Reset и Preset, но действуют на все группы выходов/входов одновременно.
Дополнительные настройки - Настраивается оптипизация прерываний и поднятие рабочей частоты до 127 кГц (только для AVR) или отключаются совсем (актуально если пины с прерыванием не задействованы, уменьшает размер).
Внимание! При оптимизации прерываний, другие прерывания в проекте, если таковые есть, перестанут работать.

- Вход Номер группы(NumGroup) появляется когда количество групп выходов/входов больше одного. В этом случае активной группой будет та, номер которой присутствует на этом входе.

Пример выбора номера активной группы с помощью штатного блока "Шифратор"
EncPro_Выбор группы.jpg
.
- Входы Значение предустановки (VP, VP1, VP2, VP3, VP4) - появляются при установленной настройке "Вход предустановки Preset/PresetAll". При высоком логическом уровне на Preset/PresetAll выходы "Count" примут соответствующее значение.
EncPro_Preset.jpg
.
Для скачивания вложений Вы должны быть зарегистрированы.
Последний раз редактировалось Dryundel 23.09.2021{, 18:38}, всего редактировалось 10 раз.
Пользовательские блоки на сайте FLPROG - BLOCK

MM33
Рядовой
Сообщения: 19
Зарегистрирован: 23.06.2021{, 11:52}
Репутация: 0
Имя: Михаил

Энкодер Pro

#21

Сообщение MM33 » 16.09.2021{, 10:46}

Нет, не ошибаюсь. Промышленные обработчики энкодеров выдают именно 10000 инк/ об.
весь вопрос заключается в том что по прерыванию, допустим канала В мы должны:
1 действие: определить DIR , ( соотношение уровней на треках А и В).
2 действие : изменить состояние счетчика импульсов +/- в зависимости от состояния DIR.
Допускаю что на UNO, вероятнее всего, два действия по одному прерыванию осуществить не возможно, но факт есть факт промышленные обработчики в преобразователях частоты, системах ЧПУ учетверяют паспортное значения энкодера.

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

Энкодер Pro

#22

Сообщение Dryundel » 16.09.2021{, 11:31}

MM33 писал(а):
16.09.2021{, 10:46}
Нет, не ошибаюсь. Промышленные обработчики энкодеров выдают именно 10000 инк/ об.
Пример такого обработчика в студию!
Будем препарировать.
Пользовательские блоки на сайте FLPROG - BLOCK

MM33
Рядовой
Сообщения: 19
Зарегистрирован: 23.06.2021{, 11:52}
Репутация: 0
Имя: Михаил

Энкодер Pro

#23

Сообщение MM33 » 16.09.2021{, 11:57}

на то они и промышленные, что с окружающими своими решениями не делятся.
Я просто говорю о том что это существует, не более того.
В свое время был озадачен этой проблемой , строил свой блок - обработчик, но тоже выше 5000 не поднялся. Но я и не программист и тоже не знаю как два действия привязать к одному прерыванию.

Аватара пользователя
ingener
Лейтенант
Сообщения: 509
Зарегистрирован: 14.10.2018{, 00:26}
Репутация: 15
Имя: Андрей

Энкодер Pro

#24

Сообщение ingener » 16.09.2021{, 12:05}

MM33 писал(а):
16.09.2021{, 10:46}
Промышленные обработчики энкодеров выдают именно 10000 инк/ об.
Это те, что стоят на валах электродвигателей, для подсчета угла поворота и пройденной дистанции.
Здесь же мы о "ручных", менюшных, так ск-ть.

MM33
Рядовой
Сообщения: 19
Зарегистрирован: 23.06.2021{, 11:52}
Репутация: 0
Имя: Михаил

Энкодер Pro

#25

Сообщение MM33 » 16.09.2021{, 12:45}

В менюшных пропуск шага не критичен, не сработало на этом щелчке сработает на следующем.
Предложенный Dryundel блок это гораздо больше. 100 кГц без пропусков и ошибок это уже заявка на победу. (промышленные 300 кГц документально, до 500 могут, но без гарантий.) Для личного творчества - более чем.

edyapd
Капитан
Сообщения: 762
Зарегистрирован: 20.09.2019{, 11:38}
Репутация: 64
Имя: Эдуард

Энкодер Pro

#26

Сообщение edyapd » 16.09.2021{, 13:00}

MM33 писал(а):
16.09.2021{, 11:57}
Но я и не программист и тоже не знаю как два действия привязать к одному прерыванию.
На самом деле, тут не нужно быть программистом. Можете просто, словами или на рисунке, описать, как вы это видите.
А уж перевести это в программу дело программистов.

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

Энкодер Pro

#27

Сообщение Dryundel » 16.09.2021{, 14:11}

MM33 писал(а):
16.09.2021{, 12:45}
100 кГц без пропусков и ошибок это уже заявка на победу.
100 кГц заявлено автором библиотеки для Ардуинки. По ESP информации нет.
Более того, в следующем релизе добавлю доп настройку оптимизации прерываний, с которой заявленная частота увеличится до 147 кГц. Настройка только для AVR. Правда с такой настройкой вводятся ограничения на другие прерывания. Они просто не будут работать.

Отправлено спустя 7 минут 48 секунд:
Dryundel писал(а):
16.09.2021{, 14:11}
В менюшных пропуск шага не критичен, не сработало на этом щелчке сработает на следующем.
Ну вот не получилось у меня добиться пропуска шагов крутая энкодер руками. Конечно от качества энкодера тоже зависит. Возможно мне повезло. :)
Для реально качественной работы, ставьте триггер Шмита.

Отправлено спустя 3 минуты 53 секунды:
MM33, а посчитайте ка количество импульсов на одном канале. 2500 это не суммарно?
Пользовательские блоки на сайте FLPROG - BLOCK

MM33
Рядовой
Сообщения: 19
Зарегистрирован: 23.06.2021{, 11:52}
Репутация: 0
Имя: Михаил

Энкодер Pro

#28

Сообщение MM33 » 16.09.2021{, 15:22}

нет, в фотоимпульсных датчиках на треках А иВ находится на каждом то количество импульсов что указано на шильдике. в моем случае 2500, но может быть 1024 и 2048, 4096 и т.д
+ трек нуль- метки. На нем один импульс на оборот. Нужен для выхода приводной точки в нулевое положение.

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

Энкодер Pro

#29

Сообщение Dryundel » 16.09.2021{, 15:33}

Dryundel писал(а):
10.09.2021{, 13:57}
нет, в фотоимпульсных датчиках на треках А иВ находится на каждом то количество импульсов что указано на шильдике.
Проверял? Дело то на 5 минут.
Пользовательские блоки на сайте FLPROG - BLOCK

MM33
Рядовой
Сообщения: 19
Зарегистрирован: 23.06.2021{, 11:52}
Репутация: 0
Имя: Михаил

Энкодер Pro

#30

Сообщение MM33 » 16.09.2021{, 16:01}

Проверял позавчера,(сейчас в силу некоторых обстоятельств не могу физически).
При кол-ве тиков = 4 число за один оборот вала в (контроль через монитор порта ) -1250.
При кол-ве тиков = 1 число за один оборот вала в (контроль через монитор порта ) -5000.
Так как от руки я точно спозиционировать не могу числа получаются близкие к этим.
А то что датчик обсчитывается ЧПУ или ПЧ с учетверением - это классика, это было всегда. 10000 имп / на оборот может получится только в том случае если на каждом треке по 2500 и считается каждый перепад уровня выходного сигнала.

Отправлено спустя 50 минут 43 секунды:
какие то чудеса творятся с Вашим блоком .
то что компилировалось ранее( вариант EN + вых счетчика) и выдавало 5000 инк /об. сегодня не компилируется. выдает ошибку:
exit status 1
'Out_47946759_102165005' was not declared in this scope
Зато в варианте EN+RESET + вых счетчика + оба импульсных выхода компилируется без ошибок и выдает 10000 имп/ об

Отправлено спустя 1 минуту 11 секунд:
при тиках на шаг =1

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

Энкодер Pro

#31

Сообщение Dryundel » 16.09.2021{, 17:23}

MM33 писал(а):
16.09.2021{, 16:01}
Проверял позавчера...
Вы точно в этом уверены?
Проверял количество импульсов одной линии на оборот?
Может еще раз перепроверить себя?
.
Я не спрашиваю про проверку блока.
Меня интересует конкретное количество импульсов на одном канале вашего энкодера.
.
Не просто же так я это спрашиваю.
К примеру у простенького энкодера EC-11 ( KY-040) каждый канал выдает по 20 импульсов на оборот.
Однако блок EncPro четко выдает 80 инкрементных импульсов на оборот при тиках на шаг = 1.
.
Так что спрошу еще раз.
Dryundel писал(а):
16.09.2021{, 15:33}
Проверял?
Отправлено спустя 6 минут 12 секунд:
MM33 писал(а):
16.09.2021{, 16:53}
какие то чудеса творятся с Вашим блоком .
то что компилировалось ранее( вариант EN + вых счетчика) и выдавало 5000 инк /об. сегодня не компилируется. выдает ошибку:
Это проблемы компиляции редактора. Какие то глюки. Срочно пришлите мне ваш файл. Я никак не могу отловить закономерность. Сергею не могу сформулировать.
Пользовательские блоки на сайте FLPROG - BLOCK

MM33
Рядовой
Сообщения: 19
Зарегистрирован: 23.06.2021{, 11:52}
Репутация: 0
Имя: Михаил

Энкодер Pro

#32

Сообщение MM33 » 17.09.2021{, 08:42}

Я не разобрался как на сайте прикреплять файлы, проекты в сообщения, поэтому ниже скомпилированный скетч. В FLPROG Ваш блок в минимальной комплектации + блок передачи переменной в UART.
СпойлерПоказать

Код: Выделить всё

//#define ENCODER_DO_NOT_USE_INTERRUPTS //Выключить USE_INTERRUPTS.
//#define ENCODER_OPTIMIZE_INTERRUPTS 
#include <Encoder.h>
long _SV1CP0 = 0L;
bool _SV1CP0needSend = 0;
long Out_167890681_102165005;
Encoder myEnc102165005(2, 3);
int _sumStep102165005 = 0;
bool flag102165005 = 0;
long _count = 0;
void setup()
{
    Serial.begin(9600, SERIAL_8N1);
}
void loop()
{
    //Плата:1
    if ((1))
    {
        long _tmpCount = myEnc102165005.read();
        		if(!flag102165005)
        		
        {
            			myEnc102165005.readAndReset();
            			myEnc102165005.write(_count * 1);
            			_sumStep102165005 = _count;
            			flag102165005 = 1;
            		
        }
        		if(!Out_47946759_102165005 && !Out_106233685_102165005)
        		
        {
            			if(_sumStep102165005 < _tmpCount / 1)
            			
            {
                				Out_47946759_102165005 = 1;
                				_sumStep102165005++;
                			
            }
            			else if(_sumStep102165005  > _tmpCount / 1)
            			
            {
                				Out_106233685_102165005 = 1;
                				_sumStep102165005--;
                			
            }
            		
        }
        		else
        		
        {
            			Out_47946759_102165005 = 0;
            Out_106233685_102165005 = 0;
            		
        }
        		if(+0 == 1)
        		
        {
            			myEnc102165005.readAndReset();
            			_sumStep102165005 = 0;
            		
        }
        		if(+0 == 1)
        		
        {
            			myEnc102165005.write((+0) * 1);
            			_sumStep102165005 = +0;
            		
        }
        		_count = _tmpCount / 1;
        		Out_167890681_102165005 = _count;
    }
    else
    {
        Out_47946759_102165005 = 0;
        Out_106233685_102165005 = 0;
        flag102165005 = 0;
    }
     if(!((Out_167890681_102165005)==(_SV1CP0)))
    {
        _SV1CP0needSend = 1;
    }
     _SV1CP0 = Out_167890681_102165005;
    if(_SV1CP0needSend) 
    {
        _SV1CP0needSend = 0;
        Serial.write (1);
        Serial.print (1);
        Serial.write (2);
        Serial.print (_SV1CP0);
        Serial.write (3);
    }
}
Отправлено спустя 4 минуты 56 секунд:
кажется нашел как прицепить
Энкодер_Pro_V1.0_(Code_-_Professional).ubi
ошибка : exit status 1
'Out_47946759_102165005' was not declared in this scope
Для скачивания вложений Вы должны быть зарегистрированы.

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

Энкодер Pro

#33

Сообщение Dryundel » 17.09.2021{, 08:52}

MM33, В следующий раз архивируйте файлы более 200кб
А код прячте под спойлер.
Пользовательские блоки на сайте FLPROG - BLOCK

MM33
Рядовой
Сообщения: 19
Зарегистрирован: 23.06.2021{, 11:52}
Репутация: 0
Имя: Михаил

Энкодер Pro

#34

Сообщение MM33 » 17.09.2021{, 08:57}

По поводу подсчета к-ва импульсов на одном канале :
безусловно это возможно через скоростной счетчик в интервале от 0 -метки до 0 метки.
Но какой в этом смысл , там будет 2500
Вот в вашем примере число на канале 20 на выходе блока 80. Это ожидаемо, так как блок обсчитывает все фронты и соответственно работает с учетверением.
В моем случае , я вчера писал , комплектация " как есть из пакета" тоже выдала 10000 инк/об. при том что на шильде указано 2500 инк/об. Т.е тоже с учетверением.
Вот минимальная комплектация блока , до тех пор пока компилировалась почему то выдавала 5000 инк/ об.

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

Энкодер Pro

#35

Сообщение Dryundel » 17.09.2021{, 08:59}

MM33, Нужен файл проекта который не компилируется, а не блока.
Пользовательские блоки на сайте FLPROG - BLOCK

MM33
Рядовой
Сообщения: 19
Зарегистрирован: 23.06.2021{, 11:52}
Репутация: 0
Имя: Михаил

Энкодер Pro

#36

Сообщение MM33 » 17.09.2021{, 09:22}

pr22.ino
Для скачивания вложений Вы должны быть зарегистрированы.

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

Энкодер Pro

#37

Сообщение Dryundel » 17.09.2021{, 09:55}

MM33, да елки палки ПРОЕКТ нужен.
А не скетч из Arduino IDE
Надо файл с расширением flp
Пользовательские блоки на сайте FLPROG - BLOCK

MM33
Рядовой
Сообщения: 19
Зарегистрирован: 23.06.2021{, 11:52}
Репутация: 0
Имя: Михаил

Энкодер Pro

#38

Сообщение MM33 » 17.09.2021{, 10:02}

pr1.flp
Для скачивания вложений Вы должны быть зарегистрированы.

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

Энкодер Pro

#39

Сообщение Dryundel » 17.09.2021{, 10:54}

MM33, нашел ошибку в логике компиляции. Почему она раньше не вылезала не могу сказать.
В следующем релизе исправлю, а пока просто включите выходы Up и Down. Поставьте галку использовать.
Выходы можно не использовать. При выполнении кода они не помешают.
Пользовательские блоки на сайте FLPROG - BLOCK

MM33
Рядовой
Сообщения: 19
Зарегистрирован: 23.06.2021{, 11:52}
Репутация: 0
Имя: Михаил

Энкодер Pro

#40

Сообщение MM33 » 17.09.2021{, 10:59}

спасибо за помощь.
С выходами UP и Down интуитивно понятно.

Ответить

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