Это вроде в порядке....намбаван писал(а):FERROR = 1
MIN_FERROR = .25
Значит, нужно смотреть на обратную связь.
Т.е. смотри параметр encoder position, и смотри на сколько он соответствует реальному положению.
Это вроде в порядке....намбаван писал(а):FERROR = 1
MIN_FERROR = .25
если так сделать,то моторы не крутятся,меняется velocity на время,а координаты в нулях,не шагает.Nick писал(а):Попробуй поставить min_ferror и ferror = 100. Посмотри как двигатель крутится...
наверно правильно,расстояние показывает хорошо.Nick писал(а):Обратная связь по любому глючит. Энкодер точно правильно работает? Положение оси правильно меняется на экране?
Код: Выделить всё
# Создан stepconf в Wed Dec 11 01:41:27 2002
# Все изменения в этом файле будут перезаписаны
# при следующем запуске stepconf
loadrt trivkins
loadrt [EMCMOT]EMCMOT base_period_nsec=[EMCMOT]BASE_PERIOD servo_period_nsec=[EMCMOT]SERVO_PERIOD num_joints=[TRAJ]AXES
loadrt probe_parport
loadrt hal_parport cfg="0x378 out "
setp parport.0.reset-time 1000
loadrt stepgen step_type=0,0,0 ctrl_type=v,v,v
addf parport.0.read base-thread
addf stepgen.make-pulses base-thread
addf parport.0.write base-thread
addf parport.0.reset base-thread
# encoder
loadrt encoder num_chan=1
addf encoder.update-counters base-thread
addf encoder.capture-position servo-thread
setp encoder.0.position-scale 1333.333333
net Xpos-phase-a encoder.0.phase-A
net Xpos-phase-b encoder.0.phase-B
net Xpos-phase-a <= parport.0.pin-10-in
net Xpos-phase-b <= parport.0.pin-11-in
# encoder
# KNOPKA SBROS
net reset-encoders parport.0.pin-13-in => encoder.0.reset
# KNOPKA SBROS
#PID
loadrt at_pid num_chan=1
addf pid.0.do-pid-calcs servo-thread
net Xpos-fb <= encoder.0.position => pid.0.feedback
#PID
# çàäàåì çíà÷åíèÿ ïàðàìåòðîâ äëÿ PID
setp pid.0.Pgain 1
setp pid.0.Igain 0
setp pid.0.Dgain 0
setp pid.0.bias 0
setp pid.0.FF0 0
setp pid.0.FF1 0
setp pid.0.FF2 0
setp pid.0.deadband 0
# çàäàåì çíà÷åíèÿ ïàðàìåòðîâ äëÿ PID
# enable
net xenable axis.0.amp-enable-out => stepgen.0.enable
net xenable => pid.0.enable
# enable
# stepgen-pid
net Xvel-cmd <= pid.0.output => stepgen.0.velocity-cmd
# stepgen-pid
addf stepgen.capture-position servo-thread
addf motion-command-handler servo-thread
addf motion-controller servo-thread
addf stepgen.update-freq servo-thread
net spindle-cmd <= motion.spindle-speed-out
net din-01 => motion.digital-in-01
net din-02 => motion.digital-in-02
net xstep => parport.0.pin-01-out
setp parport.0.pin-01-out-reset 1
net xdir => parport.0.pin-02-out
net din-01 <= parport.0.pin-12-in
setp stepgen.0.position-scale [AXIS_0]SCALE
setp stepgen.0.steplen 1
setp stepgen.0.stepspace 0
setp stepgen.0.dirhold 24000
setp stepgen.0.dirsetup 223000
setp stepgen.0.maxaccel [AXIS_0]STEPGEN_MAXACCEL
#net xpos-cmd axis.0.motor-pos-cmd => stepgen.0.velocity-cmd
net xpos-fb stepgen.0.position-fb => axis.0.motor-pos-fb
net xstep <= stepgen.0.step
net xdir <= stepgen.0.dir
net xenable axis.0.amp-enable-out => stepgen.0.enable
setp stepgen.1.position-scale [AXIS_1]SCALE
setp stepgen.1.steplen 1
setp stepgen.1.stepspace 0
setp stepgen.1.dirhold 24000
setp stepgen.1.dirsetup 223000
setp stepgen.1.maxaccel [AXIS_1]STEPGEN_MAXACCEL
net ypos-cmd axis.1.motor-pos-cmd => stepgen.1.velocity-cmd
net ypos-fb stepgen.1.position-fb => axis.1.motor-pos-fb
net ystep <= stepgen.1.step
net ydir <= stepgen.1.dir
net yenable axis.1.amp-enable-out => stepgen.1.enable
setp stepgen.2.position-scale [AXIS_2]SCALE
setp stepgen.2.steplen 1
setp stepgen.2.stepspace 0
setp stepgen.2.dirhold 24000
setp stepgen.2.dirsetup 223000
setp stepgen.2.maxaccel [AXIS_2]STEPGEN_MAXACCEL
net zpos-cmd axis.2.motor-pos-cmd => stepgen.2.velocity-cmd
net zpos-fb stepgen.2.position-fb => axis.2.motor-pos-fb
net zstep <= stepgen.2.step
net zdir <= stepgen.2.dir
net zenable axis.2.amp-enable-out => stepgen.2.enable
net estop-out <= iocontrol.0.user-enable-out
net estop-out => iocontrol.0.emc-enable-in
loadusr -W hal_manualtoolchange
net tool-change iocontrol.0.tool-change => hal_manualtoolchange.change
net tool-changed 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
Код: Выделить всё
# Создан stepconf в Wed Dec 11 01:41:27 2002
# Все изменения в этом файле будут перезаписаны
# при следующем запуске stepconf
loadrt trivkins
loadrt [EMCMOT]EMCMOT base_period_nsec=[EMCMOT]BASE_PERIOD servo_period_nsec=[EMCMOT]SERVO_PERIOD num_joints=[TRAJ]AXES
loadrt probe_parport
loadrt hal_parport cfg="0x378 out "
setp parport.0.reset-time 1000
loadrt stepgen step_type=0,0,0 ctrl_type=v,v,v
loadrt at_pid num_chan=1
addf parport.0.read base-thread
addf encoder.update-counters base-thread
addf stepgen.make-pulses base-thread
addf parport.0.write base-thread
addf parport.0.reset base-thread
addf encoder.capture-position servo-thread
addf motion-command-handler servo-thread
addf motion-controller servo-thread
addf pid.do-pid-calcs servo-thread
addf stepgen.update-freq servo-thread
#-------- Encoder-X --------#
loadrt encoder num_chan=1
setp encoder.0.position-scale 1333.333333
net Xpos-phase-a encoder.0.phase-A
net Xpos-phase-b encoder.0.phase-B
net Xpos-phase-a <= parport.0.pin-10-in
net Xpos-phase-b <= parport.0.pin-11-in
# Add feedback to motion. This replaces sepgen.0.position-fb
net Xpos-fb <= encoder.0.position
net Xpos-fb => axis.0.motor-pos-fb
#-------- Encoder-X --------#
#-------- Reset Button --------#
net reset-encoders parport.0.pin-13-in => encoder.0.reset
#-------- Reset Button --------#
#-------- PID-X --------#
net Xpos-fb => pid.0.feedback
net xenable <= axis.0.amp-enable-out => pid.0.enable
net Xvel-cmd <= pid.0.output
setp pid.0.Pgain 1
setp pid.0.Igain 0
setp pid.0.Dgain 0
setp pid.0.bias 0
setp pid.0.FF0 0
setp pid.0.FF1 0
setp pid.0.FF2 0
setp pid.0.deadband 0
#-------- PID-X --------#
#-------- Stepgen-X --------#
net xstep <= stepgen.0.step => parport.0.pin-01-out
net xdir <= stepgen.0.dir => parport.0.pin-02-out
net xenable => stepgen.0.enable
# get-cmd from PID-X
net Xvel-cmd => stepgen.0.velocity-cmd
setp stepgen.0.position-scale [AXIS_0]SCALE
setp stepgen.0.steplen 1
setp stepgen.0.stepspace 0
setp stepgen.0.dirhold 35000
setp stepgen.0.dirsetup 35000
setp stepgen.0.maxaccel [AXIS_0]STEPGEN_MAXACCEL
#-------- Stepgen-X --------#
#-------- EStop --------#
net estop-out <= iocontrol.0.user-enable-out
net estop-out => iocontrol.0.emc-enable-in
#-------- EStop --------#
loadusr -W hal_manualtoolchange
net tool-change iocontrol.0.tool-change => hal_manualtoolchange.change
net tool-changed 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Код: Выделить всё
# Создан stepconf в Wed Dec 11 01:41:27 2002
# Все изменения в этом файле будут перезаписаны
# при следующем запуске stepconf
loadrt trivkins
loadrt [EMCMOT]EMCMOT base_period_nsec=[EMCMOT]BASE_PERIOD servo_period_nsec=[EMCMOT]SERVO_PERIOD num_joints=[TRAJ]AXES
loadrt probe_parport
loadrt hal_parport cfg="0x378 out "
setp parport.0.reset-time 1000
loadrt encoder num_chan=1
loadrt stepgen step_type=0,0,0 ctrl_type=v,v,v
loadrt at_pid num_chan=1
addf parport.0.read base-thread
addf encoder.update-counters base-thread
addf stepgen.make-pulses base-thread
addf parport.0.write base-thread
addf parport.0.reset base-thread
addf encoder.capture-position servo-thread
addf motion-command-handler servo-thread
addf motion-controller servo-thread
addf pid.0.do-pid-calcs servo-thread
addf stepgen.update-freq servo-thread
#-------- Encoder-X --------#
setp encoder.0.position-scale 1333.333333
net Xpos-phase-a encoder.0.phase-A
net Xpos-phase-b encoder.0.phase-B
net Xpos-phase-a <= parport.0.pin-10-in
net Xpos-phase-b <= parport.0.pin-11-in
# Add feedback to motion. This replaces sepgen.0.position-fb
net Xpos-fb <= encoder.0.position
net Xpos-fb => axis.0.motor-pos-fb
#-------- Encoder-X --------#
#-------- Reset Button --------#
net reset-encoders parport.0.pin-13-in => encoder.0.reset
#-------- Reset Button --------#
#-------- PID-X --------#
net Xpos-fb => pid.0.feedback
net xenable <= axis.0.amp-enable-out => pid.0.enable
net Xvel-cmd <= pid.0.output
setp pid.0.Pgain 1
setp pid.0.Igain 0
setp pid.0.Dgain 0
setp pid.0.bias 0
setp pid.0.FF0 0
setp pid.0.FF1 0
setp pid.0.FF2 0
setp pid.0.deadband 0
#-------- PID-X --------#
#-------- Stepgen-X --------#
net xstep <= stepgen.0.step => parport.0.pin-01-out
net xdir <= stepgen.0.dir => parport.0.pin-02-out
net xenable => stepgen.0.enable
# get-cmd from PID-X
net Xvel-cmd => stepgen.0.velocity-cmd
setp stepgen.0.position-scale [AXIS_0]SCALE
setp stepgen.0.steplen 1
setp stepgen.0.stepspace 0
setp stepgen.0.dirhold 35000
setp stepgen.0.dirsetup 35000
setp stepgen.0.maxaccel [AXIS_0]STEPGEN_MAXACCEL
#-------- Stepgen-X --------#
#-------- EStop --------#
net estop-out <= iocontrol.0.user-enable-out
net estop-out => iocontrol.0.emc-enable-in
#-------- EStop --------#
loadusr -W hal_manualtoolchange
net tool-change iocontrol.0.tool-change => hal_manualtoolchange.change
net tool-changed 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Код: Выделить всё
setp encoder.0.position-scale -1333.333333
не,он правильно считал .поменял на минус,отключил питание мотора,покрутил винт,чтоб на энкодере не ноль был,включил питание и станок чуть в космос не улетел отрабатывая ошибкуПопробуй поменять знак encoder.0.position-scale, может он считает в обратную сторону?
Nick писал(а):Кстати, сколько тиков на оборот у энкодера?
Там вроде есть кнопка "выполнить до этого момента"...намбаван писал(а):пс.а как в емс выполнять только одну строчку в программе?
Код: Выделить всё
# Создан stepconf в Wed Dec 11 01:41:27 2002
# Все изменения в этом файле будут перезаписаны
# при следующем запуске stepconf
loadrt trivkins
loadrt [EMCMOT]EMCMOT base_period_nsec=[EMCMOT]BASE_PERIOD servo_period_nsec=[EMCMOT]SERVO_PERIOD num_joints=[TRAJ]AXES
loadrt probe_parport
loadrt hal_parport cfg="0x378 out "
setp parport.0.reset-time 1000
loadrt encoder num_chan=1
loadrt stepgen step_type=0,0,0 ctrl_type=v,v,v
loadrt at_pid num_chan=1
addf parport.0.read base-thread
addf encoder.update-counters base-thread
addf stepgen.make-pulses base-thread
addf parport.0.write base-thread
addf parport.0.reset base-thread
addf encoder.capture-position servo-thread
addf motion-command-handler servo-thread
addf motion-controller servo-thread
addf pid.0.do-pid-calcs servo-thread
addf stepgen.update-freq servo-thread
#-------- Encoder-X --------#
setp encoder.0.position-scale 1333.333333
net Xpos-phase-a encoder.0.phase-A
net Xpos-phase-b encoder.0.phase-B
net Xpos-phase-a <= parport.0.pin-10-in
net Xpos-phase-b <= parport.0.pin-11-in
# Add feedback to motion. This replaces sepgen.0.position-fb
net Xpos-fb <= encoder.0.position
net Xpos-fb => axis.0.motor-pos-fb
#-------- Encoder-X --------#
#-------- Reset Button --------#
net reset-encoders parport.0.pin-13-in => encoder.0.reset
#-------- Reset Button --------#
#-------- PID-X --------#
net Xpos-fb => pid.0.feedback
net Xpos-cmd axis.0.motor-pos-cmd => pid.0.command
net xenable <= axis.0.amp-enable-out => pid.0.enable
net Xvel-cmd <= pid.0.output
setp pid.0.Pgain 1
setp pid.0.Igain 0
setp pid.0.Dgain 0
setp pid.0.bias 0
setp pid.0.FF0 0
setp pid.0.FF1 0
setp pid.0.FF2 0
setp pid.0.deadband 0
#-------- PID-X --------#
#-------- Stepgen-X --------#
net xstep <= stepgen.0.step => parport.0.pin-01-out
net xdir <= stepgen.0.dir => parport.0.pin-02-out
net xenable => stepgen.0.enable
# get-cmd from PID-X
net Xvel-cmd => stepgen.0.velocity-cmd
setp stepgen.0.position-scale [AXIS_0]SCALE
setp stepgen.0.steplen 1
setp stepgen.0.stepspace 0
setp stepgen.0.dirhold 35000
setp stepgen.0.dirsetup 35000
setp stepgen.0.maxaccel [AXIS_0]STEPGEN_MAXACCEL
#-------- Stepgen-X --------#
#-------- EStop --------#
net estop-out <= iocontrol.0.user-enable-out
net estop-out => iocontrol.0.emc-enable-in
#-------- EStop --------#
loadusr -W hal_manualtoolchange
net tool-change iocontrol.0.tool-change => hal_manualtoolchange.change
net tool-changed 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