Это экструдер. Скорость можно считать постоянной. Сложно раскачать экструдер что бы скорость скакала +- 5-6 см за минуту.
10 - 15 это было на вскидку. 77 - посчитано на Ваших глазах.
Нет обратной связи. Только импульсы с квадратурного энкодера + таймер в ПР. Скоростью рулит частотник который даже незнает про энкодер, да и не нужно ему это.
Расстояние я отмеряю с точностью 1 мм. ( 0,5 мм на 6 метрах сложно померить рулеткой) А вот скорость измеряю с точностью +- 5-6 см ! Хотя в теории - должен до +- 0,5 мм.
Но я понял проблему подсчета количества импульсов за дробную единицу времени.
Думаю надо идти по пути измерения времени между соседними фронтами. Я уже пробовал но забуксовал в обработке переменных типа TIME. Кривой алгоритм получился.
Точность нужна до 1 см/мин. мм/мин я отбрасываю.
Мне кажется, быстрый вход(ы) лучше сконфигурировать в режим счётчика импульсов, а не АВ энкодера, в смысле, использовать для этой функции оставшиеся(неиспользованные) быстрые входы тогда будет в 4 раза меньше импульсов, счётчик энкодера считает по фронту и спаду каждого из двух каналов, тогда и период следования импульсов(что нам важно) будет в 4 раза больше, соответственно и точность возрастёт!
Последний раз редактировалось Сергей0308; 06.08.2025 в 00:39.
Если проблему можно решить за деньги, это не проблема, это расходы. Бог каждому посылает проблемы по его силам. Так что одно из двух. Либо ты можешь-таки
справиться с проблемами, либо это не твои проблемы.
В первом варианте так и делал. Потом решил попробовать привязаться к началу фронта... нечего не поменялось. Но причина понятна. Я теряю "полуимпульсы" которые накапливаются при пересчете в минуты. Если считать за минуту - точность должна быть приемлемой. Но минута на ожидание реальной скорости - не приемлемо ))
Завтра попробую через период посчитать. Нашел ошибку в алгоритме.
Такой вопрос : если к примеру разделить 1 секунду на 625 мс получится 1 мс или 1.6 мс ?
Если проблему можно решить за деньги, это не проблема, это расходы. Бог каждому посылает проблемы по его силам. Так что одно из двух. Либо ты можешь-таки
справиться с проблемами, либо это не твои проблемы.
Самый точный, но тоже скачущий спидометр у меня получился так:
Owen.jpg
Чтобы не скакало использовал фильтр + сглаживаниеКод:function_block Freq var_input in : real; // Вход с текущим значением счётчика end_var var_output F : real; // Частота или скорость end_var var inOLD : real; // старое значение счётчика tsOLD, ts : udint; // Фиксация системного таймера end_var ts := time_to_udint(get_time()); // Текущее значение системного таймера в мс if ts - tsOLD >= 1000 then // ПР может проскочить 1000 мс период F := (in - inOLD) / udint_to_real(ts - tsOLD); // Текущая разница за реальный период tsOLD := ts; inOLD := in; // Фиксируем как предыдущие значения end_if end_function_block