Страница 13 из 18

Re: 5i23+2x7i47+7i42TA

Добавлено: 01 дек 2015, 13:34
Nick
Итак:
1. Оставляем энкодер, оставляем stepgen.
2. На stepgen заводим axis.n.pos-cmd.
3. хммм... на axis.n.index-enable заводим encoder.index-enable
4. в ini home using index =1 оно и так вроде должно стоять.

Пробуем, что получится.
Скорее всего не сработает, т.к. это как мы раньше пробовали. Но надо понять, что именно не сработает и это поправим.

Re: 5i23+2x7i47+7i42TA

Добавлено: 02 дек 2015, 13:49
sysrover
Ник сделай пример на базе оси икс а то не понятно что где менять.

Вот кусок хала

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

loadrt trivkins
loadrt [EMCMOT]EMCMOT servo_period_nsec=[EMCMOT]SERVO_PERIOD num_joints=[TRAJ]AXES
loadrt probe_parport
loadrt hostmot2
loadrt hm2_pci config="firmware=hm2/5i23/SVST8_12_2X7I47.BIT num_encoders=6 num_pwmgens=0 num_3pwmgens=0 num_stepgens=8  " 
setp     hm2_5i23.0.watchdog.timeout_ns 10000000
loadrt pid names=pid.x,pid.y,pid.z,pid.a,pid.s

addf hm2_5i23.0.read servo-thread
addf motion-command-handler servo-thread
addf motion-controller servo-thread
addf pid.x.do-pid-calcs                 servo-thread
addf pid.y.do-pid-calcs                 servo-thread
addf pid.z.do-pid-calcs                 servo-thread
addf pid.a.do-pid-calcs                 servo-thread
addf pid.s.do-pid-calcs                 servo-thread
addf hm2_5i23.0.write         servo-thread
addf hm2_5i23.0.pet_watchdog  servo-thread

# external output signals
setp hm2_5i23.0.gpio.048.is_output true
setp hm2_5i23.0.gpio.050.is_output true

# external input signals

# --- HOME-X ---
net all-home      <=  hm2_5i23.0.gpio.049.in


#*******************
#  AXIS X
#*******************

setp   pid.x.Pgain     [AXIS_0]P
setp   pid.x.Igain     [AXIS_0]I
setp   pid.x.Dgain     [AXIS_0]D
setp   pid.x.bias      [AXIS_0]BIAS
setp   pid.x.FF0       [AXIS_0]FF0
setp   pid.x.FF1       [AXIS_0]FF1
setp   pid.x.FF2       [AXIS_0]FF2
setp   pid.x.deadband  [AXIS_0]DEADBAND
setp   pid.x.maxoutput [AXIS_0]MAX_OUTPUT

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

# Step Gen signals/setup

setp   hm2_5i23.0.stepgen.00.dirsetup        [AXIS_0]DIRSETUP
setp   hm2_5i23.0.stepgen.00.dirhold         [AXIS_0]DIRHOLD
setp   hm2_5i23.0.stepgen.00.steplen         [AXIS_0]STEPLEN
setp   hm2_5i23.0.stepgen.00.stepspace       [AXIS_0]STEPSPACE
setp   hm2_5i23.0.stepgen.00.position-scale  [AXIS_0]STEP_SCALE
setp   hm2_5i23.0.stepgen.00.step_type        0
setp   hm2_5i23.0.stepgen.00.control-type     1
setp   hm2_5i23.0.stepgen.00.maxaccel         [AXIS_0]STEPGEN_MAXACCEL
setp   hm2_5i23.0.stepgen.00.maxvel           [AXIS_0]STEPGEN_MAXVEL

# ---closedloop stepper signals---

net x-pos-cmd    axis.0.motor-pos-cmd
net x-output                             => hm2_5i23.0.stepgen.00.velocity-cmd
net x-enable     axis.0.amp-enable-out  => hm2_5i23.0.stepgen.00.enable

# ---Encoder feedback signals/setup---

