Страница 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 же будет получать обратную связь от оси, и по идее будет ее корректировать...
Хотя может я сейчас ерунду написал, и система пойдет в разнос, поэтому тестируй с маленькими значениями скоростей и ограничь максимальный вывод ПИД!

Ну и красную кнопку рядом держи!
Второй вариант - тупо не использовать первый энкодер, а вместо него использовать только второй..
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?
Напиши подробнее, что у тебя сейчас стоит, и как управляется. И пару форток было бы не плохо

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
Тогда надо делать так:
- stepgen загружаем в режиме управления скоростью. Для этого в строчке с loadrt добавляем ctrl_type, на нужном по счету месте ставим v - velocity
- Загружаем компонент 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
Примерно так.
- Потом настраиваем ПИД и получаем несказанное удовольствие от проделанной работы

ЗЫ ПИД умеешь настраивать?
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 оборот выходного вала, так?