Коробка шпинделя.. Нужны советы!)

Обсуждение установки, настройки и использования LinuxCNC. Вопросы по Gкоду.
Аватара пользователя
Dmaster
Мастер
Сообщения: 1271
Зарегистрирован: 15 июл 2011, 13:36
Репутация: 476
Контактная информация:

Re: Коробка шпинделя.. Нужны советы!)

Сообщение Dmaster »

разобрался....
nkp писал(а):настрой пока с М141 и М142...
это оказалось на 100% верно.. до сотни он что-то кушать их не хочет
факус оказался в удалении расширения ngc у самих файлов...

Теперь у меня не появляется ошибка, что он не знает , что это за М код, но кстати он ни чего не исполняет, пока неведомо почему..
" Linux CNC - наше всё"
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: Коробка шпинделя.. Нужны советы!)

Сообщение nkp »

опять же положи в файл самый простой код...
добъешся исполнения - потом свои строки пиши
Аватара пользователя
Dmaster
Мастер
Сообщения: 1271
Зарегистрирован: 15 июл 2011, 13:36
Репутация: 476
Контактная информация:

Re: Коробка шпинделя.. Нужны советы!)

Сообщение Dmaster »

nkp писал(а):добъешся исполнения - потом свои строни пиши
Смех-смехом..... код он НЕ исполняет, а мои "строни" исполняет))) чудесатее и чудесатее)))
" Linux CNC - наше всё"
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: Коробка шпинделя.. Нужны советы!)

Сообщение nkp »

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

Re: Коробка шпинделя.. Нужны советы!)

Сообщение nkp »

то есть содержимое должно быть примерно таким:

Код: Выделить всё

#!/bin/sh
halcmd setp gearchange.0.sel 0
sleep 0.25
exit 0
Аватара пользователя
Dmaster
Мастер
Сообщения: 1271
Зарегистрирован: 15 июл 2011, 13:36
Репутация: 476
Контактная информация:

Re: Коробка шпинделя.. Нужны советы!)

Сообщение Dmaster »

именно так и написал))) спасибо великому NKP за помосч!)))
теперь суперзадача номер 3 .. по команде m41
остановить шпиндель .. обязательно!!!
включить муфту 1
задать gearchange.0.sel 0
включить вращение на 400мс со скоростью 20 об сек
и только потом разрешить крутиться шпинделю.....

всё как бы ясно, кроме одного.. если напишет оператор в одну строчку m41s1000m3 сработает ли m41 до запуска шпинделя....
" Linux CNC - наше всё"
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: Коробка шпинделя.. Нужны советы!)

Сообщение nkp »

попробовал в одну строку написать м-код с другими кодами
поставил паузу побольше sleep 5
вроде бы паузу выдерживает - потом продолжает выполнять кадр...
Аватара пользователя
Dmaster
Мастер
Сообщения: 1271
Зарегистрирован: 15 июл 2011, 13:36
Репутация: 476
Контактная информация:

Re: Коробка шпинделя.. Нужны советы!)

Сообщение Dmaster »

