Два энкодера на одной оси, как подключить к LinuxCNC
-
EvgenyK
- Кандидат
- Сообщения: 78
- Зарегистрирован: 05 авг 2012, 16:49
- Репутация: 0
- Контактная информация:
Два энкодера на одной оси, как подключить к LinuxCNC
Всем привет!
Вопрос возник такой: возможно ли используя управление сервоприводом step/dir использовать дополнительный энкодер?
Поставил на поворотную ось червячный редуктор (i=50), хотя и регулировал редуктор, но небольшой люфт остался. Поставил на вторичный вал энкодер с 10000 делениями на оборот для контроля положения. Теперь вот не пойму, как прикрутить энкодер в emc чтобы с его помощью отслеживать реальное положение вала.
Вопрос возник такой: возможно ли используя управление сервоприводом 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
Насколько я понимаю серва управляется через ПИД в LinuxCNC?
Тогда надо завести второй компонент encoder, подключить к нему второй энкодер. И
1. на обратную связь оси в LinuxCNC завести сигналы второго энкодера, т.е.:
2. убрать обратную связь PID => axis.0.motor-pos-fb/
3. остальное оставить как было.
В итоге: ПИД будет получать обратную связь от мотора, LinuxCNC же будет получать обратную связь от оси, и по идее будет ее корректировать...
Хотя может я сейчас ерунду написал, и система пойдет в разнос, поэтому тестируй с маленькими значениями скоростей и ограничь максимальный вывод ПИД!
Ну и красную кнопку рядом держи!
Второй вариант - тупо не использовать первый энкодер, а вместо него использовать только второй..
Тогда надо завести второй компонент encoder, подключить к нему второй энкодер. И
1. на обратную связь оси в LinuxCNC завести сигналы второго энкодера, т.е.:
Код: Выделить всё
net xpos-fb encoder.1.position => axis.0.motor-pos-fb3. остальное оставить как было.
В итоге: ПИД будет получать обратную связь от мотора, LinuxCNC же будет получать обратную связь от оси, и по идее будет ее корректировать...
Хотя может я сейчас ерунду написал, и система пойдет в разнос, поэтому тестируй с маленькими значениями скоростей и ограничь максимальный вывод ПИД!
Второй вариант - тупо не использовать первый энкодер, а вместо него использовать только второй..
-
EvgenyK
- Кандидат
- Сообщения: 78
- Зарегистрирован: 05 авг 2012, 16:49
- Репутация: 0
- Контактная информация:
Re: Два энкодера на одной оси, как подключить к LinuxCNC
Энкодер установленный на серводвигателе подключен к сервоусилителю и emc о нем даже не догадывается...
Второй энкодер пока ни к чему не подключен.
Вот и думаю, куда бы его прикрутить. Варианта два: к объекту encoder библиотеки hostmot, либо к компоненту encoder стандартной библиотеки.
куда лучше, а? %)
Второй энкодер пока ни к чему не подключен.
Вот и думаю, куда бы его прикрутить. Варианта два: к объекту encoder библиотеки hostmot, либо к компоненту encoder стандартной библиотеки.
куда лучше, а? %)
God's gonna cut you down...
-
nkp
- Мастер
- Сообщения: 8340
- Зарегистрирован: 28 ноя 2011, 00:25
- Репутация: 1589
- Контактная информация:
Re: Два энкодера на одной оси, как подключить к LinuxCNC
а какую функцию он выполняет ,если чпу даже не догадывается о нем??EvgenyK писал(а):Энкодер установленный на серводвигателе подключен к сервоусилителю и emc о нем даже не догадывается...
а как работала емс до установки второго энкодера - откуда бралось положение???
(может на движке не энкодер а тахогенератор?)
- Nick
- Мастер
- Сообщения: 22776
- Зарегистрирован: 23 ноя 2009, 16:45
- Репутация: 1735
- Заслуга: Developer
- Откуда: Gatchina, Saint-Petersburg distr., Russia
- Контактная информация:
Re: Два энкодера на одной оси, как подключить к LinuxCNC
К hostmot - он быстрее работает!EvgenyK писал(а): Варианта два: к объекту encoder библиотеки hostmot,
Серва управляется по step/dir?
Напиши подробнее, что у тебя сейчас стоит, и как управляется. И пару форток было бы не плохо
-
aftaev
- Зачётный участник

