Энкодер Pro
Правила форума
Рекомендации по размещению блоков:
Автор блока создает подробное описание блока, отличие от подобных(если есть на данный момент).Сложные блоки очень желательно с примерами.
При выходе новых версий редактирует/дополняет свой первый пост с указанием даты, версии, причины.
В каждой теме обсуждается только выложенный автором блок - баги, возможность (или предложение) доработки и прочие хотелки.
Свои блоки, переработанные, с другими библиотеками, протоколами и т.д.- размещаем либо сами отдельно, либо обсуждаем и дорабатываем в форуме Разработка блоков.
Пользователи улучшив блок автора и проверив его работоспособность - могут обратиться к автору или модераторам с просьбой добавить их версию блока в первое сообщение темы.
Рекомендации по размещению блоков:
Автор блока создает подробное описание блока, отличие от подобных(если есть на данный момент).Сложные блоки очень желательно с примерами.
При выходе новых версий редактирует/дополняет свой первый пост с указанием даты, версии, причины.
В каждой теме обсуждается только выложенный автором блок - баги, возможность (или предложение) доработки и прочие хотелки.
Свои блоки, переработанные, с другими библиотеками, протоколами и т.д.- размещаем либо сами отдельно, либо обсуждаем и дорабатываем в форуме Разработка блоков.
Пользователи улучшив блок автора и проверив его работоспособность - могут обратиться к автору или модераторам с просьбой добавить их версию блока в первое сообщение темы.
Энкодер Pro
Нет, не ошибаюсь. Промышленные обработчики энкодеров выдают именно 10000 инк/ об.
весь вопрос заключается в том что по прерыванию, допустим канала В мы должны:
1 действие: определить DIR , ( соотношение уровней на треках А и В).
2 действие : изменить состояние счетчика импульсов +/- в зависимости от состояния DIR.
Допускаю что на UNO, вероятнее всего, два действия по одному прерыванию осуществить не возможно, но факт есть факт промышленные обработчики в преобразователях частоты, системах ЧПУ учетверяют паспортное значения энкодера.
весь вопрос заключается в том что по прерыванию, допустим канала В мы должны:
1 действие: определить DIR , ( соотношение уровней на треках А и В).
2 действие : изменить состояние счетчика импульсов +/- в зависимости от состояния DIR.
Допускаю что на UNO, вероятнее всего, два действия по одному прерыванию осуществить не возможно, но факт есть факт промышленные обработчики в преобразователях частоты, системах ЧПУ учетверяют паспортное значения энкодера.
- Dryundel
- Полковник
- Сообщения: 2429
- Зарегистрирован: 22 май 2017, 23:15
- Откуда: Ярославль
- Имя: Андрей
- Благодарил (а): 3 раза
- Поблагодарили: 30 раз
Энкодер Pro
Пример такого обработчика в студию!MM33 писал(а): 16 сен 2021, 10:46 Нет, не ошибаюсь. Промышленные обработчики энкодеров выдают именно 10000 инк/ об.
Будем препарировать.
Энкодер Pro
на то они и промышленные, что с окружающими своими решениями не делятся.
Я просто говорю о том что это существует, не более того.
В свое время был озадачен этой проблемой , строил свой блок - обработчик, но тоже выше 5000 не поднялся. Но я и не программист и тоже не знаю как два действия привязать к одному прерыванию.
Я просто говорю о том что это существует, не более того.
В свое время был озадачен этой проблемой , строил свой блок - обработчик, но тоже выше 5000 не поднялся. Но я и не программист и тоже не знаю как два действия привязать к одному прерыванию.
- ingener
- Лейтенант
- Сообщения: 580
- Зарегистрирован: 14 окт 2018, 00:26
- Имя: Андрей
- Благодарил (а): 2 раза
- Поблагодарили: 3 раза
Энкодер Pro
Это те, что стоят на валах электродвигателей, для подсчета угла поворота и пройденной дистанции.
Здесь же мы о "ручных", менюшных, так ск-ть.
Энкодер Pro
В менюшных пропуск шага не критичен, не сработало на этом щелчке сработает на следующем.
Предложенный Dryundel блок это гораздо больше. 100 кГц без пропусков и ошибок это уже заявка на победу. (промышленные 300 кГц документально, до 500 могут, но без гарантий.) Для личного творчества - более чем.
Предложенный Dryundel блок это гораздо больше. 100 кГц без пропусков и ошибок это уже заявка на победу. (промышленные 300 кГц документально, до 500 могут, но без гарантий.) Для личного творчества - более чем.
Энкодер Pro
На самом деле, тут не нужно быть программистом. Можете просто, словами или на рисунке, описать, как вы это видите.MM33 писал(а): 16 сен 2021, 11:57 Но я и не программист и тоже не знаю как два действия привязать к одному прерыванию.
А уж перевести это в программу дело программистов.
- Dryundel
- Полковник
- Сообщения: 2429
- Зарегистрирован: 22 май 2017, 23:15
- Откуда: Ярославль
- Имя: Андрей
- Благодарил (а): 3 раза
- Поблагодарили: 30 раз
Энкодер Pro
100 кГц заявлено автором библиотеки для Ардуинки. По ESP информации нет.
Более того, в следующем релизе добавлю доп настройку оптимизации прерываний, с которой заявленная частота увеличится до 147 кГц. Настройка только для AVR. Правда с такой настройкой вводятся ограничения на другие прерывания. Они просто не будут работать.
Отправлено спустя 7 минут 48 секунд:
Ну вот не получилось у меня добиться пропуска шагов крутая энкодер руками. Конечно от качества энкодера тоже зависит. Возможно мне повезло.Dryundel писал(а): 16 сен 2021, 14:11 В менюшных пропуск шага не критичен, не сработало на этом щелчке сработает на следующем.

