LinuxCNC - Альтернативная кинематика.

Обсуждение установки, настройки и использования LinuxCNC. Вопросы по Gкоду.
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5181
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

LinuxCNC - Альтернативная кинематика.

Сообщение Serg »

Эта тема предлагается для обсуждения моих решений некоторых вопросов кинематики в LinuxCNC и других, связанных с ними.

На сегодня стоит задача получить рабочее решение для вот этого монстрика: Многосевой станок лазерной резки листа и профиля #1 - нужно управлять количеством моторов (joints), которое пока не под силу штатным средствам LinuxCNC. Ну и скорее всего и для других проектов, которым окажутся тесными возможности штатной кинематики LinuxCNC.

Если появятся желающие присоединиться к работам по этой тематике, то добро пожаловать в тему.
Оставляю за собой узурпаторское право "отселять" обсуждения, выходящие за рамки этой темы. :tongue:

ВНИМАНИЕ!
Все опубликованные ниже разработки предлагаются "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
Устанавливается командой

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

sudo halcompile --install egantry.c
Совместим с 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.
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
Аватара пользователя
vovafed
Мастер
Сообщения: 1822
Зарегистрирован: 08 фев 2013, 16:19
Репутация: 325
Настоящее имя: Владимир
Откуда: башкортостан
Контактная информация:

Re: LinuxCNC - Альтернативная кинематика.

Сообщение vovafed »

поставил 3 версию ошибка не изменилась :oops: чтото я пропускаю
он у меня работал только не хомился
наковырял на следующий день ошибка вылезла :(

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

q@q:~$ sudo halcompile --install egantry.c
[sudo] password for q: 
make KBUILD_EXTRA_SYMBOLS=/usr/realtime-3.4-9-rtai-686-pae/modules/linuxcnc/Module.symvers -C /usr/src/linux-headers-3.4-9-rtai-686-pae SUBDIRS=`pwd` CC=gcc V=0 modules
make[1]: Entering directory `/usr/src/linux-headers-3.4-9-rtai-686-pae'
  CC [M]  /tmp/tmpqqrGuz/egantry.o
  Building modules, stage 2.
  MODPOST 1 modules
  CC      /tmp/tmpqqrGuz/egantry.mod.o
  LD [M]  /tmp/tmpqqrGuz/egantry.ko
make[1]: Leaving directory `/usr/src/linux-headers-3.4-9-rtai-686-pae'
cp egantry.ko /usr/realtime-3.4-9-rtai-686-pae/modules/linuxcnc/
q@q:~$ halcmd show pin egantry.0
Component Pins:
Owner   Type  Dir         Value  Name
    13  float IN          1e+20  egantry.0.align-acc
    13  float IN           0.01  egantry.0.align-hyst
    13  float IN          1e+20  egantry.0.align-vel
    13  bit   IN          FALSE  egantry.0.axis.amp-enable
    13  bit   OUT         FALSE  egantry.0.axis.amp-fault-out
    13  s32   OUT             0  egantry.0.axis.fb-joint
    13  s32   IN              0  egantry.0.axis.home-state
    13  bit   OUT         FALSE  egantry.0.axis.home-sw
    13  bit   IN          FALSE  egantry.0.axis.homed
    13  bit   I/O         FALSE  egantry.0.axis.index-enable
    13  float IN              0  egantry.0.axis.motor-pos-cmd
    13  float OUT             0  egantry.0.axis.motor-pos-fb
    13  bit   OUT         FALSE  egantry.0.axis.neg-lim-sw
    13  bit   OUT         FALSE  egantry.0.axis.pos-lim-sw
    13  bit   IN          FALSE  egantry.0.joint.00.amp-fault-in
    13  float IN              0  egantry.0.joint.00.correct
    13  bit   OUT         FALSE  egantry.0.joint.00.enable
    13  float OUT             0  egantry.0.joint.00.f-error
    13  bit   IN          FALSE  egantry.0.joint.00.home-sw
    13  bit   I/O         FALSE  egantry.0.joint.00.index-enable
    13  float IN          1e+20  egantry.0.joint.00.max_acceleration
    13  float IN          1e+20  egantry.0.joint.00.max_velocity
    13  bit   IN          FALSE  egantry.0.joint.00.neg-lim-sw
    13  float OUT             0  egantry.0.joint.00.offset
    13  float OUT             0  egantry.0.joint.00.pos-cmd
    13  float IN              0  egantry.0.joint.00.pos-fb
    13  bit   IN          FALSE  egantry.0.joint.00.pos-lim-sw
    13  bit   IN          FALSE  egantry.0.joint.01.amp-fault-in
    13  float IN              0  egantry.0.joint.01.correct
    13  bit   OUT         FALSE  egantry.0.joint.01.enable
    13  float OUT             0  egantry.0.joint.01.f-error
    13  bit   IN          FALSE  egantry.0.joint.01.home-sw
    13  bit   I/O         FALSE  egantry.0.joint.01.index-enable
    13  float IN          1e+20  egantry.0.joint.01.max_acceleration
    13  float IN          1e+20  egantry.0.joint.01.max_velocity
    13  bit   IN          FALSE  egantry.0.joint.01.neg-lim-sw
    13  float OUT             0  egantry.0.joint.01.offset
    13  float OUT             0  egantry.0.joint.01.pos-cmd
    13  float IN              0  egantry.0.joint.01.pos-fb
    13  bit   IN          FALSE  egantry.0.joint.01.pos-lim-sw
    13  s32   OUT          5196  egantry.0.time
./ima.hal:1: Warning: File contains DOS-style line endings.
есть подозрение что затащил из блокнота винды какуюнибуть фиговину в другой кодировке которая мешает работе egantry
первая версия хал на работе осталась в понедельник с ней попробую :thinking:
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5181
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: LinuxCNC - Альтернативная кинематика.

Сообщение Serg »

В файле строчки заканчиваются символами "\r\n", в юниксах принято только "\n". Можно забить.
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
Аватара пользователя
vovafed
Мастер
Сообщения: 1822
Зарегистрирован: 08 фев 2013, 16:19
Репутация: 325
Настоящее имя: Владимир
Откуда: башкортостан
Контактная информация:

Re: LinuxCNC - Альтернативная кинематика.

Сообщение vovafed »

поставил linuxcnc на другой компьютер
установил 3 версию egantry
ошибка исчезла
буду со своими конфигами пробовать
вот я тормоз :oops: проблема была вот в чем
я прописывал как

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

loadrt egantry count=1 personality=2

а подключал пины x.joint.00.max_acceleration
тоесть надо было в место икс egantry прописать
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5181
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: LinuxCNC - Альтернативная кинематика.

Сообщение Serg »

vovafed писал(а):тоесть надо было в место икс egantry прописать
Не ты первый. :)
Я вот всё думаю переписать пример чтоб было egantry.* или пусть народ узнаёт, что компоненты можно называть как им удобно... :)
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
Nikomas
Мастер
Сообщения: 721
Зарегистрирован: 07 янв 2012, 14:31
Репутация: 64
Откуда: Беларусь
Контактная информация:

