Ориентированный останов шпинделя

Обсуждение установки, настройки и использования LinuxCNC. Вопросы по Gкоду.

Ориентированный останов шпинделя

Сообщение sergey_s » 24 фев 2017, 20:46

Здравствуйте. Собрался к токарнику автозагрузку заготовки прикручивать. Заготовка шестигранник на 60. Нужно чтобы кулачки патрона всегда в одном положении оказывались. Делал кто-нибудь подобное, возможно на фрезере с автосменой инструмента подобная проблема? Поделитесь халом и ini. Инструкцию почитал, не понял датчик типа концевика для хоуминга не нужен? достаточно энкодера?
sergey_s
Опытный
 
Сообщения: 141
Зарегистрирован: 06 янв 2016, 00:31
Репутация: 6
Настоящее имя: Сергей

Re: Ориентированный останов шпинделя

Сообщение NightV » 24 фев 2017, 21:44

достаточно энкодера с индесной меткой (1 импульс на оборот)
но всплывает другая проблема, как четко позиционировать шпиндель. серва? :)
Всё просто! если знаешь КАК!
Аватара пользователя
NightV
Почётный участник
Почётный участник
 
Сообщения: 6334
Зарегистрирован: 30 дек 2011, 09:14
Откуда: Israel
Репутация: 2302
Медальки:
Настоящее имя: Владимир Айрапетян

Re: Ориентированный останов шпинделя

Сообщение sergey_s » 25 фев 2017, 08:27

Да, серва 11 квт. А файлов hal и ini не у кого нет? Если уже выкладывали где, подскажите.
sergey_s
Опытный
 
Сообщения: 141
Зарегистрирован: 06 янв 2016, 00:31
Репутация: 6
Настоящее имя: Сергей

Re: Ориентированный останов шпинделя

Сообщение dinkata » 25 фев 2017, 08:51

А серва какие ? Они мож поддерживат такая функция .
P.S.ХХХХХХХХХХ....Удалил, не годится предложение :hehehe:
Последний раз редактировалось dinkata 25 фев 2017, 15:25, всего редактировалось 1 раз.
Простите ошибки, я иностранец.У моя клавиатура нету "э" и "ы"
Аватара пользователя
dinkata
Мастер
 
Сообщения: 883
Зарегистрирован: 05 сен 2014, 09:07
Откуда: Болгария
Репутация: 292
Настоящее имя: Диньо

Re: Ориентированный останов шпинделя

Сообщение sergey_s » 25 фев 2017, 09:16

Dinkata зачем подключать смартфон? Чтобы знать сколько деталей сделали, или Вы хотите настроить управление и вместо станка подключить хорошую снайперскую винтовку? (Шутка) Мне желательно обойтись без смартфонов и Ардуино. Просто аналоговая серва крутит шпиндель, на шпинделе энкодер и всем управляет Linuxcnc. Добавить в hal и ini нужные строки. Посетила меня идея. Можно в программе, с помощью G или M кодов задать такую команду - "шпинделю вращаться до индексной метки"? Шпиндель ведь и так следит за положением, когда резьбу режет.
sergey_s
Опытный
 
Сообщения: 141
Зарегистрирован: 06 янв 2016, 00:31
Репутация: 6
Настоящее имя: Сергей

Re: Ориентированный останов шпинделя

Сообщение nkp » 25 фев 2017, 09:34

http://linuxcnc.org/docs/2.7/html/man/m ... ent.9.html
http://linuxcnc.org/docs/2.7/html/gcode ... #mcode:m19
в нужном "месте" нужно будет конечно подавать команду M19
nkp
Мастер
 
Сообщения: 7574
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1327
Медальки:

Re: Ориентированный останов шпинделя

Сообщение dinkata » 25 фев 2017, 09:35

Смартфон только для наладка.
А если серва хорошие смотрите
ФУНКЦИЯ М19
Простите ошибки, я иностранец.У моя клавиатура нету "э" и "ы"
Аватара пользователя
dinkata
Мастер
 
Сообщения: 883
Зарегистрирован: 05 сен 2014, 09:07
Откуда: Болгария
Репутация: 292
Настоящее имя: Диньо

