Как описать серву в качестве шпинделя ?

Обсуждение установки, настройки и использования LinuxCNC. Вопросы по Gкоду.
SVP
Мастер
Сообщения: 6140
Зарегистрирован: 19 дек 2012, 15:49
Репутация: 884
Откуда: Москва
Контактная информация:

Как описать серву в качестве шпинделя ?

Сообщение 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 в качестве сигналов и куда их связывать ?
Пример может какой есть исчерпывающий ?


ЗЫ. В идеале еще оставить возможность гравировать при неподвижном шпинделе, но полагаю,
что это можно просто решить перезагрузкой конфига на конфиг от фрезера, по крайней мере для начала.
SVP
Мастер
Сообщения: 6140
Зарегистрирован: 19 дек 2012, 15:49
Репутация: 884
Откуда: Москва
Контактная информация:

Re: Как описать серву в качестве шпинделя ?

Сообщение SVP »

Попробовал отсюда взять http://www.cnc-club.ru/forum/viewtopic.php?f=15&t=10347

Но чей-то ругается на неопределенный
pid.s.Pgain прям сразу

ЗЫ. Пинанием pnnconf смог заставить его все-таки крутиться, правда зарраза стартует, 1с раскручивается и падает с ошибкой, будем курить дальше...
Аватара пользователя
solo
Мастер
Сообщения: 1374
Зарегистрирован: 20 окт 2011, 18:39
Репутация: 272
Настоящее имя: Юрий Соловьев
Откуда: Украина Харьков
Контактная информация:

Re: Как описать серву в качестве шпинделя ?

Сообщение solo »

может это будет полезно
4-я ось - позиция/скорость #1
SVP
Мастер
Сообщения: 6140
Зарегистрирован: 19 дек 2012, 15:49
Репутация: 884
Откуда: Москва
Контактная информация:

Re: Как описать серву в качестве шпинделя ?

Сообщение SVP »

Да, спасибо, по виду то что надо, буду пробовать курить.
Что-то простая вроде вещь, а никак не пойму до конца что куда сувать.
SVP
Мастер
Сообщения: 6140
Зарегистрирован: 19 дек 2012, 15:49
Репутация: 884
Откуда: Москва
Контактная информация:

Re: Как описать серву в качестве шпинделя ?

Сообщение SVP »

Путем скрещивания ежа с ужом смог добиться, чтобы шпиндель хотя-б стартовал.
Но судя по всему задание гонится максимальное, аж >3000 серва разгоняется.

Пробовал смотреть на пине analogout2 - единица... я так понимаю это 100% заполнение
шим-ом, понять бы только каким напряжением...

Как-то можно текущую скорость шпинделя прям в lcnc вывести куда-нибудь в удобное место ?
SVP
Мастер
Сообщения: 6140
Зарегистрирован: 19 дек 2012, 15:49
Репутация: 884
Откуда: Москва
Контактная информация:

Re: Как описать серву в качестве шпинделя ?

Сообщение SVP »

Оо, спасибо огромное, щаз будем внедрять
SVP
Мастер
Сообщения: 6140
Зарегистрирован: 19 дек 2012, 15:49
Репутация: 884
Откуда: Москва
Контактная информация:

Re: Как описать серву в качестве шпинделя ?

Сообщение 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  


nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: Как описать серву в качестве шпинделя ?

Сообщение nkp »

SVP писал(а):Ммм... нет, все-таки надо разобраться, что и куда пихать.
это сейчас про индикацю оборотов или про "основной" вопрос темы?))
емс выдает задание на пид регулятор ,с него уже на месу
в соответствии с этим сигналом меса генерирует шим ,с него получается(при надобности) +-10v
ОС: меса читает энкодер и передает данные в емс
emc2_simpl.png (3070 просмотров) <a class='original' href='./download/file.php?id=104647&mode=view' target=_blank>Загрузить оригинал (146.74 КБ)</a>
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: Как описать серву в качестве шпинделя ?

Сообщение 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
SVP
Мастер
Сообщения: 6140
Зарегистрирован: 19 дек 2012, 15:49
Репутация: 884
Откуда: Москва
Контактная информация:

Re: Как описать серву в качестве шпинделя ?

Сообщение SVP »

OUTPUT_SCALE = 3000.0
OUTPUT_MIN_LIMIT = -3000.0
OUTPUT_MAX_LIMIT = 3000.0

Несколько улучшили ситуацию. (было +-10)
Курю дальше
SVP
Мастер
Сообщения: 6140
Зарегистрирован: 19 дек 2012, 15:49
Репутация: 884
Откуда: Москва
Контактная информация:

Re: Как описать серву в качестве шпинделя ?

Сообщение 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
но с порядком пока нейдет просветление
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: Как описать серву в качестве шпинделя ?

Сообщение nkp »

от перемены мест работоспособность не изменяется:
можешь писать источник (out) сначала,а приемник(in) потом,можешь наоборот...
стрелочки не обязательны...
SVP
Мастер
Сообщения: 6140
Зарегистрирован: 19 дек 2012, 15:49
Репутация: 884
Откуда: Москва
Контактная информация:

Re: Как описать серву в качестве шпинделя ?

Сообщение SVP »

Победить окончательно не победил, но потихоньку становится лучше и лучше.

Сейчас столкнулся с двумя проблемами
1. При вращении шпинделя есть какая-то проблема с осью Z. Убегает "микрон".
С Х причем всё ок. В результате она (Z) начинает зарраза бегать туда-сюда... и жужжать.
Т.е. надо как-то допиливать для неё настройки ПИДа подозреваю.

2. Саму серву для шпинделя тоже надо поднастроить, такое ощущение, что момент
равен нулю, легко останавливается "пальцем".
SVP
Мастер
Сообщения: 6140
Зарегистрирован: 19 дек 2012, 15:49
Репутация: 884
Откуда: Москва
Контактная информация:

Re: Как описать серву в качестве шпинделя ?

Сообщение 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 значения вполне адекватные, но стрелка на нуле всё время :(
SVP
Мастер
Сообщения: 6140
Зарегистрирован: 19 дек 2012, 15:49
Репутация: 884
Откуда: Москва
Контактная информация:

Re: Как описать серву в качестве шпинделя ?

Сообщение SVP »

Куда копать с тем, что серва момент не развивает никакой ?
В настройки сервопака или в ПИД ?
(в настройках попробовать не смог, сдох второй подключенный комп с сигмавин,
надо переустанавливать на другой hdd, в настройках ПИДа что-то покрутил результата нет)
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: Как описать серву в качестве шпинделя ?

Сообщение nkp »

в обе стороны не показывает?
(у меня твой код работает)
SVP
Мастер
Сообщения: 6140
Зарегистрирован: 19 дек 2012, 15:49
Репутация: 884
Откуда: Москва
Контактная информация:

Re: Как описать серву в качестве шпинделя ?

Сообщение SVP »

Да конечно в плюс показывает, что-то я туплю сурово...

Чтобы показывал в любую сторону нужен какой-то компонент, который возьмет модуль ?
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: Как описать серву в качестве шпинделя ?

Сообщение nkp »

<min_>-3000</min_>
<max_>3000</max_>
Выделение_078.png
Выделение_078.png (9.26 КБ) 2944 просмотра
Ответить

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