Re: LinuxCNC - Альтернативная кинематика.

Сообщение Nikomas »

UAVpilot писал(а):Не ты первый.
Сергей, не понимаю почему подчиненная ось сама двигается. Решил полностью переписать кинематику и поставить 2 датчика для Home 2х сторон. Поудалял любое упоминание об оси а, и дописал строку

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

net y-output       =>     to_pci.1.PWM.dcontrol0       =>     to_pci.1.PWM.dcontrol1
Оси поехали, но при остановке что-то постоянно двигает ось Y2 то в + то в -.
123.png (7269 просмотров) <a class='original' href='./download/file.php?id=160425&sid=5595dad21664e081c4df3e0865a64e22&mode=view' target=_blank>Загрузить оригинал (81.93 КБ)</a>
Я так понимаю надо подключить PID к пинам y2-pos-cmd, y2-pos-fb. Верно?

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

# 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
net y2-pos-fb   egantry.0.joint.01.pos-fb
Вот куски кода (для просмотра содержимого нажмите на ссылку)

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

# ######################################################
# AXIS Y
# ######################################################
#   -------PID--------
setp   pid.y.Pgain     [AXIS_1]P
setp   pid.y.Igain     [AXIS_1]I
setp   pid.y.Dgain     [AXIS_1]D
setp   pid.y.bias      [AXIS_1]BIAS
setp   pid.y.FF0       [AXIS_1]FF0
setp   pid.y.FF1       [AXIS_1]FF1
setp   pid.y.FF2       [AXIS_1]FF2
setp   pid.y.deadband  [AXIS_1]DEADBAND
setp   pid.y.maxoutput [AXIS_1]MAX_OUTPUT

net y-vel-cmd       =>    pid.y.command-deriv
net y-output        =>    pid.y.output
net y-vel-fb        =>    pid.y.feedback-deriv
net y-output        =>    pid.y.output

