проблема с энкодером шпинделя
- Алексс
- Почётный участник

- Сообщения: 2210
- Зарегистрирован: 20 июл 2012, 15:49
- Репутация: 266
- Заслуга: IQ32
- Настоящее имя: Алексей
- Откуда: Прага
- Контактная информация:
проблема с энкодером шпинделя
приветствую!
сегодня подключил энкодер шпинделя. даже как-то работает, но не совсем так как хочется.
позиция считается, но скорость прыгает адски.
так это выглядит в железе "конфиг" халскоп в чем может быть дело ?
сегодня подключил энкодер шпинделя. даже как-то работает, но не совсем так как хочется.
позиция считается, но скорость прыгает адски.
так это выглядит в железе "конфиг" халскоп в чем может быть дело ?
Каждая собака, бегущая на поводке впереди хозяина, думает, что ведет его за собой.
- Serg
- Мастер
- Сообщения: 21923
- Зарегистрирован: 17 апр 2012, 14:58
- Репутация: 5183
- Заслуга: c781c134843e0c1a3de9
- Настоящее имя: Сергей
- Откуда: Москва
- Контактная информация:
Re: проблема с энкодером шпинделя
А почему импульсы разной скважности в пределах одного датчика? Считывалка не успевает считывать?
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
- Алексс
- Почётный участник

- Сообщения: 2210
- Зарегистрирован: 20 июл 2012, 15:49
- Репутация: 266
- Заслуга: IQ32
- Настоящее имя: Алексей
- Откуда: Прага
- Контактная информация:
Re: проблема с энкодером шпинделя
возможно изза осцилоскопа - низкая частота.
ну или насверлилось не совсем точно.
ну или насверлилось не совсем точно.
Каждая собака, бегущая на поводке впереди хозяина, думает, что ведет его за собой.
- Nick
- Мастер
- Сообщения: 22776
- Зарегистрирован: 23 ноя 2009, 16:45
- Репутация: 1735
- Заслуга: Developer
- Откуда: Gatchina, Saint-Petersburg distr., Russia
- Контактная информация:
Re: проблема с энкодером шпинделя
дискретность большая, прикинь сколько в среднем получается тиков энкодера за сервоцикл?Алексс писал(а):позиция считается, но скорость прыгает адски.
Надо 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: проблема с энкодером шпинделя
И, кстати, скинь на всякий случай свой hal... есть тут одно сомнение....
- Serg
- Мастер
- Сообщения: 21923
- Зарегистрирован: 17 апр 2012, 14:58
- Репутация: 5183
- Заслуга: c781c134843e0c1a3de9
- Настоящее имя: Сергей
- Откуда: Москва
- Контактная информация:
Re: проблема с энкодером шпинделя
Не, дело точно не в сверлении - посмотри все перепады с высокого на низкий чётко в одном и том-же месте и относительно друг друга и по частоте, а вот перепады с низкого на высокий гуляют.
Такое ощущение, что с датчиков импульсы идут ровные, а вот система замечает эти перепады с запаздыванием. И на графике видно, что фиолетовые пики соответствуют этим запаздываниям.
Такое ощущение, что с датчиков импульсы идут ровные, а вот система замечает эти перепады с запаздыванием. И на графике видно, что фиолетовые пики соответствуют этим запаздываниям.
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
- Алексс
- Почётный участник

- Сообщения: 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: проблема с энкодером шпинделя
Определяет истинное значение минимальной скорости, при котором скорость будет определяться как ненулевая, и будет работать интерполяция положения. Единицы min-velocity-estimate такие же, как единицы velocity. Установка этого параметра слишком малым приведет к увеличению задержки между прекращением поступления импульсов от датчика и установкой velocity в 0.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 задает порог, ниже которого скорость считается нулевой.
ну да, похоже на ФНЧ.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
ладно бы обороты плавали чуть чуть... так оно прыгает в разы.
энкодер нужен для нарезания резьбы, для токарных работ для поддержания правильной скорости резания и съема на оборот.
возможно сигнал B не нужен - направление не важно (наверное). но это еще нужно проверить.
ну и хочется иметь возможность делать вот так:
https://www.youtube.com/watch?v=ZhICrb0Tbn4
Каждая собака, бегущая на поводке впереди хозяина, думает, что ведет его за собой.
- Nick
- Мастер
- Сообщения: 22776
- Зарегистрирован: 23 ноя 2009, 16:45
- Репутация: 1735
- Заслуга: Developer
- Откуда: Gatchina, Saint-Petersburg distr., Russia
- Контактная информация:
Re: проблема с энкодером шпинделя
А не пробовал менять vel-timiout у энкодера?
- Алексс
- Почётный участник