Для реально качественной работы, ставьте триггер Шмита.
Отправлено спустя 3 минуты 53 секунды:
[ref]MM33[/ref], а посчитайте ка количество импульсов на одном канале. 2500 это не суммарно?
Энкодер Pro
нет, в фотоимпульсных датчиках на треках А иВ находится на каждом то количество импульсов что указано на шильдике. в моем случае 2500, но может быть 1024 и 2048, 4096 и т.д
+ трек нуль- метки. На нем один импульс на оборот. Нужен для выхода приводной точки в нулевое положение.
+ трек нуль- метки. На нем один импульс на оборот. Нужен для выхода приводной точки в нулевое положение.
- Dryundel
- Полковник
- Сообщения: 2429
- Зарегистрирован: 22 май 2017, 23:15
- Откуда: Ярославль
- Имя: Андрей
- Благодарил (а): 3 раза
- Поблагодарили: 30 раз
Энкодер Pro
Проверял? Дело то на 5 минут.Dryundel писал(а): 10 сен 2021, 13:57 нет, в фотоимпульсных датчиках на треках А иВ находится на каждом то количество импульсов что указано на шильдике.
Энкодер Pro
Проверял позавчера,(сейчас в силу некоторых обстоятельств не могу физически).
При кол-ве тиков = 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
При кол-ве тиков = 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
Вы точно в этом уверены?
Проверял количество импульсов одной линии на оборот?
Может еще раз перепроверить себя?
.
Я не спрашиваю про проверку блока.
Меня интересует конкретное количество импульсов на одном канале вашего энкодера.
.
Не просто же так я это спрашиваю.
К примеру у простенького энкодера EC-11 ( KY-040) каждый канал выдает по 20 импульсов на оборот.
Однако блок EncPro четко выдает 80 инкрементных импульсов на оборот при тиках на шаг = 1.
.
Так что спрошу еще раз.
Отправлено спустя 6 минут 12 секунд:
Это проблемы компиляции редактора. Какие то глюки. Срочно пришлите мне ваш файл. Я никак не могу отловить закономерность. Сергею не могу сформулировать.MM33 писал(а): 16 сен 2021, 16:53 какие то чудеса творятся с Вашим блоком .
то что компилировалось ранее( вариант EN + вых счетчика) и выдавало 5000 инк /об. сегодня не компилируется. выдает ошибку:
Энкодер Pro
Я не разобрался как на сайте прикреплять файлы, проекты в сообщения, поэтому ниже скомпилированный скетч. В FLPROG Ваш блок в минимальной комплектации + блок передачи переменной в UART.
[spoiler][/spoiler]
Отправлено спустя 4 минуты 56 секунд:
кажется нашел как прицепить ошибка : exit status 1
'Out_47946759_102165005' was not declared in this scope
[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);
}
}
Отправлено спустя 4 минуты 56 секунд:
кажется нашел как прицепить ошибка : exit status 1
'Out_47946759_102165005' was not declared in this scope
У вас нет необходимых прав для просмотра вложений в этом сообщении.
- Dryundel
- Полковник
- Сообщения: 2429
- Зарегистрирован: 22 май 2017, 23:15
- Откуда: Ярославль
- Имя: Андрей
- Благодарил (а): 3 раза
- Поблагодарили: 30 раз
Энкодер Pro
[ref]MM33[/ref], В следующий раз архивируйте файлы более 200кб
А код прячте под спойлер.
А код прячте под спойлер.
Энкодер Pro
По поводу подсчета к-ва импульсов на одном канале :
безусловно это возможно через скоростной счетчик в интервале от 0 -метки до 0 метки.
Но какой в этом смысл , там будет 2500
Вот в вашем примере число на канале 20 на выходе блока 80. Это ожидаемо, так как блок обсчитывает все фронты и соответственно работает с учетверением.
В моем случае , я вчера писал , комплектация " как есть из пакета" тоже выдала 10000 инк/об. при том что на шильде указано 2500 инк/об. Т.е тоже с учетверением.
Вот минимальная комплектация блока , до тех пор пока компилировалась почему то выдавала 5000 инк/ об.
безусловно это возможно через скоростной счетчик в интервале от 0 -метки до 0 метки.
Но какой в этом смысл , там будет 2500
Вот в вашем примере число на канале 20 на выходе блока 80. Это ожидаемо, так как блок обсчитывает все фронты и соответственно работает с учетверением.
В моем случае , я вчера писал , комплектация " как есть из пакета" тоже выдала 10000 инк/об. при том что на шильде указано 2500 инк/об. Т.е тоже с учетверением.
Вот минимальная комплектация блока , до тех пор пока компилировалась почему то выдавала 5000 инк/ об.
- Dryundel
- Полковник
- Сообщения: 2429
- Зарегистрирован: 22 май 2017, 23:15
- Откуда: Ярославль
- Имя: Андрей
- Благодарил (а): 3 раза
- Поблагодарили: 30 раз
- Dryundel
- Полковник
- Сообщения: 2429
- Зарегистрирован: 22 май 2017, 23:15
- Откуда: Ярославль
- Имя: Андрей
- Благодарил (а): 3 раза
- Поблагодарили: 30 раз
Энкодер Pro
[ref]MM33[/ref], да елки палки ПРОЕКТ нужен.
А не скетч из Arduino IDE
Надо файл с расширением flp
А не скетч из Arduino IDE
Надо файл с расширением flp
- Dryundel
- Полковник
- Сообщения: 2429
- Зарегистрирован: 22 май 2017, 23:15
- Откуда: Ярославль
- Имя: Андрей
- Благодарил (а): 3 раза
- Поблагодарили: 30 раз
Энкодер Pro
[ref]MM33[/ref], нашел ошибку в логике компиляции. Почему она раньше не вылезала не могу сказать.
В следующем релизе исправлю, а пока просто включите выходы Up и Down. Поставьте галку использовать.
Выходы можно не использовать. При выполнении кода они не помешают.
В следующем релизе исправлю, а пока просто включите выходы Up и Down. Поставьте галку использовать.
Выходы можно не использовать. При выполнении кода они не помешают.
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 4 гостя