Страница 9 из 12
Re: Модернизация 6720вф2
Добавлено: 20 апр 2012, 11:04
Nick
Ну тогда просто заведи на тормоз не только halui.spindle.brake-is-on но и еще и halui.machine.is-on, при этом соедини их через AND или OR (или последовательно или параллельно в ладдере)
Re: Модернизация 6720вф2
Добавлено: 20 апр 2012, 16:11
Milk
Ну в общем, последолгих мучений получилось вот так

(для просмотра содержимого нажмите на ссылку)# Generated by PNCconf at Wed Apr 18 18:49:28 2012
# Все изменения в этом файле будут перезаписаны
# overwritten when you run PNCconf again
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/5i20/SVST8_4.BIT num_encoders=3 num_pwmgens=3 num_stepgens=0"
setp hm2_5i20.0.pwmgen.pwm_frequency 100000
setp hm2_5i20.0.pwmgen.pdm_frequency 100000
setp hm2_5i20.0.watchdog.timeout_ns 10000000
loadrt near
loadrt classicladder_rt numPhysInputs=15 numPhysOutputs=15 numS32in=10 numS32out=10 numFloatIn=10 numFloatOut=10
addf hm2_5i20.0.read servo-thread
addf motion-command-handler servo-thread
addf motion-controller servo-thread
loadrt pid num_chan=3
addf pid.0.do-pid-calcs servo-thread
addf pid.1.do-pid-calcs servo-thread
addf pid.2.do-pid-calcs servo-thread
alias pin pid.0.Pgain pid.x.Pgain
alias pin pid.0.Igain pid.x.Igain
alias pin pid.0.Dgain pid.x.Dgain
alias pin pid.0.bias pid.x.bias
alias pin pid.0.FF0 pid.x.FF0
alias pin pid.0.FF1 pid.x.FF1
alias pin pid.0.FF2 pid.x.FF2
alias pin pid.0.deadband pid.x.deadband
alias pin pid.0.maxoutput pid.x.maxoutput
alias pin pid.0.enable pid.x.enable
alias pin pid.0.command pid.x.command
alias pin pid.0.feedback pid.x.feedback
alias pin pid.0.output pid.x.output
alias pin pid.0.index-enable pid.x.index-enable
alias pin pid.1.Pgain pid.y.Pgain
alias pin pid.1.Igain pid.y.Igain
alias pin pid.1.Dgain pid.y.Dgain
alias pin pid.1.bias pid.y.bias
alias pin pid.1.FF0 pid.y.FF0
alias pin pid.1.FF1 pid.y.FF1
alias pin pid.1.FF2 pid.y.FF2
alias pin pid.1.deadband pid.y.deadband
alias pin pid.1.maxoutput pid.y.maxoutput
alias pin pid.1.enable pid.y.enable
alias pin pid.1.command pid.y.command
alias pin pid.1.feedback pid.y.feedback
alias pin pid.1.output pid.y.output
alias pin pid.1.index-enable pid.y.index-enable
alias pin pid.2.Pgain pid.z.Pgain
alias pin pid.2.Igain pid.z.Igain
alias pin pid.2.Dgain pid.z.Dgain
alias pin pid.2.bias pid.z.bias
alias pin pid.2.FF0 pid.z.FF0
alias pin pid.2.FF1 pid.z.FF1
alias pin pid.2.FF2 pid.z.FF2
alias pin pid.2.deadband pid.z.deadband
alias pin pid.2.maxoutput pid.z.maxoutput
alias pin pid.2.enable pid.z.enable
alias pin pid.2.command pid.z.command
alias pin pid.2.feedback pid.z.feedback
alias pin pid.2.output pid.z.output
alias pin pid.2.index-enable pid.z.index-enable
addf classicladder.0.refresh servo-thread
addf near.0 servo-thread
addf hm2_5i20.0.write servo-thread
addf hm2_5i20.0.pet_watchdog servo-thread
# external output signals
# --- ENABLE ---
setp hm2_5i20.0.gpio.049.is_output true
setp hm2_5i20.0.gpio.049.invert_output true
net enable => hm2_5i20.0.gpio.049.out
# --- SPINDLE-CCW ---
setp hm2_5i20.0.gpio.051.is_output true
setp hm2_5i20.0.gpio.051.invert_output true
net spindle-ccw => hm2_5i20.0.gpio.051.out
# --- SPINDLE-BRAKE ---
setp hm2_5i20.0.gpio.053.is_output true
setp hm2_5i20.0.gpio.053.invert_output true
#net spindle-brake => hm2_5i20.0.gpio.053.out >ladder
# --- SPINDLE-CW ---
setp hm2_5i20.0.gpio.055.is_output true
setp hm2_5i20.0.gpio.055.invert_output true
net spindle-cw => hm2_5i20.0.gpio.055.out
# --- COOLANT-FLOOD ---
setp hm2_5i20.0.gpio.057.is_output true
setp hm2_5i20.0.gpio.057.invert_output true
net coolant-flood => hm2_5i20.0.gpio.057.out
# external input signals
# --- SPINDLE-MANUAL-CW ---
#net spindle-manual-cw <= hm2_5i20.0.gpio.029.in_not
# --- ESTOP-EXT ---
net estop-ext <= hm2_5i20.0.gpio.031.in_not
# --- SPINDLE-MANUAL-CCW ---
#net spindle-manual-ccw <= hm2_5i20.0.gpio.033.in_not
# --- SPINDLE-MANUAL-STOP ---
#net spindle-manual-stop <= hm2_5i20.0.gpio.035.in_not
# --- DIN-00 ---
#net din-00 <= hm2_5i20.0.gpio.036.in_not
#*******************
# 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
# ---PWM Generator signals/setup---
setp hm2_5i20.0.pwmgen.01.output-type 1
setp hm2_5i20.0.pwmgen.01.scale [AXIS_0]OUTPUT_SCALE
net xenable => pid.x.enable
net xoutput pid.x.output => hm2_5i20.0.pwmgen.01.value
net xpos-cmd axis.0.motor-pos-cmd => pid.x.command
net xenable axis.0.amp-enable-out => hm2_5i20.0.pwmgen.01.enable
# ---Encoder feedback signals/setup---
setp hm2_5i20.0.encoder.01.counter-mode 0
setp hm2_5i20.0.encoder.01.filter 1
setp hm2_5i20.0.encoder.01.index-invert 0
setp hm2_5i20.0.encoder.01.index-mask 0
setp hm2_5i20.0.encoder.01.index-mask-invert 0
setp hm2_5i20.0.encoder.01.scale [AXIS_0]INPUT_SCALE
net xpos-fb <= hm2_5i20.0.encoder.01.position
net xpos-fb => pid.x.feedback
net xpos-fb => axis.0.motor-pos-fb
net x-index-enable axis.0.index-enable <=> hm2_5i20.0.encoder.01.index-enable
# ---setup home / limit switch signals---
net x-home-sw => 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
#*******************
# AXIS Y
#*******************
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-index-enable <=> pid.y.index-enable
# ---PWM Generator signals/setup---
setp hm2_5i20.0.pwmgen.00.output-type 1
setp hm2_5i20.0.pwmgen.00.scale [AXIS_1]OUTPUT_SCALE
net yenable => pid.y.enable
net youtput pid.y.output => hm2_5i20.0.pwmgen.00.value
net ypos-cmd axis.1.motor-pos-cmd => pid.y.command
net yenable axis.1.amp-enable-out => hm2_5i20.0.pwmgen.00.enable
# ---Encoder feedback signals/setup---
setp hm2_5i20.0.encoder.00.counter-mode 0
setp hm2_5i20.0.encoder.00.filter 1
setp hm2_5i20.0.encoder.00.index-invert 0
setp hm2_5i20.0.encoder.00.index-mask 0
setp hm2_5i20.0.encoder.00.index-mask-invert 0
setp hm2_5i20.0.encoder.00.scale [AXIS_1]INPUT_SCALE
net ypos-fb <= hm2_5i20.0.encoder.00.position
net ypos-fb => pid.y.feedback
net ypos-fb => axis.1.motor-pos-fb
net y-index-enable axis.1.index-enable <=> hm2_5i20.0.encoder.00.index-enable
# ---setup home / limit switch signals---
net y-home-sw => axis.1.home-sw-in
net y-neg-limit => axis.1.neg-lim-sw-in
net y-pos-limit => axis.1.pos-lim-sw-in
#*******************
# AXIS Z
#*******************
setp pid.z.Pgain [AXIS_2]P
setp pid.z.Igain [AXIS_2]I
setp pid.z.Dgain [AXIS_2]D
setp pid.z.bias [AXIS_2]BIAS
setp pid.z.FF0 [AXIS_2]FF0
setp pid.z.FF1 [AXIS_2]FF1
setp pid.z.FF2 [AXIS_2]FF2
setp pid.z.deadband [AXIS_2]DEADBAND
setp pid.z.maxoutput [AXIS_2]MAX_OUTPUT
net z-index-enable <=> pid.z.index-enable
# ---PWM Generator signals/setup---
setp hm2_5i20.0.pwmgen.02.output-type 1
setp hm2_5i20.0.pwmgen.02.scale [AXIS_2]OUTPUT_SCALE
net zenable => pid.z.enable
net zoutput pid.z.output => hm2_5i20.0.pwmgen.02.value
net zpos-cmd axis.2.motor-pos-cmd => pid.z.command
net zenable axis.2.amp-enable-out => hm2_5i20.0.pwmgen.02.enable
# ---Encoder feedback signals/setup---
setp hm2_5i20.0.encoder.02.counter-mode 0
setp hm2_5i20.0.encoder.02.filter 1
setp hm2_5i20.0.encoder.02.index-invert 0
setp hm2_5i20.0.encoder.02.index-mask 0
setp hm2_5i20.0.encoder.02.index-mask-invert 0
setp hm2_5i20.0.encoder.02.scale [AXIS_2]INPUT_SCALE
net zpos-fb <= hm2_5i20.0.encoder.02.position
net zpos-fb => pid.z.feedback
net zpos-fb => axis.2.motor-pos-fb
net z-index-enable axis.2.index-enable <=> hm2_5i20.0.encoder.02.index-enable
# ---setup home / limit switch signals---
net z-home-sw => axis.2.home-sw-in
net z-neg-limit => axis.2.neg-lim-sw-in
net z-pos-limit => axis.2.pos-lim-sw-in
#*******************
# SPINDLE S
#*******************
# ---setup spindle control signals---
net spindle-vel-cmd-rps <= motion.spindle-speed-out-rps
net spindle-vel-cmd <= motion.spindle-speed-out
net spindle-enable <= motion.spindle-on
net spindle-cw <= motion.spindle-forward
net spindle-ccw <= motion.spindle-reverse
#net spindle-brake <= motion.spindle-brake > ladder
net spindle-revs => motion.spindle-revs
net spindle-at-speed => motion.spindle-at-speed
net spindle-vel-fb => motion.spindle-speed-in
net spindle-index-enable <=> motion.spindle-index-enable
# ---Setup spindle at speed signals---
sets spindle-at-speed true
#******************************
# connect miscellaneous signals
#******************************
# ---coolant signals---
net coolant-mist <= iocontrol.0.coolant-mist
net coolant-flood <= iocontrol.0.coolant-flood
# ---probe signal---
net probe-in => motion.probe-input
# ---digital in / out signals---
net din-00 => motion.digital-in-00
# ---estop signals---
net estop-out <= iocontrol.0.user-enable-out
net estop-ext => iocontrol.0.emc-enable-in
net enable => motion.motion-enabled
# ---manual tool change signals---
loadusr -W hal_manualtoolchange
net tool-change-request iocontrol.0.tool-change => hal_manualtoolchange.change
net tool-change-confirmed iocontrol.0.tool-changed <= hal_manualtoolchange.changed
net tool-number iocontrol.0.tool-prep-number => hal_manualtoolchange.number
net tool-prepare-loopback iocontrol.0.tool-prepare => iocontrol.0.tool-prepared
#---HALUI SIGNALS---
#net spindle-manual-cw halui.spindle.forward
#net spindle-manual-ccw halui.spindle.reverse
net spindle-manual-stop halui.spindle.stop
net machine-is-on halui.machine.is-on
#net spindle-brake halui.spindle.brake-is-on
# Load Classicladder without GUI (can reload LADDER GUI in AXIS GUI
#loadusr classicladder --nogui custom.clp
loadusr classicladder custom.clp
net machine-on-off-ladder-in hm2_5i20.0.gpio.037.in_not => classicladder.0.in-14
net machine-on-ladder-out halui.machine.on => classicladder.0.out-05
net machine-off-ladder-out halui.machine.off => classicladder.0.out-06
net spindle-brake-on-off-ladder-in hm2_5i20.0.gpio.035.in_not => classicladder.0.in-02
net spindle-brake-on-ladder-out halui.spindle.brake-on classicladder.0.out-02
net spindle-brake-off-ladder-out halui.spindle.brake-off classicladder.0.out-07
net spindle-manual-cw-ladder-in hm2_5i20.0.gpio.033.in_not => classicladder.0.in-01
net spindle-cw-ladder-out halui.spindle.forward => classicladder.0.out-01
net spindle-manual-ccw-ladder-in hm2_5i20.0.gpio.029.in_not => classicladder.0.in-03
net spindle-ccw-ladder-out halui.spindle.reverse => classicladder.0.out-03
net coolant-flood-on-ladder-out halui.flood.on => classicladder.0.out-04
net coolant-flood-off-ladder-out halui.flood.off => classicladder.0.out-08
net coolant-flood-ladder-on-off hm2_5i20.0.gpio.036.in_not => classicladder.0.in-13
net brake-in motion.spindle-brake classicladder.0.in-10
net brake-out hm2_5i20.0.gpio.053.out classicladder.0.out-10
Наверное обходными путями, но работает, зараза...
Единственное не знаю как сделать, чтобы тормоз не включался если шпиндель не включен, наверное уже "глаз замылился"
Re: Модернизация 6720вф2
Добавлено: 20 апр 2012, 16:51
Nick
Ну добавь просто еще 1 такой ---| |---- элемент с пином halui.spindle.is-on перед выходом на тормоз и все.
Re: Модернизация 6720вф2
Добавлено: 21 апр 2012, 06:42
Milk
Но тогда как только шпиндель выключится тормоз тоже перестанет работать...В том-то и дело.
Re: Модернизация 6720вф2
Добавлено: 23 апр 2012, 15:41
Nick
Тогда не понимаю чего ты хочешь...
хотя... попробуй сделать так, вместо выхода ----( )-- сделать выход ----(S)--, тогда пин будет устанавливаться в 1 до его сброса выходом ----(R)--.
Но возможно, что придется пересмотреть процедуру снятия с тормоза.
Напиши "таблицу истинности" для пина тормоза шпинделя в зависимости от состояния других пинов, т.е. при таких-то условиях включаем, при таких-то выключаем ...
Re: Модернизация 6720вф2
Добавлено: 28 апр 2012, 18:21
Milk
Сделал вроде. Пришлось "разнести" выключение и торможение на секунду, а то пару кз выхватил...
Подключил все три сервопривода через фильтры и пускатель. Моторы покаа лежат на столе станка. Интересно, настройки пид на все сервыы прописал одни и два мотора (на У и на Z) работают нормально, а мотор на X не хочет, пишет ошибку. Поразбираюсь ещё...
Вопрос тако сейчас - как сделать включение и enable?
Пока прицепил пускатель серв на machine is on, но куда при этом повесить три сигнала Servo on (SON) с серв?
Физически повесил их на выходы 7i37, а вот к чему привязать эти пины не знаю.
SON должен включаться после включения питания, а выключаться перед выключением. Во время работы должны бть включен даже при простое оси для удержания положения.
Кстати, на 7i33 есть пины enable. Как они работают? Когда включаются?
P.S. Блин, печатать на домашнем компе становится всё сложнее... Мелкий мой (9,5 мес) его осваивает активно, половина кнопок глючит уже.
Re: Модернизация 6720вф2
Добавлено: 28 апр 2012, 18:36
Nick
На управление сервоусилителями есть такие пины
axis.N.amp-enable-out OUT BIT
TRUE if the amplifier for this joint should be enabled
axis.N.amp-fault-in IN BIT
Should be driven TRUE if an external fault is detected with the amplifier for this joint
Milk писал(а):Кстати, на 7i33 есть пины enable. Как они работают? Когда включаются?
ENABLE INPUT
Each 7I33 channel has an active low TTL level enable input. When this input is high,
the corresponding AOUT is forced to 0V regardless of the state of the PWM and direction
inputs. A pullup resistor keeps the enable input high if the controller connection is lost.
ENABLE OUTPUT
Each 7I33 channel has an 5V CMOS active high enable output available on the
SERVO AMP / ENCODER connector. These signals are the logical inversion of the Enable
inputs.
Эти?
что-то никак перевести не получается башка не варит...
Re: Модернизация 6720вф2
Добавлено: 02 май 2012, 06:01
Milk
В общем подключил сервы, моторы прикрутил к станку. Enable привязал к выходам 7i37, а включение питания серв пока никуда не привязал - вручную врубаю. Потом думаю привязать к estop, снял с аварийки - подал питание на сервы. С настройками пока не ахти - до 400 мм/мин нормально, больше - ошибка... Пытаю ПИД.
Re: Модернизация 6720вф2
Добавлено: 02 май 2012, 16:36
Milk
Ну блин фокус так фокус!!!
Долбаюсь с ПИД. Прочитал статейку
http://roboforum.ru/wiki/%D0%9F%D0%B5%D ... 1.80.D0.B0 но, честно говоря, не очень она помогла в настройке. В понимании разве что чуть-чуть. В общем гонял ось У по синусоиде всяко разно безобразно, с разными настройками, исходя из того, что Р - побольше (до резонанса) I - малая величина 0,01-1, а D вообще 0,001-0,005. Почему-то ось поехала более менее (pid-error при скорости около 25 об/сек на синусоиде 4,5*20 около 0,001-0,002) при P=20, I=405, D=0.015 при deadband = 0. Поднимаем deadband и pid-error около 0,005-0,007. В общем в pid tuning все красиво. В EMC похуже. Иногда вышибает ось по following error.
Re: Модернизация 6720вф2
Добавлено: 02 май 2012, 18:00
Nick
Сделай замеры в emc2 в HAL Scope. Добавь графики скорости, ferror, текущего положения и заданного положения. И скидывай скриншот. Посмотрим, что где он вылетает за пределы...
Тюнил pid в какой-то другой программе? Двигатель уже подключен станку, или ты его в холостую гоняешь?
Re: Модернизация 6720вф2
Добавлено: 02 май 2012, 18:48
Milk
Все моторы на своих местах. Пользуюсь вот такой
http://www.linuxcnc.org/index.php/engli ... 95&limit=6 штукой.
Пробовал запустить halscope в emc, но подловить момент вылета не так-то просто...
Так вроде нормально, но нет-нет да вырубится. В разных местах, неожиданно...
А emc случаем лог ошибок не ведет? Очень полезно было бы знать конкретную причину follow error.
1500мм/мин едет, чем очень меня радует не смотря ни на что. На шаговиках 675 максимум 270 мм/мин "летал".
Re: Модернизация 6720вф2
Добавлено: 02 май 2012, 19:01
Nick
Понятно, т.е. самим LinuxCNC.
Milk писал(а):робовал запустить halscope в emc, но подловить момент вылета не так-то просто...
А там случаем нет варианта начала записи по какому-то значению? Там кстати можно писать непрерывно, и как только вылетает ошибка сразу останавливай. И можно попробовать частоту записи поменять, чтобы больше значений оставалось в буфере.
Milk писал(а):А emc случаем лог ошибок не ведет? Очень полезно было бы знать конкретную причину follow error.
Конкретной причины не будет, да и откуда она возьмется. Но можно узнать значение этого Ferror, вроде есть для этого отдельный пин, или в крайнем случае можно воспользоваться компонентом: minmax
http://www.linuxcnc.org/docview/devel/h ... max.9.html.
А какие у тебя стоят значения following error?
Re: Модернизация 6720вф2
Добавлено: 03 май 2012, 05:42
Milk
Насчет minmax можно поподробнее.
То есть заводим его в realtime и привязываем на вход ferror, а на выход что?
ferror стоит 1, min_ferror 0.02. Если я правильно понял, ошибка следования будет меняться в этом диапазоне (0,02-1) пропорционально скорости подачи (0,01-25 мм/сек)
Re: Модернизация 6720вф2
Добавлено: 03 май 2012, 08:41
Milk
Вот настраиваю ось Х.
Все вроде бы неплохо. На скорости 27-28 (фиолет) pid error (белый) в пределах 0,003-0,004.
Но EMC при этих настройках даже хомится через раз...
Мож чего не то делаю?
Re: Модернизация 6720вф2
Добавлено: 03 май 2012, 09:09
PKM
слишком много шума на пид, это значит - большая нестабильность. что-то надо менять.
PosFF надо обнулить
Р слишком большой, это может быть причиной нестабильности
и потом, синусоидальный сигнал не характерен, хоуминг происходит явно не синусоидально, отсюда ошибки следования.
лучше настраивать по ступенчатому или треугольному.
Re: Модернизация 6720вф2
Добавлено: 03 май 2012, 11:32
Nick
И какое у тебя разрешение энкодера? Может он постоянно прыгает вверх вниз? Попробуй deadband увеличить, тем более у тебя он похоже вообще = 0.0.
Re: Модернизация 6720вф2
Добавлено: 03 май 2012, 14:27
Milk
Срыв был из-за того что я выставил на серве максимально 350 об/мин на 10В и в emc выставил такую же величину в ед. станка (29,166666 мм/сек). Серва скорее всего вмешивалась и росла ошибка. Когда поменял в emc на 25 всё стало ровно (предварительно конечно пришлось запариться с PID)
Все-же интересно, я думал что значение I должно быть маленьким, а оно на два порядка больше P...
Когда настраивал I вообще брал множитель 100(!!!)
Re: Модернизация 6720вф2
Добавлено: 03 май 2012, 14:45
Nick
Покажи графики на новых значениях?
Re: Модернизация 6720вф2
Добавлено: 03 май 2012, 15:53
Milk
Вот
Не знаю на сколько они правильные, но сейчас ferror - 0.2 min_ferror - 0.02 чему я уже рад.
Z сильно трепыхается, наверное из-за редукции, там коничка стоит прямозубая. Удивило то, что ошибка симметричная получилась, хотя вверх тяжелее винт крутится.
Максимальную скорость подач планирую 1500 мм/мин. Пока мне хватит...
Re: Модернизация 6720вф2
Добавлено: 03 май 2012, 16:02
Nick
Интересно, откуда все таки берутся такие скачки? Попробуй сделать deadband еще больше, а P еще меньше. И почему у тебя D=0?
А на станке ощущаются вибрации или нет?