setp    hm2_5i23.0.encoder.00.counter-mode 0
setp    hm2_5i23.0.encoder.00.filter 1
setp    hm2_5i23.0.encoder.00.index-invert 0
setp    hm2_5i23.0.encoder.00.index-mask 0
setp    hm2_5i23.0.encoder.00.index-mask-invert 0
setp    hm2_5i23.0.encoder.00.scale  [AXIS_0]ENCODER_SCALE

net x-pos-fb               <=  hm2_5i23.0.encoder.00.position
net x-vel-fb               <=  hm2_5i23.0.encoder.00.velocity
net x-pos-fb               =>  axis.0.motor-pos-fb
net x-index-enable    axis.0.index-enable  <=>  hm2_5i23.0.encoder.00.index-enable
net x-pos-rawcounts        <=  hm2_5i23.0.encoder.00.rawcounts

# ---setup home / limit switch signals---

net all-home     =>  axis.0.home-sw-in
net x-neg-limit     =>  axis.0.neg-lim-sw-in
net x-pos-limit     =>  axis.0.pos-lim-sw-in

Re: 5i23+2x7i47+7i42TA

Добавлено: 04 дек 2015, 10:22
Nick
как-то так.
убрал ПИД, поставил
setp hm2_5i23.0.stepgen.00.control-type 0
и
net x-pos-cmd => hm2_5i23.0.stepgen.00.position-cmd

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

loadrt trivkins
loadrt [EMCMOT]EMCMOT servo_period_nsec=[EMCMOT]SERVO_PERIOD num_joints=[TRAJ]AXES
loadrt probe_parport
loadrt hostmot2
loadrt hm2_pci config="firmware=hm2/5i23/SVST8_12_2X7I47.BIT num_encoders=6 num_pwmgens=0 num_3pwmgens=0 num_stepgens=8  " 
setp     hm2_5i23.0.watchdog.timeout_ns 10000000
loadrt pid names=pid.x,pid.y,pid.z,pid.a,pid.s

addf hm2_5i23.0.read servo-thread
addf motion-command-handler servo-thread
addf motion-controller servo-thread
addf pid.x.do-pid-calcs                 servo-thread
addf pid.y.do-pid-calcs                 servo-thread
addf pid.z.do-pid-calcs                 servo-thread
addf pid.a.do-pid-calcs                 servo-thread
addf pid.s.do-pid-calcs                 servo-thread
addf hm2_5i23.0.write         servo-thread
addf hm2_5i23.0.pet_watchdog  servo-thread

# external output signals
setp hm2_5i23.0.gpio.048.is_output true
setp hm2_5i23.0.gpio.050.is_output true

# external input signals

# --- HOME-X ---
net all-home      <=  hm2_5i23.0.gpio.049.in


#*******************
#  AXIS X
#*******************



# Step Gen signals/setup

setp   hm2_5i23.0.stepgen.00.dirsetup        [AXIS_0]DIRSETUP
setp   hm2_5i23.0.stepgen.00.dirhold         [AXIS_0]DIRHOLD
setp   hm2_5i23.0.stepgen.00.steplen         [AXIS_0]STEPLEN
setp   hm2_5i23.0.stepgen.00.stepspace       [AXIS_0]STEPSPACE
setp   hm2_5i23.0.stepgen.00.position-scale  [AXIS_0]STEP_SCALE
setp   hm2_5i23.0.stepgen.00.step_type        0
setp   hm2_5i23.0.stepgen.00.control-type     0
setp   hm2_5i23.0.stepgen.00.maxaccel         [AXIS_0]STEPGEN_MAXACCEL
setp   hm2_5i23.0.stepgen.00.maxvel           [AXIS_0]STEPGEN_MAXVEL

# ---closedloop stepper signals---

net x-pos-cmd    axis.0.motor-pos-cmd
net x-pos-cmd                            => hm2_5i23.0.stepgen.00.position-cmd
net x-enable     axis.0.amp-enable-out  => hm2_5i23.0.stepgen.00.enable

# ---Encoder feedback signals/setup---

