[РЕШЕНО] помогите подключить линейки к EMC2

Обсуждение установки, настройки и использования LinuxCNC. Вопросы по Gкоду.
Boris
Новичок
Сообщения: 23
Зарегистрирован: 02 мар 2011, 15:26
Репутация: 0
Контактная информация:

[РЕШЕНО] помогите подключить линейки к EMC2

Сообщение Boris »

Есть линейки с которых выходят два квадратурных сигнала. С mach 3 через LPT порт работают без проблем. Подскажите как сконфигурировать EMC2, что-бы использовать эти линейки в качестве обратной связи, т.е. что-бы расстояние перемещения считалось по количеству импульсов полученных с линейки, а не по количеству поданных импульсов step на ШД ? Сигналы заведены на 12 и 13 pin LPT порта. Большая просьба, подскажите что нужно сделать, по шагам. А то что-то с HALом, в разделе encoder, я совсем не разобрался.
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: помогите подключить линейки к EMC2

Сообщение Nick »

Вот тут мы разбирались с настройками серво привода с энкодером и PID контроллером http://cnc-club.ru/forum/viewtopic.php? ... t=60#p3356 .


Вот кусок обработки энкодера:
# описываем энкодер

loadrt encoder num_chan=1
addf encoder.update-counters base-thread
addf encoder.capture-position servo-thread
setp encoder.0.position-scale 20.000000
net Xpos-phase-a encoder.0.phase-A
net Xpos-phase-b encoder.0.phase-B
net Xpos-index encoder.0.phase-Z
net Xpos-phase-a <= parport.0.pin-10-in
net Xpos-index <= parport.0.pin-11-in

В нем теперь будет нужная информация.

Но с управлением несколько хитрее...

По идее, нужно настраивать такой же PID контроллер как на серве...

А какая основная функция линейки - отслеживать положение или просто определять пропуски шагов шагового двигателя?
Boris
Новичок
Сообщения: 23
Зарегистрирован: 02 мар 2011, 15:26
Репутация: 0
Контактная информация:

Re: помогите подключить линейки к EMC2

Сообщение Boris »

А какая основная функция линейки - отслеживать положение или просто определять пропуски шагов шагового двигателя?
Не знаю как это правильно сказать, нужно что-бы EMC давала импульсы step до тех пор пока с линейки не было-бы получено количество импульсов соответствующие заданному в УП расстоянию. Например текущие значение X=0, идёт строка G1 X10, значит нужно передвинуть X на +10мм, при перемещении головки линейки на 10мм она должна выдать 1000 импульсов (1 импульс= 0,01мм), и соответственно пока эти 1000 импульсов с линейки не получены импульсы step должны выдаваться на драйвер ШД. В общем не просто сигнализировать о пропуске шагов но и вводить корректировки.
У меня шаговые двигатели, это что-то меняет в настойках?
Аватара пользователя
ubey_bobra
Кандидат
Сообщения: 75
Зарегистрирован: 21 ноя 2010, 21:56
Репутация: 0
Откуда: г. Сосновый Бор Ленинградская обл.
Контактная информация:

Re: помогите подключить линейки к EMC2

Сообщение ubey_bobra »

да, это меняет очень многое.
настроить емс чтобы она просто показывала положение считывая данные с линеек можно, а вот насчет управлять шаговым двигателем... где то натыкался на такое, не помню где.
суть в том что когда управление идет сервой, то в зависимости от положения рабочего органа, блок ПИД выдает свой определенным методом рассчитанный вольтаж на двигатель, где учтены ускорения, дальность и т.д. а вот такого блока для управления шаговика вроде как в емс нету, вариант писать ручками самому. (под блоком подразумевается часть программного кода, либо часть "железа" которая выполняет какие либо записанные в нее функции)
p.s. Все гениальное просто, тогда когда оно известно и популярно. А в свое время людей жгли на костре, за то что они утверждали что земля круглая.
psha
Опытный
Сообщения: 147
Зарегистрирован: 28 фев 2011, 11:11
Репутация: 1
Контактная информация:

