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

Обсуждение установки, настройки и использования LinuxCNC. Вопросы по Gкоду.
sergey_s
Опытный
Сообщения: 157
Зарегистрирован: 06 янв 2016, 00:31
Репутация: 6
Настоящее имя: Сергей
Контактная информация:

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

Сообщение sergey_s »

Здравствуйте. Собрался к токарнику автозагрузку заготовки прикручивать. Заготовка шестигранник на 60. Нужно чтобы кулачки патрона всегда в одном положении оказывались. Делал кто-нибудь подобное, возможно на фрезере с автосменой инструмента подобная проблема? Поделитесь халом и ini. Инструкцию почитал, не понял датчик типа концевика для хоуминга не нужен? достаточно энкодера?
Аватара пользователя
NightV
Почётный участник
Почётный участник
Сообщения: 6599
Зарегистрирован: 30 дек 2011, 09:14
Репутация: 2279
Настоящее имя: Владимир Айрапетян
Откуда: Israel
Контактная информация:

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

Сообщение NightV »

достаточно энкодера с индесной меткой (1 импульс на оборот)
но всплывает другая проблема, как четко позиционировать шпиндель. серва? :)
Всё просто! если знаешь КАК!
sergey_s
Опытный
Сообщения: 157
Зарегистрирован: 06 янв 2016, 00:31
Репутация: 6
Настоящее имя: Сергей
Контактная информация:

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

Сообщение sergey_s »

Да, серва 11 квт. А файлов hal и ini не у кого нет? Если уже выкладывали где, подскажите.
Аватара пользователя
dinkata
Мастер
Сообщения: 1025
Зарегистрирован: 05 сен 2014, 09:07
Репутация: 389
Настоящее имя: Диньо
Откуда: Болгария
Контактная информация:

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

Сообщение dinkata »

А серва какие ? Они мож поддерживат такая функция .
P.S.ХХХХХХХХХХ....Удалил, не годится предложение :hehehe:
Последний раз редактировалось dinkata 25 фев 2017, 15:25, всего редактировалось 1 раз.
Простите ошибки, я иностранец.У моя клавиатура нету "э" и "ы"
sergey_s
Опытный
Сообщения: 157
Зарегистрирован: 06 янв 2016, 00:31
Репутация: 6
Настоящее имя: Сергей
Контактная информация:

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

Сообщение sergey_s »

Dinkata зачем подключать смартфон? Чтобы знать сколько деталей сделали, или Вы хотите настроить управление и вместо станка подключить хорошую снайперскую винтовку? (Шутка) Мне желательно обойтись без смартфонов и Ардуино. Просто аналоговая серва крутит шпиндель, на шпинделе энкодер и всем управляет Linuxcnc. Добавить в hal и ini нужные строки. Посетила меня идея. Можно в программе, с помощью G или M кодов задать такую команду - "шпинделю вращаться до индексной метки"? Шпиндель ведь и так следит за положением, когда резьбу режет.
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

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

Сообщение nkp »

http://linuxcnc.org/docs/2.7/html/man/m ... ent.9.html
http://linuxcnc.org/docs/2.7/html/gcode ... #mcode:m19
в нужном "месте" нужно будет конечно подавать команду M19
Аватара пользователя
dinkata
Мастер
Сообщения: 1025
Зарегистрирован: 05 сен 2014, 09:07
Репутация: 389
Настоящее имя: Диньо
Откуда: Болгария
Контактная информация:

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

Сообщение dinkata »

Смартфон только для наладка.
А если серва хорошие смотрите
ФУНКЦИЯ М19
Простите ошибки, я иностранец.У моя клавиатура нету "э" и "ы"
sergey_s
Опытный
Сообщения: 157
Зарегистрирован: 06 янв 2016, 00:31
Репутация: 6
Настоящее имя: Сергей
Контактная информация:

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

Сообщение sergey_s »

Серва и привод ELL вроде хорошие
Аватара пользователя
dinkata
Мастер
Сообщения: 1025
Зарегистрирован: 05 сен 2014, 09:07
Репутация: 389
Настоящее имя: Диньо
Откуда: Болгария
Контактная информация:

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

Сообщение dinkata »

для Ell не знаю,но Артех имеют плата
мож пригодится к ELL : :thinking:
Screenshot_20170225-093647.png (5702 просмотра) <a class='original' href='./download/file.php?id=104354&sid=2d71b3221cad318a19b42142e10d3e7b&mode=view' target=_blank>Загрузить оригинал (311.27 КБ)</a>
Простите ошибки, я иностранец.У моя клавиатура нету "э" и "ы"
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

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

Сообщение nkp »

если не разберешся - выкладывай свой хал - допишем м19
(если я - то вечером))
sergey_s
Опытный
Сообщения: 157
Зарегистрирован: 06 янв 2016, 00:31
Репутация: 6
Настоящее имя: Сергей
Контактная информация:

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

Сообщение sergey_s »

Вот мои hal и ini.
Вложения
TA.rar
(2.73 КБ) 358 скачиваний
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

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

Сообщение nkp »

ввиду того,что плата 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
sergey_s
Опытный
Сообщения: 157
Зарегистрирован: 06 янв 2016, 00:31
Репутация: 6
Настоящее имя: Сергей
Контактная информация:

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

Сообщение sergey_s »

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

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

Сообщение nkp »

M19 - это все таки больше ориентация шпинделя , работать как с осью C (поворотной) "неудобно"(мягко говоря) ...
спозиционировать-обработать можно (если устраивает как серва "держит"), если нужны согласованные движения осей X,Z и шпинделя - нужно лепить полноценную
поворотную ось C (имхо)
sergey_s
Опытный
Сообщения: 157
Зарегистрирован: 06 янв 2016, 00:31
Репутация: 6
Настоящее имя: Сергей
Контактная информация:

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

Сообщение sergey_s »

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

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

Сообщение nkp »

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

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

Сообщение nkp »

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
sergey_s
Опытный
Сообщения: 157
Зарегистрирован: 06 янв 2016, 00:31
Репутация: 6
Настоящее имя: Сергей
Контактная информация:

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

Сообщение sergey_s »

На фирменных станках в таком режиме, часто отдельная серва работает. Видно не хватает момента шпиндельной серве. Значит пока оставлю эту затею. По поводу компонента ищущего индексную метку - я не знаю что делать с "компонентом", вставить в hal? Что-то непохож он на часть halа
Аватара пользователя
PKM
Почётный участник
Почётный участник
Сообщения: 4263
Зарегистрирован: 31 мар 2011, 18:11
Репутация: 705
Настоящее имя: Андрей
Откуда: Украина
Контактная информация:

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

Сообщение PKM »

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

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

Сообщение PKM »

sergey_s писал(а):что делать с "компонентом", вставить в hal? Что-то непохож он на часть halа
надо этот текст сохранить в файл и скомпилировать
http://linuxcnc.org/docs/html/man/man1/ ... ile.1.html
Ответить

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