Re: Ориентированный останов шпинделя

Сообщение sergey_s » 25 фев 2017, 09:44

Серва и привод ELL вроде хорошие
sergey_s
Опытный
 
Сообщения: 141
Зарегистрирован: 06 янв 2016, 00:31
Репутация: 6
Настоящее имя: Сергей

Re: Ориентированный останов шпинделя

Сообщение dinkata » 25 фев 2017, 10:42

для Ell не знаю,но Артех имеют плата
мож пригодится к ELL : :thinking:
Ориентированный останов шпинделя Screenshot_20170225-093647.png
Простите ошибки, я иностранец.У моя клавиатура нету "э" и "ы"
Аватара пользователя
dinkata
Мастер
 
Сообщения: 883
Зарегистрирован: 05 сен 2014, 09:07
Откуда: Болгария
Репутация: 292
Настоящее имя: Диньо

Re: Ориентированный останов шпинделя

Сообщение nkp » 25 фев 2017, 11:20

если не разберешся - выкладывай свой хал - допишем м19
(если я - то вечером))
nkp
Мастер
 
Сообщения: 7574
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1327
Медальки:

Re: Ориентированный останов шпинделя

Сообщение sergey_s » 25 фев 2017, 12:48

Вот мои hal и ini.
Вложения
TA.rar
(2.73 Кб) Скачиваний: 106
sergey_s
Опытный
 
Сообщения: 141
Зарегистрирован: 06 янв 2016, 00:31
Репутация: 6
Настоящее имя: Сергей

Re: Ориентированный останов шпинделя

Сообщение nkp » 25 фев 2017, 19:42

ввиду того,что плата to_pci мне незнакома , хал файл требует правки ;)
для начала опишу на словах - как это работает :
у нас есть шпиндель(все про конфиг , а не про железяки)),мы ним управляем "по скорости" (motion.spindle-speed-out)...
добавляем компонент PID для управления шпинделем по положению (задание на него нам будет выдавать компонент orient ,который
(упрощаем)) "слушает " команду из Gкода M19)
эти оба сигнала( управления по скорости, и управления по положению) заводим на мультиплексор,
который "управляется" опять же командой M19 -
встретили команду M19 - выбираем управление по положению,нет команды M19 - управляемся скоростью...
с выхода MUX2 сигнал уже подается на железку(насколько правильно я понял) :
Код: Выделить всёРазвернуть
mux2.0.out  to_pci.1.PWM.dcontrol4

теперь сам hal:
Код: Выделить всёРазвернуть
loadrt trivkins
loadrt [EMCMOT]EMCMOT base_period_nsec=[EMCMOT]BASE_PERIOD servo_period_nsec=[EMCMOT]SERVO_PERIOD num_joints=[TRAJ]AXES


# My driver
loadrt to_pci

loadrt pid names=pid.x,pid.orient
loadrt orient
loadrt mult2
loadrt near
loadrt mux2 count=1

# ################################################
# LPT port

loadrt hal_parport cfg="0 out"
loadrt stepgen step_type=0,0
setp   parport.0.reset-time 5000
# ################################################

# ################################################
# THREADS
# ################################################

addf to_pci.1.update         servo-thread
addf motion-command-handler    servo-thread
addf motion-controller         servo-thread
addf pid.x.do-pid-calcs       servo-thread
addf pid.orient.do-pid-calcs   servo-thread
addf mult2.0                   servo-thread
addf near.0                    servo-thread
addf orient.0                  servo-thread
addf mux2.0                    servo-thread

# ################################################
# LPT port

addf parport.0.read base-thread
addf stepgen.make-pulses base-thread
addf parport.0.write base-thread

addf stepgen.capture-position servo-thread
addf stepgen.update-freq servo-thread
# ################################################



# ######################################################
#   -------E-STOP--------
# ######################################################

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


#  ---motion control signals---

net in-position               <=  motion.in-position
net machine-is-enabled        <=  motion.motion-enabled
net machine-is-enabled       <=  to_pci.1.pins.pin-07-out


# external input signals

# --- MAX-X ---
#net max-x     <=  to_pci.1.pins.pin-10-in