Re: помогите подключить линейки к EMC2

Сообщение psha »

Судя по всему можно. Достаточно использовать stepgen в velocity режиме, а не position.
Кормить ему на вход результат pid. Правда, поскольку это шаговик, работать это будет не идеально
root, доделай конвертацию! :)
Boris
Новичок
Сообщения: 23
Зарегистрирован: 02 мар 2011, 15:26
Репутация: 0
Контактная информация:

Re: помогите подключить линейки к EMC2

Сообщение Boris »

да, это меняет очень многое.
настроить емс чтобы она просто показывала положение считывая данные с линеек можно, а вот насчет управлять шаговым двигателем... где то натыкался на такое, не помню где.
суть в том что когда управление идет сервой, то в зависимости от положения рабочего органа, блок ПИД выдает свой определенным методом рассчитанный вольтаж на двигатель, где учтены ускорения, дальность и т.д. а вот такого блока для управления шаговика вроде как в емс нету, вариант писать ручками самому. (под блоком подразумевается часть программного кода, либо часть "железа" которая выполняет какие либо записанные в нее функции)
psha
Опытный
Сообщения: 147
Зарегистрирован: 28 фев 2011, 11:11
Репутация: 1
Контактная информация:

Re: помогите подключить линейки к EMC2

Сообщение psha »

Boris писал(а):блок ПИД выдает свой определенным методом рассчитанный вольтаж на двигатель, где учтены ускорения, дальность и т.д. а вот такого блока для управления шаговика вроде как в емс нету
Блок ПИД выдает абстрактное желаемое значение. Для сервы он потом загоняется в pwm и преобразуется в ШИМ.
Для шаговика надо загнать в stepgen и получить пульсы.

http://psha.org.ru/irc/%23emc/2011-03-02.html#18:02:38
root, доделай конвертацию! :)
Boris
Новичок
Сообщения: 23
Зарегистрирован: 02 мар 2011, 15:26
Репутация: 0
Контактная информация:

Re: помогите подключить линейки к EMC2

Сообщение Boris »

Я в EMC абсолютный чайник, да и в CNC тоже не шибко разбираюсь, пользовался немного mach. Если не сильно затруднит, подскажите, что и где надо написать (ini, hal ...) что-бы линейки хоть что-то показали в EMC.
psha
Опытный
Сообщения: 147
Зарегистрирован: 28 фев 2011, 11:11
Репутация: 1
Контактная информация:

Re: помогите подключить линейки к EMC2

Сообщение psha »

Ну я тут ничего не подскажу, проверить негде и сервы не делал. Я только путь в светлое будущее указать могу :)
root, доделай конвертацию! :)
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: помогите подключить линейки к EMC2

Сообщение Nick »

Ну чтобы показывали, нужно написать то, что я вверху указал.

Значения параметров на энкодере можно посмотреть в HAL Meter или HAL Show, в зависимости от GUI они находятся в разных разделах верхнего меню.

Psha все правильно написал. Нужно добавить PID, как для сервы но выход его писать не в pwm как для сервы, а в stepgen.

Аналогичная ситуация была при описании внешнего джойстика для управления станком через EMC2.

Скинь свой файл hal попробуем написать.
Boris
Новичок
Сообщения: 23
Зарегистрирован: 02 мар 2011, 15:26
Репутация: 0
Контактная информация:

Re: помогите подключить линейки к EMC2

Сообщение Boris »

# Создан stepconf в Sat Feb 26 01:07:08 2011
# Все изменения в этом файле будут перезаписаны
# при следующем запуске 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 5000
loadrt stepgen step_type=0,0,0
loadrt pwmgen output_type=0

# энкодер

