hexagon logo

a little program to improve cmmv offsets calibration

There are some posts about accuracy of cmmv.
I believe that offsets between contact and cmmv are usually about 0,02 mm, when you use a rotated head. (deviation calculated on center of a pin, at different angles).
If you have a mate (or dull ?) sphere, you can calibrate angles on it, by measuring a point, a circle, construct a sphere and then use "calibrate single tip".
Here is the prog :
LOADPROBE/CMM_VE
            TIP/T1A0B0, SHANKIJK=0, 0, 1, ANGLE=0
            TEMPCOMP/ORIGIN=0,0,0,Material Coeff=0.0000113,Reference Temp=20
              ,Hi Threshold=40,Lo Threshold=10,Sensor num=9
              ,X Axis Temp=20.4168,Y Axis Temp=20.2186,Z Axis Temp=20.3639,Part Temp=20.4065
            AUTOCALIBRATE/PROBE, PARAMETER_SET=A0B0, QUALTOOL_MOVED=NO, 
                          SHOW_SUMMARY=NO, OVERWRITE_RESULTSFILE=NO
            MODE/DCC
            ASSIGN/V1=QUALTOOLDATA("xyz","sphere_matte")
            ASSIGN/RADIUS=QUALTOOLDATA("diam","sphere_matte")/2
F1         =GENERIC/POINT,DEPENDENT,CARTESIAN,$
            NOM/XYZ,<V1.X,V1.Y,V1.Z>,$
            MEAS/XYZ,<V1.X,V1.Y,V1.Z>,$
            NOM/IJK,<0,0,1>,$
            MEAS/IJK,<0,0,1>
REF1       =ALIGNMENT/START,RECALL[emoticon:6D505171FAA4497C85C5CA27290C555D]ÉMARRAGE,LIST=YES
              ALIGNMENT/TRANS,XAXIS,F1
              ALIGNMENT/TRANS,YAXIS,F1
              ALIGNMENT/TRANS,ZAXIS,F1
            ALIGNMENT/END
            CLEARP/ZPLUS,350,ZPLUS,0,ON
            MOVE/CLEARPLANE
            ASSIGN/ANGLE_A=90
            MOVE/CLEARPLANE
V2         =LOOP/START,ID=YES,NUMBER=10,START=1,SKIP=,
              OFFSET:XAXIS=0,YAXIS=0,ZAXIS=0,ANGLE=0
              MOVE/CLEARPLANE
              ASSIGN/STYLET="T1A"+ANGLE_A+"B90"
              TIP/STYLET, SHANKIJK=0, 0, 1, ANGLE=90
              RECALL/ALIGNMENT,INTERNAL,
              ASSIGN/V3=PROBEDATA("vector")
              ASSIGN/V4=V1+RADIUS*V3
              MOVE/CLEARPLANE
PT1          =FEAT/VISION/SURFACE POINT/DEFAULT,CARTESIAN
              THEO/<V4.X,V4.Y,V4.Z>,<V3.I,V3.J,V3.K>
              ACTL/<891.406,607.9994,-826.756>,<0.0002228,0.0000678,1>
              TARG/<V4.X,V4.Y,V4.Z>,<V3.I,V3.J,V3.K>
              SHOW FEATURE PARAMETERS=NO
              SHOW_VISION_PARAMETERS=NO
              ASSIGN/V5=MPOINT(0,-1,0)
              ASSIGN/V6=CROSS(V4,V5)
              IF/ANGLE_A>46
                ASSIGN/V14=-45
                ASSIGN/V15=225
              END_IF/
              IF/ANGLE_A<46
                ASSIGN/V14=0
                ASSIGN/V15=360
              END_IF/
              ASSIGN/V7=PT1.XYZ-RADIUS*V3
CE7          =FEAT/VISION/CIRCLE/DEFAULT,CARTESIAN,OUT,LEAST_SQR
              THEO/<V7.X,V7.Y,V7.Z>,<V3.I,V3.J,V3.K>,2*RADIUS,V14,V15
              ACTL/<891.3937,607.9798,-839.2507>,<0.0002228,0.0000678,1>,24.9905,0.1342,278.6304
              TARG/<V7.X,V7.Y,V7.Z>,<V3.I,V3.J,V3.K>
              ANGLE VEC=<0,-1,0>
              SHOW FEATURE PARAMETERS=NO
              SHOW_VISION_PARAMETERS=NO
              ASSIGN/V8=CE7.XYZ+(RADIUS*V3)
