ПР103 ). А про ОЛ не подумал
Вид для печати
Это экструдер. Скорость можно считать постоянной. Сложно раскачать экструдер что бы скорость скакала +- 5-6 см за минуту.
10 - 15 это было на вскидку. 77 - посчитано на Ваших глазах.
Нет обратной связи. Только импульсы с квадратурного энкодера + таймер в ПР. Скоростью рулит частотник который даже незнает про энкодер, да и не нужно ему это.
Расстояние я отмеряю с точностью 1 мм. ( 0,5 мм на 6 метрах сложно померить рулеткой) А вот скорость измеряю с точностью +- 5-6 см ! Хотя в теории - должен до +- 0,5 мм.
Но я понял проблему подсчета количества импульсов за дробную единицу времени.
Думаю надо идти по пути измерения времени между соседними фронтами. Я уже пробовал но забуксовал в обработке переменных типа TIME. Кривой алгоритм получился.
Точность нужна до 1 см/мин. мм/мин я отбрасываю.
Мне кажется, быстрый вход(ы) лучше сконфигурировать в режим счётчика импульсов, а не АВ энкодера, в смысле, использовать для этой функции оставшиеся(неиспользованные) быстрые входы тогда будет в 4 раза меньше импульсов, счётчик энкодера считает по фронту и спаду каждого из двух каналов, тогда и период следования импульсов(что нам важно) будет в 4 раза больше, соответственно и точность возрастёт!
В первом варианте так и делал. Потом решил попробовать привязаться к началу фронта... нечего не поменялось. Но причина понятна. Я теряю "полуимпульсы" которые накапливаются при пересчете в минуты. Если считать за минуту - точность должна быть приемлемой. Но минута на ожидание реальной скорости - не приемлемо ))
Завтра попробую через период посчитать. Нашел ошибку в алгоритме.
Такой вопрос : если к примеру разделить 1 секунду на 625 мс получится 1 мс или 1.6 мс ?
Самый точный, но тоже скачущий спидометр у меня получился так:
Вложение 85201
Чтобы не скакало использовал фильтр + сглаживаниеКод: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
Чет не пойму, это условие же никогда не выполнится. Значение tsOLD присваивается в теле IF и до этого равно нулю...Код:if ts - tsOLD >= 1000 then // ПР может проскочить 1000 мс период
Выполнится, для кого сделали Отладку ФБ, в том числе пошаговую ? Вложение 85203
Сигналы А и В представляют собой меандр и сдвинуты на 90 градусов относительно друг друга(для определения направления вращения), счёт осуществляется по фронту и спаду каждого импульса для обеспечения более точного позиционирования, в 4 раза(что существенно), короче, было бы просто обидно иметь точность в 4 раза меньшую из-за незнания, это как строить акведук зная закон сообщающихся сосудов!
Так было задумано, чтобы использовать возможности энкодера по полной!
Я конечно понимаю, что на самолёте можно и по дороге ехать, но задумка была другая!
Можно проверить на практике если есть ПР с быстрыми входами, для обычных входов я здесь выкладывал макрос работы с энкодером:
https://owen.ru/forum/showthread.php...l=1#post434001
https://owen.ru/forum/showthread.php...l=1#post385600
https://owen.ru/forum/showthread.php...l=1#post404346
И, довольно давно, не менее года назад, в одной из тем форума один товарищ жаловался на то, что счётчик энкодера считает в 4 раза больше импульсов, чем он ожидал!
И, о чём это говорит?
Короче, если Вы возьмёте нормальный прибор для работы с энкодером, то точность позиционирования вырастет в 4 раза, у Вас частота и длительность сигналов позволяет работать и с обычными(не быстрыми) входами, ссылку на макрос работы с энкодером я постом выше давал!
Видимо Овен неисправим, в смысле, всегда стремится всё сделать через заднее место по принципу "и так сойдёт", наверно он мультик одноимённый не смотрел про зайчика и к каким печальным результатам это может привести!
https://www.youtube.com/watch?v=D3tr1lQIoOk