- Сообщения: 34042
- Зарегистрирован: 04 апр 2010, 19:22
- Репутация: 6194
- Откуда: Казахстан.
- Контактная информация:
Re: Два энкодера на одной оси, как подключить к LinuxCNC
речь скорее всего про серву со своим контроллером. Вот контроллеру и нужен энкодер чтобы управлять мотором. Мои сервы Яскава точно также работают с энкодером мотора, а ЧПУ даж не догадывается чем управляет так как сервы работают по степ/дирnkp писал(а):а какую функцию он выполняет ,если чпу даже не догадывается о нем??
скорее всего по степ/диру все управляетсяnkp писал(а):а как работала емс до установки второго энкодера - откуда бралось положение???
Дилетанту сложные вещи кажутся очень простыми, и только профессионал понимает насколько сложна самая простая вещь
Кто хочет - ищет возможности, кто не хочет - ищет оправдание.
Найди работу по душе и тебе не придется работать.
Кто хочет - ищет возможности, кто не хочет - ищет оправдание.
Найди работу по душе и тебе не придется работать.
-
EvgenyK
- Кандидат
- Сообщения: 78
- Зарегистрирован: 05 авг 2012, 16:49
- Репутация: 0
- Контактная информация:
Re: Два энкодера на одной оси, как подключить к LinuxCNC
Сервоприводы Delta - вот такие.
Управляются step/dir, то есть энкодер серводвигателя подключен к сервоусилителю.
Есть червячный редуктор siti (серии PC). Отрегулировал, но небольшой люфт остался.
На выходном валу редуктора стоит ось A и энкодер с разрешением 10000 имп/об. http://www.itrostov.ru/pictures/_4590663/sick_encoder.pdf стр. 86-88.
Нужно сделать так, чтобы EMC руководствовалась показаниями энкодера и соответственно регулировала перемещение поворотной оси.
Управляются 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
Тогда надо делать так:
- stepgen загружаем в режиме управления скоростью. Для этого в строчке с loadrt добавляем ctrl_type, на нужном по счету месте ставим v - velocity
Код: Выделить всё
loadrt stepgen ctrl_type=p,p,p,v - Загружаем компонент 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 - Потом настраиваем ПИД и получаем несказанное удовольствие от проделанной работы

