проблема с энкодером шпинделя

Контроллеры, драйверы, датчики, управляющие устройства.
Аватара пользователя
Алексс
Почётный участник
Почётный участник
Сообщения: 2210
Зарегистрирован: 20 июл 2012, 15:49
Репутация: 266
Заслуга: IQ32
Настоящее имя: Алексей
Откуда: Прага
Контактная информация:

проблема с энкодером шпинделя

Сообщение Алексс »

приветствую!

сегодня подключил энкодер шпинделя. даже как-то работает, но не совсем так как хочется.

позиция считается, но скорость прыгает адски.

так это выглядит в железе
DSC_0754.jpg (2365 просмотров) <a class='original' href='./download/file.php?id=9186&mode=view' target=_blank>Загрузить оригинал (110.9 КБ)</a>
DSC_0756.jpg (2365 просмотров) <a class='original' href='./download/file.php?id=9187&mode=view' target=_blank>Загрузить оригинал (125.54 КБ)</a>
"конфиг"
Screenshot-1.png (2365 просмотров) <a class='original' href='./download/file.php?id=9188&mode=view' target=_blank>Загрузить оригинал (103.14 КБ)</a>
халскоп
Screenshot-2.png (2365 просмотров) <a class='original' href='./download/file.php?id=9189&mode=view' target=_blank>Загрузить оригинал (92.65 КБ)</a>
в чем может быть дело ?
Каждая собака, бегущая на поводке впереди хозяина, думает, что ведет его за собой.
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5183
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: проблема с энкодером шпинделя

Сообщение Serg »

А почему импульсы разной скважности в пределах одного датчика? Считывалка не успевает считывать?
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
Аватара пользователя
Алексс
Почётный участник
Почётный участник
Сообщения: 2210
Зарегистрирован: 20 июл 2012, 15:49
Репутация: 266
Заслуга: IQ32
Настоящее имя: Алексей
Откуда: Прага
Контактная информация:

Re: проблема с энкодером шпинделя

Сообщение Алексс »

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

Re: проблема с энкодером шпинделя

Сообщение Nick »

Алексс писал(а):позиция считается, но скорость прыгает адски.
дискретность большая, прикинь сколько в среднем получается тиков энкодера за сервоцикл?
Надо lowpass фильтр добавить, можно с параметром 0.1-0.01, тогда все скачки сгладятся.


хммм... .сейчас вспомнил, что у энкодера есть хитрый параметр,
encoder.N.min-velocity-estimate float rw (default: 1.0)
Determine the minimum true velocity magnitude at which velocity will be estimated as nonzero and postition-interpolated will be interpolated. The units of min-velocity-estimate are the same as the units of velocity. Setting this parameter too low will cause it to take a long time for velocity to go to 0 after encoder pulses have stopped arriving.

И собственно скорость вычисляется как:
encoder.N.velocity float out
Velocity in scaled units per second. encoder uses an algorithm that greatly reduces quantization noise as compared to simply differentiating the position output. When the magnitude of the true velocity is below min-velocity-estimate, the velocity output is 0.


Только я так и не понял, что в этом контексте значит magnitude? Кто-нибудь может это грамотно на русский перевести?
Может этот тот же самый встроенный lowpass?

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

Re: проблема с энкодером шпинделя

Сообщение Nick »

И, кстати, скинь на всякий случай свой hal... есть тут одно сомнение....
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5183
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: проблема с энкодером шпинделя

Сообщение Serg »

Не, дело точно не в сверлении - посмотри все перепады с высокого на низкий чётко в одном и том-же месте и относительно друг друга и по частоте, а вот перепады с низкого на высокий гуляют.
Такое ощущение, что с датчиков импульсы идут ровные, а вот система замечает эти перепады с запаздыванием. И на графике видно, что фиолетовые пики соответствуют этим запаздываниям.
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
Аватара пользователя
Алексс
Почётный участник
Почётный участник
Сообщения: 2210
Зарегистрирован: 20 июл 2012, 15:49
Репутация: 266
Заслуга: IQ32
Настоящее имя: Алексей
Откуда: Прага
Контактная информация:

Re: проблема с энкодером шпинделя

Сообщение Алексс »