setp    hm2_5i23.0.encoder.00.counter-mode 0
setp    hm2_5i23.0.encoder.00.filter 1
setp    hm2_5i23.0.encoder.00.index-invert 0
setp    hm2_5i23.0.encoder.00.index-mask 0
setp    hm2_5i23.0.encoder.00.index-mask-invert 0
setp    hm2_5i23.0.encoder.00.scale  [AXIS_0]ENCODER_SCALE

net x-pos-fb               <=  hm2_5i23.0.encoder.00.position
net x-vel-fb               <=  hm2_5i23.0.encoder.00.velocity
net x-pos-fb               =>  axis.0.motor-pos-fb
net x-index-enable    axis.0.index-enable  <=>  hm2_5i23.0.encoder.00.index-enable
net x-pos-rawcounts        <=  hm2_5i23.0.encoder.00.rawcounts

# ---setup home / limit switch signals---

net all-home     =>  axis.0.home-sw-in
net x-neg-limit     =>  axis.0.neg-lim-sw-in
net x-pos-limit     =>  axis.0.pos-lim-sw-in

Re: 5i23+2x7i47+7i42TA

Добавлено: 07 дек 2015, 19:54
sysrover
Попробовал сегодня.
Ну по концевикам пробует нормально, но когда доходит до энкодера то он начинаеть валить на немеряной скорости непонятно куда.
На оси Х он нашол но тоже с мега скоростью.
Скорее всего он проскакивает метку, но почему немеряная скорость на поиске метки ?

И еще у меня у осях стояло
setp hm2_5i23.0.stepgen.00.control-type 1
ты поставил setp hm2_5i23.0.stepgen.00.control-type 0
В чем разница ?

Re: 5i23+2x7i47+7i42TA

Добавлено: 08 дек 2015, 10:25
Nick
Надо посмотреть, что происходит на пинах
encoder.position
и stepgen.position-cmd
во время обнуления.
Можно в halscope все это снять.
Можно туда же добавить пин index-enable.

-------------

Очень похоже на то, что было раньше...

sysrover писал(а):И еще у меня у осях стояло
setp hm2_5i23.0.stepgen.00.control-type 1
ты поставил setp hm2_5i23.0.stepgen.00.control-type 0
В чем разница ?
Управление по скорости или по положению. Нам надо по положению.

Re: 5i23+2x7i47+7i42TA

Добавлено: 08 дек 2015, 10:32
Nick
Ладно, нам надо придумать хитрую логическую схему:
1. Во время хоуминга, после срабатывания концевика нужно включить index-enable у энкодера.
2. Во время уточнения нуля надо переключить вход axis.N.home-sw-in IN BIT с концевика на index-enable.

Наверное проще всего это на ladder написать...

Re: 5i23+2x7i47+7i42TA

Добавлено: 08 дек 2015, 10:58
Nick
Например, что-то в этом роде.
%Q0 - завести на axis.N.home-sw-in.

Re: 5i23+2x7i47+7i42TA

Добавлено: 08 дек 2015, 11:00
Nick
Даже так, чтобы нормально работало и при замкнутом home...

Re: 5i23+2x7i47+7i42TA

Добавлено: 08 дек 2015, 13:13
Serg
Nick писал(а):2. Во время уточнения нуля надо переключить вход axis.N.home-sw-in IN BIT с концевика на index-enable.
А что это даст?

Re: 5i23+2x7i47+7i42TA

Добавлено: 08 дек 2015, 13:23
Nick
А это даст уточнение по индексной метке с точностью до сервопериода.
Просто так индексную метку нам не поймать - можем и проскочить случайно, а encoder от hostmot2 ее поймает и сообщит нам об этом.

Re: 5i23+2x7i47+7i42TA

Добавлено: 08 дек 2015, 15:52
Serg
Переключать зачем? Почему не использовать штатный путь:
axis.0.index-enable <=> hm2_5i23.0.encoder.00.index-enable
?

Если во время поиска индекса сработает axis.N.home-sw-in, то всё остановится по ошибке.

Re: 5i23+2x7i47+7i42TA

Добавлено: 08 дек 2015, 18:25
sysrover
Держите халоскоп

Re: 5i23+2x7i47+7i42TA