# --------feed back--------------
setp  to_pci.1.feedback.enc_scale0 -2500
setp  to_pci.1.feedback.enc_scale1 -2500

net y-pos-fb       =>      axis.1.motor-pos-fb

# ------PWM Generator signals/setup----------------------
setp  to_pci.1.PWM.out_scale0 -1
setp  to_pci.1.PWM.out_scale1 -1

net y-enable              axis.1.amp-enable-out
net y-pos-cmd             axis.1.motor-pos-cmd
net y-enable       =>     to_pci.1.enable_drive
net y-output       =>     to_pci.1.PWM.dcontrol0 to_pci.1.PWM.dcontrol1

net y1-pos-fb         =>  to_pci.1.feedback.encoder0
net y1-index-enable       to_pci.1.feedback.index_en0
net y2-pos-fb         =>  to_pci.1.feedback.encoder1
net y2-index-enable       to_pci.1.feedback.index_en1

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

########### egantry ###########################

loadrt egantry count=1 personality=2
addf  egantry.0                         servo-thread

setp egantry.0.align-vel 80
setp egantry.0.align-acc 60
setp egantry.0.align-hyst 0.05
#setp egantry.0.joint.00.correct 3.000
#setp egantry.0.joint.01.correct 3.100
setp egantry.0.joint.00.max_acceleration  [AXIS_1]MAX_ACCELERATION
setp egantry.0.joint.00.max_velocity      [AXIS_1]MAX_VELOCITY
setp egantry.0.joint.01.max_acceleration  [AXIS_1]MAX_ACCELERATION
setp egantry.0.joint.01.max_velocity      [AXIS_1]MAX_VELOCITY


# 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
net y2-pos-fb   egantry.0.joint.01.pos-fb


# 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

# 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

# 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  <= #to_pci.1.pins.pin-06-in
#net y2-home-sw      egantry.0.joint.01.home-sw  <= #to_pci.1.pins.pin-06-in
net y-joint-home-sw  egantry.0.joint.00.home-sw egantry.0.joint.01.home-sw <= to_pci.1.pins.pin-06-in

net y-home-state     axis.1.home-state      => egantry.0.axis.home-state
net y-homed          axis.1.homed           => egantry.0.axis.homed

########## egantry ###########################
Аватара пользователя
vovafed
Мастер
Сообщения: 1822
Зарегистрирован: 08 фев 2013, 16:19
Репутация: 325
Настоящее имя: Владимир
Откуда: башкортостан
Контактная информация:

Re: LinuxCNC - Альтернативная кинематика.

Сообщение vovafed »

ко второму приводу пид регулятор не подключен
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5181
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: LinuxCNC - Альтернативная кинематика.

Сообщение Serg »

egantry получает задание от axis.N и "разделяет" его на несколько приводов, каждый из которых должен иметь свой собственный PID с полностью замкнутой петлёй ОС.
egantry.png (7210 просмотров) <a class='original' href='./download/file.php?id=160468&sid=5595dad21664e081c4df3e0865a64e22&mode=view' target=_blank>Загрузить оригинал (13.92 КБ)</a>
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
Nikomas
Мастер
Сообщения: 721
Зарегистрирован: 07 янв 2012, 14:31
Репутация: 64
Откуда: Беларусь
Контактная информация:

Re: LinuxCNC - Альтернативная кинематика.

Сообщение Nikomas »

Ну не знаю, ползут у меня оси и все тут.

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

#*******************
#  EGANTRY
#*******************
setp egantry.0.align-vel 80
setp egantry.0.align-acc 60
setp egantry.0.align-hyst 0.05
#setp egantry.0.joint.01.correct 3.100

setp egantry.0.joint.00.max_acceleration  [AXIS_1]MAX_ACCELERATION
setp egantry.0.joint.00.max_velocity      [AXIS_1]MAX_VELOCITY

setp egantry.0.joint.01.max_acceleration  [AXIS_1]MAX_ACCELERATION
setp egantry.0.joint.01.max_velocity      [AXIS_1]MAX_VELOCITY

#setp egantry.0.joint.00.f-error 50
#setp egantry.0.joint.01.f-error 50


# 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 
net y1-pos-fb   egantry.0.joint.00.pos-fb
net y2-pos-cmd  egantry.0.joint.01.pos-cmd
net y2-pos-fb   egantry.0.joint.01.pos-fb


