Добрый день, товарищи. Имеем плк110, энкодер на 500 (2000) импульсов на оборот. Ну и мини моторредуктор для тестирования. Обороты вала 5-15 об/мин. Частота регулируется шим регулятором.
В общем и целом, как написать программу c подпрограммой обработки быстрых входов, я разобрался. Как увеличить точность энкодера в 4 раза - тоже. Но вот как корректно обработать подсчет импульсов - есть некоторое не понимание. Дело в том, что результат "прыгает" где-то на 1 -2%. И это меня не устраивает. Например, 2% от 200 имп - это 4 импульса вверх и вниз. Если перевести в нужные мне значения линейной скорости, которая будет отображаться на панели, то получим "прыжки" от 5,59 до 5,81, при видимой равномерности вращения. Скорость измеряю заполнением импульсами интервала времени в 1000 мсек с последующим сбросом посчитанных импульсов. Вычисления произвожу в теле основной программы, так как в подпрограмме обработки быстрых входов все зависает. Отсчет времени делал c помощью фб Blink, затем с фб Tp. Менял интервал отсчитываемого времени вверх до 10сек и вниз до 100мсек. Подключал другой энкодер с 50 имп на оборот и "убирал" из программы учетверенную точность (полагая, что дело в неравномерности вращения вала редуктора). В общем и целом, ничего не помогает. Результат мне напоминает спидометр на грузовике ЗиЛ, где стрелка все время не сильно прыгает. Но перед глазами другой пример - спидометр автомобиля Форд, где стрелка очень плавно (но без заметных задержек) поднимается с ростом скорости и держится на месте при активном автопилоте.
Я думаю, проблем может быть 2. Первая - некорректная обработка отсчитанных импульсов. Может таймеры в основной программе считают миллисекунды чуть-чуть не точно? Может нужно было какую-то циклическую подпрограмму городить для этого?
Вторая - банально моторредуктор крутит чуть неравномерно - пёс его знает, как там у него токи по щеткам протекают...
Может кто реализовывал подобную хотелку получить "гладкий" спидометр?