Добавлено: 08 дек 2015, 19:41
Serg
sysrover писал(а):Держите халоскоп
Я уже тут несколько раз описывал почему так происходит: Получая сигнал index-enable (перепад с 1 на 0) axis.N обнуляет задание на motor-pos - привод, сгенеривший/получивший этот сигнал index-enable должен так-же обнулить motor-fb. А здесь привод тупо ломанулся со всей своей дури исполнять новое задание motor-pos=0.

Re: 5i23+2x7i47+7i42TA

Добавлено: 08 дек 2015, 21:42
Nick
Не совсем понимая, почему в стандартном крнфиге без индекса такого не происходит?
Axis.N.motor-pos-cmd без индекса в 0 не сбрасывается?

Как тогда быть с шаговиком, если хотим искать ноль по метке?

Re: 5i23+2x7i47+7i42TA

Добавлено: 09 дек 2015, 00:45
Serg
Nick писал(а):Не совсем понимая, почему в стандартном крнфиге без индекса такого не происходит?
Потому-что нет сигнала сброса. Потому-что в свою очередь в нём нет смысла.
Nick писал(а):Axis.N.motor-pos-cmd без индекса в 0 не сбрасывается?
Нет, потому-что в этом случае со стороны привода никто ничего не сбрасывает.
Nick писал(а):Как тогда быть с шаговиком, если хотим искать ноль по метке?
Если у шаговика нет энкодера, то никак.
Если энкодер есть, то путь стандартный: задание на вход PID-регулятора по положению, с выхода регулятора сигнал скорости на PWM или stepgen.

Re: 5i23+2x7i47+7i42TA

Добавлено: 09 дек 2015, 10:26
Nick
UAVpilot писал(а):Если у шаговика нет энкодера, то никак.
Вот это и хочется поменять.

Я тут задумал сделать на шаговик индексную метку, но без энкодера. Хочется, чтобы оно работало.

хммм надо глянуть в коде, где это происходит.

Re: 5i23+2x7i47+7i42TA

Добавлено: 09 дек 2015, 10:31
sysrover
Так что делаем Ник ?

Re: 5i23+2x7i47+7i42TA

Добавлено: 09 дек 2015, 10:35
Nick
Я так понимаю это где-то тут:

http://git.linuxcnc.org/gitweb?p=linuxc ... =HEAD#l679

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

 679             case HOME_SET_INDEX_POSITION:
 680                 /* This state is called when the encoder has been reset at
 681                    the index pulse position.  It sets the current joint 
 682                    position to 'home_offset', which is the location of the
 683                    index pulse in joint coordinates. */

...

 685                 joint->motor_offset = -joint->home_offset

А вот обычный вариант:

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

 587             case HOME_SET_SWITCH_POSITION:
 588                 /* This state is called when the machine has determined the
 589                    switch position as accurately as possible.  It sets the
 590                    current joint position to 'home_offset', which is the
 591                    location of the home switch in joint coordinates. */
 592                 /* set the current position to 'home_offset' */
 593                 offset = joint->home_offset - joint->pos_fb;
 594                 /* this moves the internal position but does not affect the
 595                    motor position */
 596                 joint->pos_cmd += offset;
 597                 joint->pos_fb += offset;
 598                 joint->free_pos_cmd += offset;
 599                 joint->motor_offset -= offset;
Ну да, в одном случае joint->motor_offset = -joint->home_offset
во втором joint->home_offset - joint->pos_fb;

Я так понимаю, что нет смысла перелопачивать motion?
Но можно сделать свою логику на home-switch.
Или написать свой компонент.... :roll:

Re: 5i23+2x7i47+7i42TA

Добавлено: 09 дек 2015, 10:35
Nick
sysrover писал(а):Так что делаем Ник ?
Пробуем через ladder.

Смотри схему выше.

Re: 5i23+2x7i47+7i42TA

Добавлено: 09 дек 2015, 10:37
Nick
UAVpilot писал(а):Если во время поиска индекса сработает axis.N.home-sw-in, то всё остановится по ошибке.
Ну поиска индекса у нас не будет, у нас будет просто поиск датчика.

Да, sysrover, в ini надо убрать home use index или сделать его 0 или N.