Страница 1 из 3

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

Добавлено: 26 окт 2012, 15:00
EvgenyK
Всем привет!

Вопрос возник такой: возможно ли используя управление сервоприводом step/dir использовать дополнительный энкодер?
Поставил на поворотную ось червячный редуктор (i=50), хотя и регулировал редуктор, но небольшой люфт остался. Поставил на вторичный вал энкодер с 10000 делениями на оборот для контроля положения. Теперь вот не пойму, как прикрутить энкодер в emc чтобы с его помощью отслеживать реальное положение вала.

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

Добавлено: 26 окт 2012, 15:07
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: Ну и красную кнопку рядом держи!

Второй вариант - тупо не использовать первый энкодер, а вместо него использовать только второй..

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

Добавлено: 26 окт 2012, 15:42
EvgenyK
Энкодер установленный на серводвигателе подключен к сервоусилителю и emc о нем даже не догадывается...
Второй энкодер пока ни к чему не подключен.
Вот и думаю, куда бы его прикрутить. Варианта два: к объекту encoder библиотеки hostmot, либо к компоненту encoder стандартной библиотеки.
куда лучше, а? %)

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

Добавлено: 26 окт 2012, 16:14
nkp
EvgenyK писал(а):Энкодер установленный на серводвигателе подключен к сервоусилителю и emc о нем даже не догадывается...
а какую функцию он выполняет ,если чпу даже не догадывается о нем??
а как работала емс до установки второго энкодера - откуда бралось положение???
(может на движке не энкодер а тахогенератор?)

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

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

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

Напиши подробнее, что у тебя сейчас стоит, и как управляется. И пару форток было бы не плохо :roll:

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

Добавлено: 26 окт 2012, 17:46
aftaev
nkp писал(а):а какую функцию он выполняет ,если чпу даже не догадывается о нем??
речь скорее всего про серву со своим контроллером. Вот контроллеру и нужен энкодер чтобы управлять мотором. Мои сервы Яскава точно также работают с энкодером мотора, а ЧПУ даж не догадывается чем управляет так как сервы работают по степ/дир
nkp писал(а):а как работала емс до установки второго энкодера - откуда бралось положение???
скорее всего по степ/диру все управляется :)

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

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

Нужно сделать так, чтобы EMC руководствовалась показаниями энкодера и соответственно регулировала перемещение поворотной оси.

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

Добавлено: 26 окт 2012, 22:37
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. Потом настраиваем ПИД и получаем несказанное удовольствие от проделанной работы :)
ЗЫ ПИД умеешь настраивать?

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

Добавлено: 26 окт 2012, 23:12
EvgenyK
с ПИД разберусь. завтра буду пробовать то что ты написал.

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

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

И не забудь ежедневные (а лучше еще чаще) отчеты о проделанной работе, со скриншотами и конфигами :)!

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

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

может это из-за того, что уже используется hostmot...
я использую привода через плату mesa 5i20

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

Добавлено: 09 ноя 2012, 13:26
nkp
то есть имеется примерно такая строка:

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

loadrt hm2_pci config="firmware=hm2/5i20/SVST8_4.BIT num_encoders=3 num_pwmgens=1 num_stepgens=2"
тут два stepgen
и stepgen.03 уже не грузится???

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

Добавлено: 09 ноя 2012, 13:32
EvgenyK
есть такая строка %)
loadrt hm2_pci config="firmware=hm2/5i20/SVST2_4_7I47.BIT num_encoders=0 num_pwmgens=1 num_stepgens=4"

stepgen hostmot загужается.
что с ним делать?

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

Добавлено: 09 ноя 2012, 13:45
nkp
я не вникал в тему - но по моему вот это тебе должно помочь

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

Добавлено: 09 ноя 2012, 14:32
EvgenyK
спасибо огромное!!! буд читать-разбираться %)

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

Добавлено: 09 ноя 2012, 15:17
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

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

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

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

Добавлено: 09 ноя 2012, 19:36
EvgenyK
Ник, завтра пришлю результаты команд.

Сегодня настроил аналогично показанному в ссылке от nkp.
вместо движения показывает ошибку joint following error...
пробовал увеличивать допустимую ошибку до 50, до 100 - результат такой же.
наверное, нужен какой-то коэффициент для энкодера...
у меня двигатель имеет 160 000 имп/об., это значение делится в сервоусилителе на 160, получается 1 000 шагов/об.
после двигателя идет редуктор 1:50, на вторичном валу которого висит энкодер 10 000 имп/об.
получается что соотношение 1 000 * 50 = 50 000 / 10 000 = 5.
только я не знаю куда его ввести...

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

Добавлено: 09 ноя 2012, 21:39
nkp
Маштабирование энкодера прописываются в хал:

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

setp hm2_5i20.0.encoder.01.scale  [AXIS_2]INPUT_SCALE
это ссылка - значение вводится в ини файле
(в данном примере в разделе [AXIS_2], параметр INPUT_SCALE

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

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

Если все будет в градусах, то делим все на 360.

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

Добавлено: 10 ноя 2012, 09:56
EvgenyK
сейчас попробую поставить INPUT_SCALE

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