Получилось у меня задуманное ( пока на тестовом моторе 24в 0.002А подключил прямиком к выходу "ЦАП" на него энкодер 1000ppr ..
Вроде рабтает, только вот одно "НО" при ориентации шпинделя он у меня гад раскручивает назад всё что нарутил...
5 минут работал по часовой стрелке, так 5 мину при ориентации назад раскручивать и будет. ((((( как сбросить PID error по импульсу индекса энкодера?
или как нормально это сделать, кто, что думает?
Последний раз редактировалось Dmaster 28 июн 2013, 11:26, всего редактировалось 1 раз.
" Linux CNC - наше всё"
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: Коробка шпинделя.. Нужны советы!)

Сообщение Nick »

Скинь то, что у тебя сейчас получилось.
Dmaster писал(а):как сбросить PID error по импульсу индекса энкодера?
тебе не error сбросить походу надо, а обнулить cmd при обнулении энкодера.

Или сделать encoder.index-enable и потом в команду pid выдать что-то вроде G0 A4...
Аватара пользователя
Dmaster
Мастер
Сообщения: 1271
Зарегистрирован: 15 июл 2011, 13:36
Репутация: 476
Контактная информация:

Re: Коробка шпинделя.. Нужны советы!)

Сообщение Dmaster »

Код: Выделить всё

#ориентация шпинделя
 #Необходимые компоненты.
 #scale0 = Spindle RPM Scale
 #scale1 = Spindle ABS
 #scale6 = Spindle Deg to Rev
 #scale7 spindle load


loadrt scale count=8

 addf scale.0 servo-thread
 addf scale.6 servo-thread
 addf scale.7 servo-thread
 addf scale.1 servo-thread 

 setp scale.1.gain 0.16667
 #spindle speed gain
 #pwm/speed=1/6000=0.0001667
 #6k
 setp scale.0.gain 0.003333333

 #load abs comp make spindle pos
 loadrt abs count=3
 addf abs.0 servo-thread
 addf abs.1 servo-thread
 addf abs.2 servo-thread

 #convert spindle speed to s32
 loadrt conv_float_s32 count=1
 addf conv-float-s32.0 servo-thread
 #covert spindle s32 to float
 loadrt conv_s32_float count=1
 addf conv-s32-float.0 servo-thread 

 #comp for sp ori
 loadrt wcomp count=1
 addf wcomp.0 servo-thread 

 loadrt mux2 count=10
 addf mux2.0 servo-thread
 loadrt mux4 count=1
 addf mux4.0 servo-thread

 loadrt tristate_bit count=1
 addf tristate-bit.0 servo-thread

 

 #set scale and pwm
setp    hm2_5i25.0.encoder.00.counter-mode 0
setp    hm2_5i25.0.encoder.00.filter 1
setp    hm2_5i25.0.encoder.00.index-invert 0
setp    hm2_5i25.0.encoder.00.index-mask 0
setp    hm2_5i25.0.encoder.00.index-mask-invert 0
setp    hm2_5i25.0.encoder.00.scale  [SPINDLE_9]ENCODER_SCALE

# ---setup spindle control signals--- 

 setp pid.4.Pgain [SPINDLE_9]P
 setp pid.4.Igain [SPINDLE_9]I
 setp pid.4.Dgain [SPINDLE_9]D
 setp pid.4.bias [SPINDLE_9]BIAS
 setp pid.4.FF0 [SPINDLE_9]FF0
 setp pid.4.FF1 [SPINDLE_9]FF1
 setp pid.4.FF2 [SPINDLE_9]FF2
 setp pid.4.deadband [SPINDLE_9]DEADBAND
 #limit spindle speed 
 setp pid.4.maxoutput [SPINDLE_9]MAX_OUTPUT
 #set ori postion
 setp pid.4.command [SPINDLE_9]ORIENT_POS 

 # prevent integrator windup at the beginning of an orient
 # after running the spindle for a long time.  The error is
 # very high before the first index happens.
 setp pid.4.maxerrorI [SPINDLE_9]MAXI
 setp pid.4.maxerrorD [SPINDLE_9]MAXD
 setp pid.4.maxerror [SPINDLE_9]MAXERROR

 #spindle sync

 # net ori-index <= classicladder.0.out-17 

 #spindle sync
 newsig tristate.index bit
 sets tristate.index true
 net tristate.index => tristate-bit.0.in 
 net spindle-index <= tristate-bit.0.out
setp tristate-bit.0.enable 1
 net spindle-index <= motion.spindle-index-enable
 net spindle-index <=> hm2_5i25.0.encoder.00.index-enable

 net spindle-velocity motion.spindle-speed-in <= hm2_5i25.0.encoder.00.velocity
 net spindle-deg <= hm2_5i25.0.encoder.00.position 

 #convert degrees to revs for spindle sync moves
 #1/360=0.002777778
 #deg*0.002777778=revs
 setp scale.6.gain 0.002777778
 net spindle-deg <= scale.6.in
 net spinde-revs scale.6.out => motion.spindle-revs

 #ori
 net spindle-deg => pid.4.feedback 

 # check position error with window comparator
 # set a +/- 2 degree window
 setp wcomp.0.min [SPINDLE_9]WCOMP_MIN
 setp wcomp.0.max  [SPINDLE_9]WCOMP_MAX
 net sp-orient-pos-err wcomp.0.in <= pid.4.error
 # net ori-finish classicladder.0.in-17 <= wcomp.0.out 

 #spindle enable
 #net spindle-enable-out classicladder.0.out-04 => hm2_[HOSTMOT2](BOARD).0.pwmgen.03.enable
 #net spindle-enable-in motion.spindle-on => classicladder.0.in-16  

 #for pyvcp
 net spindle-velocity => abs.1.in
 net spindle-s-abs abs.1.out => scale.1.in
 net spindle-s-abs-out <= scale.1.out 



#net ori-enable pid.4.enable 
setp pid.4.enable 1
 #output
net sp-orient-rpm-cmd scale.0.in <= pid.4.output

 # select between normal speed and orient speed
 # based on ori-enable (M119) command
 #net sp-orient-rpm-cmd => mux2.0.in1
 #net spindle-rpm-in => mux2.0.in0
 #net ori-enable => mux2.0.sel
 # output of mux is desired spindle RPM
 #net spindle-rpm-out mux2.0.out => scale.0.in
#net spindle-rpm-out sp-orient-rpm-cmd => scale.0.in
 net spindle-speed-DAC scale.0.out => hm2_5i25.0.7i77.0.1.analogout0
" Linux CNC - наше всё"
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: Коробка шпинделя.. Нужны советы!)

Сообщение Nick »

Давай по порядку у тебя шпиндель управляется соростью через hm2_5i25.0.7i77.0.1.analogout0.
Есть ПИД для оприентации шпинделя.

Что-то у тебя слишком много всего

Зачем тебе wcomp? Возьми near.
Зачем столько scale? Должно хватить только 1 для положения. Изначально настрой scale от энкодера на об/мин, а внешний scale и спользуй для положения.

У тебя должен быть 1 mux

pid.out => mux.in1
motion.spindle => mux.in2

near.in <= pid.error
near.out => finish

encoder.pos => scale.in
encoder.out => pid.command

ну и все стандартное от motion оставить...

плюс index enable и еще бы сделать задержку на near, чтобы пролетая мимо нужного положения не перейти на следующий шаг. (через timedelay наверное http://www.linuxcnc.org/docs/html/man/m ... lay.9.html)
Аватара пользователя
Dmaster
Мастер
Сообщения: 1271
Зарегистрирован: 15 июл 2011, 13:36
Репутация: 476
Контактная информация:

Re: Коробка шпинделя.. Нужны советы!)

Сообщение Dmaster »

Nick писал(а):Что-то у тебя слишком много всего
Еше не причесал... кучу всего надо убрать нафиг
Nick писал(а):Зачем тебе wcomp? Возьми near.
не.. с ним удобнее будет подстраивать на станке....
Nick писал(а):Зачем столько scale? Должно хватить только 1 для положения. Изначально настрой scale от энкодера на об/мин, а внешний scale и спользуй для положения.
Оставил 2))) остальные просто валялись)))
Nick писал(а):У тебя должен быть 1 mux
конечно! у меня mux4
1 вход для скорости
2 вход для остановки ( несколько постов назад говорил я о том, что-б останавливать шпиндель , когда он на второй передаче)
3 вход пид для ориентации
4 вход малой скорости для зацепления зубчатых муфт при переключении передач.
Nick писал(а):плюс index enable и еще бы сделать задержку на near, чтобы пролетая мимо нужного положения не перейти на следующий шаг. (через timedelay наверное http://www.linuxcnc.org/docs/html/man/m ... lay.9.html)
Тут я не совсем понял... это зачем?
Для мня всё еще не ясно, как использовать индекс для обуления значений PID . ато прокрутишь двигатель минуту... пид насчитает ошибку... включишь ориентацию.. и он её всю насчитанную пытается компенсировать... (РАСКРУТИТЬ НАЗАД)
Хочу что-б он крутился до 0 метки датчика, а после искал уже координату заданную.
" Linux CNC - наше всё"
Аватара пользователя
Dmaster
Мастер
Сообщения: 1271
Зарегистрирован: 15 июл 2011, 13:36
Репутация: 476
Контактная информация:

Re: Коробка шпинделя.. Нужны советы!)

