Два энкодера на одной оси, как подключить к LinuxCNC

Обсуждение установки, настройки и использования LinuxCNC. Вопросы по Gкоду.
EvgenyK
Кандидат
Сообщения: 78
Зарегистрирован: 05 авг 2012, 16:49
Репутация: 0
Контактная информация:

Два энкодера на одной оси, как подключить к LinuxCNC

Сообщение EvgenyK »

Всем привет!

Вопрос возник такой: возможно ли используя управление сервоприводом step/dir использовать дополнительный энкодер?
Поставил на поворотную ось червячный редуктор (i=50), хотя и регулировал редуктор, но небольшой люфт остался. Поставил на вторичный вал энкодер с 10000 делениями на оборот для контроля положения. Теперь вот не пойму, как прикрутить энкодер в emc чтобы с его помощью отслеживать реальное положение вала.
God's gonna cut you down...
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: Два энкодера на одной оси, как подключить к LinuxCNC

Сообщение Nick »

Насколько я понимаю серва управляется через ПИД в LinuxCNC?

Тогда надо завести второй компонент encoder, подключить к нему второй энкодер. И
1. на обратную связь оси в LinuxCNC завести сигналы второго энкодера, т.е.:

Код: Выделить всё

net xpos-fb encoder.1.position => axis.0.motor-pos-fb
2. убрать обратную связь PID => axis.0.motor-pos-fb/
3. остальное оставить как было.

В итоге: ПИД будет получать обратную связь от мотора, LinuxCNC же будет получать обратную связь от оси, и по идее будет ее корректировать...

Хотя может я сейчас ерунду написал, и система пойдет в разнос, поэтому тестируй с маленькими значениями скоростей и ограничь максимальный вывод ПИД! :attention: :attention: :attention: Ну и красную кнопку рядом держи!

Второй вариант - тупо не использовать первый энкодер, а вместо него использовать только второй..
EvgenyK
Кандидат
Сообщения: 78
Зарегистрирован: 05 авг 2012, 16:49
Репутация: 0
Контактная информация:

Re: Два энкодера на одной оси, как подключить к LinuxCNC

Сообщение EvgenyK »

Энкодер установленный на серводвигателе подключен к сервоусилителю и emc о нем даже не догадывается...
Второй энкодер пока ни к чему не подключен.
Вот и думаю, куда бы его прикрутить. Варианта два: к объекту encoder библиотеки hostmot, либо к компоненту encoder стандартной библиотеки.
куда лучше, а? %)
God's gonna cut you down...
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: Два энкодера на одной оси, как подключить к LinuxCNC

Сообщение nkp »

EvgenyK писал(а):Энкодер установленный на серводвигателе подключен к сервоусилителю и emc о нем даже не догадывается...
а какую функцию он выполняет ,если чпу даже не догадывается о нем??
а как работала емс до установки второго энкодера - откуда бралось положение???
(может на движке не энкодер а тахогенератор?)
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: Два энкодера на одной оси, как подключить к LinuxCNC

Сообщение Nick »

EvgenyK писал(а): Варианта два: к объекту encoder библиотеки hostmot,
К hostmot - он быстрее работает!

Серва управляется по step/dir?

Напиши подробнее, что у тебя сейчас стоит, и как управляется. И пару форток было бы не плохо :roll:
aftaev
Зачётный участник
Зачётный участник
Сообщения: 34042
Зарегистрирован: 04 апр 2010, 19:22
Репутация: 6194
Откуда: Казахстан.
Контактная информация:

Re: Два энкодера на одной оси, как подключить к LinuxCNC

Сообщение aftaev »

nkp писал(а):а какую функцию он выполняет ,если чпу даже не догадывается о нем??
речь скорее всего про серву со своим контроллером. Вот контроллеру и нужен энкодер чтобы управлять мотором. Мои сервы Яскава точно также работают с энкодером мотора, а ЧПУ даж не догадывается чем управляет так как сервы работают по степ/дир
nkp писал(а):а как работала емс до установки второго энкодера - откуда бралось положение???
скорее всего по степ/диру все управляется :)
Дилетанту сложные вещи кажутся очень простыми, и только профессионал понимает насколько сложна самая простая вещь
Кто хочет - ищет возможности, кто не хочет - ищет оправдание.
Найди работу по душе и тебе не придется работать.
EvgenyK
Кандидат
Сообщения: 78
Зарегистрирован: 05 авг 2012, 16:49
Репутация: 0
Контактная информация:

