[SOLVED] Mysterious nozzle to camera offset error
Posted: Fri Oct 26, 2018 5:49 pm
Hello!
My liteplacer places some parts precisely, but most of the parts are placed at 0.1 - 0.4 mm right and/or down to the intended locations. I investigated this issue and it completely broke my brain.
Here is example of placement (mostly 0402):
Most parts self-align in the oven but not all, and it is quite annoying.
It is not because of some constant nozzle to camera offset calibration error, cos those parts which are not rotated are also affected. And it picks most parts quite precisely.
"Don't use nozzle correction" is checked cos correct nozzle calibration using up looking camera is pain to me, and instead i measured nozzle offset at different unscrewing angles of nozzle adapter and milled 0.6 mm washer with which the nozzle offset is within 0.1 mm.
"Slack compensation" is on.
I found that after placement if i push "measured location", the camera goes to precise (within 0.1 mm) location of the soldering pattern. So i think that this behavior is not because of camera mount or drivetrain but solely due to nozzle to camera offset variation.
So i tried to measure this offset variation. I glued a needle to one of the nozzles (it is not precisely at the center so average offset is not zero). Then i pierced an A4 sheet of paper with this needle using "panelize" function. (By the way, i found yet another bug - if you make panel more of 10*10 boards, the program gives duplicate names for some parts, e. g. C1_115 stands for C1 at board (11, 5) and C1 at board (1, 15), and some of these duplicate parts are not placed (but some are placed).)
Then i pierced this sheet another time, and results were within 0.1 mm compared to first time. Moreover, this holds even next day. So it is not random displacement of the nozzle or some environment fluctuation.
Here are coordinates of some obtained points (unfortunately these points are too faint for automatic measurement so i had to measure them by hand, so some of them may be imprecise or even erroneous) (first two numbers are coordinates from board origin in cm, the other two are offset error in mm):
So we see that X offset varies within about 0.2 mm and Y offset varies within about 0.3 mm. Similar issue was described in this post: https://liteplacer.com/phpBB/viewtopic.php?f=10&t=448 but i did not understand how the author solved it.
Then i made some points by "place here" (they are at another rotation angle so absolute error does not agree with the above) and measured them automatically:
So:
1. Offset varies within 0.218 mm by X and within 0.409 mm by Y.
2. Variations due to random camera or nozzle offset or different Z coordinate contribute no more than 0.09 mm (X) and 0.13 mm (Y) in this offset.
3. At the left side the Y offset is about 0.2 - 0.3 mm less than at the right side.
Also i measured linearity of belts with rulers. And nonlinearity is also within 0.1 mm! However if it were more it would not explain changing Y offset while moving by X axis.
Dialog between program and tinyG shows that all coordinate displacements are correct (X displacement is 0.05 mm bigger than i set but also equal in all cases).
I use non-shielded cables so variations of force acting on the gantry are also excluded. Also i tied all the cables to the gantry base so nozzle and camera do not experience significant force variations from cables.
The other hypothesis that i have is bending of the makerslides. But makerslides are straighter than all my rulers! While such offset difference requires fairly big bending - i think 0.3/80 mm is about 1 mm nonlinearity at 750 mm makerslide.
Also it might be uneven wheels but these wheels have about 60 mm circumference, and i do not observe such waves in my data.
So i have no idea what this is and how to fix this. I need your help.
Thanks in advance.
My liteplacer places some parts precisely, but most of the parts are placed at 0.1 - 0.4 mm right and/or down to the intended locations. I investigated this issue and it completely broke my brain.
Here is example of placement (mostly 0402):
Most parts self-align in the oven but not all, and it is quite annoying.
It is not because of some constant nozzle to camera offset calibration error, cos those parts which are not rotated are also affected. And it picks most parts quite precisely.
"Don't use nozzle correction" is checked cos correct nozzle calibration using up looking camera is pain to me, and instead i measured nozzle offset at different unscrewing angles of nozzle adapter and milled 0.6 mm washer with which the nozzle offset is within 0.1 mm.
"Slack compensation" is on.
I found that after placement if i push "measured location", the camera goes to precise (within 0.1 mm) location of the soldering pattern. So i think that this behavior is not because of camera mount or drivetrain but solely due to nozzle to camera offset variation.
So i tried to measure this offset variation. I glued a needle to one of the nozzles (it is not precisely at the center so average offset is not zero). Then i pierced an A4 sheet of paper with this needle using "panelize" function. (By the way, i found yet another bug - if you make panel more of 10*10 boards, the program gives duplicate names for some parts, e. g. C1_115 stands for C1 at board (11, 5) and C1 at board (1, 15), and some of these duplicate parts are not placed (but some are placed).)
Then i pierced this sheet another time, and results were within 0.1 mm compared to first time. Moreover, this holds even next day. So it is not random displacement of the nozzle or some environment fluctuation.
Here are coordinates of some obtained points (unfortunately these points are too faint for automatic measurement so i had to measure them by hand, so some of them may be imprecise or even erroneous) (first two numbers are coordinates from board origin in cm, the other two are offset error in mm):
Code: Select all
1 1 X: -0.036 Y: -0.236
2 1 -0.1 -0.2
3 1 -0.1 -0.2
10 1 -0.15 -0.1
20 1 -0.15 -0.05
29 1 -0.2 -0.0
29 10 -0.2 -0.1
20 10 -0.2 -0.1
10 10 -0.15 -0.1
2 10 -0.0 -0.3
1 20 -0.15 -0.15
10 20 -0.2 -0.1
20 20 -0.2 -0.05
29 20 -0.25 -0.05
1 2 -0.1 -0.2
1 3 -0.1 -0.15
1 4 -0.1 -0.1
1 5 -0.05 -0.15
1 6 -0.05 -0.2
1 9 -0.1 -0.15
1 13 -0.1 -0.2
1 15 -0.1 -0.2
1 16 -0.1 -0.2
1 17 -0.0 -0.2
1 19 -0.1 -0.2
1 20 -0.1 -0.15
2 20 -0.05 -0.15
3 20 -0.1 -0.15
4 20 -0.15 -0.15
5 20 -0.1 -0.1
6 20 -0.1 -0.1
7 20 -0.1 -0.1
8 20 -0.1 -0.05
9 20 -0.15 -0.05
10 20 -0.15 -0.05
11 20 -0.15 -0.05
14 20 -0.15 -0.0
15 20 -0.2 -0.0
16 20 -0.2 -0.0
17 20 -0.15 -0.05
19 20 -0.15 -0.05
20 20 -0.15 -0.1
21 20 -0.2 -0.05
22 20 -0.25 -0.05
23 20 -0.2 -0.1
24 20 -0.15 -0.1
25 20 -0.2 -0.1
26 20 -0.2 -0.05
27 20 -0.2 -0.0
28 20 -0.2 -0.05
29 20 -0.2 -0.1
29 19 -0.2 -0.15
29 18 -0.2 -0.1
29 17 -0.2 -0.1
29 16 -0.2 -0.15
29 15 -0.2 -0.1
29 14 -0.2 -0.1
29 12 -0.25 -0.15
29 11 -0.2 -0.15
29 9 -0.2 -0.0
29 8 -0.15 -0.0
29 7 -0.2 -0.1
29 6 -0.15 -0.1
29 5 -0.25 -0.0
29 3 -0.2 -0.1
29 2 -0.2 -0.05
29 1 -0.2 -0.05
27 1 -0.2 -0.1
26 1 -0.2 -0.05
24 1 -0.1 -0.1
23 1 -0.1 -0.1
22 1 -0.15 -0.05
21 1 -0.15 -0.05
19 1 -0.15 -0.1
17 1 -0.15 -0.05
16 1 -0.15 -0.05
15 1 -0.2 -0.1
14 1 -0.15 -0.05
12 1 -0.1 -0.1
11 1 -0.15 -0.1
10 1 -0.15 -0.1
9 1 -0.15 -0.1
8 1 -0.1 -0.1
7 1 -0.1 -0.15
6 1 -0.1 -0.2
5 1 -0.1 -0.2
4 1 -0.15 -0.25
3 1 -0.1 -0.25
2 1 -0.1 -0.25
1 1 -0.05 -0.25
3 10 -0.1 -0.3
4 10 -0.1 -0.3
5 10 -0.0 -0.2
6 10 -0.05 -0.2
7 10 -0.05 -0.2
8 10 -0.0 -0.15
10 10 -0.05 -0.15
12 10 -0.0 -0.1
13 10 -0.0 -0.1
15 10 -0.15 -0.1
16 10 -0.15 -0.1
17 10 -0.15 -0.1
18 10 -0.1 -0.1
19 10 -0.1 -0.1
20 10 -0.15 -0.1
21 10 -0.1 -0.1
22 10 -0.15 -0.1
23 10 -0.05 -0.1
24 10 -0.05 -0.1
25 10 -0.1 -0.1
26 10 -0.15 -0.1
28 10 -0.1 -0.1
29 10 -0.1 -0.1
15 1 -0.2 -0.05
15 2 -0.15 -0.0
15 3 -0.15 -0.0
15 4 -0.15 +0.05
15 5 -0.15 -0.0
15 6 -0.15 -0.05
15 7 -0.15 -0.05
15 8 -0.15 +0.05
15 9 -0.1 -0.0
15 10 -0.2 -0.1
15 11 -0.15 -0.1
15 12 -0.2 -0.05
15 13 -0.2 -0.1
15 14 -0.2 -0.1
15 15 -0.2 -0.1
15 16 -0.2 -0.05
15 17 -0.1 -0.05
15 18 -0.2 -0.05
15 19 -0.2 -0.05
15 20 -0.2 -0.0
Then i made some points by "place here" (they are at another rotation angle so absolute error does not agree with the above) and measured them automatically:
Code: Select all
At table level (0 mm):
500 1 X: X: 0.082 Y: -0.427
490 1 X: X: 0.054 Y: -0.445
500 350 X: 0.082 Y: -0.336
490 350 X: 0.064 Y: -0.372
(now i bent my needle, but miraculously it remained within 0.1 mm from above measurements)
At table level (0 mm):
495 1 X: 0.163 Y: -0.427
495 350 X: 0.091 Y: -0.363
1 350 X: 0.191 Y: -0.590
11 350 X: 0.136 Y: -0.563
At table + 3 mm (mdf board):
11 350 X: 0.109 Y: -0.653
1 350 X: 0.036 Y: -0.708
Re-measuring some older holes at 0 mm:
490 350 X: 0.073 Y: -0.372
495 350 X: X: 0.145 Y: -0.318
500 350 X: 0.100 Y: -0.372
At +3 mm:
490 350 X: 0.127 Y: -0.463
500 350 X: 0.054 Y: -0.372
Re-measuring older holes at 0 mm:
490 1 X: 0.064 Y: -0.372
495 1 X: 0.145 Y: -0.318
500 1 X: 0.082 Y: -0.299
At +3 mm:
490 1 X: 0.091 Y: -0.336
500 1 X: 0.091 Y: -0.381
20 20 X: 0.163 Y: -0.463
20 30 X: 0.136 Y: -0.581
Re-measuring older holes at +3 mm:
1 350 X: 0.000 Y: -0.662
11 350 X: 0.136 Y: -0.590
At +3 mm:
140 120 X: 0.100 Y: -0.481
300 210 X: 0.027 Y: -0.427
290 210 X: 0.073 Y: -0.318
300 20 X: 0.045 Y: -0.481
290 20 X: 0.073 Y: -0.454
20 210 X: 0.136 Y: -0.454
30 210 X: 0.118 Y: -0.481
280 210 X: -0.009 Y: -0.408
290 200 X: 0.045 Y: -0.472
280 200 X: 0.027 Y: -0.427
300 200 X: 0.064 Y: -0.436
290 205 X: 0.018 Y: -0.436
290 100 X: 0.054 Y: -0.381
300 100 X: 0.036 Y: -0.408
20 100 X: 0.218 Y: -0.554
30 100 X: 0.109 Y: -0.554
30 20 X: 0.200 Y: -0.599
20 20 X: 0.118 Y: -0.526
150 20 X: 0.136 Y: -0.526
160 20 X: 0.100 Y: -0.472
160 100 X: 0.073 Y: -0.445
150 100 X: 0.082 Y: -0.399
150 210 X: 0.127 Y: -0.390
160 210 X: 0.100 Y: -0.354
20 30 X: 0.154 Y: -0.545
30 30 X: 0.182 Y: -0.572
Re-measuring older holes:
20 210 X: 0.127 Y: -0.472 - at +3 mm
1 350 X: 0.109 Y: -0.587 - at 0 mm
11 350 X: 0.188 Y: -0.535 - at 0 mm
1. Offset varies within 0.218 mm by X and within 0.409 mm by Y.
2. Variations due to random camera or nozzle offset or different Z coordinate contribute no more than 0.09 mm (X) and 0.13 mm (Y) in this offset.
3. At the left side the Y offset is about 0.2 - 0.3 mm less than at the right side.
Also i measured linearity of belts with rulers. And nonlinearity is also within 0.1 mm! However if it were more it would not explain changing Y offset while moving by X axis.
Dialog between program and tinyG shows that all coordinate displacements are correct (X displacement is 0.05 mm bigger than i set but also equal in all cases).
I use non-shielded cables so variations of force acting on the gantry are also excluded. Also i tied all the cables to the gantry base so nozzle and camera do not experience significant force variations from cables.
The other hypothesis that i have is bending of the makerslides. But makerslides are straighter than all my rulers! While such offset difference requires fairly big bending - i think 0.3/80 mm is about 1 mm nonlinearity at 750 mm makerslide.
Also it might be uneven wheels but these wheels have about 60 mm circumference, and i do not observe such waves in my data.
So i have no idea what this is and how to fix this. I need your help.
Thanks in advance.