Вход

Просмотр полной версии : Модуль энкодера ПЛК110 смещение нуля



enyuzer
31.01.2018, 11:29
Добрый день.
Есть проект для ПЛК110.
Объект такой - самодельный станок загибает арматуру. Оборудование - приспособление для закладки заготовок, редуктор, двигатель с электромагнитным тормозом, преобразователь частоты, ПЛК, энкодер 1000 имп./об на валу редуктора, педаль с НО контактом, автомат защиты+контактор+кнопки ВКЛ, ОТКЛ.
Цикл такой: нажимаем педаль - тормоз отпускается - приспособа с заготовкой поворачивается на заданный угол - двигатель останавливается и становится на тормоз на заданное время - тормоз отпускается - приспособа с согнутой заготовкой возвращается в исходное положение. Сейчас частота вращения энкодера не более 25 угл.град. в секунду.
Вопрос в том, что исходное положение физически смещается. Проверили показания модуля энкодера. Модуль энкодера выдает одинаковое значение в физически смещенном положении.
Кто с похожим случаем сталкивался?

lara197a
31.01.2018, 12:01
Сделайте возврат в нулевую точку.
К примеру обнуление в момент начала движения или остановки по концевику или датчику.
Записать значение в модуль энкодера можно по указателю.

enyuzer
31.01.2018, 12:11
На установку датчика/концевика пока никто не соглашается.
С записью значения в модуль энкодера по указателю не знаком. Где почитать?

Дмитрий Артюховский
31.01.2018, 12:24
при старт-стопных режимах большинство неприятностей создает дребезг (дрожжание вала) при остановке - разгоне. Пишите свой алгоритм с защитой от этого явления, ну или да, коррекция по физической метке.

enyuzer
31.01.2018, 12:41
По мере износа тормоза и в зависимости от заготовки настройки алгоритма защиты от дребезга прийдется постоянно менять.
Попробую фильтр в готовом модуле энкодера.

Владимир Ситников
31.01.2018, 12:45
Вопрос в том, что исходное положение физически смещается. Проверили показания модуля энкодера. Модуль энкодера выдает одинаковое значение в физически смещенном положении.
Кто с похожим случаем сталкивался?

У вас фильтрация точно в 0 выставлена? (time of filtration на fastencoder'е)

Насколько я понял, у вас двигатель движется туда-сюда, и при каждом таком действии финальное положение оси оказывается разным, хотя по энкодеру показание одно и то же. Верно?
Тогда "записывать 0 в энкодер" вам не поможет, т.к. проблема не в том, чтобы "начать отсчёт с нуля", а в том, что импульсы теряются.

Тут 2 классических ошибки:
1) Пропуск импульсов из-за слишком большого времени фильтрации. У вас 25 угл град/сек == 25/360*1000 == 65 имп/сек. Казалось, бы мелочи, но кто знает
2) Неправильная обработка показаний энкодера в прикладном коде. Результатом работы энкодера является WORD, и как только инженеры осознают, что этот WORD может "переполняться", они зачастую такого понапишут, что сами себе портят показания энкодера. Покажете код как обрабатываете показания энкодера?
3) Ходят слухи, что модуль энкодера впринципе нерабочий. Ну или, как говорит Дмитрий, "лучше написать свой, про который хотя бы понятно как он работает".

enyuzer
31.01.2018, 13:08
Фильтрация выставлена в 0.
"Насколько я понял, у вас двигатель движется туда-сюда, и при каждом таком действии финальное положение оси оказывается разным, хотя по энкодеру показание одно и то же. Верно?"
Да, верно. Обнуление интересует на тот случай, когда согласятся с датчиком.
Пользовательский алгоритм здесь не применял. Есть интересный, взятый из широко распространенного примера с прерыванием. Не хочу связываться с прерыванием, а без прерывания не вижу преимуществ.
Как раз фильтрацию в готовом модуле хочу попробовать. Частота импульсов не высокая. Может получиться.

lara197a
31.01.2018, 14:20
На установку датчика/концевика пока никто не соглашается.
С записью значения в модуль энкодера по указателю не знаком. Где почитать?
примерно как-то так:
pt:=ADR(z);
pt^:=SEL(xm,pt^,0);
почитать в справке КДС.

Кстати до 5кГц проблем с пропуском быть не должно.
Проверено.
(З.Ы,Я бы сделал такое простое решение на ПЧ со встроенным контроллером. К примеру веспер е2-8300, без внешнего ПЛК)

Sulfur
31.01.2018, 14:32
enyuzer
В вашем случае можно вообще обойтись без энкодера, но потребуются два датчика.
Один на исходное положение (т. н. "машинный ноль"), другой будет смотреть в "ушастую" бобышку, которую необходимо разместить на валу двигателя.
Алгоритм такой -
1. машинка в исходном, датчик исходного активен
2. По команде "пуск" сбрасываем счетчик, считаем импульсы со второго датчика.
3. По достижении нужного значения выключаем двигатель, активируем тормоз на заданное время, реверсируем двигатель до датчика исходного положения, стоп.
Чем выше коэффициент редукции, тем точнее измерения.

enyuzer
31.01.2018, 15:23
lara197a
Если я правильно понял насчет доступа к модулю энкодера, требуется порыться в материалах по CoDeSys. Спасибо.
Насчет 5 кГц могу согласиться для движений без вибраций, пиковых ускорений и т.д. В режимах перекладки с электромагнитным тормозом с частотой не все однозначно. К сожалению, записать осциллограмму пока не могу. Ее можно обсудить однозначно и то, если нет возражений к модели осциллографа.
Насчет конфигурации оборудования согласен с тем, что решений этой задаче есть немало. В том числе и ПЧ со встроенным контроллером.

enyuzer
31.01.2018, 15:30
Sulfur
Спасибо за комментарий.

enyuzer
08.02.2018, 09:57
От одного из других проектов остался энкодер 100 имп./оборот. Посмотрели смещение с ним. Настройками скорости, разгонов, торможений удается останавливаться без смещений. Получается, иных причин, кроме дискретности сигнала нет, если их сам не "добавишь".
Все решилось. Ставим датчик начального положения. Для подсчета импульсов энкодера используем готовый счетчик из примеров программ полезности. Только счетчик не вызываем по таймеру прерываний. Частота следования импульсов позволяют ему работать в циклической задаче.
Еще раз спасибо всем за комментарии и рекомендации.