-
EvgenyK
- Кандидат
- Сообщения: 78
- Зарегистрирован: 05 авг 2012, 16:49
- Репутация: 0
- Контактная информация:
Re: Два энкодера на одной оси, как подключить к LinuxCNC
с ПИД разберусь. завтра буду пробовать то что ты написал.
God's gonna cut you down...
- Nick
- Мастер
- Сообщения: 22776
- Зарегистрирован: 23 ноя 2009, 16:45
- Репутация: 1735
- Заслуга: Developer
- Откуда: Gatchina, Saint-Petersburg distr., Russia
- Контактная информация:
Re: Два энкодера на одной оси, как подключить к LinuxCNC
Будут проблемы пиши. Как только конфиг сделаешь, и будешь ПИД настраивать, первым делом открой HALScope и выведи туда пины обратной связи, fferror, задания по скорости и положению, и потом глядя как эти графики меняются когда будешь гонять ось туда сюда, настраивай параметры ПИД в калибровке осей, чтобы Ferror был по меньше.
И не забудь ежедневные (а лучше еще чаще) отчеты о проделанной работе, со скриншотами и конфигами
!
И не забудь ежедневные (а лучше еще чаще) отчеты о проделанной работе, со скриншотами и конфигами
-
EvgenyK
- Кандидат
- Сообщения: 78
- Зарегистрирован: 05 авг 2012, 16:49
- Репутация: 0
- Контактная информация:
Re: Два энкодера на одной оси, как подключить к LinuxCNC
insmod: error inserting '/usr/realtime..../modules/emc2/stepgen.ko: -1 Operation not permitted
вот так ругаетс EMC на попытку загрузить модуль stepgen.
может это из-за того, что уже используется hostmot...
я использую привода через плату mesa 5i20
вот так ругаетс EMC на попытку загрузить модуль stepgen.
может это из-за того, что уже используется hostmot...
я использую привода через плату mesa 5i20
God's gonna cut you down...
-
nkp
- Мастер
- Сообщения: 8340
- Зарегистрирован: 28 ноя 2011, 00:25
- Репутация: 1589
- Контактная информация:
Re: Два энкодера на одной оси, как подключить к LinuxCNC
то есть имеется примерно такая строка:
тут два stepgen
и stepgen.03 уже не грузится???
Код: Выделить всё
loadrt hm2_pci config="firmware=hm2/5i20/SVST8_4.BIT num_encoders=3 num_pwmgens=1 num_stepgens=2"и stepgen.03 уже не грузится???
-
EvgenyK
- Кандидат
- Сообщения: 78
- Зарегистрирован: 05 авг 2012, 16:49
- Репутация: 0
- Контактная информация:
Re: Два энкодера на одной оси, как подключить к LinuxCNC
есть такая строка %)
loadrt hm2_pci config="firmware=hm2/5i20/SVST2_4_7I47.BIT num_encoders=0 num_pwmgens=1 num_stepgens=4"
stepgen hostmot загужается.
что с ним делать?
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
я не вникал в тему - но по моему вот это тебе должно помочь
-
EvgenyK
- Кандидат
- Сообщения: 78
- Зарегистрирован: 05 авг 2012, 16:49
- Репутация: 0
- Контактная информация:
Re: Два энкодера на одной оси, как подключить к LinuxCNC
спасибо огромное!!! буд читать-разбираться %)
God's gonna cut you down...
- Nick
- Мастер
- Сообщения: 22776
- Зарегистрирован: 23 ноя 2009, 16:45
- Репутация: 1735
- Заслуга: Developer
- Откуда: Gatchina, Saint-Petersburg distr., Russia
- Контактная информация:
Re: Два энкодера на одной оси, как подключить к LinuxCNC
Ты когда выполнишь 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
собственно все эти пины и параметры надо будет настраивать и подключать.
можешь добавить сюда выводы этих команд и написать что куда хочешь подключить, а мы с командами поможем.
запусти в консоле
halcmd show
там напишет все пины и параметры всего что загрузилось,
или можно
halcmd show pin hm2_5i20
и
halcmd show parameter hm2_5i20
собственно все эти пины и параметры надо будет настраивать и подключать.
можешь добавить сюда выводы этих команд и написать что куда хочешь подключить, а мы с командами поможем.
-
EvgenyK
- Кандидат
- Сообщения: 78
- Зарегистрирован: 05 авг 2012, 16:49
- Репутация: 0
- Контактная информация:
Re: Два энкодера на одной оси, как подключить к LinuxCNC
Ник, завтра пришлю результаты команд.
Сегодня настроил аналогично показанному в ссылке от nkp.
вместо движения показывает ошибку joint following error...
пробовал увеличивать допустимую ошибку до 50, до 100 - результат такой же.
наверное, нужен какой-то коэффициент для энкодера...
у меня двигатель имеет 160 000 имп/об., это значение делится в сервоусилителе на 160, получается 1 000 шагов/об.
после двигателя идет редуктор 1:50, на вторичном валу которого висит энкодер 10 000 имп/об.
получается что соотношение 1 000 * 50 = 50 000 / 10 000 = 5.
только я не знаю куда его ввести...
Сегодня настроил аналогично показанному в ссылке от 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
Маштабирование энкодера прописываются в хал:
это ссылка - значение вводится в ини файле
(в данном примере в разделе [AXIS_2], параметр INPUT_SCALE
Код: Выделить всё
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
Должно быть как-то так:
1. предположим, перемещения оси будут в оборотах, т.е. G0 A1 это проехать на 1 полный оборот, тогда
scale для двигателя = количество шагов на 1 оборот, т.е.
160 000/160 * 50 = 5000
Для энкодера:
считаем количество импульсов на оборот, получаем
10 000 (т.к. он у нас стоит на искомом валу)
Если все будет в градусах, то делим все на 360.
1. предположим, перемещения оси будут в оборотах, т.е. G0 A1 это проехать на 1 полный оборот, тогда
scale для двигателя = количество шагов на 1 оборот, т.е.
160 000/160 * 50 = 5000
Для энкодера:
считаем количество импульсов на оборот, получаем
10 000 (т.к. он у нас стоит на искомом валу)
Если все будет в градусах, то делим все на 360.
-
EvgenyK
- Кандидат
- Сообщения: 78
- Зарегистрирован: 05 авг 2012, 16:49
- Репутация: 0
- Контактная информация:
Re: Два энкодера на одной оси, как подключить к LinuxCNC
сейчас попробую поставить INPUT_SCALE
Ник, у тебя в расчетах ошибочка: 160 000 / 160 = 1000 * 50 = 50 000
то есть 50 000 имп двигателя это 1 оборот выходного вала, так?
Ник, у тебя в расчетах ошибочка: 160 000 / 160 = 1000 * 50 = 50 000
то есть 50 000 имп двигателя это 1 оборот выходного вала, так?
God's gonna cut you down...
