Unable to place 01005 :-(

Post Reply
flying_fred
Posts: 11
Joined: Sun May 29, 2016 2:18 pm

Unable to place 01005 :-(

Post by flying_fred »

Hi Juha and everybody,
first of all, I would like to wish a happy new 2017 year with lots of reliably, trouble free and accurately placed SMDs, as well as many Liteplacers sold to Juha.

Now, I have to say that the post title was a bit provocative to catch attention because my post will be somewhat loooong... I also thought about "Pick or Place, pick your choice". Sorry for that, but I'm having real hard time with, I figure now, the software.

First of all let me state that the machine has been carefully built, squared, calibrated, etc... and long movements have been repeatedly done and checked with garanteed no step loss. Checked with PCB fiducials spread here and there on the table.
  • The squareness factor corrects for less than a 0.4mm build squareness error (corrected down to better than 0.02mm)
  • In order to avoid additionnal errors the two Y belts tensions were matched (audibly tuned to the same note - Hey I'm a guitarist ;-)). Some experiment showed me this could matter for ultimate precision.
So, IOW, it is perfect and I'm really confident in the machine quality.

Now for the provocative title, I mean I can't reliably pick up, place 0603s, SOT23s, not even speaking of 0402 for which I got the machine...

Let me now explain all that in details.

First, the machine configuration is as follows:
The_machine.jpg
The_machine.jpg (201.62 KiB) Viewed 5531 times
The board to be stuffed is the lower left one, while the 3 others are for test conveniency (they provide 1mm fiducials which are ideal with the pink 0.8mm needle for pickup accuracy test).
The small brass piece at main PCB lower left corner is the "home target" and allow excellent homing repeatability.

The machine is carefully calibrated it according to Juha's instructions.

Some (2) 0603 placing tests lead to the following conclusion:
  • Components are not picked up. Missed by about 2x1mm, offset that seems to change, depending on the tape position on table.
  • Should the needle carry a component it would have been placed accurately. At least that one's good.
I first thought I did something wrong so I did and did again the machine calibration routine with unfortunately exactly the same outcome.

So I did put even more efforts into diagnosing, thinking I was doing something very wrong. Eventually, I came to the conclusion that the software almost certainly has some more bugs, and possibly (I underline the conditional) some flaws designed in.
After all the efforts that's real frustrating, given the feeling I have that the mechanic is capable of reliably placing even 0201s.


First the problems with components pickup, and pickup consistency across the machine table:
  • The board has 70+ different references per side, most 0402, so the table is cluttered with tapes.
    Unfortunately components pick up offset WRT to tape hole varies across the table. (up to preventing 0603 pick up !)
    I've done a lot of test, so here are the most meaningful ones:
    • Start with a Liteplacer calibrated as per Juha's notice
    • Notice that the components are not picked up, so trying the following...
    • Carefully refine the needle/down-cam offset calibration (software "Nozzle Nominal Offset") right at a pick up point, that is
    • [list]
    • Use a 0.8mm needle which allow for easy positional error estimation, when compared to the 1mm fiducial.
    • Place the down-cam on one of the top right PCB 1mm fiducials;
    • Align the down-cam on this fiducial using the "Show hole" button of "Tape positions" panel. This sets the fiducial as a perfect reference point
    • Press "Probe Down" button
    • Estimate the offset error between the fiducial and needle
    • Adjust the "Nozzle Nominal Offset" values
    • Repeat two above until the needle is accurately probing the fiducial center
    • Repeatedly check this positionnal accuracy, while exercising movements all over the table then returning to this fiducial and probing down. The error is estimated to be under +/- 0.02mm. (not bad :-))
    • Have a coffee
    • Now the components are reliably picked up at that table location, but unfortunatelly are not placed correctly anymore on the PCB. See the following pictures.
  • Now move to the three other table corners and check the "fiducial probing" accuracy test ("Probe down" button) (of course without updating the "Nozzle Nominal Offset").
The really big surpise here is that the pick up error is not consitent over the table area.

[*]Here is what I measured after a lot of efforts (it's not that easy to do)[/*]
  • Top right (reference) : X0=422.88, Y0=272.165 => Pickup error = (0, 0) (obviously)
  • Bottom right : X0=416.025, Y0=33.893 => Pickup error = (-0.145, -0.118)
  • Top left : X0=0.452, Y0=269.148 => Pickup error = (-0.55, 0.196)
  • Bottom feft : X0=14.706, Y0=27.030 => Pickup error = (-0.40, 0.16)
  • I then double checked the top right reference and the error was still nicely (0, 0)
[*]So it seems that the table position enters somewhere into your pick up algorithm which, I think, it should not. Components pick up is a local affair between the pick up head ("Nozzle Nominal Offset"), the tape hole position and the component to tape hole offsets and no other dimension should be involved. (needle runout correction not counted) [/*]
[*]0.55mm is a huge enough error to almost prevent reliable 0603 pickup (width = 0.8mm) and it could even cause issues with 0805, 0402 being totally out of question for now :-(.[/*]
[/list]

Now, even more strange at the moment, was that after doing all that calibration/verification suff, I attempted to place two 0603 ceramics picked up from the top right region and they were not picked up and the needle placement on board was way off. But I think I've also tried to play with the up cam offset to correct for the placement problem to not avail.
It seems all those calibration variables interact, maybe needlessly...

One more attempt gave:
0603 attempt.jpg
0603 attempt.jpg (188.89 KiB) Viewed 5531 times
or this:
0603 attempt_2.jpg
0603 attempt_2.jpg (147.54 KiB) Viewed 5531 times
This is, well, rather disappointing...

One question bothers me, though. That is, how come that nobody had those problems? Or is that the reason of so much forks?

Other things have been noticed that could be enhanced, but I'll keep that for another post. My priority is to be able to place the board I got the Liteplacer for.

Happy new year again to every body,

Fred.
mrandt
Posts: 407
Joined: Mon Apr 27, 2015 10:56 am
Location: Stuttgart, Germany

Re: Unable to place 01005 :-(

Post by mrandt »

Hello Fred,

happy new year to you also.

I read your long post and felt sorry for the bad experience you have had.

As you may have read, I am transitioning to OpenPNP - mostly for the alignment correction with table camera. If you are serious about placing 0402 and smaller, you might want to consider this path. Also, if you are still using the blunt needles, I reccomend you get Juha's nozzle upgrade kit - professional SMT nozzles make a huge difference.

The problems you are describing are unusual though. I think something must be seriously wrong.

I think it is most likely that you have an issue with cameras, nozzle runout (wobble) calibration and / or nozzle-to-camera offset.

Some sources of error I could think of and a few hints which might help:

- you may have misconfigured squareness correction; try turning that off

- if your belts are nicely tensioned, try turning off slack compensation, too

- you may have camera perspective error; make sure both cameras are not tilted but perfectly perpendicular to table surface; with table cam it is easy to check: lower nozzle to PCB surface level, center above table cam, slowly raise the nozzle and check that the tip stays centered

- you may have camera fixation issues; make sure the cameras are nicely mounted and cannot move, shift or tilt during machine operation. Sometimes camera electronics come loose inside borescope cameras; you may want to consider upgrading the cameras. I successfully used modified Andonstar microscope camera and ELP board cams (like many openPNP builds) for down cam and am more than happy with my modified Logitech C270 webcam for the table cam (http://malte-randt.de/improved-3d-print ... era-mount/)

- camera projection error; the size of an object in camera picture depends on viewing distance; thus the calibrated px-to-mm values (camera units) are only valid for a given Z-level (height) - this is especially important for nozzle runout (wobble) measurement

- I assume you checked XYZ travel distance vs. coordinate system - so steps and revolitions per mm are correct? What about A (C) axis? Make sure that 180° turn actually performs half rotation by adding some mark to shaft. This affects runout (wobble) compensation.

- Take extra care when setting head (downward) camera-nozzle offset; this is the most crucial !!! I prefer the "carbon paper trick" using the nozzle to leave a visual mark which I then aim the camera to. I repeat this before each and every job.

- Make sure to run the calibrations in the order Juha prescribed; some affect each other. Example: Camera-offset is affected by setting up camera position, which again affects wobble compensation; wobble compensation in turn is affected by px-to-mm ratio (camera units) for that cam

- You should remeasure fiducials on your board; this will affect placement location but not pickup.

- Double check circle detection on tape sprocket holes. Once machine detects sprocket hole center correctly, camera offset is configured and nozzle wobble calibrated correctly, pickup should work like a charm each and every time.

Let me once more reiterate the importance of eliminating camera perspective and projection error! If your table camera has wrong px-to-mm ratio during runout (wobble) calibration, Liteplacer will apply wrong corrections (depending on A/C angle) during both pickup and placement. If your head camera to nozzle offset is incorrect, nozzle will always land in the wrong location; this error is deterministic though.

One of the forks (rmod) had an "auto" setup for the units which worked like this: Calibrate PCB surface Z-level by probing, then center nozzle in table camera. Next it would move the nozzle iteratively in XY-direction, measure the offset in pixels and calculate the px-to-mm ratio assuming the movement distance in CNC hardware was correct.

You can do something similar with Juha's base version: Once PCB surface level is configured (table surface Z-level probed, PCB thickness set) move nozzle above table camera and press "lower nozzle". This is the Z-level used for wobble calibration; thus this is the correct viewing distance. If you used a steel ruler or graphing paper to set the camera unites (px-to-mm ratio), it MUST be at the same distance from amera as the nozzle is now. But instead of using a ruler, try the following: Toggle box display in camera view, jog nozzle to lower left corner, you may want to zoom in to get this correct, note the coordinates, jog nozzle to upper right corner, note coordinates again -> calculate box size from relative machine movement and set this value in Juhas dialog.

You may also want to remind Juha of the following issue / feature request: https://github.com/jkuusama/LitePlacer-DEV/issues/30 :-P

@Juku I think you should add a hint regarding viewing distance / ruler Z-level (height) on the website instructions http://www.liteplacer.com/camera-setup/
From my experience a slight change in viewing distance can make quite a difference in projected image size; this effect depends on focal distance (f) of lense and gets worse with higher resolution cameras. This is also the reason why I try to keep everything at the same level (PCB surface, cut tapes, feeders, even my homing mark is elevated to that level).

I hope this helps and you get your machine to work!

Best regards
Malte
JuKu
Site Admin
Posts: 1114
Joined: Thu Feb 14, 2013 3:06 pm
Location: Tampere, Finland
Contact:

Re: Unable to place 01005 :-(

Post by JuKu »

First, changing nominal offset should not be needed. The way the calibration is supposed to work is that you put the needle down on a mark, and then show the mark to the software. This sets the nominal needle/nozzle offset. Then, without changing the rotation, you take the needle to up cam and set the upcam location. Now, if the wobble would always be 0, we have all the info we need. But the wobble is not 0, so the difference to the nominal is measured in the needle/nozzle calibration process. This way, the software knows where the needle tip is, regardless of the needle used and the rotation. Things to note here are
a) you are unlikely to ever get back to the nominal values, the wobble is always present and the correction for it is needed* and
b) from software's point of view, the up cam location changes if you change the needle offset: Software sees the up cam location as the point, where a hypothetical needle with zero wobble taken down to measurement level ends up precisely to the center of the view. If the downcam nominal offset changes, so does the calibration algorithm value for the up cam location. If you change the offset 1mm, the calibration now thinks that the needle point is 1mm off from where it was. Also,
c) Everything works on one Z level.
( *: Some customers find that the new nozzles have practically no wobble and use them without correction)

In short, you are supposed to do the needle to cam offset and up cam location setting only once and rely on the wobble correction algorithm afterwards.

So, are you sure you see error that is table dependent, not rotation dependent? The only thing in the software where the absolute location has any effect is the squareness correction. It is rather puzzling why the location on the table should have any effect. Do double-check the set screws on the pulleys and the coupler, just in case. Do you use slack correction? (I wouldn't expect that to give the relatively huge errors you are seeing, though.)

You can debug the process by the buttons on the low right corner: "Pickup this" and "Place here" try to pick up and place a part from/to the location shown in the camera, using needle correction; "Probe down" puts the needle down to the location shown in the camera, using correction; "Probe (n.c.)" does the same, but doesn't use correction and finally, "Nozzle to cam" takes the needle above the up cam, using correction, so that when you take needle down, the tip is at the center of up cam view (button "Nozzle Down" on the camera setup page; presumably you are there so you can see the up cam image).

Try to get the test functions to work first. If you can't solve it, please report your findings on these as well.
flying_fred
Posts: 11
Joined: Sun May 29, 2016 2:18 pm

Re: Unable to place 01005 :-(

Post by flying_fred »

Hi Juha and Malte,
thanks a lot for your detailed answers, that helped make some progress.

Some updates...

It happens that there were at least two problems, one of which has been easily cleared:
  • the needle runout calibration was at fault. Looking carefully the log while calibrating I saw the following message, from memory because oddly enough I can't reproduce it now:
    Several candidates detected, ... choosing the smallest at coordinates (x,y), or something like that, with some outrageously wrong values.
    Turned out that the upcam needle filters were poorly set on average (my bad), and I also left the min radius to 0, which lead some off axis random pixels to be recognised as the needle center.
    Changing the filter parameters and setting a reasonable min radius corrected for that and it seems (I've learnt to be prudent ;-) ) that I now have pickup consistency across the table.
    I think that, as the software went into timeout, the new homing/noozle calibration cycle made for the inconsistency, not necessarly across the table, but over time...
  • Now, the more difficult case is that I do have some vertical offset between the PCB plane and the pickup plane (6mm). This offset is necessary because of the dual side placement, and for now I do want to tape the tapes on the table...
  • Another (minor) source of error is with the sense of A axis rotation with the original axis design. The side it is rotating now make the spring-axis contact effort work against the spring and make for some slip⁻stick effect with uncorrectable errors. Making it turn the other side seem to completely avoid this and the needle rotation is much more consistent and smooth.
:?: So, Juha, would it be possible that you:
  • add a second set of needle/downcam offset correction (maybe also with a 2nd set of camera box pixel to mm conversion factors, but I'm not clear whether this is needed or not)?
    One set would be calibrated on the PCB plane and used for components placement and the other set would be calibrated at the pickup plane and obviously used for pick up only.
    I don't think that would break anything and would be easy to implement as well as being a real benefit to the Liteplacer.
  • change or add a parameter for the side of A axis rotation?
For now, I think I can place 0603, but still not 0402, thanks to those errors.

I thought of doing that myself but being an analog guy I can't be a software guy (so says the general wisdom) and going into python, as I need now, is enough for me...

Pheww, I think we might be to an end, there :P

Malte,
I already anticipated some points and I should have got a C270 in my mailbox today.
I've also got hold of a set of Juki nozzles and a pair of quick change holders some time ago (before Juha issued his update). I'm not sure of what route I'll go since Juha's kit is a ready to go solution whereas the Juki nozzles needs some more work but I think are a better way.
As for the downcam, I already have an Adonstar cam with some 12mm mounts. It has been mounted, gave very good images but the cam was moving inside the main tube and was unstable, depending on cable movements, zoom tuning, and so on...
I've found no way to open it and, unless I missed something, it seems I can't fix that, so I reverted to Juha's cam, waiting for a better match.
Does yours have the same issue?

For the cam perspective error, it is indeed a pb for the downcam, but I don't think so for the upcam since the needle/nozzle end is purposely placed in the PCB plane when doing calibration.
I managed to correct tilt error in the XZ plane (filled one of gantry holes) but the YZ tilt is another matter and I don't want to bend the gantry plate.
I kind of measured that tilt error with the Liteplacer (about 1mm in 30mm which is 2°) and the Adonstar pb made me think that this tilt error is a feature built-in right into the cams, rather than a Liteplacer issue...
How did you correct that on your side?

With best regards,
Fred
flying_fred
Posts: 11
Joined: Sun May 29, 2016 2:18 pm

Re: Unable to place 01005 :-(

Post by flying_fred »

Regarding the second set of needle/downcam offset correction, it just occured to me that it would be simpler to have an additional offset vector that defaults to (0,0).
With that default null value, the software would behave exactly as originally intended and the values would be easy to set.

Regards,
Fred
mrandt
Posts: 407
Joined: Mon Apr 27, 2015 10:56 am
Location: Stuttgart, Germany

Re: Unable to place 01005 :-(

Post by mrandt »

flying_fred wrote:that I now have pickup consistency across the table
Very good; nozzle runout / wobble calibration seemed the most logical cause here - so nice you got that fixed.
flying_fred wrote:I do have some vertical offset between the PCB plane and the pickup plane
I also considered fixing this in software, but than you would need to run a lot of calibrations all depending on Z-level: cam px-to-mm ratio, nozzle runout, potentially cam to nozzle offset etc.

Also, this does not solve focus issues with the camera. Depending on depth-of-field the camera will only be focussed for a given distance and once your object are nearer or farther, image will become blurry.

I think it is much simpler to get everything to the same level. For now, just introduce a piece of wood or sheet metal to raise the component tapes. Once you get to embossed plastic tapes, you may want to consider strip feeders.

My 3D printed design works, but I think John's new tape feeders are more promising - once he gets the injection molding done. There are also many other ideas using laser cut, cnc milled or 3D printed arount this forum and OpenPNP mailing list.
flying_fred wrote:Adonstar cam with some 12mm mounts. It has been mounted, gave very good images but the cam was moving inside the main tube and was unstable, depending on cable movements, zoom tuning
That is the weak point of the Andonstar cam. I solved this by fixing the USB cable at the top using a 3D printed clamp; a blob of hot glue also does the trick.

First focus camera for necessary distance and then fix the cable. I adjusted for tilt as good as I could by inserting thin plastic sheets between clamp and gantry plate; brute force bending of plate might also work ;-)

Also, a bit of tilt is not much of an issue. As long as all objects are at equal distance from camera, image center will consistently be in the same spot and have same offset from nozzle. If you have different distances / heights tilt will give you trouble though.

A good alternative cam is the 5MP ELP USB board cam; however I have not found a good way to reliably mount that one on LitePlacer - but I got a few in stock and time permitting I will try them for both up- and downcam. The chip and driver are real good, USB cables can easily be changed (molex connector) and the form factor makes it easy to make a mount which would allow to correct for tilt. I'll keep you posted on my progress.
flying_fred wrote:I've also got hold of a set of Juki nozzles and a pair of quick change holders some time ago
If you want Z-probing and auto change support, Juha's kit is by far the easiest way to go. I also have some Jukis and OpenPNP holders here; but found the Samsung nozzles were easier to handle.
flying_fred wrote:[..] but I don't think so for the upcam since the needle/nozzle end is purposely placed in the PCB plane when doing calibration.
Actually, the nozzle tip is 1mm above PCB surface as Juha's assumes this is the average height of passives. OpenPNP actually stores the height for each and every part in your library and adjusts Z-level for each part accordingly.

If Juha introduces optical compensation for rotational or displacement error (down cam looks at part, machine corrects pickup error) he might also need this and it would be fairly easy to auto-probe the part height from placement Z-level - PCB surface level.+

But for practical means; I think you're good with the up cam.

Regards
Malte
Post Reply