энкодер на месе. все параметры вывел на картинке.
Каждая собака, бегущая на поводке впереди хозяина, думает, что ведет его за собой.
Аватара пользователя
Алексс
Почётный участник
Почётный участник
Сообщения: 2210
Зарегистрирован: 20 июл 2012, 15:49
Репутация: 266
Заслуга: IQ32
Настоящее имя: Алексей
Откуда: Прага
Контактная информация:

Re: проблема с энкодером шпинделя

Сообщение Алексс »

Nick,
а вот и хал

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

# Generated by PNCconf at Thu Sep 27 11:24:54 2012
# If you make changes to this file, they will be
# 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_7i43 config="firmware=hm2/7i43-4/SVST4_4.BIT num_encoders=1 num_pwmgens=1 num_3pwmgens=0 num_stepgens=4  " 
setp     hm2_7i43.0.pwmgen.pwm_frequency 15000
setp     hm2_7i43.0.pwmgen.pdm_frequency 6000000
setp     hm2_7i43.0.watchdog.timeout_ns 10000000
loadrt abs names=abs.spindle
loadrt lowpass names=lowpass.spindle

addf hm2_7i43.0.read servo-thread
addf motion-command-handler servo-thread
addf motion-controller servo-thread
addf abs.spindle servo-thread
addf lowpass.spindle servo-thread
addf hm2_7i43.0.write         servo-thread
addf hm2_7i43.0.pet_watchdog  servo-thread

# external output signals

# external input signals

# --- BOTH-HOME-X ---
net both-home-x     <=  hm2_7i43.0.gpio.012.in

# --- BOTH-HOME-Y ---
net both-home-y     <=  hm2_7i43.0.gpio.013.in

# --- BOTH-HOME-Z ---
net both-home-z     <=  hm2_7i43.0.gpio.014.in

# --- HOME-A ---
#net home-a     <=  hm2_7i43.0.gpio.015.in

# --- PROBE-IN ---
net probe-in     <=  hm2_7i43.0.gpio.016.in_not

#*******************
#  AXIS X
#*******************

# Step Gen signals/setup

setp   hm2_7i43.0.stepgen.00.dirsetup        [AXIS_0]DIRSETUP
setp   hm2_7i43.0.stepgen.00.dirhold         [AXIS_0]DIRHOLD
setp   hm2_7i43.0.stepgen.00.steplen         [AXIS_0]STEPLEN
setp   hm2_7i43.0.stepgen.00.stepspace       [AXIS_0]STEPSPACE
setp   hm2_7i43.0.stepgen.00.position-scale  [AXIS_0]STEP_SCALE
setp   hm2_7i43.0.stepgen.00.step_type        0
setp   hm2_7i43.0.stepgen.00.control-type     0
setp   hm2_7i43.0.stepgen.00.maxaccel         1250.0
setp   hm2_7i43.0.stepgen.00.maxvel           83.3

net x-pos-fb     axis.0.motor-pos-fb   <=  hm2_7i43.0.stepgen.00.position-fb
net x-pos-cmd    axis.0.motor-pos-cmd  =>  hm2_7i43.0.stepgen.00.position-cmd
net x-enable     axis.0.amp-enable-out =>  hm2_7i43.0.stepgen.00.enable

# ---setup home / limit switch signals---

net both-home-x     =>  axis.0.home-sw-in
net both-home-x     =>  axis.0.neg-lim-sw-in
net both-home-x     =>  axis.0.pos-lim-sw-in

#*******************
#  AXIS Y
#*******************

# Step Gen signals/setup

setp   hm2_7i43.0.stepgen.01.dirsetup        [AXIS_1]DIRSETUP
setp   hm2_7i43.0.stepgen.01.dirhold         [AXIS_1]DIRHOLD
setp   hm2_7i43.0.stepgen.01.steplen         [AXIS_1]STEPLEN
setp   hm2_7i43.0.stepgen.01.stepspace       [AXIS_1]STEPSPACE
setp   hm2_7i43.0.stepgen.01.position-scale  [AXIS_1]STEP_SCALE
setp   hm2_7i43.0.stepgen.01.step_type        0
setp   hm2_7i43.0.stepgen.01.control-type     0
setp   hm2_7i43.0.stepgen.01.maxaccel         1250.0
setp   hm2_7i43.0.stepgen.01.maxvel           72.9