# enables 
net y-enable   egantry.0.axis.amp-enable   <= axis.1.amp-enable-out 
net y1-enable  egantry.0.joint.00.enable
net y2-enable  egantry.0.joint.01.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
net y2-index-enable   egantry.0.joint.01.index-enable


# home switches & others
net y-home-sw        egantry.0.axis.home-sw      => axis.1.home-sw-in 
net y1-home-sw      egantry.0.joint.00.home-sw  <= to_pci.1.pins.pin-06-in
#net y2-home-sw      egantry.0.joint.01.home-sw  <= to_pci.1.pins.pin-06-in

net y-home-state     axis.1.home-state      => egantry.0.axis.home-state
net y-homed          axis.1.homed           => egantry.0.axis.homed

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

#*******************
#  AXIS Y1
#*******************
setp   pid.y1.Pgain     [AXIS_1]P
setp   pid.y1.Igain     [AXIS_1]I
setp   pid.y1.Dgain     [AXIS_1]D
setp   pid.y1.bias      [AXIS_1]BIAS
setp   pid.y1.FF0       [AXIS_1]FF0
setp   pid.y1.FF1       [AXIS_1]FF1
setp   pid.y1.FF2       [AXIS_1]FF2
setp   pid.y1.deadband  [AXIS_1]DEADBAND
setp   pid.y1.maxoutput [AXIS_1]MAX_OUTPUT

net y1-index-enable  <=>	pid.y1.index-enable
net y1-enable         =>	pid.y1.enable
net y1-output         =>	pid.y1.output
net y1-pos-cmd        =>	pid.y1.command
net y1-vel-fb         =>	pid.y1.feedback-deriv
net y1-pos-fb         =>	pid.y1.feedback

net y1-pos-cmd        <=	egantry.0.joint.00.pos-cmd
net y1-enable         <=	egantry.0.joint.00.enable

net y1-pos-fb         =>	egantry.0.joint.00.pos-fb
net y1-index-enable   =>	egantry.0.joint.00.index-enable

#net y1-neg-limit     =>	egantry.0.joint.00.neg-lim-sw
#net y-pos-limit      =>	egantry.0.joint.00.pos-lim-sw

net y1-pos-fb         =>	to_pci.1.feedback.encoder0
net y1-index-enable			to_pci.1.feedback.index_en0

net y1-output         =>	to_pci.1.PWM.dcontrol0

setp  to_pci.1.PWM.out_scale0 -1

setp  to_pci.1.feedback.enc_scale0 -2500

net y-pos-fb       =>      axis.1.motor-pos-fb

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

#*******************
#  AXIS Y2
#*******************
setp   pid.y2.Pgain     [AXIS_1]P
setp   pid.y2.Igain     [AXIS_1]I
setp   pid.y2.Dgain     [AXIS_1]D
setp   pid.y2.bias      [AXIS_1]BIAS
setp   pid.y2.FF0       [AXIS_1]FF0
setp   pid.y2.FF1       [AXIS_1]FF1
setp   pid.y2.FF2       [AXIS_1]FF2
setp   pid.y2.deadband  [AXIS_1]DEADBAND
setp   pid.y2.maxoutput [AXIS_1]MAX_OUTPUT

net y2-index-enable  <=>	pid.y2.index-enable
net y2-enable         =>	pid.y2.enable
net y2-output         =>	pid.y2.output
net y2-pos-cmd        =>	pid.y2.command
net y2-vel-fb         =>	pid.y2.feedback-deriv
net y2-pos-fb         =>	pid.y2.feedback

net y2-pos-cmd        <=	egantry.0.joint.01.pos-cmd
net y2-enable         <=	egantry.0.joint.01.enable

net y2-pos-fb         =>	egantry.0.joint.01.pos-fb
net y2-index-enable   =>	egantry.0.joint.01.index-enable

net y2-neg-limit      =>	egantry.0.joint.01.neg-lim-sw	egantry.0.joint.01.home-sw
net y-pos-limit       =>	egantry.0.joint.01.pos-lim-sw

net y2-pos-fb         =>	to_pci.1.feedback.encoder1
net y2-index-enable			to_pci.1.feedback.index_en1

net y2-output       =>     to_pci.1.PWM.dcontrol1

#net y-vel-cmd       =>		pid.y.command-deriv
#net y-output        =>		pid.y.output
#net y-vel-fb        =>		pid.y.feedback-deriv
#net y-output        =>		pid.y.output
#net y-pos-fb        =>		axis.1.motor-pos-fb
#net y-enable              axis.1.amp-enable-out
#net y-pos-cmd             axis.1.motor-pos-cmd
#net y-enable       =>     to_pci.1.enable_drive

