ЕМС2 и ШД с энкодером

Обсуждение установки, настройки и использования LinuxCNC. Вопросы по Gкоду.
намбаван
Опытный
Сообщения: 128
Зарегистрирован: 08 авг 2011, 16:33
Репутация: 9
Контактная информация:

Re: ЕМС2 и ШД с энкодером

Сообщение намбаван »

Nick писал(а): Значит так, просто подключаешь один провод кнопки к пину, второй кидаешь на землю - пины с 18 по 25, наверняка на контроллере есть вывод на землю. Потом смотришь, в hal meter, что показывает на этом пине при нажатой и не нажатой кнопке. Результат пиши сюда, так мы поймем:
1. работает или нет кнопка
2. надо ли ее инвертировать
похоже мне нужно попить коры дуба,укрепить голову :D кнопка теперь работает,сбрасывает,все здорово.появилась возможность путем поэкспериментировать и результаты не радуют :problem: делал так на разных скоростях отъезжал на сто мм,делался скриншот(верхний),потом возвращался в ноль,и тоже скриншот(нижний).что приятно-индикатор показывал ноль-полделения,китайский цифровой штангель показывал или 0,или 0.01.
а энкодер показывал вот что
1075 мм/мин
Изображение
352 мм/мин
Изображение
104 мм/мин
Изображение
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: ЕМС2 и ШД с энкодером

Сообщение Nick »

А сколько по энкодеру получается в мм?
Настрой правильно параметр
setp encoder.0.scale (тиков на единицу измерения (мм))
намбаван
Опытный
Сообщения: 128
Зарегистрирован: 08 авг 2011, 16:33
Репутация: 9
Контактная информация:

Re: ЕМС2 и ШД с энкодером

Сообщение намбаван »

encoder.0.position в тех же условиях показывает
на 1075 мм/мин
-50,73 и ошибка -2,448
352 мм/мин
368,07 ошибка -1,326
104 мм/мин
398,55 ошибка 0
(на приборах все возвращается в 0)
неужели не успевает считать? :eh:
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: ЕМС2 и ШД с энкодером

Сообщение Nick »

Может быть, сколько тиков получается в секунду на максимальной скорости?
намбаван
Опытный
Сообщения: 128
Зарегистрирован: 08 авг 2011, 16:33
Репутация: 9
Контактная информация:

Re: ЕМС2 и ШД с энкодером

Сообщение намбаван »

Nick писал(а):Может быть, сколько тиков получается в секунду на максимальной скорости?
не знаю,как посчитать

прделал то же самое на маче,получил такие результаты-
1075 мм/мин:
299-300,ошибка 0,5-1,5
352 мм/мин:
399,98-399,99,ошибка 0
104 мм/мин
также,как 352
приборы в ноль
заодно выяснилось,что больше метра двадцати эта ось(у,я на ней эспериментирую) не ездит,но она самая плохо сделанная :) а чтобы переделать нужно заказывать две детали,а я не хочу-уж больно муторно и долго.можно ещё поднять напругу,сейчас 24,а контроллеру можно 70.но пока мне не нужно 8-)
ещё закралось подозрение :think: ,что энкодеры 1000 имп/об,я это знаю(а также схему подключения) со слов человека,которых мне их продал.попробую поискать их
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: ЕМС2 и ШД с энкодером

Сообщение Nick »

Как-то у тебя вообще странно выглядит. В первом случае в положении 100мм энкодер выдает 133089, во втором, в том же положении 122151, в третьем -17397... Что-то вообще не понятное...

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

Так так так... нужно сделать еще вот что, все что по энкодеру поставить после описания параллельного порта. Все функции присоединяются к потокам, в том числе base thread в порядке их появления в hal. Т.е. у нас получается, мы сначала считываем состояние пинов энкодера, а уже потом читаем пины параллельного порта. Значит вот это

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

# encoder

loadrt encoder num_chan=1
addf encoder.update-counters base-thread
addf encoder.capture-position servo-thread
setp encoder.0.position-scale 333.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
# SBROS
ставим после этого:

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

