The idea have been stuck in my head for some time now, to make my own pick and place machine that should be able to assemble PCB boards.
I want to do this project for its complexity which means a great challenge, and I like that. A pick and place has many interesting systems that has to work together with high precision and timing, if the machine should be able to place components at high speed.
Some of the systems I have to develop:
- Mechanical structure that can withstand heavy forces from the gantry while it’s traveling in X and Y at high speeds without vibrating or or being close to resonance frequencies.
- Vision system that can read components, PCB markings, and much more.
- Motor control, the system has around 6 axes and 4 more axis for feeder gentries, all of whom should be synced and running at high speeds.
- Large C# program that can handle all the functionality I have planed for the machine.
- Laser alignment of components. The laser unit is placed on the pick-and-place head so I can read each of the three components the head has picked up while it is moving the components to the PCB.
- Component feeder Solving one of the problem almost every PCB pick and place machine has (except high-end machines)
- Vacuum and pressure systems. I have never worked with ether one of them so this will be interesting.
And a lot more of goodies …
I know this project will take some time, but that’s fine by me 🙂
Updates
I still have some problem with the motor jerk. I want active jerk tracking, and it is not easy. If I did go with position points A and B to travel between, it would be easy. But I like to be able to change point B on the fly.
Main board
Motor Controller Module
The Motor Controller Module is based on 3 boards, each utilizing a 4 layer PCB
The modules will be placed like this on the back of the head on the pick and place machine.
I have hidden a few PCB’s so it is easier to see board placement.
Main Board result.
I needed much higher step speed to the hybrid stepper motors, With this solution I can manage MHz if the driver and motor can handle it. It also supports closed loop control with encoders. I can fit two of this in one STM32F4
There will be two of those in the PnP machine.
I made a batch of totally nine boards that I have sent to seeedstudio for production.
Mostly the boards are for my PnP project. I was planning on waiting a few more weeks before sending the batch to production,
but I have to create the camera vision SW/HW function in quite a hurry because i took on the vision implementation as a curse project in school. So I desperately needed the light ring for the camera, aka lighthouse.
This is the main board controller. There will be two of those in the PnP machine.
- handles 7 stepper motor drivers, “3 digital and 4 normal step/dir”
- 7x end sensor inputs “hall sensors”
- 4x quadrature encoder inputs, enables up to 4 closed controlled motor loops.
- 5x analog sensor inputs , mostly for vacuum sensors
- 6x digital outputs to control relays and stuff like that
- 2x RS422 connections to PC trough the RS422_to_USB board
- 1x camera control, lens focus driver
- 2x UART connections
- and some other stuff
The other boards for the PnP project, in order
Main Controller
Laser Alignment
Lighthouse Controller
Lighthouse Brick
Stepper Drivers
Mix of Boards
USB<–>RS424 Switch Board
The 7mm linear guide is sooo tiny 🙂
The images in the bottom list shows each picture/vision function.
The system finds the component pads and marks them with a green box, seen in the big picture in the middle.
Small demo video

So far this is just a crude cad idea, it is easier to make the drawing simple until you find the structure you feel will work.

I finally found a good webcam capture driver.
Now it’s time to sketch the vision system sw structure and make a vision driver for my controller sw package.
This was just a test cad. That’s how I work.
I make a lot of different versions of a solution to find out strengths and weaknesses. Finally I select the best ideas and create the final solution.
The first approach is to try to create a laser alignment function for the head.
I did a simple setup to see if the filter I have will work to minimize the diffraction effect
This is to see if could remove the diffraction pattern a light generates when it hits a corner.
This is because the laser light is unpolarized and by using a polarize filter I can make it polarized in the vertical direction.
This minimizes the diffraction pattern.
Diffraction pattern “from wikipedia”
When I confirmed that this could work I made a jig to hold the laser and the CCD sensor
After a few hours in the workshop
The stepper motors come from some DVD writers I had lying around.
The assembly equipped with CCD sensor and laser
The CCD sensor I used for this test is iC-LF1401 that holds 128 active photo pixels with 63.5 μm pitch (400 DPI).
I would prefer to find a sensor that has more pixels and also is much wider than this one, but it will work fine for initial testing.
I connected the motors and sensors to my test board that holds a STM32 MCU and 3 allegro stepper drives.
This wont work without some controlling software.
From the software I can control the motors and the sensor. “Image showing the laser almost centered on sensor”
In the horizontal direction holds pixels on the sensor, and in the vertical direction holds each pixels intensity.
This shows the sensor readout with the laser turned off, to my disappointment there was to much noise in the the readout.
This means that I have to use a more powerful laser than i used in this test (5mW) so i can shorten the sensor integration time (shorter shutter time)
I changed the way I display data, and it became clearer how to read the displayed data.
The highest points dv/dt = 0 is the corners, and the low points between is the center on the sides of the component.
To speed up the reading I can sample fewer points and interpolate data points between to estimated points that marks the component rotation and placement.
few videos on the laser alignment test module
Parallel light source