net y-pos-fb     axis.1.motor-pos-fb   <=  hm2_7i43.0.stepgen.01.position-fb
net y-pos-cmd    axis.1.motor-pos-cmd  =>  hm2_7i43.0.stepgen.01.position-cmd
net y-enable     axis.1.amp-enable-out =>  hm2_7i43.0.stepgen.01.enable

# ---setup home / limit switch signals---

net both-home-y     =>  axis.1.home-sw-in
net both-home-y     =>  axis.1.neg-lim-sw-in
net both-home-y     =>  axis.1.pos-lim-sw-in

#*******************
#  AXIS Z
#*******************

# Step Gen signals/setup

setp   hm2_7i43.0.stepgen.02.dirsetup        [AXIS_2]DIRSETUP
setp   hm2_7i43.0.stepgen.02.dirhold         [AXIS_2]DIRHOLD
setp   hm2_7i43.0.stepgen.02.steplen         [AXIS_2]STEPLEN
setp   hm2_7i43.0.stepgen.02.stepspace       [AXIS_2]STEPSPACE
setp   hm2_7i43.0.stepgen.02.position-scale  [AXIS_2]STEP_SCALE
setp   hm2_7i43.0.stepgen.02.step_type        0
setp   hm2_7i43.0.stepgen.02.control-type     0
setp   hm2_7i43.0.stepgen.02.maxaccel         625.0
setp   hm2_7i43.0.stepgen.02.maxvel           20.8

net z-pos-fb     axis.2.motor-pos-fb   <=  hm2_7i43.0.stepgen.02.position-fb
net z-pos-cmd    axis.2.motor-pos-cmd  =>  hm2_7i43.0.stepgen.02.position-cmd
net z-enable     axis.2.amp-enable-out =>  hm2_7i43.0.stepgen.02.enable

# ---setup home / limit switch signals---

net both-home-z     =>  axis.2.home-sw-in
net both-home-z     =>  axis.2.neg-lim-sw-in
net both-home-z     =>  axis.2.pos-lim-sw-in

#*******************
#  SPINDLE S
#*******************
setp   hm2_7i43.0.encoder.00.scale 35

# ---PWM Generator signals/setup---

setp   hm2_7i43.0.pwmgen.00.output-type 1
setp   hm2_7i43.0.pwmgen.00.scale  [SPINDLE_9]OUTPUT_SCALE


net spindle-vel-cmd     => hm2_7i43.0.pwmgen.00.value
net spindle-enable      => hm2_7i43.0.pwmgen.00.enable

# ---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
net spindle-revs           =>  motion.spindle-revs hm2_7i43.0.encoder.00.position
net spindle-at-speed       =>  motion.spindle-at-speed
net spindle-vel-fb         =>  motion.spindle-speed-in hm2_7i43.0.encoder.00.velocity
net spindle-index-enable  <=>  motion.spindle-index-enable hm2_7i43.0.encoder.00.index-enable

# ---Setup spindle at speed signals---

sets spindle-at-speed true

#  Use COMMANDED spindle velocity from LinuxCNC because no spindle encoder was specified
#  COMMANDED velocity is signed so we use absolute component to remove sign

net spindle-vel-fb         =>    abs.spindle.in
net absolute-spindle-vel    <=    abs.spindle.out

#******************************
# connect miscellaneous signals
#******************************

#  ---HALUI signals---

net joint-select-a        halui.joint.0.select
net x-is-homed            halui.joint.0.is-homed
net jog-x-pos             halui.jog.0.plus
net jog-x-neg             halui.jog.0.minus
net jog-x-analog          halui.jog.0.analog
net joint-select-b        halui.joint.1.select
net y-is-homed            halui.joint.1.is-homed
net jog-y-pos             halui.jog.1.plus
net jog-y-neg             halui.jog.1.minus
net jog-y-analog          halui.jog.1.analog
net joint-select-c        halui.joint.2.select
net z-is-homed            halui.joint.2.is-homed
net jog-z-pos             halui.jog.2.plus
net jog-z-neg             halui.jog.2.minus
net jog-z-analog          halui.jog.2.analog
net jog-selected-pos      halui.jog.selected.plus
net jog-selected-neg      halui.jog.selected.minus
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 jog-speed             halui.jog-speed 
net MDI-mode              halui.mode.is-mdi