addf parport.0.read base-thread
addf stepgen.make-pulses base-thread
addf parport.0.write base-thread
addf parport.0.reset base-thread
намбаван
Опытный
Сообщения: 128
Зарегистрирован: 08 авг 2011, 16:33
Репутация: 9
Контактная информация:

Re: ЕМС2 и ШД с энкодером

Сообщение намбаван »

не помогло..
Nick писал(а):Как-то у тебя вообще странно выглядит. В первом случае в положении 100мм энкодер выдает 133089, во втором, в том же положении 122151, в третьем -17397... Что-то вообще не понятное...
мало того,на скорости 1075 он начинает считать в положительную сторону,а потом,где то около 4,считает в обратную :shock:
похоже на зависимость точности от скорости :( но неужели 2 кГц (это я так насчитал при скорости 350 мм/мин) невозможно переварить??
может энкодер неправильно подключен,откуда то же берется умножение пройденной траектории на 4.нашел даташит,да там цвета проводов другие.но он точно 1000 имп/об.пока сижу в засаде :problem:
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: ЕМС2 и ШД с энкодером

Сообщение Nick »

Если считает в разные стороны, значит пины обрабатываются неправильно, либо на них приходит не правильный сигнал.
Какой у тебя base period? (Он задается в ini).
2кГц .... надо подумать... 2кГц это средняя частота каждого пина или одного из двух? Т.е. длинна минимальная импульса на каждом пине будет 1/2кГц/4 = 125 мкс... по идее, чтобы уверенно его читать base period должен быть как минимум раза в два меньше...
И ты исправил, то, что я писал постом выше?
намбаван
Опытный
Сообщения: 128
Зарегистрирован: 08 авг 2011, 16:33
Репутация: 9
Контактная информация:

Re: ЕМС2 и ШД с энкодером

Сообщение намбаван »

Nick писал(а):Если считает в разные стороны, значит пины обрабатываются неправильно, либо на них приходит не правильный сигнал.
но на меньших скоростях ведь все нормально.насчет правильного подключения-думаю как вычислить,из энкодера аж девять проводов идут :?
Nick писал(а):Какой у тебя base period? (Он задается в ini).
Изображение
Nick писал(а):2кГц .... надо подумать... 2кГц это средняя частота каждого пина или одного из двух?
я просто посчитал,что один оборот энкодера в секунду равен 1кГц :)
Nick писал(а):И ты исправил, то, что я писал постом выше?
да,не помогло
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: ЕМС2 и ШД с энкодером

Сообщение Nick »

Давай даташит еще посмотрим. Он у тебя печатный или электронный?

100 000 это достаточно много, это значит, что показания с энкодера снимаются только 10 000 раз в секунду, а если у тебя пины меняются 8 000 раз в секунду, то возникнет проблема.

Какой ты намерил у себя latency? Надо base period нормальный поставить!
намбаван
Опытный
Сообщения: 128
Зарегистрирован: 08 авг 2011, 16:33
Репутация: 9
Контактная информация:

Re: ЕМС2 и ШД с энкодером

Сообщение намбаван »

вот дш:
http://narod.ru/disk/22263358001/datash ... a.pdf.html
а вот латенси
latency-tests results
* Max jitter Base thread: 22303 ns
* Max jitter Servo thread: 21954 ns
намбаван
Опытный
Сообщения: 128
Зарегистрирован: 08 авг 2011, 16:33
Репутация: 9
Контактная информация:

Re: ЕМС2 и ШД с энкодером

Сообщение намбаван »

скрутил один мотор со станка и обнаружил,что все провода подисаны на бирке! :P
сейчас подключено так
А',B',com = gnd
+vdc = 5v
A = pin10
B = pin11
остальные три болтаются
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: ЕМС2 и ШД с энкодером

Сообщение Nick »

намбаван писал(а):* Max jitter Base thread: 22303 ns * Max jitter Servo thread: 21954 ns
Поставь base period 40 000.
A' и B' вообще отключи, они такие же выходы, как А и В, только инвертированные!

С такими настройками emc2 будет читать lpt 25 000 раз в секунду. Этого должно быть достаточно для считывания тиков энкодера с частотой до 3кГц.
Для лучшего результата, нужно брать MESA Aanything I/O. Там можно вообще разогнаться...
намбаван
Опытный
Сообщения: 128
Зарегистрирован: 08 авг 2011, 16:33
Репутация: 9
Контактная информация:

Re: ЕМС2 и ШД с энкодером

Сообщение намбаван »

ну вот,352 мм/мин обрабатывается без ошибок!приезжает точно в ноль :) выводы энкодера пока не перепаивал.
как base period зависит от latency?-попробую ещё на другом компе,там latency был вроде около 8000 что ли.
а MESA кто нибудь в россии торгует?
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: ЕМС2 и ШД с энкодером

Сообщение Nick »

Значит base period зависит от latencty напрямую. В stepconf, стоит формула
if steptime <= 5000
return max(latency + steptime + stepspace + 5000, 4*steptime)
else:
return latency + max(steptime, stepspace)

Чем меньше латенси, тем меньше можно сделать base period и тем лучше будет работать станок.
Для 8000 latency min period 23000.

MESA все брали где-то в Чехии. Надо будет поискать.
намбаван
Опытный
Сообщения: 128
Зарегистрирован: 08 авг 2011, 16:33
Репутация: 9
Контактная информация:

Re: ЕМС2 и ШД с энкодером

Сообщение намбаван »

вставил кусочек из аналогичной темы(ссылка на 1 стр.) :)

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

#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
теперь можно смотреть pid.error,а pid.output равен нулю,в той теме похоже проблема решилась так:
root писал(а):А ты включил pid через enable?
Конечно-же не включил :) ...
Всё, с output пошёл сигнал, он всегда равен error.
а как включить pid через enable?
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: ЕМС2 и ШД с энкодером

Сообщение Nick »

У него есть пин pid.0.enable. Ищешь у себя сигнал общего включения (обычно его на ххх.enable посылают) и присоединяешь его к своему pid.
намбаван
Опытный
Сообщения: 128
Зарегистрирован: 08 авг 2011, 16:33
Репутация: 9
Контактная информация:

Re: ЕМС2 и ШД с энкодером

Сообщение намбаван »

сейчас .hal такой:

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

# Создан stepconf в Wed Dec 11 02:54:53 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 

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

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.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 24000
setp stepgen.1.dirsetup 223000
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 24000
setp stepgen.2.dirsetup 223000
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 писал(а):сигнал общего включения (обычно его на ххх.enable посылают)
вот это?

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

net estop-out => iocontrol.0.emc-enable-in
Nick писал(а):У него есть пин pid.0.enable
он должен быть,или его нужно вписать?
Nick писал(а):присоединяешь его к своему pid
а это как сделать,вот такой штучкой =>?
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: ЕМС2 и ШД с энкодером

Сообщение Nick »

намбаван писал(а):вот это?
net estop-out => iocontrol.0.emc-enable-in
Нет, это сигнал от внешней кнопки EStop.
тебе нужно что-то типа этого:
net xenable axis.0.amp-enable-out => stepgen.0.enable
т.е. нужно добавить, что-то вроде такого:
net xenable => pid.0.enable

net - подключить пин
xenable - к сигналу xenable (сигнал должен быть уже создан)
=> - показывает направление сигнала (хотя, в документации писали, что эти стрелочки ничего не значат и нужны только для красоты, и, вроде, их можно вообще не писать. Направление определяется из типа пина (они могут быть либо in либо out).)
pid.0.enable - к какому пину присоединять.
намбаван
Опытный
Сообщения: 128
Зарегистрирован: 08 авг 2011, 16:33
Репутация: 9
Контактная информация:

Re: ЕМС2 и ШД с энкодером

Сообщение намбаван »

вбил эти две строчки,теперь pid.0.error считает :)

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

net xenable axis.0.amp-enable-out => stepgen.0.enable
net xenable => pid.0.enable
вроде бы осталось сделать ещё вот что:
Nick писал(а):1. нужно поменять тип stepgen для нужной оси:
loadrt stepgen step_type=0,0,0 ctrl_type=p,p,v
На нужную выставляем v = velocity.


# привязываем pid к stepgen
net Xvel-cmd <= pid.0.out => stepgen.0.velocity-cmd
а куда поставить v?
Ответить

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