Страница 4 из 12
Re: ЕМС2 и ШД с энкодером
Добавлено: 27 авг 2011, 23:52
Nick
намбаван писал(а):FERROR = 1
MIN_FERROR = .25
Это вроде в порядке....
Значит, нужно смотреть на обратную связь.
Т.е. смотри параметр encoder position, и смотри на сколько он соответствует реальному положению.
Re: ЕМС2 и ШД с энкодером
Добавлено: 28 авг 2011, 21:00
намбаван
не получается мотор покрутить,все значения менял и все равно joint 0 following error

Re: ЕМС2 и ШД с энкодером
Добавлено: 28 авг 2011, 22:25
Nick
Значит обратная связь не правильная.
Ты уверен, что энкодер правильно работал?
Joint 0 following error это ошибка следования траектории, она возникает, когда реальное положение шарнира отличается от заданного больше чем на FERROR.
Re: ЕМС2 и ШД с энкодером
Добавлено: 01 сен 2011, 15:58
намбаван
нет,что то не так
добрался наконец как следует и никак не выходит мотор крутить.максимум,что получилось-если изменить значение
setp pid.0.bias,то будет как на видео(с телефона-7 мб)
http://narod.ru/disk/23681065001/vid.rar.html
нажимаешь кнопку"вкл",проезжает MIN_FERROR и выключается
Re: ЕМС2 и ШД с энкодером
Добавлено: 01 сен 2011, 16:25
Nick
Обратная связь по любому глючит. Энкодер точно правильно работает? Положение оси правильно меняется на экране?
Попробуй поставить min_ferror и ferror = 100. Посмотри как двигатель крутится...
Re: ЕМС2 и ШД с энкодером
Добавлено: 01 сен 2011, 18:38
намбаван
Nick писал(а):Попробуй поставить min_ferror и ferror = 100. Посмотри как двигатель крутится...
если так сделать,то моторы не крутятся,меняется velocity на время,а координаты в нулях,не шагает.
Nick писал(а):Обратная связь по любому глючит. Энкодер точно правильно работает? Положение оси правильно меняется на экране?
наверно правильно,расстояние показывает хорошо.
кстати,если провернуть винт рукой,т.е. чтоб энкодер не в нуле был,то реагирует,возвращает в ноль
Re: ЕМС2 и ШД с энкодером
Добавлено: 01 сен 2011, 19:42
Nick
таааак... давай еще раз hal ...
Надо его целиком пересмотреть, в предыдущих сообщениях что-то странный он какой-то

.
Re: ЕМС2 и ШД с энкодером
Добавлено: 01 сен 2011, 20:15
намбаван
в данный момент такой
Код: Выделить всё
# Создан 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
Re: ЕМС2 и ШД с энкодером
Добавлено: 01 сен 2011, 20:55
Nick
Вот переработал hal.
Сейчас напишу, что сделал. Пока попробуй, не выдаст ли сразу ошибок (мне проверить негде).
Код: Выделить всё
# Создан 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
Re: ЕМС2 и ШД с энкодером
Добавлено: 01 сен 2011, 21:01
Nick
Что сделал.
- Убрал пока две не используемые оси.
- Переделал порядок объявлений.
- Основное! Скорее всего могло не работать вот из-за этой строчки:
net xpos-fb stepgen.0.position-fb => axis.0.motor-pos-fb т.е. планировщику траекторий дается обратная связь от генератора шагов (обычно считается, что шаговый двигатель не пропускает шаги, соответственно обратную связь можно брать прямо с генератора шагов). Но эта обратная связь может отличаться от той, которую мы получаем от энкодера. Эту строчку заменил на
net Xpos-fb <= encoder.0.position
net Xpos-fb => axis.0.motor-pos-fb
Т.е. берем обратную связь от энкодера и пихаем ее в net Xpos-fb => axis.0.motor-pos-fb
- Изменил вот эти цифры
setp stepgen.1.dirhold 24000
setp stepgen.1.dirsetup 223000
на стандартные
setp stepgen.0.dirhold 35000
setp stepgen.0.dirsetup 35000
Re: ЕМС2 и ШД с энкодером
Добавлено: 02 сен 2011, 16:54
намбаван
не съел ))
Debug file information:
HAL: ERROR: function 'encoder.update-counters' not found
Re: ЕМС2 и ШД с энкодером
Добавлено: 02 сен 2011, 20:18
Nick
строчку loadrt encoder num_chan=1 перенес наверх, чтобы она была выше addf encoder.update-counters base-thread
т.е. сначала мы загружаем модуль encoder, а потом добавляем его функции к потоку base thread.
+еще исправил одну ошибочку...
Код: Выделить всё
# Создан 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
Re: ЕМС2 и ШД с энкодером
Добавлено: 04 сен 2011, 06:10
намбаван
с таким халом емс запускается и всё один в один как я написал в 66 посте

Re: ЕМС2 и ШД с энкодером
Добавлено: 04 сен 2011, 19:59
Nick
Так, тогда попробуй поставить более маленькое ускорение и макс скорость оси. В ini
[AXIS_0]
...
MAX_VELOCITY = 5
MAX_ACCELERATION = 5
STEPGEN_MAXACCEL = 8
Может он не успевает разогнаться...
Re: ЕМС2 и ШД с энкодером
Добавлено: 05 сен 2011, 09:31
намбаван
ничего не изменилось

Re: ЕМС2 и ШД с энкодером
Добавлено: 05 сен 2011, 09:47
Nick
Попробуй поменять знак encoder.0.position-scale, может он считает в обратную сторону?
Т.е. должно быть так:
Кстати, сколько тиков на оборот у энкодера?
Re: ЕМС2 и ШД с энкодером
Добавлено: 05 сен 2011, 17:37
намбаван
Попробуй поменять знак encoder.0.position-scale, может он считает в обратную сторону?
не,он правильно считал .поменял на минус,отключил питание мотора,покрутил винт,чтоб на энкодере не ноль был,включил питание и станок чуть в космос не улетел отрабатывая ошибку

но ни по программе,ни вручную не желает шагать,только ошибку отрабатывает
Nick писал(а):Кстати, сколько тиков на оборот у энкодера?
1000 имп/об,шаг винта-3 мм.т.е. получается 333 на 1 мм.но он считал в четыре раза больше(кстати в маче тоже)-может не так выводы подключены.я не перепаивал-на весу не получится,а мотор снимать геморно

.поэтому я просто умножил 333 на 4 и получилось 1333
пс.а как в емс выполнять только одну строчку в программе?
Re: ЕМС2 и ШД с энкодером
Добавлено: 05 сен 2011, 17:48
Nick
Так, а на движке 200 шагов на оборот? Какой микрошаг стоит?
намбаван писал(а):пс.а как в емс выполнять только одну строчку в программе?
Там вроде есть кнопка "выполнить до этого момента"...
Либо можно в MDI режиме писать любые команды.
Re: ЕМС2 и ШД с энкодером
Добавлено: 05 сен 2011, 17:49
Nick
О, стой! Сейчас ошибку кажется нашел...
Re: ЕМС2 и ШД с энкодером
Добавлено: 05 сен 2011, 17:54
Nick
Вот такую строчку забыли:
net Xpos-cmd axis.0.motor-pos-cmd => pid.0.command
Забыли на pid послать указание положения

!
Вставь ее в блок #-------- PID-X --------#
Код: Выделить всё
# Создан 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