CNC

Mach3에서 툴 교체후 Z축 영점 자동으로 잡기(Auto ToolZero)

오만팔천 2010. 10. 4. 12:51
자동으로 툴의 높이를 맞추는 방법이며 이를 이용해서 가공물의 Z축 오차를 줄입니다.

1. 실제 장착된 센서 모습

위와 같이 툴의 끝부분을 측정 할 수 있도록 센서를 만듭니다.
툴이 닿는 부분은 못쓰는 공구를 이용 했습니다. 초경이라 닳지 않아 오래 쓰도 오차가 적습니다.
다이아몬드 코팅 툴은 전기가 통하지 않더군요. 하지만 다른 코팅툴들은 전기가 잘 통하므로 센서 작동에는 문제가 없습니다.
원리는 센서에 툴이 닿아 있으면 스핀들 몸체를 통해 CNC 밑판까지 전기가 흘러 ON이 되고 닿지 않으면 OFF되는 스위치 역활을 합니다.
간단하게 만들었지만 CNC에서 0.003mm 이하 오차 범위 안에 들어갑니다. (필자의 CNC의 모터 1스탭이 0.003mm이여서 더 정밀하게 측정을 할 수가 없더군요.)
근접 스위치, 리미트 스위치를 사용 해봤지만 위에 자작한 센서보다 정밀도가 떨어지더군요.

2. 센서 도면
센서 아래쪽의 산업용 플라스틱 도면입니다.
좌우측 바깥쪽 구멍은 센서를 CNC에 장착 하기 위한 구멍입니다.
제일 작은 초록색 원은 스프링이 놓일 자리입니다.

센서 위쪽 도면입니다.
길게 늘어선 하늘색 부분은 클립을 5초본드로 붙일 부분입니다.


센서의 움직이는 부분입니다.
뒤집어서 그린 도면입니다. 하늘색 점선은 역시 클립을 잘라 5초본드로 붙일 자리입니다.(클립을 붙이는 이유는 윗 판과 닿을 때 이물질이 묻어도 오차를 줄이기 위함입니다.) 하늘색 부분은 CNC로 밑면을 가공하기 힘들어서 쇠톱으로 약간 날리고 클립을 잘라 5초본드로 붙였습니다.
중앙의 노란색 원부분에 볼록한 부분은 전선을 끼우는 자리입니다. 전선을 끼우고 못 쓰는 툴을 망치로 살짝 두들겨 박으면 됩니다.(초경이라 납땜이 안됩니다.)


3. Mach3의 Auto ToolZero 프로그램

위와 같이 Operator의 Edit Button Script를 클릭하면 여러 버튼들이 깜빡입니다.(Mach3 R2.63 버전입니다.)


버튼이 깜빡일 때 위 그림의 빨간색 동그라미 부분의 Auto Tool Zero 버튼을 누르면 프로그램 창이 열립니다.(이 때 아래에 올려진 자료의 내용을 복사해 넣고 자신의 CNC에 맞게 수정하면 됩니다.)

프로그램 수정 방법은 아래쪽에 설명하겠습니다.

4. Mach3 설정

위와 같이 "Config"의 "Homing/Limits"를 열어 소프트 리미트 설정을 합니다.


위의 Soft Max 및 Soft Min을 자신의 CNC에 맞게 설정을 합니다.(꼭 설정 해야 하며 위 좌표가 G53인 기계좌표입니다.)


위와 같이 "Config"의 "Ports and Pins"에 들어가면 아래와 같은 창이 나옵니다.


위와 같이 "Input Signals" 메뉴를 누르고 아래로 내려 가다보면 "Probe"가 있습니다.

Probe를 Enabled하고 자신의 프린트 포트의 핀번호를 설정합니다.(필자의 핀번호는 12입니다. 하지만 이 번호는 CNC에 따라 다를 수 있습니다. 물론 Active Low 또한 자신의 CNC에 맞게 체크를 하든지 끄든지 해야 됩니다. 자신의 CNC에 맞는 스위치로 사용 할 핀 번호와 Active Low를 설정합니다.)

Mach3의 기본 화면에서 "Diagnostics Alt-7"을 클릭하면 위와 같은 화면 이 나옵니다.
여기서 Probe핀 설정을 "Digitize"를 보고 제대로 설정 했는지 알 수 있습니다.
Probe 스위치가 동작하고 있지 않다면 Digitize에 불이 꺼져 있어야 되고 Probe 스위치가 동작하고 있다면 위와 같이 Digitize에 불이 켜져 있어야 됩니다. 즉, 툴이 센서에 닿으면 불이 켜져야 됩니다.(반드시 확인을 해야 됩니다.)


5. Auto Tool Zero 프로그램 간략 설명
Auto Tool Zero 버튼을 누르면 아래의 순서로 동작합니다.

1. Z축을 여유 5mm를 두고 위쪽 끝까지 올립니다.
2. 센서가 있는 X,Y 좌표로 이동합니다.
3. Z축을 내려 센서를 감지합니다.(G31코드:센서 감지를 한 뒤 감지를 벗어나는 지점에서 Z축이 멈춥니다.)
4. 다시 약간 Z축을 내려 센서가 동작 하도록 합니다.
5. Z축을 아주 천천히 움지여서 센서가 동작하지 않는 순간에 Z축을 멈춥니다.(4,5는 정밀도를 높이기 위해 사용됩니다.)
6. Z축을 영점 조정합니다.
7. Z축을 위로 올리고 프로그램을 종료합니다.


6. Auto Tool Zero 프로그램 세부 설명
실제 필요한 프로그램은 검은색 부분이고 초록색은 검은 색 부분을 설명하는 글입니다. 그리고 빨간 색 부분은 CNC마다 다르므로 값을 반드시 바꿔야합니다.


