PDA

Просмотр полной версии : Спидометр из плк110[М02] и инкрементального энкодера.



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

murdemon
07.10.2020, 01:23
Надо считать время между импульсами

Роман_33
07.10.2020, 07:44
Я думаю у Кодесис должны быть библиотеки с функциями масштабирования меандра в некоторую "аналоговую" величину. А уж эту величину пересчитаете в скорость.

Sulfur
07.10.2020, 08:17
sanatolich
Проблема в том, что программно точных интервалов времени не получить.
Можно попытать счастья с использованием встроенных часов, либо встроенного системного таймера 20мкс (Конфигурация задач>Системные события>Таймер 20мкс).

sanatolich
07.10.2020, 09:12
один из вариантов вложил.

sanatolich
07.10.2020, 09:28
Можно попытать счастья с использованием встроенных часов, либо встроенного системного таймера 20мкс (Конфигурация задач>Системные события>Таймер 20мкс).

Так к нему уже привязан обработчик быстрых входов. Или можно две программы туда цеплять?

sanatolich
07.10.2020, 10:39
sanatolich
Проблема в том, что программно точных интервалов времени не получить.
Можно попытать счастья с использованием встроенных часов, либо встроенного системного таймера 20мкс (Конфигурация задач>Системные события>Таймер 20мкс).

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

sanatolich
07.10.2020, 10:56
Надо считать время между импульсами

Вы хотите сказать, что если скорость вращения 200 имп за 1 сек (1 имп за 5 мсек), то нужно как то посчитать количество обращений с частотой 1 раз в 20 мксек к быстым входам между импульсами?

Sulfur
07.10.2020, 11:00
Как тогда реализуют визуализацию инженеры форда, тойоты, и проч?
Какое отношение к визуализации имеет точность посчета импульсов?
И, кстати, этим инженерам ничего не стоит применить специально заточенный под это дело узел. Например в виде отдельной микросхемы\процессора реального времени на плате. Кстати, в ПЛК110М02 есть такой, но штатный программный функционал весьма скудный, и поставленной задачей не справится.

висят на одном и том же суку.
Это да. Задающий генератор один. Однако момент снятия показаний может плавать в зависимости от толщины кода. Я играл с энкодерами на ПЛК110 и старой и новой модификации. Нормального результата добился только на М02 и только с помощью HardellaIDE.

Sulfur
07.10.2020, 11:08
нужно как то посчитать количество обращений с частотой 1 раз в 20 мксек к быстым входам между импульсами?
Можно считать не только количество импульсов, но и количество циклов таймера. В таймере сделать еще один счетчик - циклов. Суммарное количество зафиксированных импульсов выдавать например раз в две тысячи циклов, одновременно обнуляя счетчик циклов.

sanatolich
07.10.2020, 11:14
Если дергания физические - только усреднение любого вида.

про некое сплайнирование я думал. Как понять, что дергания физические? Редуктор специально подыскивал с высоким передат числом, чтобы нивелировалась неравномерность работы мотора. В реальных условиях дерганья будут такие, что даже заметны глазом практиканта из фзу, так как нагрузка на конвеер не равномерная по времени.
Тем не менее, помимо автомобильной тематики, я видел аппаратные решения спидометров, которые на аналогичных конвеерах работают с гладкостью 0,1%. Это связки энкодера, модульного счетчика импульсов и индикатора известной корейской конторы.

Sulfur
07.10.2020, 11:29
Переменные:
Вход - физический быстрый вход ПЛК
Циклы - счетчик циклов таймера.
Импульсы - счетчик зафиксированных импульсов.
Выход - посчитанное количество импульсов. (глобальная)

Программа для таймера:

Циклы:=Циклы+1;
Если передний фронт Вход то
Импульсы:=Импульсы+1;
конец_если;

Если Циклы=50000 то
Циклы:=0;
Выход:=Импульсы;
конец_если;
------
В результате в глобальной переменной Выход получаем количество импульсов за 50000 циклов таймера.
Дальнейшая математика выполняется в теле основной программы ПЛК.

