[РЕШЕНО] LinuxCNC2.8 и выше + Программная коррекция перпендикулярности осей
Добавлено: 27 апр 2022, 16:36
Имеем оси, на которых по 2 мотора. Известно, что точка контакта шестерни и рейки (шарико-винтовой пары) = именно тот узел, который реально обеспечивает жесткость и геометрию. Проектируя станок Тадам-3 я заведомо проектировал конструкцию таким образом, чтобы работающие по 2 мотора на одной оси (2 по Х и 2 по У) решали одновременно несколько задач = синхронность + выборку зазоров + выравнивание геометрии (не только в плоскости ХУ, но и YZ & XZ). При хоминге ( viewtopic.php?f=15&t=33499) Х работающие два датчика хоминга позволяют после измерений неперпеникулярности Х и У (метод здесь viewtopic.php?f=152&t=28376&p=559316) - корректируя координаты Home offset каждого из моторов (они не одианковые). При хоминге У используется один датчик и аналогичный подход - корректировка Home offset каждого мотора У. Это создает предварительное напряжение в конструкции. Конструкция Тадам-3 стала больше и значительно жестче, нежели Тадам-2, потому выравнивание (сдвиг) 4мм между моторами Х обеспечивает в положении покоя 25-30% номинальной нагрзуки на каждом из моторов Х (используется IHSV57 180вт). Это вцелом обеспечивает постоянный контакт шертерни по одной стороне зубьев зубчатой рейки (=выборка зазора, люфта). Но также это неизбежно влияет на наклон портала относительно плоскости рабочего стола. Откуда следует вывод - требуется программная коррекция кривизны, в дополнение к хомингу по разным кординатам. Это все была присказка.
В Тадам-2 я использовал viewtopic.php?f=15&t=20385&p=611647.
Сейчас я использую LinuxCNC 2.8.2 и конфигурация с пятью моторами, схема XXYYZ. Увы, станок у меня большой. Оказался достаточно жестким и недостаточно прямым. То там, то сям гуляет 0.04-0.1, а где-то что-то может и больше. Суть в том, что если я выставлю при хоминге точную перпендикулярность, то вдоль длинной трехметровой оси момент удержания на моих ihsv57 180Вт может достигать 100%, что приводит к сильному нагреву и перегрузкам. Разумеется, это следствие кривизны где-то чего-то. Но не повод не работать. В итоге я в настройках хоминга не стал требовтаь перпендикулярности. И пришлось вернуться к использованию программной коррекци. В обстоятельствах 2022-август, LinuxCNC2.8.2 рабтоающее решение такое -
0. Берем приложенный модуль, он уже скомпилирован . Инсталлируем его командой -
sudo halcompile --install relkins.c
если halcompile не запускается (вследствие отсутствия), то ставим -
sudo apt-get install linuxcnc-dev (подтянет две зависимости)
1. в ini файле своей конфигурации под свои варианты конфигурации осей (в версии LinuxCNC2.7 этого не было) -
[KINS]
JOINTS = 5
#KINEMATICS = trivkins coordinates=XXYYZ
#Версия программной коррекции
KINEMATICS = relkins coordinates=XXYYZ
2. в hal файле своей конфигурации, в самом его начале и с вашими цифрами коррекций-
#родной раздел выбора кинематики -
#loadrt [KINS]KINEMATICS
#вариант программной коррекции осей
#вариант простой, коррекция вдоль У по двум крайним точка
loadrt relkins coordinates=XXYYZ adjust=X from=Y steps=2 step_size=1225 offset=-25
setp relkins.adjX.Y-25 0
setp relkins.adjX.Y1000 3
#в консoли -
#halcmd setp relkins.adjX.Y1000 3.15
#посмотреть действующие значения
#halcmd show pin relkins
#вариант "многоплановая коррекция"
#loadrt krivkins coordinates=XXYYZ adjust=X,Y from=Y,X steps=5,2 step_size=500,1200 offset=0,0
## настройка точек коррекции для оси X от позиции оси Y
# setp relkins.adjX.Y-25 0.0
# setp relkins.adjX.Y1200 0.0
#
## настройка точек коррекции для оси Y от позиции оси X
# setp relkins.adjY.X100 0.0
# setp relkins.adjY.X200 0.1
# setp relkins.adjY.X300 0.2
# setp relkins.adjY.X400 0.1
# setp relkins.adjY.X500 0.0
#
Как проверить, что все это работает? - достаточно просто. Поправили hal & ini, рапустили LinuxCNC. Если запустился, провдим хоминг. Если вдруг "оси (моторы)" едут не так и не туда - проверяем правильность написания своих XXYYZ. Хоминг прошел. Откатываемся от краев. В терминале даем команду, указав по Y ваше крайнее значение (у меня 1025) и смещение такое, чтобы от текущего Х смещение не вышло за пределы рабочего стола (я поставил 300) -
halcmd setp relkins.adjX.Y1025 300
затем двигаем ось У и видим, что одновременно с У едет и Х, а линия на экране ровная.
Этот подход среди прочего хорош тем, что не требует перезагрузки LinuxCNC и повторного хоминга (который из-за погрешности датчиков всегда дает новые результаты). Включал станок, проводил измерения по угольнику (небольшая программа на минуту работы), вводил в консоли команду = результат.
И сразу хочется бОльшего - задать не одну линию коррекции, а несколько. Механиз от MX_Master это позволяет, но я пока не освоил.
В Тадам-2 я использовал viewtopic.php?f=15&t=20385&p=611647.
Сейчас я использую LinuxCNC 2.8.2 и конфигурация с пятью моторами, схема XXYYZ. Увы, станок у меня большой. Оказался достаточно жестким и недостаточно прямым. То там, то сям гуляет 0.04-0.1, а где-то что-то может и больше. Суть в том, что если я выставлю при хоминге точную перпендикулярность, то вдоль длинной трехметровой оси момент удержания на моих ihsv57 180Вт может достигать 100%, что приводит к сильному нагреву и перегрузкам. Разумеется, это следствие кривизны где-то чего-то. Но не повод не работать. В итоге я в настройках хоминга не стал требовтаь перпендикулярности. И пришлось вернуться к использованию программной коррекци. В обстоятельствах 2022-август, LinuxCNC2.8.2 рабтоающее решение такое -
0. Берем приложенный модуль, он уже скомпилирован . Инсталлируем его командой -
sudo halcompile --install relkins.c
если halcompile не запускается (вследствие отсутствия), то ставим -
sudo apt-get install linuxcnc-dev (подтянет две зависимости)
1. в ini файле своей конфигурации под свои варианты конфигурации осей (в версии LinuxCNC2.7 этого не было) -
[KINS]
JOINTS = 5
#KINEMATICS = trivkins coordinates=XXYYZ
#Версия программной коррекции
KINEMATICS = relkins coordinates=XXYYZ
2. в hal файле своей конфигурации, в самом его начале и с вашими цифрами коррекций-
#родной раздел выбора кинематики -
#loadrt [KINS]KINEMATICS
#вариант программной коррекции осей
#вариант простой, коррекция вдоль У по двум крайним точка
loadrt relkins coordinates=XXYYZ adjust=X from=Y steps=2 step_size=1225 offset=-25
setp relkins.adjX.Y-25 0
setp relkins.adjX.Y1000 3
#в консoли -
#halcmd setp relkins.adjX.Y1000 3.15
#посмотреть действующие значения
#halcmd show pin relkins
#вариант "многоплановая коррекция"
#loadrt krivkins coordinates=XXYYZ adjust=X,Y from=Y,X steps=5,2 step_size=500,1200 offset=0,0
## настройка точек коррекции для оси X от позиции оси Y
# setp relkins.adjX.Y-25 0.0
# setp relkins.adjX.Y1200 0.0
#
## настройка точек коррекции для оси Y от позиции оси X
# setp relkins.adjY.X100 0.0
# setp relkins.adjY.X200 0.1
# setp relkins.adjY.X300 0.2
# setp relkins.adjY.X400 0.1
# setp relkins.adjY.X500 0.0
#
Как проверить, что все это работает? - достаточно просто. Поправили hal & ini, рапустили LinuxCNC. Если запустился, провдим хоминг. Если вдруг "оси (моторы)" едут не так и не туда - проверяем правильность написания своих XXYYZ. Хоминг прошел. Откатываемся от краев. В терминале даем команду, указав по Y ваше крайнее значение (у меня 1025) и смещение такое, чтобы от текущего Х смещение не вышло за пределы рабочего стола (я поставил 300) -
halcmd setp relkins.adjX.Y1025 300
затем двигаем ось У и видим, что одновременно с У едет и Х, а линия на экране ровная.
Этот подход среди прочего хорош тем, что не требует перезагрузки LinuxCNC и повторного хоминга (который из-за погрешности датчиков всегда дает новые результаты). Включал станок, проводил измерения по угольнику (небольшая программа на минуту работы), вводил в консоли команду = результат.
И сразу хочется бОльшего - задать не одну линию коррекции, а несколько. Механиз от MX_Master это позволяет, но я пока не освоил.