# --- MIN-X ---
#net min-x     <=  to_pci.1.pins.pin-10-in

# --- HOME-X ---
#net home-x     <=  to_pci.1.pins.pin-10-in



# ################################################
# LPT port

net zstep           => parport.0.pin-04-out
net zdir            => parport.0.pin-08-out
net spindle-on      => parport.0.pin-16-out
#net spindle-cw      => parport.0.pin-14-out
#net spindle-ccw      => parport.0.pin-17-out
net home-x          <= parport.0.pin-10-in-not
net home-z          <= parport.0.pin-11-in-not
# ################################################




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

setp   pid.x.Pgain     [AXIS_0]P
setp   pid.x.Igain     [AXIS_0]I
setp   pid.x.Dgain     [AXIS_0]D
setp   pid.x.bias      [AXIS_0]BIAS
setp   pid.x.FF0       [AXIS_0]FF0
setp   pid.x.FF1       [AXIS_0]FF1
setp   pid.x.FF2       [AXIS_0]FF2
setp   pid.x.deadband  [AXIS_0]DEADBAND
setp   pid.x.maxoutput [AXIS_0]MAX_OUTPUT


net x-enable       => pid.x.enable
net x-output       => pid.x.output
net x-pos-cmd      => pid.x.command
net x-pos-fb       => pid.x.feedback

# --------fb--------------
setp  to_pci.1.feedback.enc_scale0 [AXIS_0]ENCODER_SCALE
net x-pos-fb       <=  to_pci.1.feedback.encoder0
net x-pos-fb       =>  axis.0.motor-pos-fb


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

net x-enable     axis.0.amp-enable-out
net x-enable => to_pci.1.enable_drive

setp  to_pci.1.PWM.out_scale0 [AXIS_0]OUTPUT_SCALE
net x-output => to_pci.1.PWM.dcontrol0

net x-pos-cmd  <=  axis.0.motor-pos-cmd

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

net home-x     =>  axis.0.home-sw-in
#net home-x  =>  axis.0.neg-lim-sw-in
#net min-x     =>  axis.0.neg-lim-sw-in
#net max-x     =>  axis.0.pos-lim-sw-in


# ################################################
# LPT port

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

setp stepgen.0.position-scale [AXIS_2]SCALE
setp stepgen.0.steplen 1
setp stepgen.0.stepspace 1
setp stepgen.0.dirhold 50000
setp stepgen.0.dirsetup 50000
setp stepgen.0.maxaccel [AXIS_2]STEPGEN_MAXACCEL
net zpos-cmd axis.2.motor-pos-cmd => stepgen.0.position-cmd
net zpos-fb stepgen.0.position-fb => axis.2.motor-pos-fb
net zstep <= stepgen.0.step
net zdir <= stepgen.0.dir
net zenable axis.2.amp-enable-out => stepgen.0.enable
net home-z     =>  axis.2.home-sw-in
# ################################################

# ################
# S Axis
# ################

net spindle-on             <=  motion.spindle-on
net spindle-cw             <=  motion.spindle-forward
net spindle-ccw            <=  motion.spindle-reverse
net spindle-brake          <=  motion.spindle-brake
net spindle-enable         =>  motion.spindle-at-speed
net spindle-vel-fb-rps     =>  motion.spindle-speed-in

#============== FEED BACK S================

setp                      to_pci.1.feedback.enc_scale4 [SPINDLE]ENCODER_SCALE
net spindle-revs          to_pci.1.feedback.encoder4   motion.spindle-revs
net spindle-index-enable  to_pci.1.feedback.index_en4  motion.spindle-index-enable


#============== command S================

setp  to_pci.1.PWM.out_scale4 [SPINDLE]OUTPUT_SCALE
net   spindle-cmd    motion.spindle-speed-out   

#============== Encoder  ????????============= установить насторойки для to_pci

setp encoder.00.counter-mode 0
setp encoder.00.filter 1
setp encoder.00.index-invert 0
setp encoder.00.index-mask 0
setp encoder.00.index-mask-invert 0
# ENCODER_SCALE = 400.0

#============== PID orient =============