'툴교환을 한뒤 툴 끝의 0지점을 찾는 프로그램
Sub Main()

'Z축의 0지점을 찾기위해 사용하는 변수 설정 부분
ZeroOffsetZ = 5.35 '센서의 측정 위치에서 바닥까지 거리 **사용자 설정 부분**
UpStep = 1/320 '센서를 끄기 위해 위로 이동하는 간격 값 (모터의 1스텝 값) 사용자에 맞게 설정하면 좋습니다.
StepZ = 100 * UpStep '센서를 끄기 위해 위로 빠르게 이동하는 간격 값 사용자에 맞게 설정하면 좋습니다.
ProbeX = -33.5 '센서가 있는 X축의 기계 좌표 값 **사용자 설정 부분**
ProbeY = 386.2 '센서가 있는 Y축의 기계 좌표 값 **사용자 설정 부분**
DownFeed = 1500 '센서를 찾을 때 축의 이동 속도 사용자에 맞게 설정하면 좋습니다.
MinLimitZ = GetOEMDro(158) 'Z축이 움직일 수 있는 최저 높이 (Softlimit Z Minimum DRO)
SafeZ = GetOEMDro(152) - 5 'Z축이 움직일 수 있는 최고 높이 값에서 -5한 값을 안전 높이로 정함 (Softlimit Z Maximum DRO)

'CNC의 현재 상태를 저장하는 부분
CurrentFeed = GetOemDRO(818) '현재의 이송 속도를 저장합니다.
SetOEMDro(54, SafeZ) 'Z축의 안전높이를 저장함 (Safe Z DRO)
'UserFixture = GetOEMDro(46) '현재 유저좌표를 저장합니다.

'영점을 잡기위해 CNC를 초기화하는 부분
If GetOEMLed(16) Then '표시가 기계좌표(G53)이면 유저좌표(G54)로 바꿉니다.
  Code "G54" '사용자 좌표(G54)로 바꿉니다.
  DoOemButton(107) '유저좌표를 표시합니다.
End If

Code "M5" '스핀들 회전을 멈춥니다.
Code "M9" '기름 분출을 멈춥니다.

Code "G90"
Code "G0 G53 Z" & SafeZ 'Z축을 안전한 높이로 올립니다.
Code "G0 G53 X" & ProbeX & " Y" & ProbeY '센서 위치로 이동합니다.
While IsMoving() '위의 작업이 끝날 때까지 기다립니다.
Wend

if GetLED(0) Then Goto Exit_Loop 'Reset이 걸리면 프로그램을 종료합니다.

'빠르게 센서를 검출하는 부분
'GetOemLed(825)는 Digitize LED상태입니다.
If GetOemLed(825) = 1 Then '현제 센서가 동작하고 있으면 에러메세지 출력
  MsgBox ("센서 문제가 있습니다.")
  Exit Sub
End If

CurrentZ = GetOEMDro(802) - SafeZ + MinLimitZ '센서 검출을 위한 Z축의 값을 계산합니다.
Code "G31 Z" & CurrentZ & " F" & DownFeed '센서 검출을 하면서 Z축을 내립니다.
While IsMoving() '위의 작업이 끝날 때까지 기다립니다.
Wend

if GetLED(0) Then Goto Exit_Loop 'Reset이 걸리면 프로그램을 종료합니다.

If GetOemLed(825) = 0 Then '센서가 동작하지 않으면 에러메세지 출력
  MsgBox ("센서가 감지 되지 않습니다.")
  Exit Sub
End If

'정확하게 영점을 잡기 위해 센서의 위치를 검출하는 부분
CurrentZ = GetOEMDro(802) 'GetOEMDro(802)는 Z축의 유저좌표입니다.

While (GetOemLed(825)) '센서 감지가 없을 때까지 조금씩 Z축을 위로 올립니다.
Tool_Up_Loop:
  CurrentZ = CurrentZ + StepZ
  Code "G0 Z" & CurrentZ
  While IsMoving() '위의 작업이 끝날 때까지 기다립니다.
  Wend

  if GetLED(0) Then Goto Exit_Loop 'Reset이 걸리면 프로그램을 종료합니다.
Wend

'Z축을 다시 약간 내려서 Z축이 센서에 닿게 합니다.
if StepZ <> UpStep Then
  CurrentZ = CurrentZ - (1.5 * StepZ)
  StepZ = UpStep
  Goto Tool_Up_Loop
End If  

'찾은 영점 좌표로 유저좌표를 영점 조정하는 부분
SetOEMDro(802, ZeroOffsetZ) '현재의 Z축을 유저좌표에 0점 조정함
Code "G4 P0.1" 'Z축 좌표 설정후에 다음 작업을 하도록 G4 코드를 넣습니다.
While IsMoving() '위의 작업이 끝날 때까지 기다립니다.
Wend

'프로그램을 마무리하는 부분
Code "G0 G53 Z" & SafeZ
While IsMoving() '위의 작업이 끝날 때까지 기다립니다.
Wend

Exit_Loop:
SetOemDRO(818,CurrentFeed) '영점 맞추기 전의 이송 속도로 복귀합니다.
'SetOEMDro(46,UserFixture) '영점 맞추기 전의 유저좌표로 복귀합니다.

End Sub

Main     



7. 마치며...
오래 전에 만든 것이지만 Mach3 R2.63으로 버전업을 하면서 다시 정리 했습니다.
"Mach3 Auto Tool Zero.txt"파일은 G31코드를 이용해서 빠르게 센서를 찾는 프로그램입니다.
이상으로 모두 설명 했습니다. 잘사용하세요.^^