#  ---coolant signals---

net coolant-mist      <=  iocontrol.0.coolant-mist
net coolant-flood     <=  iocontrol.0.coolant-flood

#  ---probe signal---

net probe-in     =>  motion.probe-input

#  ---motion control signals---

net in-position               <=  motion.in-position
net machine-is-enabled        <=  motion.motion-enabled

#  ---digital in / out signals---

#  ---estop signals---

net estop-out     <=  iocontrol.0.user-enable-out
net estop-out     =>  iocontrol.0.emc-enable-in

#  ---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
Каждая собака, бегущая на поводке впереди хозяина, думает, что ведет его за собой.
Аватара пользователя
Сергей Саныч
Мастер
Сообщения: 9116
Зарегистрирован: 30 май 2012, 14:20
Репутация: 2858
Откуда: Тюмень
Контактная информация:

Re: проблема с энкодером шпинделя

Сообщение Сергей Саныч »

Нормальным осциллографом смотрел? При таких параметрах дискретизации невозможно что-то оценить. Тут получается всего два отсчета на деление.
ЗЫ: Просветите, зачем нужен энкодер на шпинделе фрезера, да еще с определением положения и направления?
Чудес не бывает. Бывают фокусы.
Аватара пользователя
Сергей Саныч
Мастер
Сообщения: 9116
Зарегистрирован: 30 май 2012, 14:20
Репутация: 2858
Откуда: Тюмень
Контактная информация:

Re: проблема с энкодером шпинделя

Сообщение Сергей Саныч »

Nick писал(а):Determine the minimum true velocity magnitude at which velocity will be estimated as nonzero and postition-interpolated will be interpolated. The units of min-velocity-estimate are the same as the units of velocity. Setting this parameter too low will cause it to take a long time for velocity to go to 0 after encoder pulses have stopped arriving
Определяет истинное значение минимальной скорости, при котором скорость будет определяться как ненулевая, и будет работать интерполяция положения. Единицы min-velocity-estimate такие же, как единицы velocity. Установка этого параметра слишком малым приведет к увеличению задержки между прекращением поступления импульсов от датчика и установкой velocity в 0.

Если короче, то min-velocity-estimate задает порог, ниже которого скорость считается нулевой.
Nick писал(а):algorithm that greatly reduces quantization noise as compared to simply differentiating the position output
ну да, похоже на ФНЧ.

magnitude здесь - значение, величина.
Чудес не бывает. Бывают фокусы.
Аватара пользователя
Алексс
Почётный участник
Почётный участник
Сообщения: 2210
Зарегистрирован: 20 июл 2012, 15:49
Репутация: 266
Заслуга: IQ32
Настоящее имя: Алексей
Откуда: Прага
Контактная информация:

Re: проблема с энкодером шпинделя

Сообщение Алексс »

Serg-tmn, не смотрел - нету такой штуки.
ладно бы обороты плавали чуть чуть... так оно прыгает в разы.

энкодер нужен для нарезания резьбы, для токарных работ для поддержания правильной скорости резания и съема на оборот.
возможно сигнал B не нужен - направление не важно (наверное). но это еще нужно проверить.

ну и хочется иметь возможность делать вот так:
https://www.youtube.com/watch?v=ZhICrb0Tbn4
Каждая собака, бегущая на поводке впереди хозяина, думает, что ведет его за собой.
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: проблема с энкодером шпинделя

Сообщение Nick »

А не пробовал менять vel-timiout у энкодера?
Аватара пользователя
Алексс
Почётный участник
Почётный участник
Сообщения: 2210
Зарегистрирован: 20 июл 2012, 15:49
Репутация: 266
Заслуга: IQ32
Настоящее имя: Алексей
Откуда: Прага
Контактная информация:

Re: проблема с энкодером шпинделя

Сообщение Алексс »

неа, там пол секунды, врядтли имеет значение...
попробую.

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

Re: проблема с энкодером шпинделя

Сообщение Nick »

что-то я не понимаю на halscope у тебя стоят пины gpio 7i43. Но они читаются раз в servo-thread! Неравномерность может быть жуткой.
С другой стороны у тебя все подключено к энкодеру на mesa 7i43... :thinking:

