Появилась идея, как частично автоматизировать и облегчить юстировку. Идея состоит в том, что смещение зонда не устраняется механически, а учитывается программно. Есть только один нюанс — центроискатель должен устанавливаться в одном и том же положении.
Прототип был сделан на основе датчика Контакт-3. К простому переходнику, выточенному из стали, добавил поводок с магнитом,
а в нижнюю крышку шпинделя ввернул штифт, к которому этот магнит притягивается, обеспечивая однозначную ориентацию ЦИ. В крышке есть отверстия с резьбой М4, которые предназначены для облегчения разборки шпинделя. В подпрограммы, работающие с ЦИ, внесены компенсация и учет смещения по осям X и Y.
Дело оставалось за малым — нужно было это смещение как-то измерять. Сделано было очень просто. Во второе отверстие на противоположной стороне крышки на время настройки вворачивается второй штифт, и к нему «примагничивается» поводок после поворота ЦИ ровно на 180 градусов.
Собственно, юстировка состоит в следующем.
- на столе станка закрепляется деталь с круглым отверстием, например, шарикоподшипник. Диаметр отверстия особого значения не имеет. Вводим в отверстие зонд ЦИ.
- запускается программа юстировки (написана в G-кодах, LinuxCNC)
- далее, по подсказкам программы мы устанавливаем ЦИ вначале в «калибровочное» положение (поводок у дополнительного штифта). Программа производит поиск центра отверстия - затем дополнительный штифт снимаем и ЦИ поворачиваем в рабочее положение. Еще раз производится поиск центра.
- разность измерений по каждой оси делится на 2 и записывается в файл. Это и есть искомые поправки. Всё, юстировка закончена. Дальше подпрограммы измерения будут считывать этот файл и вносить необходимые поправки.
Юстировка не требует измерительного инструмента, отнимает немного времени и минимизирует человеческий фактор.
https://www.youtube.com/watch?v=clurtFo5LzA
Это программа юстировки.
Код: Выделить всё
%
; Юстировка нерегулируемого центроискателя на основе Контакт-3
; Зонд должен быть введен в отверстие до запуска программы
#<fspeed> = 600.
#<min_xlimit> = 0. ; Границы рабочего поля
#<max_xlimit> = 290. ;
#<min_ylimit> = 0. ;
#<max_ylimit> = 150. ;
#<probe_diameter> = #<_ini[kontakt3]probe_diameter>
G40 G49 G92.1
G10 L2 P9 X0 Y0 ; Работать будем в G59.3
G59.3
; Обнулим вывод размеров на панель
M68 E0 Q0.
M68 E1 Q0.
(MSG,Установите калибровочный упор и поверните ЦИ до контакта магнита с ним)
M0
; Первый проход - калибровочное положение (180 град. от рабочего)
G90 G38.2 X#<min_xlimit> F#<fspeed> ; Найдем касание слева
G91 G38.5 X1. ; Отъезд
G38.2 X-1. F[#<fspeed>/10.] ; Уточнение
#<left> = #5061 ; Запомним
G91 G38.5 X0.5 F#<fspeed> ; Отъезд
G90 G38.2 X#<max_xlimit> ; Справа
G91 G38.5 X-1. ; Отъезд
G38.2 X1. F[#<fspeed>/10.] ; Уточнение
#<right> = #5061 ; Запомним
G91 G38.5 X-0.5 F#<fspeed>
#<xmid1> = [[#<left> + #<right>] / 2.]
G90 G0 X#<xmid1>
G90 G38.2 Y#<min_ylimit> F#<fspeed> ; Найдем касание снизу
G91 G38.5 Y1. ; Отъезд
G38.2 Y-1. F[#<fspeed>/10.] ; Уточнение
#<bottom> = #5062 ; Запомним
G91 G38.5 Y0.5 F#<fspeed> ; Отъезд
G90 G38.2 Y#<max_ylimit> ; Сверху
G91 G38.5 Y-1. ; Отъезд
G38.2 Y1. F[#<fspeed>/10.] ; Уточнение
#<top> = #5062 ; Запомним
G91 G38.5 Y-0.5 F#<fspeed>
#<ymid1> = [[#<bottom> + #<top>] / 2.]
G90 G0 Y#<ymid1>
; Уточнение по X
G90 G38.2 X#<min_xlimit> F#<fspeed> ; Найдем касание слева
G91 G38.5 X1. ; Отъезд
G38.2 X-1. F[#<fspeed>/10.] ; Уточнение
#<left> = #5061 ; Запомним
G91 G38.5 X0.5 F#<fspeed> ; Отъезд
G90 G38.2 X#<max_xlimit> ; Справа
G91 G38.5 X-1. ; Отъезд
G38.2 X1. F[#<fspeed>/10.] ; Уточнение
#<right> = #5061 ; Запомним
G91 G38.5 X-0.5 F#<fspeed>
#<xmid1> = [[#<left> + #<right>] / 2.]
G90 G0 X#<xmid1>
(MSG,Снимите калибровочный упор и поверните ЦИ до контакта магнита с рабочим упором)
M0
; Второй проход - рабочее положение
G90 G38.2 X#<min_xlimit> F#<fspeed> ; Найдем касание слева
G91 G38.5 X1. ; Отъезд
G38.2 X-1. F[#<fspeed>/10.] ; Уточнение
#<left> = #5061 ; Запомним
G91 G38.5 X0.5 F#<fspeed> ; Отъезд
G90 G38.2 X#<max_xlimit> ; Справа
G91 G38.5 X-1. ; Отъезд
G38.2 X1. F[#<fspeed>/10.] ; Уточнение
#<right> = #5061 ; Запомним
G91 G38.5 X-0.5 F#<fspeed>
#<xmid2> = [[#<left> + #<right>] / 2.]
G90 G0 X#<xmid2>
G90 G38.2 Y#<min_ylimit> F#<fspeed> ; Найдем касание снизу
G91 G38.5 Y1. ; Отъезд
G38.2 Y-1. F[#<fspeed>/10.] ; Уточнение
#<bottom> = #5062 ; Запомним
G91 G38.5 Y0.5 F#<fspeed> ; Отъезд
G90 G38.2 Y#<max_ylimit> ; Сверху
G91 G38.5 Y-1. ; Отъезд
G38.2 Y1. F[#<fspeed>/10.] ; Уточнение
#<top> = #5062 ; Запомним
G91 G38.5 Y-0.5 F#<fspeed>
#<ymid2> = [[#<bottom> + #<top>] / 2.]
G90 G0 Y#<ymid2>
; Уточнение по X
G90 G38.2 X#<min_xlimit> F#<fspeed> ; Найдем касание слева
G91 G38.5 X1. ; Отъезд
G38.2 X-1. F[#<fspeed>/10.] ; Уточнение
#<left> = #5061 ; Запомним
G91 G38.5 X0.5 F#<fspeed> ; Отъезд
G90 G38.2 X#<max_xlimit> ; Справа
G91 G38.5 X-1. ; Отъезд
G38.2 X1. F[#<fspeed>/10.] ; Уточнение
#<right> = #5061 ; Запомним
G91 G38.5 X-0.5 F#<fspeed>
#<xmid2> = [[#<left> + #<right>] / 2.]
#<xoffset> = [[#<xmid1> - #<xmid2>] / 2] ; Коррекция по X
#<yoffset> = [[#<ymid1> - #<ymid2>] / 2] ; Коррекция по Y
(DEBUG,xoffset = #<xoffset>, yoffset = #<yoffset>)
#<xsize> = [#<right> - #<left> + #<probe_diameter>]
G90 G0 X#<xmid2>
M68 E0 Q#<xsize>
#<ysize> = [#<top> - #<bottom> + #<probe_diameter>]
M68 E1 Q#<ysize>
(DEBUG,Сохранить коррекцию? Да - S, нет - ESC)
M0
(LOGOPEN,/home/cnc/linuxcnc/subroutines/kontakt3_offsets.ngc)
(LOG,o<kontakt3_offsets> sub)
(LOG,# <_xoffset> = #<xoffset>)
(LOG,# <_yoffset> = #<yoffset>)
(LOG,o<kontakt3_offsets> endsub)
(LOGCLOSE)
G54 ; Вернем СК
G90
M02
%
Код: Выделить всё
o<kontakt3_offsets> sub
# <_xoffset> = 0.292550
# <_yoffset> = 0.324881
o<kontakt3_offsets> endsub