Энкодер Pro

Пользовательские блоки расширяющие базовый функуионал программы по работе с различными датчиками и энкодерами
Правила форума
Рекомендации по размещению блоков:
Автор блока создает подробное описание блока, отличие от подобных(если есть на данный момент).Сложные блоки очень желательно с примерами.
При выходе новых версий редактирует/дополняет свой первый пост с указанием даты, версии, причины.
В каждой теме обсуждается только выложенный автором блок - баги, возможность (или предложение) доработки и прочие хотелки.
Свои блоки, переработанные, с другими библиотеками, протоколами и т.д.- размещаем либо сами отдельно, либо обсуждаем и дорабатываем в форуме Разработка блоков.
Пользователи улучшив блок автора и проверив его работоспособность - могут обратиться к автору или модераторам с просьбой добавить их версию блока в первое сообщение темы.
MM33
Рядовой
Сообщения: 60
Зарегистрирован: 23 июн 2021, 11:52
Имя: Михаил
Поблагодарили: 3 раза

Энкодер Pro

Сообщение MM33 »

Нет, не ошибаюсь. Промышленные обработчики энкодеров выдают именно 10000 инк/ об.
весь вопрос заключается в том что по прерыванию, допустим канала В мы должны:
1 действие: определить DIR , ( соотношение уровней на треках А и В).
2 действие : изменить состояние счетчика импульсов +/- в зависимости от состояния DIR.
Допускаю что на UNO, вероятнее всего, два действия по одному прерыванию осуществить не возможно, но факт есть факт промышленные обработчики в преобразователях частоты, системах ЧПУ учетверяют паспортное значения энкодера.
Аватара пользователя
Dryundel
Полковник
Сообщения: 2429
Зарегистрирован: 22 май 2017, 23:15
Откуда: Ярославль
Имя: Андрей
Благодарил (а): 3 раза
Поблагодарили: 30 раз

Энкодер Pro

Сообщение Dryundel »

MM33 писал(а): 16 сен 2021, 10:46 Нет, не ошибаюсь. Промышленные обработчики энкодеров выдают именно 10000 инк/ об.
Пример такого обработчика в студию!
Будем препарировать.
MM33
Рядовой
Сообщения: 60
Зарегистрирован: 23 июн 2021, 11:52
Имя: Михаил
Поблагодарили: 3 раза

Энкодер Pro

Сообщение MM33 »

на то они и промышленные, что с окружающими своими решениями не делятся.
Я просто говорю о том что это существует, не более того.
В свое время был озадачен этой проблемой , строил свой блок - обработчик, но тоже выше 5000 не поднялся. Но я и не программист и тоже не знаю как два действия привязать к одному прерыванию.
Аватара пользователя
ingener
Лейтенант
Сообщения: 580
Зарегистрирован: 14 окт 2018, 00:26
Имя: Андрей
Благодарил (а): 2 раза
Поблагодарили: 3 раза

Энкодер Pro

Сообщение ingener »

MM33 писал(а): 16 сен 2021, 10:46 Промышленные обработчики энкодеров выдают именно 10000 инк/ об.
Это те, что стоят на валах электродвигателей, для подсчета угла поворота и пройденной дистанции.
Здесь же мы о "ручных", менюшных, так ск-ть.
MM33
Рядовой
Сообщения: 60
Зарегистрирован: 23 июн 2021, 11:52
Имя: Михаил
Поблагодарили: 3 раза

Энкодер Pro

Сообщение MM33 »

В менюшных пропуск шага не критичен, не сработало на этом щелчке сработает на следующем.
Предложенный Dryundel блок это гораздо больше. 100 кГц без пропусков и ошибок это уже заявка на победу. (промышленные 300 кГц документально, до 500 могут, но без гарантий.) Для личного творчества - более чем.
edyapd
Капитан
Сообщения: 768
Зарегистрирован: 20 сен 2019, 11:38
Имя: Эдуард

Энкодер Pro

Сообщение edyapd »

MM33 писал(а): 16 сен 2021, 11:57 Но я и не программист и тоже не знаю как два действия привязать к одному прерыванию.
На самом деле, тут не нужно быть программистом. Можете просто, словами или на рисунке, описать, как вы это видите.
А уж перевести это в программу дело программистов.
Аватара пользователя
Dryundel
Полковник
Сообщения: 2429
Зарегистрирован: 22 май 2017, 23:15
Откуда: Ярославль
Имя: Андрей
Благодарил (а): 3 раза
Поблагодарили: 30 раз

Энкодер Pro

Сообщение Dryundel »

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

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

Отправлено спустя 3 минуты 53 секунды:
[ref]MM33[/ref], а посчитайте ка количество импульсов на одном канале. 2500 это не суммарно?
MM33
Рядовой
Сообщения: 60
Зарегистрирован: 23 июн 2021, 11:52
Имя: Михаил
Поблагодарили: 3 раза

Энкодер Pro

Сообщение MM33 »