Если включать halscope, то тогда надо эти пины вывести на lpt и смотреть их в base-thread.
Аватара пользователя
Алексс
Почётный участник
Почётный участник
Сообщения: 2210
Зарегистрирован: 20 июл 2012, 15:49
Репутация: 266
Заслуга: IQ32
Настоящее имя: Алексей
Откуда: Прага
Контактная информация:

Re: проблема с энкодером шпинделя

Сообщение Алексс »

по другому эти пины не посмотреть :(
сейчас два часа плясал там - хер что изменилось.

закрыл все отверстия кроме двух - для A и для index.
включил режим 1 - не учитывать B сигнал.

все равно скорость скачет. причем есть некая закономерность - сначала показывает большую скорость, потом она постепенно падает до нуля или около и цикл повторяется. весь этот цикл длится 2-3 секунды.

пробовал закрыть index - не помогает.

игрался с параметрами index-mask - один раз даже станок сдвинулся по команде g33. и все. замер. повторить не удалось :)
читал доку, что за параметры так и не понял.

моск закипел...
(bit r/w) index-invert
If set to True, the rising edge of the Index input pin triggers the Index event (if index-enable is True). If set to False, the falling edge triggers.
(bit r/w) index-mask
If set to True, the Index input pin only has an effect if the Index-Mask input pin is True (or False, depending on the index-mask-invert pin below).
(bit r/w) index-mask-invert
If set to True, Index-Mask must be False for Index to have an effect. If set to False, the Index-Mask pin must be True.
а вот очень радостное уточнение, бля
(bit r/w) counter-mode
Set to False (the default) for Quadrature. Set to True for Step/Dir (in which case Step is on the A pin and Dir is on the B pin).
вопрос - как очистить внутреннюю очередь mdi ?
Каждая собака, бегущая на поводке впереди хозяина, думает, что ведет его за собой.
Аватара пользователя
Алексс
Почётный участник
Почётный участник
Сообщения: 2210
Зарегистрирован: 20 июл 2012, 15:49
Репутация: 266
Заслуга: IQ32
Настоящее имя: Алексей
Откуда: Прага
Контактная информация:

Re: проблема с энкодером шпинделя

Сообщение Алексс »

синхронное движение более менее победил - прописал все параметры в hal и заработало.
осталось решить вопрос с энкодером и будет хорошо.
Каждая собака, бегущая на поводке впереди хозяина, думает, что ведет его за собой.
nik1
Мастер
Сообщения: 8408
Зарегистрирован: 02 окт 2012, 07:37
Репутация: 3629
Откуда: Красногорск
Контактная информация:

Re: проблема с энкодером шпинделя

Сообщение nik1 »

Крутяцкую штуку затеял :good:
Аватара пользователя
Алексс
Почётный участник
Почётный участник
Сообщения: 2210
Зарегистрирован: 20 июл 2012, 15:49
Репутация: 266
Заслуга: IQ32
Настоящее имя: Алексей
Откуда: Прага
Контактная информация:

Re: проблема с энкодером шпинделя

Сообщение Алексс »

вот как получится - может и будет. а пока только головная боль :)
Каждая собака, бегущая на поводке впереди хозяина, думает, что ведет его за собой.
nik1
Мастер
Сообщения: 8408
Зарегистрирован: 02 окт 2012, 07:37
Репутация: 3629
Откуда: Красногорск
Контактная информация:

Re: проблема с энкодером шпинделя

Сообщение nik1 »

Уже столько сделано, отступать низзя :)
Аватара пользователя
aegis
Мастер
Сообщения: 3171
Зарегистрирован: 22 мар 2012, 06:59
Репутация: 1810
Настоящее имя: Михайло
Откуда: Україна, Конотоп=>Запоріжжя=>Харьків

Re: проблема с энкодером шпинделя

Сообщение aegis »

уж мне кажется, что купить готовый закрытый от пыли и грязи энкодер скажем на 100 импульсов за 50 баксов куда выгодней, чем пару дней трахаться безрезультатно в ущерб работе (заработку)
нікому нічого не нав'язую.
Ответить

Вернуться в «Электроника»