Ориентированный останов шпинделя
-
- Опытный
- Сообщения: 157
- Зарегистрирован: 06 янв 2016, 00:31
- Репутация: 6
- Настоящее имя: Сергей
- Контактная информация:
Ориентированный останов шпинделя
Здравствуйте. Собрался к токарнику автозагрузку заготовки прикручивать. Заготовка шестигранник на 60. Нужно чтобы кулачки патрона всегда в одном положении оказывались. Делал кто-нибудь подобное, возможно на фрезере с автосменой инструмента подобная проблема? Поделитесь халом и ini. Инструкцию почитал, не понял датчик типа концевика для хоуминга не нужен? достаточно энкодера?
- NightV
- Почётный участник
- Сообщения: 6599
- Зарегистрирован: 30 дек 2011, 09:14
- Репутация: 2279
- Настоящее имя: Владимир Айрапетян
- Откуда: Israel
- Контактная информация:
Re: Ориентированный останов шпинделя
достаточно энкодера с индесной меткой (1 импульс на оборот)
но всплывает другая проблема, как четко позиционировать шпиндель. серва?
но всплывает другая проблема, как четко позиционировать шпиндель. серва?
Всё просто! если знаешь КАК!
-
- Опытный
- Сообщения: 157
- Зарегистрирован: 06 янв 2016, 00:31
- Репутация: 6
- Настоящее имя: Сергей
- Контактная информация:
Re: Ориентированный останов шпинделя
Да, серва 11 квт. А файлов hal и ini не у кого нет? Если уже выкладывали где, подскажите.
- dinkata
- Мастер
- Сообщения: 1025
- Зарегистрирован: 05 сен 2014, 09:07
- Репутация: 389
- Настоящее имя: Диньо
- Откуда: Болгария
- Контактная информация:
Re: Ориентированный останов шпинделя
А серва какие ? Они мож поддерживат такая функция .
P.S.ХХХХХХХХХХ....Удалил, не годится предложение
P.S.ХХХХХХХХХХ....Удалил, не годится предложение
Последний раз редактировалось dinkata 25 фев 2017, 15:25, всего редактировалось 1 раз.
Простите ошибки, я иностранец.У моя клавиатура нету "э" и "ы"
-
- Опытный
- Сообщения: 157
- Зарегистрирован: 06 янв 2016, 00:31
- Репутация: 6
- Настоящее имя: Сергей
- Контактная информация:
Re: Ориентированный останов шпинделя
Dinkata зачем подключать смартфон? Чтобы знать сколько деталей сделали, или Вы хотите настроить управление и вместо станка подключить хорошую снайперскую винтовку? (Шутка) Мне желательно обойтись без смартфонов и Ардуино. Просто аналоговая серва крутит шпиндель, на шпинделе энкодер и всем управляет Linuxcnc. Добавить в hal и ini нужные строки. Посетила меня идея. Можно в программе, с помощью G или M кодов задать такую команду - "шпинделю вращаться до индексной метки"? Шпиндель ведь и так следит за положением, когда резьбу режет.
-
- Мастер
- Сообщения: 8340
- Зарегистрирован: 28 ноя 2011, 00:25
- Репутация: 1589
- Контактная информация:
Re: Ориентированный останов шпинделя
http://linuxcnc.org/docs/2.7/html/man/m ... ent.9.html
http://linuxcnc.org/docs/2.7/html/gcode ... #mcode:m19
в нужном "месте" нужно будет конечно подавать команду M19
http://linuxcnc.org/docs/2.7/html/gcode ... #mcode:m19
в нужном "месте" нужно будет конечно подавать команду M19
- dinkata
- Мастер
- Сообщения: 1025
- Зарегистрирован: 05 сен 2014, 09:07
- Репутация: 389
- Настоящее имя: Диньо
- Откуда: Болгария
- Контактная информация:
Re: Ориентированный останов шпинделя
Смартфон только для наладка.
А если серва хорошие смотрите
ФУНКЦИЯ М19
А если серва хорошие смотрите
ФУНКЦИЯ М19
Простите ошибки, я иностранец.У моя клавиатура нету "э" и "ы"
-
- Опытный
- Сообщения: 157
- Зарегистрирован: 06 янв 2016, 00:31
- Репутация: 6
- Настоящее имя: Сергей
- Контактная информация:
Re: Ориентированный останов шпинделя
Серва и привод ELL вроде хорошие
- dinkata
- Мастер
- Сообщения: 1025
- Зарегистрирован: 05 сен 2014, 09:07
- Репутация: 389
- Настоящее имя: Диньо
- Откуда: Болгария
- Контактная информация:
Re: Ориентированный останов шпинделя
для Ell не знаю,но Артех имеют плата
мож пригодится к ELL :
мож пригодится к ELL :
Простите ошибки, я иностранец.У моя клавиатура нету "э" и "ы"
-
- Мастер
- Сообщения: 8340
- Зарегистрирован: 28 ноя 2011, 00:25
- Репутация: 1589
- Контактная информация:
Re: Ориентированный останов шпинделя
если не разберешся - выкладывай свой хал - допишем м19
(если я - то вечером))
-
- Мастер
- Сообщения: 8340
- Зарегистрирован: 28 ноя 2011, 00:25
- Репутация: 1589
- Контактная информация:
Re: Ориентированный останов шпинделя
ввиду того,что плата to_pci мне незнакома , хал файл требует правки
для начала опишу на словах - как это работает :
у нас есть шпиндель(все про конфиг , а не про железяки)),мы ним управляем "по скорости" (motion.spindle-speed-out)...
добавляем компонент PID для управления шпинделем по положению (задание на него нам будет выдавать компонент orient ,который
(упрощаем)) "слушает " команду из Gкода M19)
эти оба сигнала( управления по скорости, и управления по положению) заводим на мультиплексор,
который "управляется" опять же командой M19 -
встретили команду M19 - выбираем управление по положению,нет команды M19 - управляемся скоростью...
с выхода MUX2 сигнал уже подается на железку(насколько правильно я понял) :
теперь сам hal:
что сразу нужно поправить:
правильно прописать энкодер для шпинделя(в соответствии с платой to_pci
потом пробовать запускать
=====================
в ini :
для начала опишу на словах - как это работает :
у нас есть шпиндель(все про конфиг , а не про железяки)),мы ним управляем "по скорости" (motion.spindle-speed-out)...
добавляем компонент PID для управления шпинделем по положению (задание на него нам будет выдавать компонент orient ,который
(упрощаем)) "слушает " команду из Gкода M19)
эти оба сигнала( управления по скорости, и управления по положению) заводим на мультиплексор,
который "управляется" опять же командой M19 -
встретили команду M19 - выбираем управление по положению,нет команды M19 - управляемся скоростью...
с выхода MUX2 сигнал уже подается на железку(насколько правильно я понял) :
Код: Выделить всё
mux2.0.out to_pci.1.PWM.dcontrol4
Код: Выделить всё
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
-
- Опытный
- Сообщения: 157
- Зарегистрирован: 06 янв 2016, 00:31
- Репутация: 6
- Настоящее имя: Сергей
- Контактная информация:
Re: Ориентированный останов шпинделя
nkp, спасибо за участие. Завтра буду на станке настраивать. Если при задании М19 шпиндель работает в режиме положения, я могу приводным инструментом, ну например гравировать?
-
- Мастер
- Сообщения: 8340
- Зарегистрирован: 28 ноя 2011, 00:25
- Репутация: 1589
- Контактная информация:
Re: Ориентированный останов шпинделя
M19 - это все таки больше ориентация шпинделя , работать как с осью C (поворотной) "неудобно"(мягко говоря) ...
спозиционировать-обработать можно (если устраивает как серва "держит"), если нужны согласованные движения осей X,Z и шпинделя - нужно лепить полноценную
поворотную ось C (имхо)
спозиционировать-обработать можно (если устраивает как серва "держит"), если нужны согласованные движения осей X,Z и шпинделя - нужно лепить полноценную
поворотную ось C (имхо)
-
- Опытный
- Сообщения: 157
- Зарегистрирован: 06 янв 2016, 00:31
- Репутация: 6
- Настоящее имя: Сергей
- Контактная информация:
Re: Ориентированный останов шпинделя
А поворотная ось С это соответственно фрезерная конфигурация?
-
- Мастер
- Сообщения: 8340
- Зарегистрирован: 28 ноя 2011, 00:25
- Репутация: 1589
- Контактная информация:
Re: Ориентированный останов шпинделя
нет
просто добавляем в ини ось C поворотную
и переключаемся пользовательским M-кодом со "шпинделя" на "поворотку C"
там есть нюансы и не все однозначно...
просто добавляем в ини ось C поворотную
и переключаемся пользовательским M-кодом со "шпинделя" на "поворотку C"
там есть нюансы и не все однозначно...
Последний раз редактировалось nkp 25 фев 2017, 21:29, всего редактировалось 1 раз.
-
- Мастер
- Сообщения: 8340
- Зарегистрирован: 28 ноя 2011, 00:25
- Репутация: 1589
- Контактная информация:
Re: Ориентированный останов шпинделя
вот по этой мысли: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
-
- Опытный
- Сообщения: 157
- Зарегистрирован: 06 янв 2016, 00:31
- Репутация: 6
- Настоящее имя: Сергей
- Контактная информация:
Re: Ориентированный останов шпинделя
На фирменных станках в таком режиме, часто отдельная серва работает. Видно не хватает момента шпиндельной серве. Значит пока оставлю эту затею. По поводу компонента ищущего индексную метку - я не знаю что делать с "компонентом", вставить в hal? Что-то непохож он на часть halа
- PKM
- Почётный участник
- Сообщения: 4263
- Зарегистрирован: 31 мар 2011, 18:11
- Репутация: 705
- Настоящее имя: Андрей
- Откуда: Украина
- Контактная информация:
Re: Ориентированный останов шпинделя
Интересно, обычный асинхронник с частотником сможет нормально ориентировать шпиндель?
Надо будет попробовать на 16К20Ф3...
Надо будет попробовать на 16К20Ф3...
- PKM
- Почётный участник
- Сообщения: 4263
- Зарегистрирован: 31 мар 2011, 18:11
- Репутация: 705
- Настоящее имя: Андрей
- Откуда: Украина
- Контактная информация:
Re: Ориентированный останов шпинделя
надо этот текст сохранить в файл и скомпилироватьsergey_s писал(а):что делать с "компонентом", вставить в hal? Что-то непохож он на часть halа
http://linuxcnc.org/docs/html/man/man1/ ... ile.1.html