Страница 1 из 4
проблема с энкодером шпинделя
Добавлено: 09 ноя 2012, 23:41
Алексс
приветствую!
сегодня подключил энкодер шпинделя. даже как-то работает, но не совсем так как хочется.
позиция считается, но скорость прыгает адски.
так это выглядит в железе
"конфиг"
халскоп
в чем может быть дело ?
Re: проблема с энкодером шпинделя
Добавлено: 09 ноя 2012, 23:58
Serg
А почему импульсы разной скважности в пределах одного датчика? Считывалка не успевает считывать?
Re: проблема с энкодером шпинделя
Добавлено: 10 ноя 2012, 00:17
Алексс
возможно изза осцилоскопа - низкая частота.
ну или насверлилось не совсем точно.
Re: проблема с энкодером шпинделя
Добавлено: 10 ноя 2012, 00:40
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?
ЗЫ энкодер зачетный

Re: проблема с энкодером шпинделя
Добавлено: 10 ноя 2012, 00:43
Nick
И, кстати, скинь на всякий случай свой hal... есть тут одно сомнение....
Re: проблема с энкодером шпинделя
Добавлено: 10 ноя 2012, 00:44
Serg
Не, дело точно не в сверлении - посмотри все перепады с высокого на низкий чётко в одном и том-же месте и относительно друг друга и по частоте, а вот перепады с низкого на высокий гуляют.
Такое ощущение, что с датчиков импульсы идут ровные, а вот система замечает эти перепады с запаздыванием. И на графике видно, что фиолетовые пики соответствуют этим запаздываниям.
Re: проблема с энкодером шпинделя
Добавлено: 10 ноя 2012, 00:55
Алексс
энкодер на месе. все параметры вывел на картинке.
Re: проблема с энкодером шпинделя
Добавлено: 10 ноя 2012, 01:27
Алексс
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
Re: проблема с энкодером шпинделя
Добавлено: 10 ноя 2012, 03:23
Сергей Саныч
Нормальным осциллографом смотрел? При таких параметрах дискретизации невозможно что-то оценить. Тут получается всего два отсчета на деление.
ЗЫ: Просветите, зачем нужен энкодер на шпинделе фрезера, да еще с определением положения и направления?
Re: проблема с энкодером шпинделя
Добавлено: 10 ноя 2012, 03:55
Сергей Саныч
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 здесь - значение, величина.
Re: проблема с энкодером шпинделя
Добавлено: 10 ноя 2012, 11:29
Алексс
Serg-tmn, не смотрел - нету такой штуки.
ладно бы обороты плавали чуть чуть... так оно прыгает в разы.
энкодер нужен для нарезания резьбы, для токарных работ для поддержания правильной скорости резания и съема на оборот.
возможно сигнал B не нужен - направление не важно (наверное). но это еще нужно проверить.
ну и хочется иметь возможность делать вот так:
https://www.youtube.com/watch?v=ZhICrb0Tbn4
Re: проблема с энкодером шпинделя
Добавлено: 10 ноя 2012, 12:38
Nick
А не пробовал менять vel-timiout у энкодера?
Re: проблема с энкодером шпинделя
Добавлено: 10 ноя 2012, 12:59
Алексс
неа, там пол секунды, врядтли имеет значение...
попробую.
все-же я думаю что скорость скачет из-за неравномерности импульсов.
а вот с чем связана эта неравномерность - хз
Re: проблема с энкодером шпинделя
Добавлено: 10 ноя 2012, 14:10
Nick
что-то я не понимаю на halscope у тебя стоят пины gpio 7i43. Но они читаются раз в servo-thread! Неравномерность может быть жуткой.
С другой стороны у тебя все подключено к энкодеру на mesa 7i43...
Если включать halscope, то тогда надо эти пины вывести на lpt и смотреть их в base-thread.
Re: проблема с энкодером шпинделя
Добавлено: 10 ноя 2012, 14:57
Алексс
по другому эти пины не посмотреть

сейчас два часа плясал там - хер что изменилось.
закрыл все отверстия кроме двух - для 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 ?
Re: проблема с энкодером шпинделя
Добавлено: 10 ноя 2012, 18:15
Алексс
синхронное движение более менее победил - прописал все параметры в hal и заработало.
осталось решить вопрос с энкодером и будет хорошо.
Re: проблема с энкодером шпинделя
Добавлено: 10 ноя 2012, 18:26
nik1
Крутяцкую штуку затеял

Re: проблема с энкодером шпинделя
Добавлено: 10 ноя 2012, 18:29
Алексс
вот как получится - может и будет. а пока только головная боль

Re: проблема с энкодером шпинделя
Добавлено: 10 ноя 2012, 19:02
nik1
Уже столько сделано, отступать низзя

Re: проблема с энкодером шпинделя
Добавлено: 10 ноя 2012, 19:04
aegis
уж мне кажется, что купить готовый закрытый от пыли и грязи энкодер скажем на 100 импульсов за 50 баксов куда выгодней, чем пару дней трахаться безрезультатно в ущерб работе (заработку)