Re: Два энкодера на одной оси, как подключить к LinuxCNC

Сообщение EvgenyK »

Сервоприводы Delta - вот такие.
Управляются step/dir, то есть энкодер серводвигателя подключен к сервоусилителю.
Есть червячный редуктор siti (серии PC). Отрегулировал, но небольшой люфт остался.
На выходном валу редуктора стоит ось A и энкодер с разрешением 10000 имп/об. http://www.itrostov.ru/pictures/_4590663/sick_encoder.pdf стр. 86-88.

Нужно сделать так, чтобы EMC руководствовалась показаниями энкодера и соответственно регулировала перемещение поворотной оси.
God's gonna cut you down...
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: Два энкодера на одной оси, как подключить к LinuxCNC

Сообщение Nick »

Тогда надо делать так:
  1. stepgen загружаем в режиме управления скоростью. Для этого в строчке с loadrt добавляем ctrl_type, на нужном по счету месте ставим v - velocity

    Код: Выделить всё

    loadrt stepgen ctrl_type=p,p,p,v
    
  2. Загружаем компонент PID:

    Код: Выделить всё

    # загружаем ПИД
    loadrt pid num_chan=1
    # Добавляем его функции ПИД к потокам
    addf pid.0.do-pid-calcs servo-thread
    
    # Теперь соединяем ПИД, энкодер и motion
    # заводим обратную с энкодера связь на ПИД
    net Apos-fb <= encoder.0.position => pid.0.feedback
    # заводим обратную связь от энкодера на motion
    net Apos-fb axis.0.motor-pos-fb
    
    # заводим пин команды по положению на ПИД
    net Apos-cmd <= axis.0.motor-pos-cmd => pid.0.command
    # включаем ПИД
    net xenable axis.0.amp-enable-out => pid.0.enable
    
    # привязываем pid к stepgen
    net Avel-cmd <= pid.0.output => stepgen.3.velocity-cmd
    
    # задаем значения параметров для PID
    # все эти параметры надо добавить в ini в раздел AXIS_3
    setp pid.0.Pgain [AXIS_3]P
    setp pid.0.Igain [AXIS_3]I
    setp pid.0.Dgain [AXIS_3]D
    setp pid.0.bias [AXIS_3]BIAS
    setp pid.0.FF0 [AXIS_3]FF0
    setp pid.0.FF1 [AXIS_3]FF1
    setp pid.0.FF2 [AXIS_3]FF2
    setp pid.0.deadband [AXIS_3]DEADBAND
    
    
    Примерно так.
  3. Потом настраиваем ПИД и получаем несказанное удовольствие от проделанной работы :)
ЗЫ ПИД умеешь настраивать?
EvgenyK
Кандидат
Сообщения: 78
Зарегистрирован: 05 авг 2012, 16:49
Репутация: 0
Контактная информация:

Re: Два энкодера на одной оси, как подключить к LinuxCNC

Сообщение EvgenyK »

с ПИД разберусь. завтра буду пробовать то что ты написал.
God's gonna cut you down...
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: Два энкодера на одной оси, как подключить к LinuxCNC

Сообщение Nick »

Будут проблемы пиши. Как только конфиг сделаешь, и будешь ПИД настраивать, первым делом открой HALScope и выведи туда пины обратной связи, fferror, задания по скорости и положению, и потом глядя как эти графики меняются когда будешь гонять ось туда сюда, настраивай параметры ПИД в калибровке осей, чтобы Ferror был по меньше.

И не забудь ежедневные (а лучше еще чаще) отчеты о проделанной работе, со скриншотами и конфигами :)!
EvgenyK
Кандидат
Сообщения: 78
Зарегистрирован: 05 авг 2012, 16:49
Репутация: 0
Контактная информация:

Re: Два энкодера на одной оси, как подключить к LinuxCNC

Сообщение EvgenyK »

insmod: error inserting '/usr/realtime..../modules/emc2/stepgen.ko: -1 Operation not permitted
вот так ругаетс EMC на попытку загрузить модуль stepgen.

может это из-за того, что уже используется hostmot...
я использую привода через плату mesa 5i20
God's gonna cut you down...
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: Два энкодера на одной оси, как подключить к LinuxCNC

Сообщение nkp »