setp  to_pci.1.PWM.out_scale1 -1

setp  to_pci.1.feedback.enc_scale1 -2500
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5181
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: LinuxCNC - Альтернативная кинематика.

Сообщение Serg »

Нигде не увидел подключения y1-enable и/или y2-enable к соотв. пинам платы - видимо потому и ползут...
Эти сигналы должны подаваться и на pid.N и на PWM и электрически на сам привод, иначе будет "ползти".
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
Nikomas
Мастер
Сообщения: 721
Зарегистрирован: 07 янв 2012, 14:31
Репутация: 64
Откуда: Беларусь
Контактная информация:

Re: LinuxCNC - Альтернативная кинематика.

Сообщение Nikomas »

UAVpilot писал(а):Эти сигналы должны подаваться и на pid.N и на PWM и электрически на сам привод, иначе будет "ползти".
Спасибо. Ось побежала. Осталось допилить второй датчик и отладить Homing.
Nikomas
Мастер
Сообщения: 721
Зарегистрирован: 07 янв 2012, 14:31
Репутация: 64
Откуда: Беларусь
Контактная информация:

Re: LinuxCNC - Альтернативная кинематика.

Сообщение Nikomas »

Обновлю немного тему. Чтобы уйти от любых программных коректировок и поправок на позиционирование подчиненной оси установил датчик Home на подчиненную ось. Выставил датчиками параллельность сторон оси до 0,1.
DSC09896.JPG (7088 просмотров) <a class='original' href='./download/file.php?id=161135&sid=5595dad21664e081c4df3e0865a64e22&mode=view' target=_blank>Загрузить оригинал (459.18 КБ)</a>
Полностью переписал hal и ini файлы. Убрал любое упоминание о оси А. Теперь заработал Home All Axes (Ctrl+Home). Уже отлично, не зря все это. Но толчки подчиненной оси остались, и если раньше грешил на egantry.1.joint.01.correct, то теперь все указывает на to_pci (у владельцев Mesa ведь все нормально):
http://www.youtube.com/watch?v=HS4Rmxq3yyA
http://www.youtube.com/watch?v=XDRn9ZzZWaU
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5181
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: LinuxCNC - Альтернативная кинематика.

Сообщение Serg »

Nikomas писал(а):то теперь все указывает на to_pci (у владельцев Mesa ведь все нормально):
Если я правильно понял видео, то с этой проблемой разбирались в теме MGG. Для to_pci вроде всё ещё нет корректного решения, только грязный хак. И в теме по to_pci вроде тоже помнится об этой проблеме "пару слов" говорил.

P.S. Попробуй на всякий случай предыдущую версию egantry - 1.0pre2...
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
sergey_s
Опытный
Сообщения: 157
Зарегистрирован: 06 янв 2016, 00:31
Репутация: 6
Настоящее имя: Сергей
Контактная информация:

Re: LinuxCNC - Альтернативная кинематика.

Сообщение sergey_s »

Здравствуйте. Я тоже пробую настроить два двигателя на одной оси с контроллером to_pci и egantry. У меня одинаковые серводвигатели с одинаковыми и одинаково настроенными серводрайверами, вращаются с разной скоростью. В HAL Configuration разные значения задающего напряжения (аналоговое управление), разница более 2-х раз. При этом показания энкодеров можно считать одинаковыми. Непонятно, ошибка в показаниях энкодера или задающем напряжении?
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5181
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: LinuxCNC - Альтернативная кинематика.

Сообщение Serg »

Сначала надо настроить приводы (joint), чтобы работали одинаково.
покажите свои .ini и .hal
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
sergey_s
Опытный
Сообщения: 157
Зарегистрирован: 06 янв 2016, 00:31
Репутация: 6
Настоящее имя: Сергей
Контактная информация:

Re: LinuxCNC - Альтернативная кинематика.

Сообщение sergey_s »

Вот мои файлы. Не понятно, почему одинаковые привода работают настолько по-разному. Ну спорить не буду, Вы специалист.
Вложения
мой-станок.hal
(8.49 КБ) 329 скачиваний
мой-станок.ini
(3.55 КБ) 346 скачиваний
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5181
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: LinuxCNC - Альтернативная кинематика.

Сообщение Serg »

to_pci не знаю, но смущают значения OUTPUT_SCALE...

