Страница 3 из 9
LinuxCNC - Альтернативная кинематика.
Добавлено: 10 май 2012, 13:54
Serg
Эта тема предлагается для обсуждения моих решений некоторых вопросов кинематики в LinuxCNC и других, связанных с ними.
На сегодня стоит задача получить рабочее решение для вот этого монстрика:
Многосевой станок лазерной резки листа и профиля #1 - нужно управлять количеством моторов (joints), которое пока не под силу штатным средствам LinuxCNC. Ну и скорее всего и для других проектов, которым окажутся тесными возможности штатной кинематики LinuxCNC.
Если появятся желающие присоединиться к работам по этой тематике, то добро пожаловать в тему.
Оставляю за собой узурпаторское право "отселять" обсуждения, выходящие за рамки этой темы.
ВНИМАНИЕ!
Все опубликованные ниже разработки предлагаются "AS IS" (как есть), без каких-либо гарантий, в том числе и по сопровождению
Имеющиеся описания ориентированы на тех, кто более-менее разбирается в LinuxCNC и в его HAL в частности, или хотя-бы прочитал и понял документацию.
Считайте это своеобразным порогом вхождения. Если сделать подробное описание "для чайников", то оные не преминут этим воспользоваться и в случае любых непоняток будут задавать вопросы, которые как правило так или иначе освещены в документации. Отвечать на них я не желаю, не из вредности, а из-за отсутствия у меня на это времени....
Extended Gantry Axis Component for LinuxCNC HAL (egantry)
Описание:
https://cncdevice.com/devel/eaxis/egantry.txt
Архив:
https://cncdevice.com/devel/eaxis/egant ... re3.tar.gz предыдущая версия:
https://cncdevice.com/devel/eaxis/egant ... re2.tar.gz
Устанавливается командой
Совместим с LinuxCNC версий 2.6.x и выше. Для уточнения проверяйте у компонента axis.N наличие пинов home-state и homed.
BlackBox userspace component for LinuxCNC HAL
Описание:
Re: LinuxCNC - Альтернативная кинематика. #76
Компонент:
https://cncdevice.com/devel/misc/BlackBox.py
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Начало темы было такое:
PKM писал(а):А что за кинематика? Для твоего мега-станка?
gantry кинематика, которая которая использует только одну axis.N для любого количества приводов оси, ну и решает можество других проблем, сопутствующих штатной gantrykins.
Re: LinuxCNC - Альтернативная кинематика.
Добавлено: 19 янв 2015, 19:51
Serg
Краткое описание компонента egantry:
Формирует управляющие сигналы зависимыми приводами из сигналов axis.N. Компонент
включается между компонентом axis.N и такими компонентами как pid.N, stepgen.N.
Пины egantry.N.axis.* соединяются с аналогичными пинами компонента axis.N. Пины
egantry.N.joint.MM.* соединяются с аналогичными пинами таких компонентов как pid.N,
stepgen.N и реальными датчиками лимитов и т.п.
Параметр personality указывает количество приводов, которыми может управлять каждый
экземляр компонента, по умолчанию - 2. Допустимы значения от 1 до 100.
Компонент позволяет задавать коррецию реальных положений датчиков HOME/Index в виде
смещения относительно их положения одного из приводов (пин egantry.N.joint.MM.correct)
Если после найденых начал (homing) оси, если какой-либо из приводов будет сдвинут
внешним воздействием при выключенном станке на величину, превышающую значение
egantry.N.align-hyst, то при последующем включении компонент произведёт плавное
выравнивание положения приводов со скоростью и ускорением egantry.N.align-vel и
egantry.N.align-acc.
Для корректной работы компонента крайне желательно, чтобы настройки систем PID-привод,
подключаемых к одному компоненту egantry.N были одинаковыми или максимально близкими.
Ссылки на файлы в первом сообщении темы.
Re: LinuxCNC - Альтернативная кинематика.
Добавлено: 20 янв 2015, 00:25
umerov
у меня параметры egantry.0.align-vel и egantry.0.align-acc, почему то ни как не влият на работу двигателей, при рассогласовании - они двигаються с максимальным ускорением и скоростью.
Re: LinuxCNC - Альтернативная кинематика.
Добавлено: 20 янв 2015, 01:07
Serg
А какие значения стоят?
Попробуй поставить ускорение в половину от MAX_ACCELERATION оси, а скорость равную HOME_SEARCH_VEL.
Ну конфиги свои покажи... Или хотя-бы
В качестве теста сам скачал по ссылке, установил, проверил - работает как и задумано...
Re: LinuxCNC - Альтернативная кинематика.
Добавлено: 20 янв 2015, 01:16
umerov
Код: Выделить всё
cnc@cnc:~$ halcmd show pin egantry.0
Component Pins:
Owner Type Dir Value Name
9 float IN 750 egantry.0.align-acc
9 float IN 0.01 egantry.0.align-hyst
9 float IN 50 egantry.0.align-vel
9 bit IN FALSE egantry.0.axis.amp-enable
9 s32 IN 0 egantry.0.axis.home-state <== y-home-start
9 bit OUT TRUE egantry.0.axis.home-sw ==> home-y
9 bit IN FALSE egantry.0.axis.homed
9 bit I/O FALSE egantry.0.axis.index-enable <=> y-index-enable
9 float IN 250.0293 egantry.0.axis.motor-pos-cmd <== ypos-cmd
9 float OUT 250.0283 egantry.0.axis.motor-pos-fb ==> ypos-fb
9 bit OUT FALSE egantry.0.axis.neg-lim-sw
9 bit OUT FALSE egantry.0.axis.pos-lim-sw
9 float IN 0 egantry.0.joint.00.correct
9 bit OUT FALSE egantry.0.joint.00.enable
9 bit IN FALSE egantry.0.joint.00.home-sw <== switches-y1
9 bit I/O FALSE egantry.0.joint.00.index-enable <=> y1-index-enable
9 bit IN FALSE egantry.0.joint.00.neg-lim-sw
9 float OUT 1.302308 egantry.0.joint.00.offset
9 float OUT 248.727 egantry.0.joint.00.pos-cmd ==> y1pos-cmd
9 float IN 248.727 egantry.0.joint.00.pos-fb <== y1pos-fb
9 bit IN FALSE egantry.0.joint.00.pos-lim-sw
9 float IN 0 egantry.0.joint.01.correct
9 bit OUT FALSE egantry.0.joint.01.enable
9 bit IN FALSE egantry.0.joint.01.home-sw <== switches-y2
9 bit I/O FALSE egantry.0.joint.01.index-enable <=> y2-index-enable
9 bit IN FALSE egantry.0.joint.01.neg-lim-sw
9 float OUT 87.85431 egantry.0.joint.01.offset
9 float OUT 162.175 egantry.0.joint.01.pos-cmd ==> y2pos-cmd
9 float IN 162.174 egantry.0.joint.01.pos-fb <== y2pos-fb
9 bit IN FALSE egantry.0.joint.01.pos-lim-sw
cnc@cnc:~$
изменение скорости и ускорения ни как не влияют.
Re: LinuxCNC - Альтернативная кинематика.
Добавлено: 20 янв 2015, 01:31
Serg
Надо ВСЕ пины egantry.0.axis.* присоединить к axis.1
В частности выравнивание не работает из-за неприсоединённых egantry.0.axis.amp-enable, egantry.0.axis.homed, egantry.0.joint.00.enable и egantry.0.joint.01.enable.
Вот пример конфига с моего стенда:
Код: Выделить всё
loadrt egantry names=a0 personality=2
addf a0 servo-thread
setp a0.align-acc [AXIS_0]ALIGN_ACCELERATION
setp a0.align-vel [AXIS_0]ALIGN_VELOCITY
#setp a0.joint.01.correct 10
net x-pos-cmd axis.0.motor-pos-cmd => a0.axis.motor-pos-cmd
net x-pos-fb axis.0.motor-pos-fb => a0.axis.motor-pos-fb
net x1-pos-cmd a0.joint.00.pos-cmd
net x1-pos-fb a0.joint.00.pos-fb
net x2-pos-cmd a0.joint.01.pos-cmd
net x2-pos-fb a0.joint.01.pos-fb
net x-enable axis.0.amp-enable-out => a0.axis.amp-enable
net x1-enable <= a0.joint.00.enable
net x2-enable <= a0.joint.01.enable
net x-index-enable axis.0.index-enable a0.axis.index-enable
net x1-index-enable => a0.joint.00.index-enable
net x2-index-enable => a0.joint.01.index-enable
net x-home-sw a0.axis.home-sw => axis.0.home-sw-in
net x-neg-limit-sw a0.axis.neg-lim-sw => axis.0.neg-lim-sw-in
net x-pos-limit-sw a0.axis.pos-lim-sw => axis.0.pos-lim-sw-in
net x1-home-limit => a0.joint.00.home-sw a0.joint.00.neg-lim-sw
net x2-home-limit => a0.joint.01.home-sw a0.joint.01.neg-lim-sw
net x-home-state axis.0.home-state => a0.axis.home-state
net x-homed axis.0.homed => a0.axis.homed
#*******************
# AXIS X1
#*******************
net x1-index-enable <=> pid.x1.index-enable
net x1-enable => pid.x1.enable
net x1-output => pid.x1.output
net x1-pos-cmd => pid.x1.command
net x1-vel-fb => pid.x1.feedback-deriv
net x1-pos-fb => pid.x1.feedback
#net x1-index-enable => axis.0.index-enable
# ---setup home / limit switch signals---
#net x1-home-sw => axis.0.home-sw-in
#net x1-neg-limit => axis.0.neg-lim-sw-in axis.0.home-sw-in
#net x-pos-limit => axis.0.pos-lim-sw-in
#*******************
# AXIS X2
#*******************
net x2-index-enable <=> pid.x2.index-enable
net x2-enable => pid.x2.enable
net x2-output => pid.x2.output
net x2-pos-cmd => pid.x2.command
net x2-vel-fb => pid.x2.feedback-deriv
net x2-pos-fb => pid.x2.feedback
#net x2-index-enable => axis.3.index-enable
# ---setup home / limit switch signals---
#net x2-home-sw => axis.3.home-sw-in
#net x2-neg-limit => axis.3.neg-lim-sw-in axis.3.home-sw-in
#net x-pos-limit => axis.3.pos-lim-sw-in
Поудалял всё, что не относится к делу.
А вот кино как оно работает:
http://youtu.be/pbocrKjlymo
Re: LinuxCNC - Альтернативная кинематика.
Добавлено: 20 янв 2015, 11:30
umerov
переподключил все работает также (при рассогласовании и коррекции - двигатели крутяться с максимальным ускорением и скоростью)
Может из за того что у меня версия linuxCNC 2.6.5, там еще в .ini нет отдельных настроек для joint и axis
чать hal
Код: Выделить всё
########### egantry ###########################
loadrt egantry count=1 personality=2
addf egantry.0 servo-thread
setp egantry.0.align-vel 50
setp egantry.0.align-acc 100
setp egantry.0.align-hyst 0.05
setp egantry.0.align-hyst 0.05
setp egantry.0.joint.01.correct 10
# position & feedback
net y-pos-cmd egantry.0.axis.motor-pos-cmd => axis.1.motor-pos-cmd
net y-pos-fb egantry.0.axis.motor-pos-fb => axis.1.motor-pos-fb
net y1-pos-cmd egantry.0.joint.00.pos-cmd => pid.y.command
net y1-pos-fb egantry.0.joint.00.pos-fb <= pid.y.feedback
net y2-pos-cmd egantry.0.joint.01.pos-cmd => pid.a.command
net y2-pos-fb egantry.0.joint.01.pos-fb <= pid.a.feedback
# enables
net y-enable egantry.0.axis.amp-enable <= axis.1.amp-enable-out
net y1-enable egantry.0.joint.00.enable => pid.y.enable
net y2-enable egantry.0.joint.01.enable => pid.a.enable
# index_ENC
net y-index-enable egantry.0.axis.index-enable <= axis.1.index-enable
net y1-index-enable egantry.0.joint.00.index-enable => pid.y.index-enable
net y2-index-enable egantry.0.joint.01.index-enable => pid.a.index-enable
# home switches & othrs
net y-home-sw egantry.0.axis.home-sw => axis.1.home-sw-in
net y1-home-sw egantry.0.joint.00.home-sw <= hm2_5i20.0.gpio.024.in_not
net y2-home-sw egantry.0.joint.01.home-sw <= hm2_5i20.0.gpio.026.in_not
net y-home-state axis.1.home-state => egantry.0.axis.home-state
net y-homed axis.1.homed => egantry.0.axis.homed
########## egantry ###########################
#*******************
# AXIS Y +Y1
#*******************
net y-output => pid.y.output
net y-vel-fb => pid.y.feedback-deriv
net y-output => hm2_5i20.0.pwmgen.01.value
net y-enable => hm2_5i20.0.pwmgen.01.enable
net y1-pos-fb <= hm2_5i20.0.encoder.01.position
net y-vel-fb <= hm2_5i20.0.encoder.01.velocity
net y-pos-rawcounts <= hm2_5i20.0.encoder.01.rawcounts
#*******************
# AXIS Y2
#*******************
net a-output => pid.a.output
net a-vel-fb => pid.a.feedback-deriv
net a-output => hm2_5i20.0.pwmgen.03.value
net a-enable axis.3.amp-enable-out => hm2_5i20.0.pwmgen.03.enable
net y2-pos-fb <= hm2_5i20.0.encoder.03.position
net a-vel-fb <= hm2_5i20.0.encoder.03.velocity
net a-pos-rawcounts <= hm2_5i20.0.encoder.03.rawcounts
Re: LinuxCNC - Альтернативная кинематика.
Добавлено: 20 янв 2015, 12:31
Serg
Вроде правильно подключено (есть огрехи, но они не влияют).
Покажи результат "halcmd show pin egantry.0" после хоминга, после выключения и сдвига одной оси, после включения и выравнивания.
Или лучше в халскопе (скриншот) процесса выравнивания, интересуют сигналы
egantry.0.axis.motor-pos-cmd
egantry.0.axis.motor-pos-fb
egantry.0.joint.00.pos-cmd
egantry.0.joint.00.pos-fb
egantry.0.joint.01.pos-cmd
egantry.0.joint.01.pos-fb
egantry.0.axis.amp-enable
egantry.0.axis.home-state
egantry.0.axis.homed
(парные "лучи" pos-cmd и pos-fb можно совместить, чтоб много места не занимали)
umerov писал(а):Может из за того что у меня версия linuxCNC 2.6.5, там еще в .ini нет отдельных настроек для joint и axis
Нет, это не важно.
Re: LinuxCNC - Альтернативная кинематика.
Добавлено: 20 янв 2015, 15:03
umerov
HOME_SEARCH_VEL = -50
HOME_LATCH_VEL = 3
HOME_FINAL_VEL = 10
HOME_USE_INDEX = NO
HOME_SEQUENCE = 0
во время хоминга
после момент корреции положения
после хоминга
Код: Выделить всё
cnc@cnc:~$ halcmd show pin egantry.0
Component Pins:
Owner Type Dir Value Name
14 float IN 100 egantry.0.align-acc
14 float IN 0.05 egantry.0.align-hyst
14 float IN 50 egantry.0.align-vel
14 bit IN TRUE egantry.0.axis.amp-enable <== y-enable
14 s32 IN 0 egantry.0.axis.home-state <== y-home-state
14 bit OUT FALSE egantry.0.axis.home-sw ==> y-home-sw
14 bit IN TRUE egantry.0.axis.homed <== y-homed
14 bit I/O FALSE egantry.0.axis.index-enable <=> y-index-enable
14 float IN -114.4412 egantry.0.axis.motor-pos-cmd <== y-pos-cmd
14 float OUT -114.4432 egantry.0.axis.motor-pos-fb ==> y-pos-fb
14 bit OUT FALSE egantry.0.axis.neg-lim-sw
14 bit OUT FALSE egantry.0.axis.pos-lim-sw
14 float IN 0 egantry.0.joint.00.correct
14 bit OUT TRUE egantry.0.joint.00.enable ==> y1-enable
14 bit IN FALSE egantry.0.joint.00.home-sw <== y1-home-sw
14 bit I/O FALSE egantry.0.joint.00.index-enable <=> y1-index-enable
14 bit IN FALSE egantry.0.joint.00.neg-lim-sw
14 float OUT 0.09476744 egantry.0.joint.00.offset
14 float OUT -114.536 egantry.0.joint.00.pos-cmd ==> y1-pos-cmd
14 float IN -114.535 egantry.0.joint.00.pos-fb <== y1-pos-fb
14 bit IN FALSE egantry.0.joint.00.pos-lim-sw
14 float IN 0 egantry.0.joint.01.correct
14 bit OUT TRUE egantry.0.joint.01.enable ==> y2-enable
14 bit IN FALSE egantry.0.joint.01.home-sw <== y2-home-sw
14 bit I/O FALSE egantry.0.joint.01.index-enable <=> y2-index-enable
14 bit IN FALSE egantry.0.joint.01.neg-lim-sw
14 float OUT -56.98623 egantry.0.joint.01.offset
14 float OUT -57.455 egantry.0.joint.01.pos-cmd ==> y2-pos-cmd
14 float IN -57.458 egantry.0.joint.01.pos-fb <== y2-pos-fb
14 bit IN FALSE egantry.0.joint.01.pos-lim-sw
после сдвига одной оси
Код: Выделить всё
cnc@cnc:~$ halcmd show pin egantry.0
Component Pins:
Owner Type Dir Value Name
14 float IN 100 egantry.0.align-acc
14 float IN 0.05 egantry.0.align-hyst
14 float IN 50 egantry.0.align-vel
14 bit IN FALSE egantry.0.axis.amp-enable <== y-enable
14 s32 IN 0 egantry.0.axis.home-state <== y-home-state
14 bit OUT FALSE egantry.0.axis.home-sw ==> y-home-sw
14 bit IN TRUE egantry.0.axis.homed <== y-homed
14 bit I/O FALSE egantry.0.axis.index-enable <=> y-index-enable
14 float IN -109.3402 egantry.0.axis.motor-pos-cmd <== y-pos-cmd
14 float OUT -109.3402 egantry.0.axis.motor-pos-fb ==> y-pos-fb
14 bit OUT FALSE egantry.0.axis.neg-lim-sw
14 bit OUT FALSE egantry.0.axis.pos-lim-sw
14 float IN 0 egantry.0.joint.00.correct
14 bit OUT FALSE egantry.0.joint.00.enable ==> y1-enable
14 bit IN FALSE egantry.0.joint.00.home-sw <== y1-home-sw
14 bit I/O FALSE egantry.0.joint.00.index-enable <=> y1-index-enable
14 bit IN FALSE egantry.0.joint.00.neg-lim-sw
14 float OUT 0.09476744 egantry.0.joint.00.offset
14 float OUT -114.536 egantry.0.joint.00.pos-cmd ==> y1-pos-cmd
14 float IN -114.536 egantry.0.joint.00.pos-fb <== y1-pos-fb
14 bit IN FALSE egantry.0.joint.00.pos-lim-sw
14 float IN 0 egantry.0.joint.01.correct
14 bit OUT FALSE egantry.0.joint.01.enable ==> y2-enable
14 bit IN FALSE egantry.0.joint.01.home-sw <== y2-home-sw
14 bit I/O FALSE egantry.0.joint.01.index-enable <=> y2-index-enable
14 bit IN FALSE egantry.0.joint.01.neg-lim-sw
14 float OUT -56.98623 egantry.0.joint.01.offset
14 float OUT -52.354 egantry.0.joint.01.pos-cmd ==> y2-pos-cmd
14 float IN -52.354 egantry.0.joint.01.pos-fb <== y2-pos-fb
14 bit IN FALSE egantry.0.joint.01.pos-lim-sw
после включения и выравнивания
Код: Выделить всё
cnc@cnc:~$ halcmd show pin egantry.0
Component Pins:
Owner Type Dir Value Name
14 float IN 100 egantry.0.align-acc
14 float IN 0.05 egantry.0.align-hyst
14 float IN 50 egantry.0.align-vel
14 bit IN TRUE egantry.0.axis.amp-enable <== y-enable
14 s32 IN 0 egantry.0.axis.home-state <== y-home-state
14 bit OUT FALSE egantry.0.axis.home-sw ==> y-home-sw
14 bit IN TRUE egantry.0.axis.homed <== y-homed
14 bit I/O FALSE egantry.0.axis.index-enable <=> y-index-enable
14 float IN -109.3402 egantry.0.axis.motor-pos-cmd <== y-pos-cmd
14 float OUT -109.3422 egantry.0.axis.motor-pos-fb ==> y-pos-fb
14 bit OUT FALSE egantry.0.axis.neg-lim-sw
14 bit OUT FALSE egantry.0.axis.pos-lim-sw
14 float IN 0 egantry.0.joint.00.correct
14 bit OUT TRUE egantry.0.joint.00.enable ==> y1-enable
14 bit IN FALSE egantry.0.joint.00.home-sw <== y1-home-sw
14 bit I/O FALSE egantry.0.joint.00.index-enable <=> y1-index-enable
14 bit IN FALSE egantry.0.joint.00.neg-lim-sw
14 float OUT 0.09476744 egantry.0.joint.00.offset
14 float OUT -109.435 egantry.0.joint.00.pos-cmd ==> y1-pos-cmd
14 float IN -109.436 egantry.0.joint.00.pos-fb <== y1-pos-fb
14 bit IN FALSE egantry.0.joint.00.pos-lim-sw
14 float IN 0 egantry.0.joint.01.correct
14 bit OUT TRUE egantry.0.joint.01.enable ==> y2-enable
14 bit IN FALSE egantry.0.joint.01.home-sw <== y2-home-sw
14 bit I/O FALSE egantry.0.joint.01.index-enable <=> y2-index-enable
14 bit IN FALSE egantry.0.joint.01.neg-lim-sw
14 float OUT -56.98623 egantry.0.joint.01.offset
14 float OUT -52.354 egantry.0.joint.01.pos-cmd ==> y2-pos-cmd
14 float IN -52.356 egantry.0.joint.01.pos-fb <== y2-pos-fb
14 bit IN FALSE egantry.0.joint.01.pos-lim-sw
Re: LinuxCNC - Альтернативная кинематика.
Добавлено: 20 янв 2015, 17:31
Serg
Ну вот-же оно выравнивается со скоростью 50...
В конце есть маленький скачёк, но это видимо из-за увеличения egantry.0.align-hyst до 0.05. Это значение не стоит увеличивать. Имеет смысл уменьшать на станках с точностью лучше, чем 0.01, но так, чтобы оно было больше колебаний привода при удержании.
Re: LinuxCNC - Альтернативная кинематика.
Добавлено: 08 фев 2015, 17:57
Serg
egantry версия 1.0pre1:
Добавлены пины:
egantry.N.joint.MM.amp-fault-in bit in - Вход сигнала ошибки от усилителя
egantry.N.axis.amp-fault-out bit out - Логическое И всех входов egantry.N.joint.MM.amp-fault-in
egantry.N.joint.MM.ferror float out - Величина ошибки позиционирования привода
egantry.N.axis.fb-joint s32 out - Номер привода, актуальная позиция которого используется для оси.
Теперь в качестве актуальной позиции (feedback) оси используется актуальная позиция привода, у которого в данный момент наибольшая ошибка позиционирования (egantry.N.joint.MM.ferror). Это позволяет оси (axis.N) правильно отрабатывать превышение ошибки позиционирования (FERROR) по любому из приводов. egantry.N.axis.fb-joint укажет привод, на котором произошло превышение.
Обновлённые файлы в первом сообщении.
Re: LinuxCNC - Альтернативная кинематика.
Добавлено: 30 май 2015, 21:06
Serg
egantry версия 1.0pre2:
Исправлена ошибка: при хомлении "из далека" (например с другого края стола) и при использовании уточнения по индексу иногда возникала ошибка "joint following error".
Обновлённые файлы в первом сообщении.
Re: LinuxCNC - Альтернативная кинематика.
Добавлено: 04 июн 2015, 00:12
umerov
В чем отличия?
egantry.N.joint.MM.offset float out
Смещение позиции привода относительно позиции оси
egantry.N.joint.MM.correct float in (default: 0.0)
Коррекция позиции начала привода относительно других
Re: LinuxCNC - Альтернативная кинематика.
Добавлено: 04 июн 2015, 00:32
Serg
Как минимум в направлении сигнала.