Сообщение Dmaster »

ответ нашелся .. энкодер сломаный)))) канал Z отвалился))
" Linux CNC - наше всё"
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: Коробка шпинделя.. Нужны советы!)

Сообщение Nick »

Dmaster писал(а):Тут я не совсем понял... это зачем?
Задержка для такой вещи: скажем после остановки едем в точку 10 градусов....
А, да, точно, не надо этого :) все и так будет работать :)

хотя... если у тебя ПИД будет настроен с пролетом нужного положения, то шпиндель может в неправильном положении остановиться, т.к. сразу после прохода через нужное положение pid отключится...
Dmaster писал(а):Зачем тебе wcomp? Возьми near.

не.. с ним удобнее будет подстраивать на станке....
Дак near вроде тоже подстраивается как надо...
Аватара пользователя
Dmaster
Мастер
Сообщения: 1271
Зарегистрирован: 15 июл 2011, 13:36
Репутация: 476
Контактная информация:

Re: Коробка шпинделя.. Нужны советы!)

Сообщение Dmaster »

Nick писал(а):pid отключится..
НЕ!! нельзя!!! надо что-б он его держал до конца смены инструмента! а вдруг фреза тяжелая или вообще головка расточная ( у меня горизонтально фрезерный) она возьми, да провернись!
" Linux CNC - наше всё"
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: Коробка шпинделя.. Нужны советы!)