sanatolich
07.10.2020, 11:44
Пока не увидел ничего кроме желания ублажения глазов аффтора "гладкими" показаниями. На кой в итоге ?

PS

Cтоп! На той, чтобы быть уверенным, что из программной части решения задачи "выжато" все возможное. Соответственно, остаточные дергания - механические. Неужели не очевидно?

sanatolich
07.10.2020, 11:50
не понял. что платформа?

sanatolich
07.10.2020, 16:36
Я думаю у Кодесис должны быть библиотеки с функциями масштабирования меандра в некоторую "аналоговую" величину. А уж эту величину пересчитаете в скорость.

Извините, если Вы о преобразовании дискретного сигнала с какой то частотой в аналоговый, так я это и делаю. И тема собственно об этом. Готовых ФБ не встречал.

Роман_33
07.10.2020, 19:28
Извините, если Вы о преобразовании дискретного сигнала с какой то частотой в аналоговый, так я это и делаю. И тема собственно об этом. Готовых ФБ не встречал.

Ну если у них есть функции преобразования "аналога" в ШИМ, почему бы не быть обратным? А так,наверное, лучше просто усреднять, то что имеете. И прошу простить мое невежество,с Овеном недавно работаю,а сам быстрый счетчик сразу нельзя сконфигурировать не на счет, а на частоту? Вы же хотите частоту получить и пересчитать в скорость?

sanatolich
08.10.2020, 10:40
Модель плк ?
Проект из п#1 - ругаеццо. Какого-то таржета нет. Какого ?
ПЛК110-32 M - М02

sanatolich
08.10.2020, 10:49
сам быстрый счетчик сразу нельзя сконфигурировать не на счет, а на частоту? Вы же хотите частоту получить и пересчитать в скорость?

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

sanatolich
08.10.2020, 12:49
В результате в глобальной переменной Выход получаем количество импульсов за 50000 циклов таймера.
Дальнейшая математика выполняется в теле основной программы ПЛК.

Попробовал так. Та же картина. Считаю такты подпрограммы обработки быстрых входов. На 200000 тактах фиксирую посчитанные импульсы. Те же 4-5% прыжки. Значит дело в механике?

sanatolich
08.10.2020, 16:33
Ну вот. Разобрался с платформой. Посмотрел.

код schet' выполяется около 9.5мкс. Из 20. 8(
На квадратиковой простыне "обработчика" прерывания где-то в бубенях обнаружил еще какую-то жизнь. о-о-о-о
Это страшный сон
Какие REAL в прерывании !!??
Какие вычисления в прерывании !!??
Зачем в прерывании выставлять обычные выходы ??!!
Какие таймеры в прерывании !!??

Sulfur еще продолжает советовать влегкую быстрый таймер ?
Ютубканал. Серия 1. Изготовление нитроглицирина своими руками
Серия 2. Как прикрепить к плечам руки скотчем и скрепками.

Вообщем для написаний кода прерываний Вам еще далеко.
Остальное - после, когда будет время. Ну или кто подскажет.
Сколько эмоций. А я еще одну ошибку у себя нашел - в обратном счете вычитаю из 1 каунт, а не наоборот! Давайте вместе поносом изойдем. Только все это малозначительно. Все эти замечания ни на что не влияют в конкретном данном случае - пробовал совсем голую обработку пускать. Ну а то что мне далеко до чего-то или нет - да и пёс с ним. Я не зарабатываю программированием.
PS Что-же это тогда за зверь такой хитрый - ПРЕРЫВАНИЯ... Если я настолько не правильно все сделал...

Sulfur
08.10.2020, 18:10
Значит дело в механике?
Дабы исключить гадания, можно попробовать погонять от внешнего генератора. В качестве генератора можно использовать другой ПЛК, если есть такая возможность. Если стабильность будет, то дело в механике.

