PDA

Просмотр полной версии : Скорость по энкодеру



Aleksandr11sk11
06.05.2025, 12:09
Добрый день!
Столкнулся с задачей считывания скорости по импульсам с энкодера.
Хочется узнать, есть ли функциональные блоки по типу перевода значения из одного диапазона в другой, только измерения скорости по энкодеру.
У меня энкодер AB на 1024 импульса подключен к контроллеру, понятно что нужно считывать импульсы за промежуток времени и высчитывать обороты в минуту, а после переводить в скорость м\с., но может есть готовое решение чтобы самому не нагородить костылей?
я как вижу расчет этой задачи:
количество импульсов на оборот 1024
время считывание импульсов 50мс
получаем формулу: N = A/51,2
N - об/сек
A - количество импульсов за 50 мс
в конце измерения обнуляем счетчик
идем дальше в цикл 50 мс
для уменьшения нагрузки и в зависимости от системы можно и 100мс взять, тут кому как удобнее, а если значение будет отрицательным то значит поехали назад.
ну а дальше об/сек уже переводим в реальную величину скорости, например один оборот энкодера за 1 сек прикрученного к колесу с длиной окружности 1 метр это будет 1 м/с, отсюда уже считаем нашу скорость по оборотам в секунду.

1exan
06.05.2025, 12:22
Я так понимаю, вам нужно в итоге знать количество импульсов в единицу времени, другими словами - частоту? Тогда посмотрите макрос от petera тут (https://owen.ru/forum/showthread.php?t=31971&p=315691&viewfull=1#post315691)

Aleksandr11sk11
06.05.2025, 15:57
не совсем, как провести расчеты плюс минус я описал в своем посте, практически все понятно мне, но не покидает чувство, что я изобретаю велосипед на котором уже многие ездят. Мне кажется задача понять скорость по энкодеру должна иметь уже вполне конкретное решение и реализацию, неужели все каждый раз так же выдумывают велосипед как и я?
Кстати я не пробовал на практике свою теорию, может там есть подводные камни? Кто-нибудь реализовывал уже подобное? Как у вас получилось подобную задачу решить?

Aleksandr11sk11
06.05.2025, 16:03
хочу дополнить первый пост: опрос счетчика энкодера я думаю надо делать по прерыванию, вот как раз каждые 50мс, делаем прерывание, смотрим счетчик, переводим в об/сек далее в м/с, отдаем м/с в основную программу, а счетчик энкодера обнуляем.
примерно такая цепочка в голове, кто может подсказать, правильные ли рассуждения? Или, например, в прерывании надо оставить только опрос счетчика и сброс его на ноль, а вот вычисления перевести в основную программу?

AlexandrGr
06.05.2025, 17:59
Надо найти прерывания по таймеру.

1exan
07.05.2025, 05:59
не совсем, как провести расчеты плюс минус я описал в своем посте, практически все понятно мне, но не покидает чувство, что я изобретаю велосипед на котором уже многие ездят. Мне кажется задача понять скорость по энкодеру должна иметь уже вполне конкретное решение и реализацию, неужели все каждый раз так же выдумывают велосипед как и я?
Кстати я не пробовал на практике свою теорию, может там есть подводные камни? Кто-нибудь реализовывал уже подобное? Как у вас получилось подобную задачу решить?

Не заметил, что у вас ПЛК2XX. Счётные входы не получится использовать?

Aleksandr11sk11
07.05.2025, 08:14
ПЛК 210-03
использовать все получается, счетчик считает, вопрос не в том, получается ли, а в том что изобретается велосипед, может есть готовые решения для такой задачи, или все же надо выдумать свой велосипед?

1exan
07.05.2025, 09:08
ПЛК 210-03
использовать все получается, счетчик считает, вопрос не в том, получается ли, а в том что изобретается велосипед, может есть готовые решения для такой задачи, или все же надо выдумать свой велосипед?

Я не знаю насчёт прерываний в ПЛК2XX (не интересовался), но цикл 50мс думаю доступен и для простого запуска программы через диспетчер задач

AlexandrGr
07.05.2025, 09:59
Я не знаю насчёт прерываний в ПЛК2XX (не интересовался)

https://owen.ru/forum/showthread.php?t=36327

1exan
07.05.2025, 10:08
https://owen.ru/forum/showthread.php?t=36327

Если не требуется по энкодеру выполнять какие-либо точные действия, как в той задаче - то для должно хватить быстродействия

AlexandrGr
07.05.2025, 11:01
Речь же идет не о быстродействии а об измерении скорости. А для этого надо или прерывания по времени, или фиксированное время цикла, или знать точное время цикла.

1exan
07.05.2025, 11:37
Речь же идет не о быстродействии а об измерении скорости. А для этого надо или прерывания по времени, или фиксированное время цикла, или знать точное время цикла.

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