- Сообщения: 2210
- Зарегистрирован: 20 июл 2012, 15:49
- Репутация: 266
- Заслуга: IQ32
- Настоящее имя: Алексей
- Откуда: Прага
- Контактная информация:
Re: проблема с энкодером шпинделя
неа, там пол секунды, врядтли имеет значение...
попробую.
все-же я думаю что скорость скачет из-за неравномерности импульсов.
а вот с чем связана эта неравномерность - хз
попробую.
все-же я думаю что скорость скачет из-за неравномерности импульсов.
а вот с чем связана эта неравномерность - хз
Каждая собака, бегущая на поводке впереди хозяина, думает, что ведет его за собой.
- Nick
- Мастер
- Сообщения: 22776
- Зарегистрирован: 23 ноя 2009, 16:45
- Репутация: 1735
- Заслуга: Developer
- Откуда: Gatchina, Saint-Petersburg distr., Russia
- Контактная информация:
Re: проблема с энкодером шпинделя
что-то я не понимаю на halscope у тебя стоят пины gpio 7i43. Но они читаются раз в servo-thread! Неравномерность может быть жуткой.
С другой стороны у тебя все подключено к энкодеру на mesa 7i43...
Если включать halscope, то тогда надо эти пины вывести на lpt и смотреть их в base-thread.
С другой стороны у тебя все подключено к энкодеру на mesa 7i43...
Если включать halscope, то тогда надо эти пины вывести на lpt и смотреть их в base-thread.
- Алексс
- Почётный участник

- Сообщения: 2210
- Зарегистрирован: 20 июл 2012, 15:49
- Репутация: 266
- Заслуга: IQ32
- Настоящее имя: Алексей
- Откуда: Прага
- Контактная информация:
Re: проблема с энкодером шпинделя
по другому эти пины не посмотреть 
сейчас два часа плясал там - хер что изменилось.
закрыл все отверстия кроме двух - для A и для index.
включил режим 1 - не учитывать B сигнал.
все равно скорость скачет. причем есть некая закономерность - сначала показывает большую скорость, потом она постепенно падает до нуля или около и цикл повторяется. весь этот цикл длится 2-3 секунды.
пробовал закрыть index - не помогает.
игрался с параметрами index-mask - один раз даже станок сдвинулся по команде g33. и все. замер. повторить не удалось
читал доку, что за параметры так и не понял.
моск закипел...
сейчас два часа плясал там - хер что изменилось.
закрыл все отверстия кроме двух - для 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.
вопрос - как очистить внутреннюю очередь mdi ?(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).
Каждая собака, бегущая на поводке впереди хозяина, думает, что ведет его за собой.
- Алексс
- Почётный участник

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

- Сообщения: 2210
- Зарегистрирован: 20 июл 2012, 15:49
- Репутация: 266
- Заслуга: IQ32
- Настоящее имя: Алексей
- Откуда: Прага
- Контактная информация:
Re: проблема с энкодером шпинделя
вот как получится - может и будет. а пока только головная боль 
Каждая собака, бегущая на поводке впереди хозяина, думает, что ведет его за собой.
-
nik1
- Мастер
- Сообщения: 8408
- Зарегистрирован: 02 окт 2012, 07:37
- Репутация: 3629
- Откуда: Красногорск
- Контактная информация:
Re: проблема с энкодером шпинделя
Уже столько сделано, отступать низзя 
- aegis
- Мастер
- Сообщения: 3171
- Зарегистрирован: 22 мар 2012, 06:59
- Репутация: 1810
- Настоящее имя: Михайло
- Откуда: Україна, Конотоп=>Запоріжжя=>Харьків
Re: проблема с энкодером шпинделя
уж мне кажется, что купить готовый закрытый от пыли и грязи энкодер скажем на 100 импульсов за 50 баксов куда выгодней, чем пару дней трахаться безрезультатно в ущерб работе (заработку)
нікому нічого не нав'язую.