setp   pid.orient.Pgain     [SPINDLE]P
setp   pid.orient.Igain     [SPINDLE]I
setp   pid.orient.Dgain     [SPINDLE]D
setp   pid.orient.bias      [SPINDLE]BIAS
setp   pid.orient.FF0       [SPINDLE]FF0
setp   pid.orient.FF1       [SPINDLE]FF1
setp   pid.orient.FF2       [SPINDLE]FF2
setp   pid.orient.deadband  [SPINDLE]DEADBAND
setp   pid.orient.maxoutput [SPINDLE]MAX_OUTPUT

# P = 1.0
# I = 0.0
# D = 0.0
# FF0 = 0.0
# FF1 = 0.0
# FF2 = 0.0
# BIAS = 0.0
# DEADBAND = 0.0

# MAX_OUTPUT = 2.0
# ENCODER_SCALE = 400.0
# OUTPUT_SCALE = 0.00283

#============== Spindle orient=============

net orient-angle    motion.spindle-orient-angle => orient.0.angle
net orient-mode     motion.spindle-orient-mode =>  orient.0.mode #XXX
net orient-enable   motion.spindle-orient =>       orient.0.enable     pid.orient.enable
net spindle-pos     encoder.00.position            orient.0.position   pid.orient.feedback #  encoder.00.position ?????????
net orient-command  orient.0.command => pid.orient.command

#============== MUX orient=============

net orient-enable mux2.0.sel
net pid-out       pid.orient.output  mux2.0.in1
net spindle-cmd   mux2.0.in0
net mux2-out   mux2.0.out  to_pci.1.PWM.dcontrol4

#============== Setup spindle at speed signals=============




setp mult2.0.in0 60
net  spindle-vel-fb-rps to_pci.1.feedback.enc_vel4 => mult2.0.in1
setp near.0.scale 1.7
net  spindle-cmd    =>  near.0.in1
net  mult mult2.0.out  =>  near.0.in2
net  spindle-at-speed  <=  near.0.out

#----------- SIGNALS ---------------

net buton_test => to_pci.1.pins.pin-00-out


net tool-prep-loop iocontrol.0.tool-prepare iocontrol.0.tool-prepared
net tool-change-loop iocontrol.0.tool-change iocontrol.0.tool-changed