sanatolich
08.10.2020, 18:29
Дабы исключить гадания, можно попробовать погонять от внешнего генератора. В качестве генератора можно использовать другой ПЛК, если есть такая возможность. Если стабильность будет, то дело в механике.

Протестировать плк может и сам себя. Тот же ФБ Blink. И можно считать импульсы. Я уже что-то подобное делал, и даже тема об этом была сравнительно недавно... Насколько я помню, сам себя плк считает неплохо.

sanatolich
22.10.2020, 17:41
Прошло 2 недели. Форуму порадовать меня очевидно нечем. Ни плохими, ни хорошими вестями. Странно, я думал и продолжаю думать, что тема измерения разных физических величин энкодером и плк очень популярная - не побоюсь сказать, базисная. Отсюда пляшут и всякого рода синхронизации чего-то с чем-то и еще кое что...
Ну ладно, будем спасать себя сами. Раздобыл генератор импульсов. Глючный немного - ниже 70 Гц начитает вырубаться. Но все, что выше 80 Гц и до 2 кГц за 1 секунду плк отсчитал с точностью до 1 импульса, как мне и нужно. Обработку быстрых входов, естессно, немного подшаманил под 1 быстрый вход, убрал все лишнее (хотя оно на результат не влияло).
Вывод - программа работает как нужно. Таймер в плк считает время достаточно точно для моей задачи.
Пока вывод такой - или моторредуктор крутит не равномерно, или энкодер дает импульсы с зазубренными фронтами. У кого какие есть мысли, буду рад прочитать.

Sulfur
22.10.2020, 18:48
sanatolich
Модель энкодера огласите пожалуйста.
Механическое соединение жесткое или демпфированное?
Осциллограф имеется в наличии\доступе?

sanatolich
22.10.2020, 19:20
sanatolich
Модель энкодера огласите пожалуйста.
Механическое соединение жесткое или демпфированное?
Осциллограф имеется в наличии\доступе?

E6B2CWZ6C OMRON Покупался на известной инет площадке.
Соединение гибкой муфтой.
Осциллографа нет, но будет.

Sulfur
23.10.2020, 06:56
sanatolich
Если в программе подсчет импульсов идет только по фронтам, то из за вибрации механики могут быть ложные (дополнительные) срабатывания счетчика. Отсюда и погрешность. Энкодер хороший, работал с такими, проблем не было.
Для повышения надежности счета можно попробовать сделать быстрые входа ПЛК сконфигурировать как высокоскоростной энкодер (AB, не ABZ), а в программе высчитывать дельту между отсчетами через интервал.

sanatolich
23.10.2020, 19:16
sanatolich
Если в программе подсчет импульсов идет только по фронтам, то из за вибрации механики могут быть ложные (дополнительные) срабатывания счетчика. Отсюда и погрешность. Энкодер хороший, работал с такими, проблем не было.
Для повышения надежности счета можно попробовать сделать быстрые входа ПЛК сконфигурировать как высокоскоростной энкодер (AB, не ABZ), а в программе высчитывать дельту между отсчетами через интервал.

Считаю по фронтам - программа ведь опрашивается каждые 20мксек...
Вибрации - согласен.
На самом деле у энкодера просто название хорошее. Правильное. Думается мне - подделка дешевая. Внутри замечена пыль какая то.
По поводу подсчета дельты между отсчетами можно подробнее? Не очень понял, какие отсчеты, какую дельту через интервал? Мозг у меня уже не так быстр как в юности(

sanatolich
02.11.2020, 16:22
Энкодер омрон все таки нормальный. Бракованным точно не назовешь. Сигнал не такой правильный как у аутоникса, но каких либо пил и синусов не обнаружено.
Допилил обработчик быстрых импульсов - добавил запрет на двойной учет каждого из четырех комбинаций "фронт/другая фаза" в ситуации дергания на одном месте или дребезга.
Подсчет стал лучше примерно на треть. Остальные две трети значит - механика. Ладно. Наверное нужно тему закрывать.