то есть имеется примерно такая строка:

Код: Выделить всё

loadrt hm2_pci config="firmware=hm2/5i20/SVST8_4.BIT num_encoders=3 num_pwmgens=1 num_stepgens=2"
тут два stepgen
и stepgen.03 уже не грузится???
EvgenyK
Кандидат
Сообщения: 78
Зарегистрирован: 05 авг 2012, 16:49
Репутация: 0
Контактная информация:

Re: Два энкодера на одной оси, как подключить к LinuxCNC

Сообщение EvgenyK »

есть такая строка %)
loadrt hm2_pci config="firmware=hm2/5i20/SVST2_4_7I47.BIT num_encoders=0 num_pwmgens=1 num_stepgens=4"

stepgen hostmot загужается.
что с ним делать?
God's gonna cut you down...
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: Два энкодера на одной оси, как подключить к LinuxCNC

Сообщение nkp »

я не вникал в тему - но по моему вот это тебе должно помочь
EvgenyK
Кандидат
Сообщения: 78
Зарегистрирован: 05 авг 2012, 16:49
Репутация: 0
Контактная информация:

Re: Два энкодера на одной оси, как подключить к LinuxCNC

Сообщение EvgenyK »

спасибо огромное!!! буд читать-разбираться %)
God's gonna cut you down...
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: Два энкодера на одной оси, как подключить к LinuxCNC

Сообщение Nick »

Ты когда выполнишь loadrt hm2_pci config="firmware=hm2/5i20/SVST2_4_7I47.BIT num_encoders=0 num_pwmgens=1 num_stepgens=4"
запусти в консоле
halcmd show
там напишет все пины и параметры всего что загрузилось,
или можно
halcmd show pin hm2_5i20
и
halcmd show parameter hm2_5i20

собственно все эти пины и параметры надо будет настраивать и подключать.

можешь добавить сюда выводы этих команд и написать что куда хочешь подключить, а мы с командами поможем.
EvgenyK
Кандидат
Сообщения: 78
Зарегистрирован: 05 авг 2012, 16:49
Репутация: 0
Контактная информация:

Re: Два энкодера на одной оси, как подключить к LinuxCNC

Сообщение EvgenyK »

Ник, завтра пришлю результаты команд.

Сегодня настроил аналогично показанному в ссылке от nkp.
вместо движения показывает ошибку joint following error...
пробовал увеличивать допустимую ошибку до 50, до 100 - результат такой же.
наверное, нужен какой-то коэффициент для энкодера...
у меня двигатель имеет 160 000 имп/об., это значение делится в сервоусилителе на 160, получается 1 000 шагов/об.
после двигателя идет редуктор 1:50, на вторичном валу которого висит энкодер 10 000 имп/об.
получается что соотношение 1 000 * 50 = 50 000 / 10 000 = 5.
только я не знаю куда его ввести...
God's gonna cut you down...
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: Два энкодера на одной оси, как подключить к LinuxCNC

Сообщение nkp »

Маштабирование энкодера прописываются в хал:

Код: Выделить всё

setp hm2_5i20.0.encoder.01.scale  [AXIS_2]INPUT_SCALE
это ссылка - значение вводится в ини файле
(в данном примере в разделе [AXIS_2], параметр INPUT_SCALE
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: Два энкодера на одной оси, как подключить к LinuxCNC

Сообщение Nick »

Должно быть как-то так:
1. предположим, перемещения оси будут в оборотах, т.е. G0 A1 это проехать на 1 полный оборот, тогда
scale для двигателя = количество шагов на 1 оборот, т.е.
160 000/160 * 50 = 5000
Для энкодера:
считаем количество импульсов на оборот, получаем
10 000 (т.к. он у нас стоит на искомом валу)

Если все будет в градусах, то делим все на 360.
EvgenyK
Кандидат
Сообщения: 78
Зарегистрирован: 05 авг 2012, 16:49
Репутация: 0
Контактная информация:

Re: Два энкодера на одной оси, как подключить к LinuxCNC

Сообщение EvgenyK »

сейчас попробую поставить INPUT_SCALE

Ник, у тебя в расчетах ошибочка: 160 000 / 160 = 1000 * 50 = 50 000 ;)
то есть 50 000 имп двигателя это 1 оборот выходного вала, так?
God's gonna cut you down...
Ответить

Вернуться в «LinuxCNC»