Надо бы проверить где возникает разница.
Отсоедините валы моторов от прочей механики, чтоб куда-нибудь всё не уехало.
В .hal отключите от все сигналы от:
to_pci.1.enable_drive
to_pci.1.PWM.dcontrol0
to_pci.1.PWM.dcontrol1

далее сделайте так:
setp 5 to_pci.1.PWM.dcontrol0 to_pci.1.PWM.dcontrol1
setp 1 to_pci.1.enable_drive

Померьте напряжение на аналоговых выходах to_pci для этих приводов - должно быть одинаковым. При этом моторы должны вращаться с одинаковой скроростью. Если это не так. то проверять настройки приводов.
Если напряжение на аналоговых выходах to_pci не одинаковое, то нужно отключить от них провода, идущие к приводам и замерить напряжение снова. Если напряжение стало одинаковым, то искать ошибки в эл.монтаже.
Если осталось неодинаковым, то искать в самой to_pci.


Для начала отключите упр. входы приводов от to_pci и подайте на эти входы какое-нибудь напряжение в пределах -10В..+10В, одновременно на оба привода и оцените скорость вращения моторов - должно быть одинаково.
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
sergey_s
Опытный
Сообщения: 157
Зарегистрирован: 06 янв 2016, 00:31
Репутация: 6
Настоящее имя: Сергей
Контактная информация:

Re: LinuxCNC - Альтернативная кинематика.

Сообщение sergey_s »

При подаче одного напряжения от независимого источника на оба привода они вращаются примерно одинаково. При установке
setp to_pci.1.PWM.dcontrol0 2
setp to_pci.1.PWM.dcontrol1 2
двигатели вращаются примерно одинаково (примерно, потому-что дрейф при включении без напряжения не устранял), но Растет разница между показаниями энкодеров и выскакивает ошибка позиционирования. Разница в показаниях энкодеров такая-же как и в скорости вращения когда to_pci.1.PWM.dcontrol0(1) были подключены к х1(х2)-output. Т.е. или один двигатель вращается в 2 раза быстрей другого при одинаковых показаниях энкодера или двигатели вращаются одинаково, а один энкодер показывает в 2 раза больше другого.
Менял местами подключение приводов к платам to_pci, начинал быстрей вращаться другой двигатель. Как будто в одном из проводов между сервоприводом и to_pci теряются сигналы энкодера. Или где-то в другом месте, может в to_pci, может в hal.
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5181
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: LinuxCNC - Альтернативная кинематика.

Сообщение Serg »

sergey_s писал(а):Растет разница между показаниями энкодеров и выскакивает ошибка позиционирования.
В .hal отключите пока to_pci.1.feedback.encoder0 и to_pci.1.feedback.encoder1 от всего остального, чтобы ошибка не выскакивала.
Если в to_pci есть пин, аналогичный encoder.N.velocity, то на нём можно смотреть реальную скорость мотора.
sergey_s писал(а):Менял местами подключение приводов к платам to_pci, начинал быстрей вращаться другой двигатель.
Это при
setp to_pci.1.PWM.dcontrol0 2
setp to_pci.1.PWM.dcontrol1 2
?
Какие при этом напряжения на обоих выходах платы?
sergey_s писал(а):Как будто в одном из проводов между сервоприводом и to_pci теряются сигналы энкодера.
Энкодеры тут не при чём.
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
sergey_s
Опытный
Сообщения: 157
Зарегистрирован: 06 янв 2016, 00:31
Репутация: 6
Настоящее имя: Сергей
Контактная информация:

Re: LinuxCNC - Альтернативная кинематика.

Сообщение sergey_s »

UAVpilot писал(а):Это при
setp to_pci.1.PWM.dcontrol0 2
setp to_pci.1.PWM.dcontrol1 2
?
Какие при этом напряжения на обоих выходах платы?
Нет, это при подключении к х1(х2)-output.
Когда
setp to_pci.1.PWM.dcontrol0 2
setp to_pci.1.PWM.dcontrol1 2
то двигатели вращаются одинаково, напряжение на to_pci 2В
sergey_s
Опытный
Сообщения: 157
Зарегистрирован: 06 янв 2016, 00:31
Репутация: 6
Настоящее имя: Сергей
Контактная информация:

Re: LinuxCNC - Альтернативная кинематика.

Сообщение sergey_s »

При подключении to_pci.1.PWM.dcontrol0(1) к х1(х2)-output значения encoder.0(1).velocity и to_pci.1.feedback.encoder0(1) одинаковые. А значения to_pci.1.PWM.dcontrol0(1) разные.
Ответить

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