нет, в фотоимпульсных датчиках на треках А иВ находится на каждом то количество импульсов что указано на шильдике. в моем случае 2500, но может быть 1024 и 2048, 4096 и т.д
+ трек нуль- метки. На нем один импульс на оборот. Нужен для выхода приводной точки в нулевое положение.
Аватара пользователя
Dryundel
Полковник
Сообщения: 2429
Зарегистрирован: 22 май 2017, 23:15
Откуда: Ярославль
Имя: Андрей
Благодарил (а): 3 раза
Поблагодарили: 30 раз

Энкодер Pro

Сообщение Dryundel »

Dryundel писал(а): 10 сен 2021, 13:57 нет, в фотоимпульсных датчиках на треках А иВ находится на каждом то количество импульсов что указано на шильдике.
Проверял? Дело то на 5 минут.
MM33
Рядовой
Сообщения: 60
Зарегистрирован: 23 июн 2021, 11:52
Имя: Михаил
Поблагодарили: 3 раза

Энкодер Pro

Сообщение MM33 »

Проверял позавчера,(сейчас в силу некоторых обстоятельств не могу физически).
При кол-ве тиков = 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
Полковник
Сообщения: 2429
Зарегистрирован: 22 май 2017, 23:15
Откуда: Ярославль
Имя: Андрей
Благодарил (а): 3 раза
Поблагодарили: 30 раз

Энкодер Pro

Сообщение Dryundel »

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

Энкодер Pro

Сообщение MM33 »

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

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

//#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);
    }
}
[/spoiler]

Отправлено спустя 4 минуты 56 секунд:
кажется нашел как прицепить
Энкодер_Pro_V1.0_(Code_-_Professional).ubi
ошибка : exit status 1
'Out_47946759_102165005' was not declared in this scope
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Аватара пользователя
Dryundel
Полковник
Сообщения: 2429
Зарегистрирован: 22 май 2017, 23:15
Откуда: Ярославль
Имя: Андрей
Благодарил (а): 3 раза
Поблагодарили: 30 раз

Энкодер Pro

Сообщение Dryundel »

[ref]MM33[/ref], В следующий раз архивируйте файлы более 200кб
А код прячте под спойлер.
MM33
Рядовой
Сообщения: 60
Зарегистрирован: 23 июн 2021, 11:52
Имя: Михаил
Поблагодарили: 3 раза

Энкодер Pro

Сообщение MM33 »

По поводу подсчета к-ва импульсов на одном канале :
безусловно это возможно через скоростной счетчик в интервале от 0 -метки до 0 метки.
Но какой в этом смысл , там будет 2500
Вот в вашем примере число на канале 20 на выходе блока 80. Это ожидаемо, так как блок обсчитывает все фронты и соответственно работает с учетверением.
В моем случае , я вчера писал , комплектация " как есть из пакета" тоже выдала 10000 инк/об. при том что на шильде указано 2500 инк/об. Т.е тоже с учетверением.
Вот минимальная комплектация блока , до тех пор пока компилировалась почему то выдавала 5000 инк/ об.
Аватара пользователя
Dryundel
Полковник
Сообщения: 2429
Зарегистрирован: 22 май 2017, 23:15
Откуда: Ярославль
Имя: Андрей
Благодарил (а): 3 раза
Поблагодарили: 30 раз

Энкодер Pro

Сообщение Dryundel »

[ref]MM33[/ref], Нужен файл проекта который не компилируется, а не блока.
MM33
Рядовой
Сообщения: 60
Зарегистрирован: 23 июн 2021, 11:52
Имя: Михаил
Поблагодарили: 3 раза

Энкодер Pro

Сообщение MM33 »

pr22.ino
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Аватара пользователя
Dryundel
Полковник
Сообщения: 2429
Зарегистрирован: 22 май 2017, 23:15
Откуда: Ярославль
Имя: Андрей
Благодарил (а): 3 раза
Поблагодарили: 30 раз

Энкодер Pro

Сообщение Dryundel »

[ref]MM33[/ref], да елки палки ПРОЕКТ нужен.
А не скетч из Arduino IDE
Надо файл с расширением flp
MM33
Рядовой
Сообщения: 60
Зарегистрирован: 23 июн 2021, 11:52
Имя: Михаил
Поблагодарили: 3 раза

Энкодер Pro

Сообщение MM33 »

pr1.flp
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Аватара пользователя
Dryundel
Полковник
Сообщения: 2429
Зарегистрирован: 22 май 2017, 23:15
Откуда: Ярославль
Имя: Андрей
Благодарил (а): 3 раза
Поблагодарили: 30 раз

Энкодер Pro

Сообщение Dryundel »

[ref]MM33[/ref], нашел ошибку в логике компиляции. Почему она раньше не вылезала не могу сказать.
В следующем релизе исправлю, а пока просто включите выходы Up и Down. Поставьте галку использовать.
Выходы можно не использовать. При выполнении кода они не помешают.
MM33
Рядовой
Сообщения: 60
Зарегистрирован: 23 июн 2021, 11:52
Имя: Михаил
Поблагодарили: 3 раза

Энкодер Pro

Сообщение MM33 »

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

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

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 4 гостя