Страница 1 из 1
Как описать серву в качестве шпинделя ?
Добавлено: 26 фев 2017, 17:53
SVP
Что-то полдня уже читаю доки, форум итп, просветление не снисходит.
Есть микро-токарник, в качестве двигателя шпинделя используется 200вт серва.
Все подключено через месу.
Всё крутится и ездит когда я использую чуть поправленный фрезерный конфиг.
Но хочется как-то перейти к токарному, в идеале с резьбонарезанием итп.
Т.е. как-то прописать имеющуюся серву в виде шпинделя, а не отдельно оси.
Не могу сообразить как.
Сейчас для неё написано
Код: Выделить всё
# axis enable chain
newsig emcmot.02.enable bit
sets emcmot.02.enable true
net emcmot.02.enable => pid.2.enable
net emcmot.02.enable <= axis.2.amp-enable-out
# encoder feedback
setp hm2_[HOSTMOT2](BOARD).0.encoder.02.counter-mode 0
setp hm2_[HOSTMOT2](BOARD).0.encoder.02.filter 1
setp hm2_[HOSTMOT2](BOARD).0.encoder.02.index-invert 0
setp hm2_[HOSTMOT2](BOARD).0.encoder.02.index-mask 0
setp hm2_[HOSTMOT2](BOARD).0.encoder.02.index-mask-invert 0
setp hm2_[HOSTMOT2](BOARD).0.encoder.02.scale [AXIS_2]INPUT_SCALE
net motor.02.pos-fb hm2_[HOSTMOT2](BOARD).0.encoder.02.position => pid.2.feedback
net motor.02.pos-fb => axis.2.motor-pos-fb #push copy back to Axis GUI
и
Код: Выделить всё
[AXIS_2]
TYPE = ANGULAR
ANGULAR_UNIT = deg
MAX_VELOCITY = 2000.0
MAX_ACCELERATION = 400.0
BACKLASH = 0.000
FERROR = 10000.110
MIN_FERROR = 1000.102
INPUT_SCALE = -22.75556
OUTPUT_SCALE = 1.000
OUTPUT_OFFSET = 0.0
MAX_OUTPUT = 10
MIN_LIMIT = -300.0
MAX_LIMIT = 300.0
HOME = 0.0
HOME_OFFSET = -2.9
HOME_SEARCH_VEL = -0.50
HOME_LATCH_VEL = 0.10
# the Z axis servo's encoder does not have an index channel, so we have to home without index
HOME_USE_INDEX = NO
HOME_IGNORE_LIMITS = YES
# PID tuning params
пока по умолчанию
Как я понимаю как ось её надо удалить вообще, и как-то описать как шпиндель с возвратом положения.
Куда рыть-то ?
Что нужно обеспечить для lcnc в качестве сигналов и куда их связывать ?
Пример может какой есть исчерпывающий ?
ЗЫ. В идеале еще оставить возможность гравировать при неподвижном шпинделе, но полагаю,
что это можно просто решить перезагрузкой конфига на конфиг от фрезера, по крайней мере для начала.
Re: Как описать серву в качестве шпинделя ?
Добавлено: 26 фев 2017, 19:43
SVP
Попробовал отсюда взять
http://www.cnc-club.ru/forum/viewtopic.php?f=15&t=10347
Но чей-то ругается на неопределенный
pid.s.Pgain прям сразу
ЗЫ. Пинанием pnnconf смог заставить его все-таки крутиться, правда зарраза стартует, 1с раскручивается и падает с ошибкой, будем курить дальше...
Re: Как описать серву в качестве шпинделя ?
Добавлено: 27 фев 2017, 16:49
solo
Re: Как описать серву в качестве шпинделя ?
Добавлено: 27 фев 2017, 17:02
SVP
Да, спасибо, по виду то что надо, буду пробовать курить.
Что-то простая вроде вещь, а никак не пойму до конца что куда сувать.
Re: Как описать серву в качестве шпинделя ?
Добавлено: 27 фев 2017, 22:01
SVP
Путем скрещивания ежа с ужом смог добиться, чтобы шпиндель хотя-б стартовал.
Но судя по всему задание гонится максимальное, аж >3000 серва разгоняется.
Пробовал смотреть на пине analogout2 - единица... я так понимаю это 100% заполнение
шим-ом, понять бы только каким напряжением...
Как-то можно текущую скорость шпинделя прям в lcnc вывести куда-нибудь в удобное место ?
Re: Как описать серву в качестве шпинделя ?
Добавлено: 27 фев 2017, 22:07
nkp
Re: Как описать серву в качестве шпинделя ?
Добавлено: 27 фев 2017, 22:08
SVP
Оо, спасибо огромное, щаз будем внедрять
Re: Как описать серву в качестве шпинделя ?
Добавлено: 27 фев 2017, 23:10
SVP
Ммм... нет, все-таки надо разобраться, что и куда пихать.
В качестве выхода у меня есть hm2_5i25.0.7i77.0.1.analogout2
в него как я понимаю должно попасть задание +-10в
Откуда его теперь взять, вот в чем вопрос ?
Куда-то должна попасть информация с энкодера, чтобы как-то при резьбонарезании итп она использовалась
энкодер - hm2_5i25.0.encoder.02
Я верно понимаю, что всё это надо как-то связать по-хитрому с семейством пинов "motion.spindle" ?
Надо ли использовать тут пид ? Или удалить сразу ?
Примеры смотрю и как-то просветление не наступает, непонятно какие пины с какими надо связать,
и главное как понять какие лишние, какие нужные итп
Последний хал выглядит как-то так
Код: Выделить всё
setp pid.s.Pgain [SPINDLE_9]P
setp pid.s.Igain [SPINDLE_9]I
setp pid.s.Dgain [SPINDLE_9]D
setp pid.s.bias [SPINDLE_9]BIAS
setp pid.s.FF0 [SPINDLE_9]FF0
setp pid.s.FF1 [SPINDLE_9]FF1
setp pid.s.FF2 [SPINDLE_9]FF2
setp pid.s.deadband [SPINDLE_9]DEADBAND
setp pid.s.maxoutput [SPINDLE_9]MAX_OUTPUT
#setp pid.s.error-previous-target true
setp pid.s.maxerror .10
net spindle-index-enable <=> pid.s.index-enable
net spindle-enable => pid.s.enable
net spindle-vel-cmd-rpm-abs => pid.s.command
net spindle-vel-fb-rpm-abs => pid.s.feedback
net spindle-output <= pid.s.output
# ---PWM Generator signals/setup---
setp hm2_5i25.0.7i77.0.1.analogout2-scalemax [SPINDLE_9]OUTPUT_SCALE
setp hm2_5i25.0.7i77.0.1.analogout2-minlim [SPINDLE_9]OUTPUT_MIN_LIMIT
setp hm2_5i25.0.7i77.0.1.analogout2-maxlim [SPINDLE_9]OUTPUT_MAX_LIMIT
net spindle-vel-cmd => hm2_5i25.0.7i77.0.1.analogout2
net spindle-enable => hm2_5i25.0.7i77.0.1.spinena
#net spindle-vel-cmd pid.s.output => hm2_[HOSTMOT2](BOARD).0.7i77.0.1.analogout2
# ---Encoder feedback signals/setup---
setp hm2_5i25.0.encoder.02.counter-mode 0
setp hm2_5i25.0.encoder.02.filter 1
setp hm2_5i25.0.encoder.02.index-invert 0
setp hm2_5i25.0.encoder.02.index-mask 0
setp hm2_5i25.0.encoder.02.index-mask-invert 0
setp hm2_5i25.0.encoder.02.scale [SPINDLE_9]ENCODER_SCALE
net spindle-revs <= hm2_5i25.0.encoder.02.position
net spindle-vel-fb-rps <= hm2_5i25.0.encoder.02.velocity
net spindle-index-enable <=> hm2_5i25.0.encoder.02.index-enable
# ---setup spindle control signals---
net spindle-vel-cmd-rps <= motion.spindle-speed-out-rps
#net spindle-vel-cmd-rps-abs <= motion.spindle-speed-out-rps-abs
net spindle-vel-cmd <= motion.spindle-speed-out
#net spindle-vel-cmd-rpm-abs <= motion.spindle-speed-out-abs
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
net spindle-at-speed => motion.spindle-at-speed
net spindle-vel-fb-rps => motion.spindle-speed-in
net spindle-index-enable <=> motion.spindle-index-enable
sets spindle-at-speed true
# Use ACTUAL spindle velocity from spindle encoder
# spindle-velocity bounces around so we filter it with lowpass
# spindle-velocity is signed so we use absolute component to remove sign
# ACTUAL velocity is in RPS not RPM so we scale it.
setp scale.spindle.gain 60
setp lowpass.spindle.gain 1.000000
net spindle-vel-fb-rps => scale.spindle.in
net spindle-fb-rpm scale.spindle.out => abs.spindle.in
net spindle-fb-rpm-abs abs.spindle.out => lowpass.spindle.in
net spindle-fb-rpm-abs-filtered lowpass.spindle.out
Re: Как описать серву в качестве шпинделя ?
Добавлено: 27 фев 2017, 23:24
nkp
SVP писал(а):Ммм... нет, все-таки надо разобраться, что и куда пихать.
это сейчас про индикацю оборотов или про "основной" вопрос темы?))
емс выдает задание на пид регулятор ,с него уже на месу
в соответствии с этим сигналом меса генерирует шим ,с него получается(при надобности) +-10v
ОС: меса читает энкодер и передает данные в емс
Re: Как описать серву в качестве шпинделя ?
Добавлено: 28 фев 2017, 07:50
nkp
как пример:
Код: Выделить всё
setp hm2_[HOSTMOT2](BOARD).0.encoder.02.counter-mode 1
setp hm2_[HOSTMOT2](BOARD).0.encoder.02.filter 1
setp hm2_[HOSTMOT2](BOARD).0.encoder.02.index-invert 0
setp hm2_[HOSTMOT2](BOARD).0.encoder.02.index-mask 0
setp hm2_[HOSTMOT2](BOARD).0.encoder.02.index-mask-invert 0
setp hm2_[HOSTMOT2](BOARD).0.encoder.02.scale 2500
net spindle-vel-cmd motion.spindle-speed-out => hm2_[HOSTMOT2](BOARD).0.7i77.0.1.analogout5
net spindle-index motion.spindle-index-enable <= hm2_[HOSTMOT2](BOARD).0.encoder.02.index-enable
net spindle-velocity motion.spindle-speed-in <= hm2_[HOSTMOT2](BOARD).0.encoder.02.velocity
net spindle-revs motion.spindle-revs <= hm2_[HOSTMOT2](BOARD).0.encoder.02.position
setp hm2_5i25.0.7i77.0.1.analogout5-scalemax 2500
setp hm2_5i25.0.7i77.0.1.analogout5-minlim -2500
setp hm2_5i25.0.7i77.0.1.analogout5-maxlim 2500
net spindle_in motion.spindle-on => hm2_[HOSTMOT2](BOARD).0.7i77.0.1.spinena
loadrt near
addf near.0 servo-thread
setp near.0.scale 1.3
net spindle-vel-cmd => near.0.in1
net spindle-velocity => near.0.in2
net spindle-at-speed motion.spindle-at-speed <= near.0.out
Re: Как описать серву в качестве шпинделя ?
Добавлено: 28 фев 2017, 21:05
SVP
OUTPUT_SCALE = 3000.0
OUTPUT_MIN_LIMIT = -3000.0
OUTPUT_MAX_LIMIT = 3000.0
Несколько улучшили ситуацию. (было +-10)
Курю дальше
Re: Как описать серву в качестве шпинделя ?
Добавлено: 28 фев 2017, 21:29
SVP
А эээ... можно такой пример как-то прокомментировать ?
Это подключение панели, не могу нифига понять как должно работать
loadrt mult2
addf mult2.0 servo-thread
setp mult2.0.in1 28.75
net cypher_speed mult2.0.in0 <= spindle-vfd.frequency-out -- загружаем в mult2.0.in0 информацию из spindle-vfd.frequency-out ?
net speed_out pyvcp.spindle_rpm <= mult2.0.out - загружаем в pyvcp.spindle_rpm результат умножения на 28.75 ?
но почему тут
http://www.cnc-club.ru/wiki/index.php/L ... 0%BE%D0%B2
написано так
(команда) (имя связи) (источник "сигнала") (приёмник "сигнала")
net vel <= motion.current-vel => stepgen.3.vel
Т.е. источники и приемники как-то выходит либо сверху либо снизу перепутаны местами ?
Сверху третий аргумент источник, а снизу второй...
И вдогонку: имя связи зачем вообще нужно ?
Стало чуть понятнее после чтения английского мануала
http://linuxcnc.org/docs/2.5/html/hal/b ... _sub_net_a
но с порядком пока нейдет просветление
Re: Как описать серву в качестве шпинделя ?
Добавлено: 28 фев 2017, 21:52
nkp
от перемены мест работоспособность не изменяется:
можешь писать источник (out) сначала,а приемник(in) потом,можешь наоборот...
стрелочки не обязательны...
Re: Как описать серву в качестве шпинделя ?
Добавлено: 01 мар 2017, 15:11
SVP
Победить окончательно не победил, но потихоньку становится лучше и лучше.
Сейчас столкнулся с двумя проблемами
1. При вращении шпинделя есть какая-то проблема с осью Z. Убегает "микрон".
С Х причем всё ок. В результате она (Z) начинает зарраза бегать туда-сюда... и жужжать.
Т.е. надо как-то допиливать для неё настройки ПИДа подозреваю.
2. Саму серву для шпинделя тоже надо поднастроить, такое ощущение, что момент
равен нулю, легко останавливается "пальцем".
Re: Как описать серву в качестве шпинделя ?
Добавлено: 02 мар 2017, 22:17
SVP
Попробовал подключить панель... не работает зарраза
Засунул в custom_postgui.hal
Код: Выделить всё
loadrt mult2
addf mult2.0 servo-thread
setp mult2.0.in1 60
net spindle-vel-fb-rps mult2.0.in0
net speed_out pyvcp.spindle_rpm <= mult2.0.out
В отдельный xml
Код: Выделить всё
<pyvcp>
<!-- the RPM meter -->
<hbox>
<relief>RAISED</relief>
<bd>3</bd>
<meter>
<halpin>"spindle_rpm"</halpin>
<text>"Spindle"</text>
<subtext>"RPM"</subtext>
<size>200</size>
<min_>0</min_>
<max_>3000</max_>
<majorscale>500</majorscale>
<minorscale>100</minorscale>
<region1>0,10,"yellow"</region1>
</meter>
</hbox>
</pyvcp>
Наблюдаю в халскопе на pyvcp.spindle_rpm значения вполне адекватные, но стрелка на нуле всё время

Re: Как описать серву в качестве шпинделя ?
Добавлено: 02 мар 2017, 22:18
SVP
Куда копать с тем, что серва момент не развивает никакой ?
В настройки сервопака или в ПИД ?
(в настройках попробовать не смог, сдох второй подключенный комп с сигмавин,
надо переустанавливать на другой hdd, в настройках ПИДа что-то покрутил результата нет)
Re: Как описать серву в качестве шпинделя ?
Добавлено: 02 мар 2017, 22:36
nkp
в обе стороны не показывает?
(у меня твой код работает)
Re: Как описать серву в качестве шпинделя ?
Добавлено: 02 мар 2017, 23:02
SVP
Да конечно в плюс показывает, что-то я туплю сурово...
Чтобы показывал в любую сторону нужен какой-то компонент, который возьмет модуль ?
Re: Как описать серву в качестве шпинделя ?
Добавлено: 02 мар 2017, 23:11
nkp
<min_>-3000</min_>
<max_>3000</max_>

- Выделение_078.png (9.26 КБ) 2956 просмотров
Re: Как описать серву в качестве шпинделя ?
Добавлено: 02 мар 2017, 23:29
nkp