Сообщение Nick »

А тормоза на шпинделе нет?
Аватара пользователя
Dmaster
Мастер
Сообщения: 1271
Зарегистрирован: 15 июл 2011, 13:36
Репутация: 476
Контактная информация:

Re: Коробка шпинделя.. Нужны советы!)

Сообщение Dmaster »

неа))).... только так))) там конструктивно только так)
" Linux CNC - наше всё"
jo_key
Почётный участник
Почётный участник
Сообщения: 262
Зарегистрирован: 19 сен 2011, 14:49
Репутация: 30
Настоящее имя: Евгений
Откуда: Украина, Харьков
Контактная информация:

Re: Коробка шпинделя.. Нужны советы!)

Сообщение jo_key »

А как это сделать для 4-х скоростной коробки передач (простите за нескромный вопрос)?
все вопросы и пожелания сюда Коробка шпинделя. (4-х скоростная) Нужен совет! #1
galexey
Опытный
Сообщения: 104
Зарегистрирован: 01 апр 2012, 21:35
Репутация: 9
Контактная информация:

Re: Коробка шпинделя.. Нужны советы!)

Сообщение galexey »

Прошу подсказки по ручной коробки шпинделя.
На станке стоит ручная коробка с тремя передачами и двумя концевиками. Энкодер установили на шпиндель. Необходимо ограничить скорость вращения шпинделя заданными диапазонами для каждой передачи.
Хотел использовать mux4 и limit1, но не знаю как передать параметр limit1.N.min и limit1.N.max
Для примера мой кусок хала
(для просмотра содержимого нажмите на ссылку)
#*******************
# SPINDLE S
#*******************

# ---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

# ---Encoder feedback signals/setup---

setp hm2_5i25.0.encoder.03.counter-mode 0
setp hm2_5i25.0.encoder.03.filter 1
setp hm2_5i25.0.encoder.03.index-invert 0
setp hm2_5i25.0.encoder.03.index-mask 0
setp hm2_5i25.0.encoder.03.index-mask-invert 0
setp hm2_5i25.0.encoder.03.scale [SPINDLE_9]ENCODER_SCALE

net spindle-revs <= hm2_5i25.0.encoder.03.position
net spindle-vel-fb <= hm2_5i25.0.encoder.03.velocity
net spindle-index-enable <=> hm2_5i25.0.encoder.03.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_gear <= motion.spindle-speed-out
net spindle-vel-cmd-rpm-abs <= motion.spindle-speed-out-abs
net spindle-enable_stop <= 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 => motion.spindle-speed-in
net spindle-index-enable <=> motion.spindle-index-enable

#Gear
net gear2 mux4.0.sel0 hm2_5i25.0.7i77.0.0.input-27
net gear3 mux4.0.sel1 hm2_5i25.0.7i77.0.0.input-28

setp mux4.0.in0 10
setp mux4.0.in1 3.4
setp mux4.0.in2 1.4

net mux_out mux4.0.out => scale.0.gain

net spindle-vel-cmd_gear_limit scale.0.in
net spindle-vel-cmd scale.0.out

#пределы скоростей коробки
net gear2 mux4.1.sel0
net gear3 mux4.1.sel1
setp mux4.1.in0 20
setp mux4.1.in1 63
setp mux4.1.in2 160
net gear_limit_min mux4.1.out

net gear2 mux4.2.sel0
net gear3 mux4.2.sel1
setp mux4.2.in0 325
setp mux4.2.in1 900
setp mux4.2.in2 2240
net gear_limit_max mux4.2.out

#net limit1.0.min gear_limit_min
net spindle-vel-cmd_gear limit1.0.in
net spindle-vel-cmd_gear_limit limit1.0.out
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5183
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: Коробка шпинделя.. Нужны советы!)

Сообщение Serg »

galexey писал(а):Хотел использовать mux4 и limit1
Есть специальный компонент с говорящим названием: http://linuxcnc.org/docs/devel/html/man ... nge.9.html
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
Ответить

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