что сразу нужно поправить:
правильно прописать энкодер для шпинделя(в соответствии с платой to_pci
потом пробовать запускать
=====================
в ini :
Код: Выделить всёРазвернуть
[RS274NGC]
PARAMETER_FILE = linuxcnc.var
ORIENT_OFFSET = 0
nkp
Мастер
 
Сообщения: 7574
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1327
Медальки:

Re: Ориентированный останов шпинделя

Сообщение sergey_s » 25 фев 2017, 20:48

nkp, спасибо за участие. Завтра буду на станке настраивать. Если при задании М19 шпиндель работает в режиме положения, я могу приводным инструментом, ну например гравировать?
sergey_s
Опытный
 
Сообщения: 141
Зарегистрирован: 06 янв 2016, 00:31
Репутация: 6
Настоящее имя: Сергей

Re: Ориентированный останов шпинделя

Сообщение nkp » 25 фев 2017, 21:12

M19 - это все таки больше ориентация шпинделя , работать как с осью C (поворотной) "неудобно"(мягко говоря) ...
спозиционировать-обработать можно (если устраивает как серва "держит"), если нужны согласованные движения осей X,Z и шпинделя - нужно лепить полноценную
поворотную ось C (имхо)
nkp
Мастер
 
Сообщения: 7574
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1327
Медальки:

Re: Ориентированный останов шпинделя

Сообщение sergey_s » 25 фев 2017, 21:14

А поворотная ось С это соответственно фрезерная конфигурация?
sergey_s
Опытный
 
Сообщения: 141
Зарегистрирован: 06 янв 2016, 00:31
Репутация: 6
Настоящее имя: Сергей

Re: Ориентированный останов шпинделя

Сообщение nkp » 25 фев 2017, 21:20

нет
просто добавляем в ини ось C поворотную
и переключаемся пользовательским M-кодом со "шпинделя" на "поворотку C"
там есть нюансы и не все однозначно...
Последний раз редактировалось nkp 25 фев 2017, 21:29, всего редактировалось 1 раз.
nkp
Мастер
 
Сообщения: 7574
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1327
Медальки:

Re: Ориентированный останов шпинделя

Сообщение nkp » 25 фев 2017, 21:26

sergey_s писал(а):Посетила меня идея. Можно в программе, с помощью G или M кодов задать такую команду - "шпинделю вращаться до индексной метки"? Шпиндель ведь и так следит за положением, когда резьбу режет.

вот по этой мысли:
человек набросал компонент,который включает поиск индекса (только после обнуления по индексу при homing)
Код: Выделить всёРазвернуть
component shome "Provides a PID command input used for spindle homing";

pin out  bit   homing        "mientras que esta en proceso de homing, se puede usar para habilitar el mux de salida";
pin out  bit   homed         "indica si ya esta homed, arranca en 0 y pasa a uno cuando termin";

pin in   bit   enable        "el el flanco de subida pone en 0 homed y en 1 homing, setea el index-enable del encoder y espera que baje para pasar el homed a 1 y el homing a 0";
pin io   bit   index_enable  "para conectarse al encoder";

pin out float command         "input to PID command";
pin in float  velocity = 100  "target spindle velocity";

variable int   last_enable = 0;

option fp yes;

function _ "Spindle homing helper. Sets the encoder index-enable and waits for the falling of this signal.";
author "Diego Weizel";


description "";

license "GPL";
;;

FUNCTION(_) {
   
    if (enable) {
       if (enable ^ last_enable) {     // positive edge on enable
       homed = 0;
       homing = 1;                 
       index_enable=1;
       command=velocity;
       }             
       if (homing && !index_enable) {     // falling edge on enable
       homed = 1;
       homing = 0;     
           command=0;           
       }                     
    }
    else
    {
        homed = 0;
   homing = 0;                 
   command=0;               
    }
   
    last_enable = enable;
}

можно подпилить для полноценной токарки и пользовать для простой ориентации
http://www.forum.linuxcnc.org/10-advanc ... and-homing
nkp
Мастер
 
Сообщения: 7574
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1327
Медальки:

Re: Ориентированный останов шпинделя

Сообщение sergey_s » 25 фев 2017, 21:38

На фирменных станках в таком режиме, часто отдельная серва работает. Видно не хватает момента шпиндельной серве. Значит пока оставлю эту затею. По поводу компонента ищущего индексную метку - я не знаю что делать с "компонентом", вставить в hal? Что-то непохож он на часть halа
sergey_s
Опытный
 
Сообщения: 141
Зарегистрирован: 06 янв 2016, 00:31
Репутация: 6
Настоящее имя: Сергей

Re: Ориентированный останов шпинделя

Сообщение PKM » 25 фев 2017, 21:39

Интересно, обычный асинхронник с частотником сможет нормально ориентировать шпиндель?
Надо будет попробовать на 16К20Ф3...
Аватара пользователя
PKM
Почётный участник
Почётный участник
 
Сообщения: 4247
Зарегистрирован: 31 мар 2011, 18:11
Откуда: Украина
Репутация: 695
Медальки:
Настоящее имя: Андрей

Re: Ориентированный останов шпинделя

Сообщение PKM » 25 фев 2017, 21:40

sergey_s писал(а):что делать с "компонентом", вставить в hal? Что-то непохож он на часть halа

надо этот текст сохранить в файл и скомпилировать
http://linuxcnc.org/docs/html/man/man1/ ... ile.1.html
Аватара пользователя
PKM
Почётный участник
Почётный участник
 
Сообщения: 4247
Зарегистрирован: 31 мар 2011, 18:11
Откуда: Украина
Репутация: 695
Медальки:
Настоящее имя: Андрей

След.

Вернуться в LinuxCNC

Кто сейчас на конференции

Зарегистрированные пользователи: Bing [Bot], CNCCLUB, exdeniz, FL@gMan, Google [Bot], inFamous, Majestic-12 [Bot], porshe, Q-starь, Гагарин, serge.1976, shdn777, Yandex [bot]

Reputation System ©'