offset - это смещение реальной позиции привода относительно нулевой позиции оси. В обычном случае после хомления будет равно расстоянию, которое проехал привод до датчика HOME. В случае уточнения по индексу будет равен (или очень близко) нулю. Чисто информационный пин, вне компонента не очень-то и нужен.
correct - это величина конструктивной коррекции взаимоположения приводов. Например ставите датчики HOME на приводах портала
примерно одинаково, выполняете процедуру хомления и замеряете перпендикулярность портала относительно оси. Например портал оказывается непрепендикулярен и чтобы это исправить нужно одну его "ногу" сдвинуть скажем на 5мм. Для этого не требуется передвигать датчики HOME, а достаточно на correct соотв. привода подать значение этого смещения:
setp egantry.N.joint.MM.correct 5
теперь при хомлении оси приводы сами будут учитывать эту поправку и выравнивать портал.
Re: LinuxCNC - Альтернативная кинематика.
Добавлено: 04 июн 2015, 02:01
umerov
Почемуто какоето не соответствие
pid.y => Y1
pid.v => Y2
pid.y.error, pid.v.error Ошибка малькая, но уже на выходе
egantry.0.joint.00.ferror и
egantry.0.joint.01.ferror гдето в 10 раз больше, тоже самое и на выходе egantry.0.axis.motor-pos-fb
В чем может быть причина?
Настраивал параметры PID двигателей ориентируясь на
pid.y.error, pid.v.error
Re: LinuxCNC - Альтернативная кинематика.
Добавлено: 04 июн 2015, 02:36
Serg
pid.N.error - это ошибка после того как PID отработал цикл, а egantry.N.joint.MM.ferror это ошибка, которую ещё только предстоит скомпенсировать PID'у в очередном сервоцикле.
Или иначе:
pid.N.error - показывает насколько точно PID
выполнил задание, а egantry.N.joint.MM.ferror - насколько
надо будет передвинуть привод в следующем сервоцикле.
С одиночной осью без egantry будет тот-же самый эффект.
umerov писал(а):Настраивал параметры PID двигателей ориентируясь на pid.y.error, pid.v.error
так и надо делать.
Re: LinuxCNC - Альтернативная кинематика.
Добавлено: 04 июн 2015, 08:33
umerov
Спасибо, теперь понятно.
Re: LinuxCNC - Альтернативная кинематика.
Добавлено: 04 июн 2015, 16:01
umerov
очень странно, сейчас проверил на одиночных осях pid.error такойже как и axis.f-error.
проверил конфигурацию и с gantry.comp (более простой компонент) - там такое же не соответствие
Может подправить PID чтоб egantry.0.axis.motor-pos-fb был с минимальной ошибкой?
Re: LinuxCNC - Альтернативная кинематика.
Добавлено: 04 июн 2015, 20:03
umerov
Еще заметил - при маленькой скорости pid.y.error, pid.v.error примерно равны egantry.0.joint.00.ferror и egantry.0.joint.01.ferror, но на масимальной скорости различия существенны. (Макимальная скорость 15 м. в минуту), может компонент - не успевает обрабатывать показания энкодера?
попробывал и на стандартной кинематике gantry - там все нормально
Re: LinuxCNC - Альтернативная кинематика.
Добавлено: 04 июн 2015, 21:35
Serg
umerov писал(а):очень странно, сейчас проверил на одиночных осях pid.error такойже как и axis.f-error.
Я в том смысле, если между axis.N и pid.N воткнуть ещё какой-нибудь компонент (в обе стороны), то будет такое-же "запаздывание".
Как примерно это происходит: функции всех компонентов, поставленных в очередь обработки (командой addf) поочерёдно получают возможность выполнится (условно назовём это "квантом работы") по разу в течении каждого сервоцикла. При этом входящие данные функция получает в начале этого "кванта", а результаты выдаёт на выходные пины в конце "кванта". Теперь представим цепочку компонентов:
addf axis.N servo-thread
addf egantry.N servo-thread
addf pid.N servo-thread
при этом значение пинов pos-cmd к моменту завершения кванта для axis.N и перед началом кванта для egantry.N окажется на выходе axis.N и на входе egantry.N - т.е. никакой задержки не будет. Тоже самое произодёт и для egantry.N -> pid.N. А вот значение пинов pos-fb должно будет продвигаться в обратном порядке (как-бы против течение) - значение feedback энкодера одновременно подаётся на и на pid.N.feedback и на egantry.N.joint.MM.pos-fb, после кванта работы для egantry.N соотв. значение появляется на выходе egantry.N.axis.motor-pos-fb, но засада в том, что в данном сервоцикле функция axis.N уже отработала и свежее значение pos-fb она увидит только в следующем сервоцикле.
"Париться" по этому поводу не стоит, на точность это никак не влияет (при правильной очереди на "кванты") - управляющее задание доходит до PID и отрабатывается им без задержек, задерживается сигнал, который нужен только для расчёта f-error.
umerov писал(а):Еще заметил - при маленькой скорости pid.y.error, pid.v.error примерно равны egantry.0.joint.00.ferror и egantry.0.joint.01.ferror, но на масимальной скорости различия существенны.
Всё правильно, разница равна изменению положению оси за сервоцикл.
Re: LinuxCNC - Альтернативная кинематика.
Добавлено: 05 июн 2015, 08:14
umerov
теперь все прояснилось.
вот еще тема описывает этот процесс
http://www.cnc-club.ru/forum/viewtopic. ... iew=unread
И еще один вопрос - если установить частоту servo-thread вместо 1 мс. => в 0.1 мс. если в этом смысл, сомжет ли пид двигателей отрабатывать траекторию точнее?