loadrt encoder num_chan=1
addf encoder.update-counters base-thread
addf encoder.capture-position servo-thread
setp encoder.0.position-scale 20.000000
net Xpos-phase-a encoder.0.phase-A
net Xpos-phase-b encoder.0.phase-B
net Xpos-index encoder.0.phase-Z
net Xpos-phase-a <= parport.0.pin-12-in
net Xpos-index <= parport.0.pin-13-in

# энкодер

addf parport.0.read base-thread
addf stepgen.make-pulses base-thread
addf pwmgen.make-pulses base-thread
addf parport.0.write base-thread
addf parport.0.reset base-thread

addf stepgen.capture-position servo-thread
addf motion-command-handler servo-thread
addf motion-controller servo-thread
addf stepgen.update-freq servo-thread
addf pwmgen.update servo-thread

net spindle-cmd <= motion.spindle-speed-out => pwmgen.0.value
net spindle-enable <= motion.spindle-on => pwmgen.0.enable
net spindle-pwm <= pwmgen.0.pwm
setp pwmgen.0.pwm-freq 100.0
setp pwmgen.0.scale 1166.66666667
setp pwmgen.0.offset 0.114285714286
setp pwmgen.0.dither-pwm true
net spindle-cw <= motion.spindle-forward

net estop-out => parport.0.pin-01-out
net xstep => parport.0.pin-02-out
setp parport.0.pin-02-out-reset 1
net xdir => parport.0.pin-03-out
net ystep => parport.0.pin-04-out
setp parport.0.pin-04-out-reset 1
net ydir => parport.0.pin-05-out
net zstep => parport.0.pin-06-out
setp parport.0.pin-06-out-reset 1
net zdir => parport.0.pin-07-out
net astep => parport.0.pin-08-out
setp parport.0.pin-08-out-reset 1
net adir => parport.0.pin-09-out
net spindle-cw => parport.0.pin-14-out
net spindle-pwm => parport.0.pin-16-out
net xenable => parport.0.pin-17-out




setp stepgen.0.position-scale [AXIS_0]SCALE
setp stepgen.0.steplen 1
setp stepgen.0.stepspace 0
setp stepgen.0.dirhold 70000
setp stepgen.0.dirsetup 70000
setp stepgen.0.maxaccel [AXIS_0]STEPGEN_MAXACCEL
net xpos-cmd axis.0.motor-pos-cmd => stepgen.0.position-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 70000
setp stepgen.1.dirsetup 70000
setp stepgen.1.maxaccel [AXIS_1]STEPGEN_MAXACCEL
net ypos-cmd axis.1.motor-pos-cmd => stepgen.1.position-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 70000
setp stepgen.2.dirsetup 70000
setp stepgen.2.maxaccel [AXIS_2]STEPGEN_MAXACCEL
net zpos-cmd axis.2.motor-pos-cmd => stepgen.2.position-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
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: помогите подключить линейки к EMC2

Сообщение Nick »

1. нужно поменять тип stepgen для нужной оси:
loadrt stepgen step_type=0,0,0 ctrl_type=p,p,v
На нужную выставляем v = velocity.

2. добавляем PID
loadrt at_pid num_chan=1
addf pid.0.do-pid-calcs servo-thread
net Xpos-fb <= encoder.0.position => pid.0.feedback
net Xpos-cmd <= axis.0.motor-pos-cmd => pid.0.command
net Xpos-fb axis.0.motor-pos-fb
net xenable axis.0.amp-enable-out => pid.0.enable

# привязываем pid к stepgen
net Xvel-cmd <= pid.0.out => stepgen.0.velocity-cmd



# задаем значения параметров для PID
setp pid.0.Pgain [AXIS_0]P
setp pid.0.Igain [AXIS_0]I
setp pid.0.Dgain [AXIS_0]D
setp pid.0.bias [AXIS_0]BIAS
setp pid.0.FF0 [AXIS_0]FF0
setp pid.0.FF1 [AXIS_0]FF1
setp pid.0.FF2 [AXIS_0]FF2
setp pid.0.deadband [AXIS_0]DEADBAND

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