PT3          =FEAT/VISION/SURFACE POINT/DEFAULT,CARTESIAN
              THEO/<V8.X,V8.Y,V8.Z>,<V3.I,V3.J,V3.K>
              ACTL/<891.3965,607.9806,-826.7523>,<0.0002228,0.0000678,1>
              TARG/<V8.X,V8.Y,V8.Z>,<V3.I,V3.J,V3.K>
              SHOW FEATURE PARAMETERS=NO
              SHOW_VISION_PARAMETERS=NO
              ASSIGN/V16=PT3.XYZ-(RADIUS*V3)
CE6          =FEAT/VISION/CIRCLE/DEFAULT,CARTESIAN,OUT,LEAST_SQR
              THEO/<V16.X,V16.Y,V16.Z>,<V3.I,V3.J,V3.K>,2*RADIUS,V14,V15
              ACTL/<891.3959,607.9791,-839.2474>,<0.0002228,0.0000678,1>,24.9922,90,90
              TARG/<V16.X,V16.Y,V16.Z>,<V3.I,V3.J,V3.K>
              ANGLE VEC=<0,-1,0>
              SHOW FEATURE PARAMETERS=NO
              SHOW_VISION_PARAMETERS=NO
              MOVE/CLEARPLANE
SCN1         =FEAT/SET,CARTESIAN
              THEO/<220.9567,121.2539,-270.002>,<0,0,1>
              ACTL/<892.8373,609.2642,-839.2239>,<0,0,1>
              CONSTR/SET,BASIC,CE6.HIT[1..CE6.NUMHITS],PT3,,
SPH1         =FEAT/SPHERE,CARTESIAN,OUT,LEAST_SQR,YES
              THEO/<V1.X,V1.Y,V1.Z>,<0.0000905,0.9999994,-0.0010979>,2*RADIUS
              ACTL/<891.3959,607.9791,-839.2484>,<0,0,1>,24.9922
              CONSTR/SPHERE,BF,SCN1,,
  DIM LOC1= LOCATION OF SPHERE SPH1  UNITS=MM ,$
  GRAPH=OFF  TEXT=OFF  MULT=10.00  OUTPUT=BOTH  HALF ANGLE=NO
  AX    NOMINAL       +TOL       -TOL       MEAS        DEV     OUTTOL
  X    V1.X     0.0500    -0.0500   891.3959    -0.0073     0.0000 ---#-----
  Y    V1.Y     0.0500    -0.0500   607.9791    -0.0195     0.0000 --#------
  Z    V1.Z     0.0500    -0.0500  -839.2484     0.0208     0.0000 ------#--
  D    2*RADIUS     0.0500    -0.0500    24.9922    -0.0078     0.0000 ---#-----
  END OF DIMENSION LOC1
  CALIBRATE ACTIVE TIP WITH FEAT_ID=SPH1, QUALTOOL_ID=sphere_matte, MOVED=NO
  AXIS     THEO     MEAS     DEV      STD DEV
  X       <V1.X  891.3959   0.0073
  Y       V1.Y  607.9791   0.0195
  Z       V1.Z>  -839.2484   0.0208
  DIAM    2*RADIUS  24.9922   0.0078   0.0010
              ASSIGN/ANGLE_A=ANGLE_A-10
            LOOP/END
            RECALL/ALIGNMENT,INTERNAL,REF1


Using "probedata("vector")" and "qualtooldata("XYZ",sphere_matte")" needs to work in startup alignment...
The lateral deviation decrease from 28µm to 8 µm, the focus from 5µm to 1.5µm (average of deviations between contact as reference and optical )measurement)
  • I love everything about this.
    Anything I can use to make my programs that much more accurate I'll snag!
    I'm working on a custom autocalibration prog, since for whatever reason we don't have one. We have an Optiv, so hopefuly I'll be able to apply some of these techniques to that.
    It's going to be an adventure, that's for sure!
    I particulary like the heavy use of variables, and light programming. +1 all around