Микрон WF3 DCM. Пересадка мозгов.
-
- Кандидат
- Сообщения: 76
- Зарегистрирован: 28 ноя 2012, 22:22
- Репутация: 20
- Контактная информация:
Микрон WF3 DCM. Пересадка мозгов.
Итак, полным ходом, хоть и не с желаемой скоростью, идёт пересадка мозгов и нервной системы швейцарцу Mikron WF3 DCM.
Предисловие:
Станок приобретён года четыре назад.
Где-то в начале 2010-х пережил модернизацию от компании Балтсистем. Стойка NC220. Привода Балтсистема.
Остальная механика и часть электрики родная.
В процессе эксплуатации столкнулись с рядом проблем.
Во-первых, стойка NC220 при всей внешней привлекательности и удобстве обращения, внутри -- очень сырая и неудобная.
Более-менее сложные траектории обрабатывать не умеет. Три-Дэ, динамические и прочие другие -- неконгруэнтность профиля, причём в самых неожиданных местах. А иногда и вовсе вываливается в неизвестные ошибки.
Во-вторых, модернизация Балтсистемом вызвала много недобрых слов в их адрес: макаронная фабрика в электрошкафу и отсутствие нормальной документации (вместо оонной, была документация на MAHO 500, который по всей видимости модернизировался параллельно) подарили мне, а ещё больше -- нашему фрезеровщику -- множество незабываемых часов и дней, проведённых со станком в самых разных позах. Проблема усугублялась винтовыми клеммами на дин-рейке, которые, как оказалось, вполне себе имеют особенность со временем ослабевать.
Пару раз получал вывалившиеся пучки проводов (именно пучки -- в некоторых местах в одну клемму по 5-6 скрученных проводов было зажато) и долго чесал репу в поисках что-куда-откуда.
В-третьих, регулирование скоростей шпинделя только ступенчатое через механизированный редуктор и двухскоростной двигатель.
В четвёртых, на одном из родных трансформаторов, судя по всему, закороченная обмотка. Греется как собака, неоднократно выбивал пробки.
Но хватит это терпеть!
Чем постоянно ковыряться и отлавливать то тут, то там возникающие проблемы, решено станок модернизировать. Пока по части мозгов и электрики.
Через некоторое время, возможно, предстоит проверка и корректировка геометрии, работы по механике -- но это уже совсем другая история...
Старая электрика демонтирована.
Демонтирована стойка и корпус для неё, который занимал довольно значительное пространство.
Моторы и привода решено оставить прежние -- балтсистемовские. Но это наложило свои ограничения: привода довольно громоздкие и в шкафу -- не самом маленьком -- занимают много места. Родной двухскоростной мотор шпинделя заменён на такой же, но односкоростной; управление им через частотник Delta.
Все трансформаторы -- вон! Ставим импульсники.
Стойка на базе двухъядерного Целерона, вспомню конфигурацию -- дополню.
Интерфейсные платы -- PinCET от наших рязанских товарищей: новая расширенная Eth-main, SD x1, Enc x1, IO x3.
Три платы ввода-вывода покрывают все потребности на данный момент и оставляют некоторое количество свободных пинов для дальнейшей модернизации.
В целом, схема мозгов значительно упрощается и умещается, хоть и довольно плотно, в двух электрошкафах.
Рабочее поле: X-Y-Z = 500-500-400
Обрабатываемые материалы: Пластик, алюминиевые сплавы, медные сплавы, сталь, титаний.
Чертежи, фото, видео станка: Будут далее.
Примеры изделий (фото): Пока отсутствуют.
Вопросы: Будут в ходе повествования.
Что плучилось: Старая электрика демонтирована, частично смонтирована новая. Смонтирова стойка. В процессе -- написание конфигурации.
Ориентировочный бюджет: Планировался на уровне 150K. На данный момент превышен, ориентировочно тыщ на 30.
Предисловие:
Станок приобретён года четыре назад.
Где-то в начале 2010-х пережил модернизацию от компании Балтсистем. Стойка NC220. Привода Балтсистема.
Остальная механика и часть электрики родная.
В процессе эксплуатации столкнулись с рядом проблем.
Во-первых, стойка NC220 при всей внешней привлекательности и удобстве обращения, внутри -- очень сырая и неудобная.
Более-менее сложные траектории обрабатывать не умеет. Три-Дэ, динамические и прочие другие -- неконгруэнтность профиля, причём в самых неожиданных местах. А иногда и вовсе вываливается в неизвестные ошибки.
Во-вторых, модернизация Балтсистемом вызвала много недобрых слов в их адрес: макаронная фабрика в электрошкафу и отсутствие нормальной документации (вместо оонной, была документация на MAHO 500, который по всей видимости модернизировался параллельно) подарили мне, а ещё больше -- нашему фрезеровщику -- множество незабываемых часов и дней, проведённых со станком в самых разных позах. Проблема усугублялась винтовыми клеммами на дин-рейке, которые, как оказалось, вполне себе имеют особенность со временем ослабевать.
Пару раз получал вывалившиеся пучки проводов (именно пучки -- в некоторых местах в одну клемму по 5-6 скрученных проводов было зажато) и долго чесал репу в поисках что-куда-откуда.
В-третьих, регулирование скоростей шпинделя только ступенчатое через механизированный редуктор и двухскоростной двигатель.
В четвёртых, на одном из родных трансформаторов, судя по всему, закороченная обмотка. Греется как собака, неоднократно выбивал пробки.
Но хватит это терпеть!
Чем постоянно ковыряться и отлавливать то тут, то там возникающие проблемы, решено станок модернизировать. Пока по части мозгов и электрики.
Через некоторое время, возможно, предстоит проверка и корректировка геометрии, работы по механике -- но это уже совсем другая история...
Старая электрика демонтирована.
Демонтирована стойка и корпус для неё, который занимал довольно значительное пространство.
Моторы и привода решено оставить прежние -- балтсистемовские. Но это наложило свои ограничения: привода довольно громоздкие и в шкафу -- не самом маленьком -- занимают много места. Родной двухскоростной мотор шпинделя заменён на такой же, но односкоростной; управление им через частотник Delta.
Все трансформаторы -- вон! Ставим импульсники.
Стойка на базе двухъядерного Целерона, вспомню конфигурацию -- дополню.
Интерфейсные платы -- PinCET от наших рязанских товарищей: новая расширенная Eth-main, SD x1, Enc x1, IO x3.
Три платы ввода-вывода покрывают все потребности на данный момент и оставляют некоторое количество свободных пинов для дальнейшей модернизации.
В целом, схема мозгов значительно упрощается и умещается, хоть и довольно плотно, в двух электрошкафах.
Рабочее поле: X-Y-Z = 500-500-400
Обрабатываемые материалы: Пластик, алюминиевые сплавы, медные сплавы, сталь, титаний.
Чертежи, фото, видео станка: Будут далее.
Примеры изделий (фото): Пока отсутствуют.
Вопросы: Будут в ходе повествования.
Что плучилось: Старая электрика демонтирована, частично смонтирована новая. Смонтирова стойка. В процессе -- написание конфигурации.
Ориентировочный бюджет: Планировался на уровне 150K. На данный момент превышен, ориентировочно тыщ на 30.
-
- Кандидат
- Сообщения: 76
- Зарегистрирован: 28 ноя 2012, 22:22
- Репутация: 20
- Контактная информация:
Re: Микрон WF3 DCM. Пересадка мозгов.
Немного фотографий до и в процессе демонтажа.
-
- Кандидат
- Сообщения: 76
- Зарегистрирован: 28 ноя 2012, 22:22
- Репутация: 20
- Контактная информация:
Re: Микрон WF3 DCM. Пересадка мозгов.
Процесс монтажа.
-
- Мастер
- Сообщения: 695
- Зарегистрирован: 20 май 2017, 13:39
- Репутация: 158
- Настоящее имя: Сергей
- Контактная информация:
Re: Микрон WF3 DCM. Пересадка мозгов.
Самое главное, работа с помошником идет))
-
- Кандидат
- Сообщения: 76
- Зарегистрирован: 28 ноя 2012, 22:22
- Репутация: 20
- Контактная информация:
Re: Микрон WF3 DCM. Пересадка мозгов.
В субботу немного потрудился.
Подключил сервы, долго прокладывал кабели; только начал крутить -- ушёл в ребут.
Почесал репу, перезагрузился. Работает.
Ещё немного покрутил сервы -- снова ребут.
Выматерился, почесал репу, перезагрузился. Работает. Хм...
Только загрузил LCNC, включился компрессор -- и обратно ребут.
Какая-то помеха по сети или что-то подобное.
Далее -- цикличный ребут и всё.
Перекинул БП (благо, верхняя плита относительно несложно снимается, можно до матплаты добраться) -- заработало.
Биос слетел. Самовосстановился.
Обнаружилась ещё одна проблема: SSD 535 серии. Похоже, захотела на покой вместе с БП -- как и должна была в один прекрасный момент.
Надо было бэкап делать.
Сегодня всю сборку снял обратно: предстоит заново накатать систему и настроить усё.
Админ наш, вроде, что-то там наколдовал с диском. Можт, даже hal и ini извлеку.
Подключил сервы, долго прокладывал кабели; только начал крутить -- ушёл в ребут.
Почесал репу, перезагрузился. Работает.
Ещё немного покрутил сервы -- снова ребут.
Выматерился, почесал репу, перезагрузился. Работает. Хм...
Только загрузил LCNC, включился компрессор -- и обратно ребут.
Какая-то помеха по сети или что-то подобное.
Далее -- цикличный ребут и всё.
Перекинул БП (благо, верхняя плита относительно несложно снимается, можно до матплаты добраться) -- заработало.
Биос слетел. Самовосстановился.
Обнаружилась ещё одна проблема: SSD 535 серии. Похоже, захотела на покой вместе с БП -- как и должна была в один прекрасный момент.
Надо было бэкап делать.
Сегодня всю сборку снял обратно: предстоит заново накатать систему и настроить усё.
Админ наш, вроде, что-то там наколдовал с диском. Можт, даже hal и ini извлеку.
-
- Кандидат
- Сообщения: 76
- Зарегистрирован: 28 ноя 2012, 22:22
- Репутация: 20
- Контактная информация:
Re: Микрон WF3 DCM. Пересадка мозгов.
Не прошло и полгода.
Кучка дел, не терпящих отлогательств завершена, можно продолжить ковыряния в черепной коробке станка.
Итак, систему презалили.
Только прежних значений по латенси получить не удалось, но пока и так сойдёт: больше 30 к не подымается, вроде.
Были подозрения на блок питания, что он чудит, думал уже менять. Собрал всё на столе -- работает, аки часы!
Материнку на пластиковые стойки повесил, БП прикрутил через изолирующую ПЭТ плёнку. Пока за пару дней не выбрасывало.
Есть ещё версия, что монитор и материнка висели на разных фазах. Кто-нибудь знает, может это при перекосе фаз приводить к наводкам?
SSD оказался живой.
Извлёк с него конфигурацию -- и гвоздём на стеночку. Не хватало, чтобы он ещё подвёл в самый нужный момент.
В обещм, пара дней на подключение и проверку всех проводов и кабелей, МПГ повесил на разъём, чем несказанно упростил коммутацию и выручил цельный метр кабеля -- лишним точно не будет.
Ну и результат на видео:
https://youtu.be/eeOraK1SWYw
https://youtu.be/FK4lHyPdXoI
Кучка дел, не терпящих отлогательств завершена, можно продолжить ковыряния в черепной коробке станка.
Итак, систему презалили.
Только прежних значений по латенси получить не удалось, но пока и так сойдёт: больше 30 к не подымается, вроде.
Были подозрения на блок питания, что он чудит, думал уже менять. Собрал всё на столе -- работает, аки часы!
Материнку на пластиковые стойки повесил, БП прикрутил через изолирующую ПЭТ плёнку. Пока за пару дней не выбрасывало.
Есть ещё версия, что монитор и материнка висели на разных фазах. Кто-нибудь знает, может это при перекосе фаз приводить к наводкам?
SSD оказался живой.
Извлёк с него конфигурацию -- и гвоздём на стеночку. Не хватало, чтобы он ещё подвёл в самый нужный момент.
В обещм, пара дней на подключение и проверку всех проводов и кабелей, МПГ повесил на разъём, чем несказанно упростил коммутацию и выручил цельный метр кабеля -- лишним точно не будет.
Ну и результат на видео:
https://youtu.be/eeOraK1SWYw
https://youtu.be/FK4lHyPdXoI
-
- Кандидат
- Сообщения: 76
- Зарегистрирован: 28 ноя 2012, 22:22
- Репутация: 20
- Контактная информация:
Re: Микрон WF3 DCM. Пересадка мозгов.
Теперь осталось дописать конфигурацию на все оси и можно будет поставить моторы на место.
Ну и заняться насторйкой пидов. Сейчас мотор дёргается, пока стоит.
Ещё обнаружилась засада: на частотнике от дельты управление скоростью и пины вперёд/назад висят на едином общем.
Как-то мне не нравится это. Думаю снять с токарника Микромастера и махнуть их местами.
У Микромастера как-то повеселей управление сделано. Заодно он умеет в -10В - 0 - +10В, что позволяет не использовать доп. пин на реверс.
Дельта же только в 0 - +10В умеет.
Ещё сейчас только додумался, что чем тащить 3 фазы на основной выключатель станка, который на корпусе, проще поставить внутри контактор, а на выключатель только управление им проложить, всего 2 тоненьких провода вместо 2 толстенных трёхжильных кабелей.
Ну и заняться насторйкой пидов. Сейчас мотор дёргается, пока стоит.
Ещё обнаружилась засада: на частотнике от дельты управление скоростью и пины вперёд/назад висят на едином общем.
Как-то мне не нравится это. Думаю снять с токарника Микромастера и махнуть их местами.
У Микромастера как-то повеселей управление сделано. Заодно он умеет в -10В - 0 - +10В, что позволяет не использовать доп. пин на реверс.
Дельта же только в 0 - +10В умеет.
Ещё сейчас только додумался, что чем тащить 3 фазы на основной выключатель станка, который на корпусе, проще поставить внутри контактор, а на выключатель только управление им проложить, всего 2 тоненьких провода вместо 2 толстенных трёхжильных кабелей.
Последний раз редактировалось dimedved 12 сен 2020, 17:10, всего редактировалось 1 раз.
-
- Кандидат
- Сообщения: 76
- Зарегистрирован: 28 ноя 2012, 22:22
- Репутация: 20
- Контактная информация:
Re: Микрон WF3 DCM. Пересадка мозгов.
Ну и на всякий случай .hal и .ini, которые на данный момент есть.
Пока работает только ось X.
HAL:
INI:
LUBE.HAL:
Процедуру для Любы брал здесь же на форуме, только добавил контроль давления и принудительное включение по таймеру.
Чтобы разобраться, пришлось схематично всё сначала изобразить:
Пока работает только ось X.
HAL:
Код: Выделить всё
##################################################
# MICRON WF3 DCM #
##################################################
loadrt trivkins
loadrt [EMCMOT]EMCMOT servo_period_nsec=[EMCMOT]SERVO_PERIOD num_joints=[TRAJ]AXES
loadrt etcomb board_ip=192.168.1.3
loadrt pid names=pid.x,pid.y,pid.z,pid.c,pid.s
loadrt scale count=1
loadrt encoder num_chan=1
loadrt mux4 count=1
loadrt conv_float_s32 count=1
loadusr -W hal_manualtoolchange
addf etcomb.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.y.do-pid-calcs servo-thread
addf pid.z.do-pid-calcs servo-thread
addf pid.c.do-pid-calcs servo-thread
addf pid.s.do-pid-calcs servo-thread
addf scale.0 servo-thread
addf encoder.capture-position servo-thread
addf encoder.update-counters servo-thread
addf conv-float-s32.0 servo-thread
addf mux4.0 servo-thread
##################################################
#------------------ E-STOP --------------------#
##################################################
net estop-ext iocontrol.0.emc-enable-in <= etcomb.1.Lpins.pin-00-in
##################################################
#------------------ LIMITS --------------------#
##################################################
net home-x axis.0.home-sw-in <= etcomb.1.pins.pin-16-in-n
net limit-x-neg axis.0.neg-lim-sw-in <= etcomb.1.pins.pin-17-in
net limit-x-pos axis.0.pos-lim-sw-in <= etcomb.1.pins.pin-18-in
net home-y axis.1.home-sw-in <= etcomb.1.pins.pin-19-in
net limit-y-neg axis.1.neg-lim-sw-in <= etcomb.1.pins.pin-20-in
net limit-y-pos axis.1.pos-lim-sw-in <= etcomb.1.pins.pin-21-in
net home-z axis.2.home-sw-in <= etcomb.1.pins.pin-22-in
net limit-z-neg axis.2.neg-lim-sw-in <= etcomb.1.pins.pin-23-in
net limit-z-pos axis.2.pos-lim-sw-in <= etcomb.1.pins.pin-24-in
net home-c axis.5.home-sw-in <= etcomb.1.pins.pin-25-in
##################################################
#------------- MANUAL TOOLCHANGE --------------#
##################################################
net tool-change iocontrol.0.tool-change => hal_manualtoolchange.change
net tool-changed iocontrol.0.tool-changed <= hal_manualtoolchange.changed
net tool-number iocontrol.0.tool-prep-number => hal_manualtoolchange.number
net tool-prepare-loopback iocontrol.0.tool-prepare => iocontrol.0.tool-prepared
##################################################
#-------------------- MPG --------------------#
##################################################
setp etcomb.1.Lpins.pin-00-out 1
setp axis.0.jog-vel-mode 0
setp axis.1.jog-vel-mode 0
setp axis.2.jog-vel-mode 0
setp axis.5.jog-vel-mode 0
setp mux4.0.in0 0.001
setp mux4.0.in1 0.01
setp mux4.0.in2 0.1
net scale010 mux4.0.sel0 <= etcomb.1.pins.pin-12-in
net scale100 mux4.0.sel1 <= etcomb.1.pins.pin-13-in
setp etcomb.1.feedback.enc_scale4 4
net enc_pos conv-float-s32.0.in <= etcomb.1.feedback.encoder4
net mpg-scale <= mux4.0.out
net mpg-scale => axis.0.jog-scale
net mpg-scale => axis.1.jog-scale
net mpg-scale => axis.2.jog-scale
net mpg-scale => axis.5.jog-scale
net mpg-x axis.0.jog-enable <= etcomb.1.pins.pin-08-in
net mpg-y axis.1.jog-enable <= etcomb.1.pins.pin-09-in
net mpg-z axis.2.jog-enable <= etcomb.1.pins.pin-10-in
net mpg-c axis.5.jog-enable <= etcomb.1.pins.pin-11-in
setp axis.0.jog-vel-mode 0
net encoder-counts <= conv-float-s32.0.out
net encoder-counts => axis.0.jog-counts
net encoder-counts => axis.1.jog-counts
net encoder-counts => axis.2.jog-counts
net encoder-counts => axis.5.jog-counts
# смазка
#net machine-is-enabled halui.machine.is-on
#net machine-is-enabled autolube.0.mrun
#setp autolube.0.xpath 1500
#setp autolube.0.zpath 1500
#setp autolube.0.lubetime 10
#net lubevel_x <= axis.0.joint-vel-cmd => autolube.0.xvel
#net lubevel_z <= axis.2.joint-vel-cmd => autolube.0.zvel
#net lube-sig <= autolube.0.out => to_pci.1.pins.pin-06-out
#net lube-sig <= autolube.0.out => etcomb.1.pins.pin-06-out
##################################################
#------------------- COOLANT -------------------#
##################################################
net coolant iocontrol.0.coolant-flood etcomb.1.pins.pin-09-out
##################################################
#------------------ X AXIS --------------------#
##################################################
# PID 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-pos-cmd => pid.x.command
net x-pos-fb => pid.x.feedback
net x-output => pid.x.output
# CONTROL X
net x-enable <= axis.0.amp-enable-out
net x-enable => etcomb.1.enable_drive
net x-enable => etcomb.1.pins.pin-00-out
net x-pos-cmd <= axis.0.motor-pos-cmd
net x-output => etcomb.1.step_dir.outstep0
setp etcomb.1.step_dir.invert_dir0 0
setp etcomb.1.step_dir.Limp0 100
# FEEDBACK X
net x-pos-fb => axis.0.motor-pos-fb
net x-pos-fb <= etcomb.1.step_dir.count0
setp etcomb.1.step_dir.escale0 [AXIS_0]STEP_SCALE
##################################################
#------------------ Y AXIS --------------------#
##################################################
# PID Y
setp pid.y.Pgain [AXIS_1]P
setp pid.y.Igain [AXIS_1]I
setp pid.y.Dgain [AXIS_1]D
setp pid.y.bias [AXIS_1]BIAS
setp pid.y.FF0 [AXIS_1]FF0
setp pid.y.FF1 [AXIS_1]FF1
setp pid.y.FF2 [AXIS_1]FF2
setp pid.y.deadband [AXIS_1]DEADBAND
setp pid.y.maxoutput [AXIS_1]MAX_OUTPUT
net y-enable => pid.y.enable
net y-pos-cmd => pid.y.command
net y-pos-fb => pid.y.feedback
net y-output => pid.y.output
# CONTROL Y
net y-enable <= axis.1.amp-enable-out
net y-enable => etcomb.1.pins.pin-01-out
net y-pos-cmd <= axis.1.motor-pos-cmd
net y-output => etcomb.1.step_dir.outstep1
setp etcomb.1.step_dir.invert_dir1 1
setp etcomb.1.step_dir.Limp1 0
# FEEDBACK Y
net y-pos-fb => axis.1.motor-pos-fb
net y-pos-fb <= etcomb.1.step_dir.count1
setp etcomb.1.step_dir.escale1 [AXIS_1]STEP_SCALE
##################################################
#------------------ Z AXIS --------------------#
##################################################
# PID Z
setp pid.z.Pgain [AXIS_2]P
setp pid.z.Igain [AXIS_2]I
setp pid.z.Dgain [AXIS_2]D
setp pid.z.bias [AXIS_2]BIAS
setp pid.z.FF0 [AXIS_2]FF0
setp pid.z.FF1 [AXIS_2]FF1
setp pid.z.FF2 [AXIS_2]FF2
setp pid.z.deadband [AXIS_2]DEADBAND
setp pid.z.maxoutput [AXIS_2]MAX_OUTPUT
net z-enable => pid.z.enable
net z-pos-cmd => pid.z.command
net z-pos-fb => pid.z.feedback
net z-output => pid.z.output
# CONTROL Z
net z-enable <= axis.2.amp-enable-out
net z-enable => etcomb.1.pins.pin-02-out
net z-pos-cmd <= axis.2.motor-pos-cmd
net z-output => etcomb.1.step_dir.outstep2
setp etcomb.1.step_dir.invert_dir2 0
setp etcomb.1.step_dir.Limp2 0
# FEEDBACK Z
net z-pos-fb => axis.2.motor-pos-fb
net z-pos-fb <= etcomb.1.step_dir.count2
setp etcomb.1.step_dir.escale2 [AXIS_2]STEP_SCALE
##################################################
#------------------- C AXIS -------------------#
##################################################
# PID C
setp pid.c.Pgain [AXIS_3]P
setp pid.c.Igain [AXIS_3]I
setp pid.c.Dgain [AXIS_3]D
setp pid.c.bias [AXIS_3]BIAS
setp pid.c.FF0 [AXIS_3]FF0
setp pid.c.FF1 [AXIS_3]FF1
setp pid.c.FF2 [AXIS_3]FF2
setp pid.c.deadband [AXIS_3]DEADBAND
setp pid.c.maxoutput [AXIS_3]MAX_OUTPUT
net c-enable => pid.c.enable
net c-pos-cmd => pid.c.command
net c-pos-fb => pid.c.feedback
net c-output => pid.c.output
# CONTROL C
net c-enable <= axis.5.amp-enable-out
net c-enable => etcomb.1.pins.pin-03-out
net c-pos-cmd <= axis.5.motor-pos-cmd
net c-output => etcomb.1.step_dir.outstep3
setp etcomb.1.step_dir.invert_dir3 0
setp etcomb.1.step_dir.Limp3 0
# FEEDBACK C
net c-pos-fb => axis.5.motor-pos-fb
net c-pos-fb <= etcomb.1.step_dir.count3
setp etcomb.1.step_dir.escale3 [AXIS_3]STEP_SCALE
##################################################
#----------------- S SPINDLE ------------------#
##################################################
# ---setup spindle control signals---
#net spindle-vel-cmd-rps <= motion.spindle-speed-out-rps
#net spindle-vel-cmd <= motion.spindle-speed-out
#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-at-speed => motion.spindle-at-speed
# #net gui_spindle_at_speed motion.spindle-at-speed
#net spindle-revs => motion.spindle-revs
#net spindle-vel-fb => motion.spindle-speed-in
#net spindle-index-enable <=> motion.spindle-index-enable
#------- SPINDLE ENABLE --------------
net spindle-fwd motion.spindle-forward => etcomb.1.pins.pin-04-out
net spindle-rev motion.spindle-reverse => etcomb.1.pins.pin-05-out
#------- SPINDLE CONTROL ----------------
setp etcomb.1.PWM.out_scale 1
setp scale.0.gain 0.0027
net spindle-vel-cmd motion.spindle-speed-out scale.0.in
net spindle-vel-out scale.0.out etcomb.1.PWM.dcontrol
#------- SPINDLE FEEDBACK -----------------
#setp to_pci.1.feedback.enc_scale3 -[SPINDLE]ENCODER_SCALE
#net spindle-revs <= to_pci.1.feedback.encoder3
#net spindle-vel-fb <= to_pci.1.feedback.enc_vel3
#net spindle-index-enable <=> to_pci.1.feedback.index_en3
Код: Выделить всё
# Generated by PNCconf at Mon Jun 29 10:31:40 2020
# Все изменения в этом файле будут перезаписаны
# overwritten when you run PNCconf again
[EMC]
MACHINE = Micron_WF3_DCM
DEBUG = 0
[DISPLAY]
DISPLAY = axis
POSITION_OFFSET = RELATIVE
POSITION_FEEDBACK = ACTUAL
MAX_FEED_OVERRIDE = 2.000000
MAX_SPINDLE_OVERRIDE = 1.400000
MIN_SPINDLE_OVERRIDE = 0.500000
INTRO_GRAPHIC = linuxcnc.gif
INTRO_TIME = 2
PROGRAM_PREFIX = /home/cnc/linuxcnc/nc_files
INCREMENTS = 5mm 1mm .5mm .1mm .05mm .01mm .005mm
POSITION_FEEDBACK = ACTUAL
DEFAULT_LINEAR_VELOCITY = 6.000000
MAX_LINEAR_VELOCITY = 25.000000
MIN_LINEAR_VELOCITY = 0.500000
DEFAULT_ANGULAR_VELOCITY = 12.000000
MAX_ANGULAR_VELOCITY = 360.000000
MIN_ANGULAR_VELOCITY = 1.666667
EDITOR = mousepad
GEOMETRY = xyz
[FILTER]
PROGRAM_EXTENSION = .png,.gif,.jpg Greyscale Depth Image
PROGRAM_EXTENSION = .py Python Script
png = image-to-gcode
gif = image-to-gcode
jpg = image-to-gcode
py = python
[TASK]
TASK = milltask
CYCLE_TIME = 0.010
[RS274NGC]
PARAMETER_FILE = linuxcnc.var
[EMCMOT]
EMCMOT = motmod
COMM_TIMEOUT = 1.0
COMM_WAIT = 0.010
SERVO_PERIOD = 1000000
[HOSTMOT2]
# **** This is for info only ****
# DRIVER0=hm2_pci
# BOARD0=5i25
[HAL]
HALUI = halui
HALFILE = Micron_WF3_DCM.hal
HALFILE = custom.hal
HALFILE = lube.hal
POSTGUI_HALFILE = postgui_call_list.hal
SHUTDOWN = shutdown.hal
[HALUI]
[TRAJ]
AXES = 6
COORDINATES = X Y Z C
MAX_ANGULAR_VELOCITY = 3600.00
DEFAULT_ANGULAR_VELOCITY = 720.00
LINEAR_UNITS = mm
ANGULAR_UNITS = degree
CYCLE_TIME = 0.010
DEFAULT_VELOCITY = 2.50
MAX_VELOCITY = 25.00
[EMCIO]
EMCIO = io
CYCLE_TIME = 0.100
TOOL_TABLE = tool.tbl
[LUBE]
PATH_X = 500
PATH_Y = 3000
PATH_Z = 3000
LUBE_TIMER = 300
PUMP_TIMER = 6
PRESSURE_TIMER = 5
#********************
# Axis X
#********************
[AXIS_0]
TYPE = LINEAR
HOME = 0.0
FERROR = 1
MIN_FERROR = 100.0
MAX_VELOCITY = 25.0
MAX_ACCELERATION = 750.0
# The values below should be 25% larger than MAX_VELOCITY and MAX_ACCELERATION
# If using BACKLASH compensation STEPGEN_MAXACCEL should be 100% larger.
STEPGEN_MAXVEL = 31.25
STEPGEN_MAXACCEL = 937.50
P = 5.0
I = 1
D = 0.10
FF0 = 0.0
FF1 = 1.0
FF2 = 0.0
BIAS = 0.0
DEADBAND = 0.0
MAX_OUTPUT = 0.0
# these are in nanoseconds
DIRSETUP = 1000
DIRHOLD = 1000
STEPLEN = 1000
STEPSPACE = 1000
STEP_SCALE = 2000
MIN_LIMIT = -200
MAX_LIMIT = 200.0
HOME_OFFSET = 0.0
HOME_SEARCH_VEL = -6
HOME_LATCH_VEL = 1
HOME_FINAL_VEL = 0.5
HOME_USE_INDEX = NO
HOME_SEQUENCE = 3
#********************
# Axis Y
#********************
[AXIS_1]
TYPE = LINEAR
HOME = 0.0
FERROR = 10.0
MIN_FERROR = 1.0
MAX_VELOCITY = 25.0
MAX_ACCELERATION = 750.0
# The values below should be 25% larger than MAX_VELOCITY and MAX_ACCELERATION
# If using BACKLASH compensation STEPGEN_MAXACCEL should be 100% larger.
STEPGEN_MAXVEL = 31.25
STEPGEN_MAXACCEL = 937.50
P = 100.0
I = 0.0
D = 0.0
FF0 = 0.0
FF1 = 1.0
FF2 = 0.0
BIAS = 0.0
DEADBAND = 0.0
MAX_OUTPUT = 0.0
# these are in nanoseconds
DIRSETUP = 1000
DIRHOLD = 1000
STEPLEN = 1000
STEPSPACE = 1000
STEP_SCALE = 1000.0
MIN_LIMIT = -200
MAX_LIMIT = 200.0
HOME_OFFSET = 0.0
#********************
# Axis Z
#********************
[AXIS_2]
TYPE = LINEAR
HOME = 0.0
FERROR = 10.0
MIN_FERROR = 1.0
MAX_VELOCITY = 25.0
MAX_ACCELERATION = 750.0
# The values below should be 25% larger than MAX_VELOCITY and MAX_ACCELERATION
# If using BACKLASH compensation STEPGEN_MAXACCEL should be 100% larger.
STEPGEN_MAXVEL = 31.25
STEPGEN_MAXACCEL = 937.50
P = 100.0
I = 0.0
D = 0.0
FF0 = 0.0
FF1 = 1.0
FF2 = 0.0
BIAS = 0.0
DEADBAND = 0.0
MAX_OUTPUT = 0.0
# these are in nanoseconds
DIRSETUP = 1000
DIRHOLD = 1000
STEPLEN = 1000
STEPSPACE = 1000
STEP_SCALE = 1000.0
MIN_LIMIT = -100.0
MAX_LIMIT = 100
HOME_OFFSET = 0.0
#********************
# Axis C
#********************
[AXIS_3]
TYPE = ANGULAR
HOME = 0.0
FERROR = 0.5
MIN_FERROR = 0.05
MAX_VELOCITY = 3600.0
MAX_ACCELERATION = 1200.0
# The values below should be 25% larger than MAX_VELOCITY and MAX_ACCELERATION
# If using BACKLASH compensation STEPGEN_MAXACCEL should be 100% larger.
STEPGEN_MAXVEL = 450.00
STEPGEN_MAXACCEL = 1500.00
P = 10.0
I = 0.0
D = 0.0
FF0 = 0.0
FF1 = 1.0
FF2 = 0.0
BIAS = 0.0
DEADBAND = 0.0
MAX_OUTPUT = 0.0
# these are in nanoseconds
DIRSETUP = 1000
DIRHOLD = 1000
STEPLEN = 1000
STEPSPACE = 1000
STEP_SCALE = 1000.0
MIN_LIMIT = -9999.0
MAX_LIMIT = 9999.0
HOME_OFFSET = 0.0
#********************
# Spindle
#********************
[SPINDLE_9]
P = 0
I = 0
D = 0
FF0 = 1
FF1 = 0
FF2 = 0
BIAS = 0
DEADBAND = 0
MAX_OUTPUT = 2000
Код: Выделить всё
loadrt abs count=3
loadrt integ count=4
loadrt wcomp count=4
loadrt oneshot count=1
loadrt timedelay count=2
loadrt and2 count=2
loadrt conv_bit_s32 count=1
loadrt conv_s32_float count=1
loadrt message names=lopressure,looil messages="Давление в системе смазки не достигнуто за заданное время,Низкий уровень масла"
loadrt logic count=1 personality=520
addf abs.0 servo-thread
addf abs.1 servo-thread
addf abs.2 servo-thread
addf integ.0 servo-thread
addf integ.1 servo-thread
addf integ.2 servo-thread
addf integ.3 servo-thread
addf wcomp.0 servo-thread
addf wcomp.1 servo-thread
addf wcomp.2 servo-thread
addf wcomp.3 servo-thread
addf oneshot.0 servo-thread
addf conv-bit-s32.0 servo-thread
addf conv-s32-float.0 servo-thread
addf timedelay.0 servo-thread
addf timedelay.1 servo-thread
addf logic.0 servo-thread
addf and2.0 servo-thread
addf and2.1 servo-thread
addf lopressure servo-thread
setp timedelay.0.off-delay [LUBE]PUMP_TIMER
setp timedelay.0.on-delay 0.0
setp timedelay.1.off-delay 0.5
setp timedelay.1.on-delay [LUBE]PRESSURE_TIMER
setp oneshot.0.width 1.0
setp wcomp.0.max [LUBE]PATH_X
setp wcomp.1.max [LUBE]PATH_Y
setp wcomp.2.max [LUBE]PATH_Z
setp wcomp.3.max [LUBE]LUBE_TIMER
net is_on <= halui.machine.is-on => oneshot.0.in conv-bit-s32.0.in
net onesh_out <= oneshot.0.out => logic.0.in-04
##### X #####
net x_vel_in <= axis.0.joint-vel-cmd => abs.0.in
net x_vel_out <= abs.0.out => integ.0.in
net x_int_out <= integ.0.out => wcomp.0.in
net x_comp_out <= wcomp.0.over => logic.0.in-00
##### Y #####
net y_vel_in <= axis.1.joint-vel-cmd => abs.1.in
net y_vel_out <= abs.1.out => integ.1.in
net y_int_out <= integ.1.out => wcomp.1.in
net y_comp_out <= wcomp.1.over => logic.0.in-01
##### Z #####
net z_vel_in <= axis.2.joint-vel-cmd => abs.2.in
net z_vel_out <= abs.2.out => integ.2.in
net z_int_out <= integ.2.out => wcomp.2.in
net z_comp_out <= wcomp.2.over => logic.0.in-02
##### LUBE TIMER #####
net bit_out <= conv-bit-s32.0.out => conv-s32-float.0.in
net t_int_in <= conv-s32-float.0.out => integ.3.in
net t_int_out <= integ.3.out => wcomp.3.in
net t_comp_out <= wcomp.3.over => logic.0.in-03
##### LUBE SHOT #####
net shot <= logic.0.or => timedelay.0.in integ.0.reset integ.1.reset integ.2.reset integ.3.reset
net port <= timedelay.0.out => etcomb.1.pins.pin-08-out timedelay.1.in
##### LUBE_SENSOR #####
net lube_sen <= etcomb.1.pins.pin-26-in-n => and2.0.in0
net sen_timer <= timedelay.1.out => and2.0.in1
net mess <= and2.0.out => lopressure.trigger halui.machine.off
##### OIL_LEVEL_SENSOR #####
Чтобы разобраться, пришлось схематично всё сначала изобразить:
-
- Кандидат
- Сообщения: 76
- Зарегистрирован: 28 ноя 2012, 22:22
- Репутация: 20
- Контактная информация:
Re: Микрон WF3 DCM. Пересадка мозгов.
Что-то давно не писал, не до того было как-то.
А тут приболел, решил поделиться достижениями, пока время свободное есть.
В общем, первая фаза работ -- возможность работы на станке в принципе -- завершена.
XYZ работают, хоть и хромают немного.
Долго не мог понять, чего это драйвер по Z вываливается в ошибку. Оказалось всё очень просто и даже примитивно: драйвер с мотором-то подключили, а тормозистор -- забыли. А тягаемая масса здесь приличная.
Есть ещё кой-какие затыки с ПИДами. Не могу пока победить люфты: на осях стоят редукторы шестерёнчатые и люфты достигают 0.1.
Собственно, лучше этого значения по X и Y добиться не смог. По Z люфт частично выбирается силой притяжения и с ней несколько легче получается.
В принципе, на X можно и на ремешок заменить и даже напрямую мотор врубить; но что делать с Y не пойму: редуктор стоит глубоко в корпусе подлезть туда задача непростая.
По материнке получилось забавно.
Как только изолировал от корпуса материнку и БП, заменил латунные стойки на пластиковые, глюки исчезли. Почти исчезли.
Как я писал выше, монитор и БП мамки сидели на разных фазах и в один прекрасный момент, когда вывалился из монитора сигнальный кабель, погорел выход DVI на материнке.
VGA живой, пока на нём сидим, на временном мониторе. Тянуть на основной сенсорный монитор далековато, думаю VGA с кучей помех будет.
Ещё была такая проблема.
В цеху стоял на вводе диф автомат, который при работе с частотниками постоянно выбивало.
Как на токарном, так и на этом фрезере.
Пока не убрали его, мучались постоянно.
Натыкался в мануале на Микромастер, что если хочешь диф автомат, то таковой должен быть на каждый частотник свой и не должно быть общих.
Кто-нибудь знает физику процессов? Почему так?
А тут приболел, решил поделиться достижениями, пока время свободное есть.
В общем, первая фаза работ -- возможность работы на станке в принципе -- завершена.
XYZ работают, хоть и хромают немного.
Долго не мог понять, чего это драйвер по Z вываливается в ошибку. Оказалось всё очень просто и даже примитивно: драйвер с мотором-то подключили, а тормозистор -- забыли. А тягаемая масса здесь приличная.
Есть ещё кой-какие затыки с ПИДами. Не могу пока победить люфты: на осях стоят редукторы шестерёнчатые и люфты достигают 0.1.
Собственно, лучше этого значения по X и Y добиться не смог. По Z люфт частично выбирается силой притяжения и с ней несколько легче получается.
В принципе, на X можно и на ремешок заменить и даже напрямую мотор врубить; но что делать с Y не пойму: редуктор стоит глубоко в корпусе подлезть туда задача непростая.
По материнке получилось забавно.
Как только изолировал от корпуса материнку и БП, заменил латунные стойки на пластиковые, глюки исчезли. Почти исчезли.
Как я писал выше, монитор и БП мамки сидели на разных фазах и в один прекрасный момент, когда вывалился из монитора сигнальный кабель, погорел выход DVI на материнке.
VGA живой, пока на нём сидим, на временном мониторе. Тянуть на основной сенсорный монитор далековато, думаю VGA с кучей помех будет.
Ещё была такая проблема.
В цеху стоял на вводе диф автомат, который при работе с частотниками постоянно выбивало.
Как на токарном, так и на этом фрезере.
Пока не убрали его, мучались постоянно.
Натыкался в мануале на Микромастер, что если хочешь диф автомат, то таковой должен быть на каждый частотник свой и не должно быть общих.
Кто-нибудь знает физику процессов? Почему так?
Последний раз редактировалось dimedved 07 дек 2020, 22:12, всего редактировалось 1 раз.
-
- Кандидат
- Сообщения: 76
- Зарегистрирован: 28 ноя 2012, 22:22
- Репутация: 20
- Контактная информация:
Re: Микрон WF3 DCM. Пересадка мозгов.
Следующая фаза работ по планам, вторая -- подключение оси Цэ, поворотного стола.
Тут тоже без проблем не обошлось.
При подключении энкодера перепутал полярность питания и пожёг конвертор сигнала.
На энкодере выход токовый синус.
Подскажите, где можно таковой раздобыть?
Так-то без энкодера всё работает, но это немного не то.
Ну и на третью фазу, на десерт, оставил управление моторами коробки шпинделя.
Пока даже не представляю, как к этому подступиться.
Там три ДПТ стоят и на шестернях магнитик и датчики холла на положении -- по три на каждый.
Всего 9 позиций, одна из которых -- холостой ход.
В принципе, есть регулировка на частотнике (которой раньше не было и регулировка была ступенчатая) и этого пока хватает.
Но возможность переключения хотя бы одного мотора была бы не лишней.
Тут тоже без проблем не обошлось.
При подключении энкодера перепутал полярность питания и пожёг конвертор сигнала.
На энкодере выход токовый синус.
Подскажите, где можно таковой раздобыть?
Так-то без энкодера всё работает, но это немного не то.
Ну и на третью фазу, на десерт, оставил управление моторами коробки шпинделя.
Пока даже не представляю, как к этому подступиться.
Там три ДПТ стоят и на шестернях магнитик и датчики холла на положении -- по три на каждый.
Всего 9 позиций, одна из которых -- холостой ход.
В принципе, есть регулировка на частотнике (которой раньше не было и регулировка была ступенчатая) и этого пока хватает.
Но возможность переключения хотя бы одного мотора была бы не лишней.
- Serg
- Мастер
- Сообщения: 21923
- Зарегистрирован: 17 апр 2012, 14:58
- Репутация: 5181
- Заслуга: c781c134843e0c1a3de9
- Настоящее имя: Сергей
- Откуда: Москва
- Контактная информация:
Re: Микрон WF3 DCM. Пересадка мозгов.
Люфты нужно убирать только механически.
Программная компенсация люфтов работает только на индексных осях (с тормозом).
Иначе он будет срабатывать от суммарной утечки всего оборудования цеха (через ёмкости фильтров и проводов).
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
-
- Кандидат
- Сообщения: 76
- Зарегистрирован: 28 ноя 2012, 22:22
- Репутация: 20
- Контактная информация:
Re: Микрон WF3 DCM. Пересадка мозгов.
Такой вопрос у меня тлеет.
Надо на поворотной оси "цэ" организовать работу тормоза.
Вроде для этого есть вариант с "LOCKING_INDEXER", который открывает в axis соответствующие пины.
Но при этом ось разучивается в G1 и она не может работать совместно с другими осями и это грустно.
Можт, есть ещё какие-нибудт подобные опции для осей?
Как это грамотно сделать?
Пока во что мысль упёрлась, получается некрасиво: управлять тормозом по М-коду и при желании работать с осью предварительно тормоз снимать и ставить обратно, когда ось стоит. Здесь надо делать защиту от дурака, чтобы ненароком на тормозе не ломануться на всех парах.
На НЦ220 тормоз автоматически снимался перед любым движением оси и автоматически возвращался, когда она останавливалась.
Плюс можно было снимать и ставить тормоз по М-коду.
Надо на поворотной оси "цэ" организовать работу тормоза.
Вроде для этого есть вариант с "LOCKING_INDEXER", который открывает в axis соответствующие пины.
Но при этом ось разучивается в G1 и она не может работать совместно с другими осями и это грустно.
Можт, есть ещё какие-нибудт подобные опции для осей?
Как это грамотно сделать?
Пока во что мысль упёрлась, получается некрасиво: управлять тормозом по М-коду и при желании работать с осью предварительно тормоз снимать и ставить обратно, когда ось стоит. Здесь надо делать защиту от дурака, чтобы ненароком на тормозе не ломануться на всех парах.
На НЦ220 тормоз автоматически снимался перед любым движением оси и автоматически возвращался, когда она останавливалась.
Плюс можно было снимать и ставить тормоз по М-коду.
- Serg
- Мастер
- Сообщения: 21923
- Зарегистрирован: 17 апр 2012, 14:58
- Репутация: 5181
- Заслуга: c781c134843e0c1a3de9
- Настоящее имя: Сергей
- Откуда: Москва
- Контактная информация:
Re: Микрон WF3 DCM. Пересадка мозгов.
Индексные оси по определению не могут работать одновременно с другими.
Использовать удержание позиции приводом вместо тормоза.
Но если есть механический люфт, то придётся использовать мех. тормоз и индексный режим работы оси.
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
- mikehv
- Мастер
- Сообщения: 2103
- Зарегистрирован: 14 авг 2013, 10:10
- Репутация: 1170
- Откуда: Иваново
- Контактная информация:
Re: Микрон WF3 DCM. Пересадка мозгов.
Люфт должен регулироваться. Я на подобном работаю без тормоза. Правда в основном это 4-х осевая обработка в центре стола. Для обычной 3-х осевой есть отдельный наклонно поворотный стол