Как-то так. Пишу с нетбука, правильность не гарантирую...
Boris
Новичок
Сообщения: 23
Зарегистрирован: 02 мар 2011, 15:26
Репутация: 0
Контактная информация:

Re: помогите подключить линейки к EMC2

Сообщение Boris »

До того как прочитал Ваше последнее сообщение, сделал следующие изменения:
Убрал строку net Xpos-index encoder.0.phase-Z зерометки у меня с линейки не идёт
поменял net Xpos-index <= parport.0.pin-13-in на net Xpos-phase-B <= parport.0.pin-13-in сделал это интуитивно, методом тыка так сказать, потому что не понимаю значение Xpos-index
всё равно не показывает с линеек ни чего
В меню "Вид" что надо выбрать: показать заданную позицию или показать реальную позицию (выбрал: показать реальную позицию); показать станочную позицию или показать относительную позицию ?
Пины 12 и 13 (parport.0 ) дополнительно нигде не надо инициализировать?

Сейчас верну всё назад и попробую внести изменения указанные Вами в последнем посте.
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: помогите подключить линейки к EMC2

Сообщение Nick »

В меню нужно найти или hal meter или hal watch или hal show и в открывшемся окне найти encoder.0.counts, таким образом можно протестировать, что энкодер действительно заработал.
Boris
Новичок
Сообщения: 23
Зарегистрирован: 02 мар 2011, 15:26
Репутация: 0
Контактная информация:

Re: помогите подключить линейки к EMC2

Сообщение Boris »

После внесения изменений "ЕМС2 завершился с ошибкой".
В место строки loadrt stepgen step_type=0,0,0 нужна строка loadrt stepgen step_type=0,0,0 ctrl_type=v,p,v ? Если ось Х.
Сейчас закоментирую все изменения и запущу hal meter.
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: помогите подключить линейки к EMC2

Сообщение Nick »

если ось x (ось 0) то v, p, p. Каждая буква - это тип генератора, для одной оси. Оси с номерами задаются в файле ini. Обычно x - 0, y - 1, z - 2.

Когда он завершается с ошибкой обычно выводится сообщение, из которого можно понять в какой строчке конфига какая ошибка.
Boris
Новичок
Сообщения: 23
Зарегистрирован: 02 мар 2011, 15:26
Репутация: 0
Контактная информация:

Re: помогите подключить линейки к EMC2

Сообщение Boris »

Нашёл encoder.0.counts в hal meter. Что это даёт и что с ним делать?
Boris
Новичок
Сообщения: 23
Зарегистрирован: 02 мар 2011, 15:26
Репутация: 0
Контактная информация:

Re: помогите подключить линейки к EMC2

Сообщение Boris »

Вроде что-то появилось. После двойного клика на encoder.0.counts в hal meter, появилось окно с счётчиком, значение которого меняется при передвижении головки линейки.
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: помогите подключить линейки к EMC2

Сообщение Nick »

Это хорошо! Энкодер работает.

Теперь по-тихоньку его нужно подключить к pid.
Попробуй для начала вот это и посмотри в hal meter что он тоже работает.
loadrt at_pid num_chan=1
addf pid.0.do-pid-calcs servo-thread
net Xpos-fb <= encoder.0.position => pid.0.feedback
net Xpos-cmd <= axis.0.motor-pos-cmd => pid.0.command
Boris
Новичок
Сообщения: 23
Зарегистрирован: 02 мар 2011, 15:26
Репутация: 0
Контактная информация:

Re: помогите подключить линейки к EMC2

Сообщение Boris »

Попутно вопрос.
my-mill.hal (Если ваш файл когфигурации называется "my-mill") Этот файл загружается первым и не должен быть изменен, если вы использовали Stepper Config Wizard.
Я вношу изменения именно в этот файл (он у меня называется Мой_станок)
это корректно, или лучше править custom.hal?
Ответить

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