PCB laser printer

Raspberry Pi powered PCB UV laser printer

Similar projects worth following
There are many ways of making your own PCB at home. Usually the best results are produced by using a photoresist process. In this process a PCB covered with the photosensitive paint is exposed to the UV light through a mask. Exposed paint is then washed away and uncovered copper etched. This project helps to automate this process by directly printing a circuit layout on the sensitized PCB using a UV laser. There has been a few attempts in DIY community to create such a printer with mixed results.

Presented printer imports the PCB layout as a bit-map image and prints it out similar to a paper laser printer. It covers whole surface of the PCB line by line turning the laser on and off to recreate the image pattern. To achieve a reasonable resolution and short printing time, each of the laser passes over the PCB has to be relatively fast. This requires short switching time of the laser and high bit rate of information.

Hardware design of the printer is very simple (see pictures). One fast rotational axis with laser at the end of the arm and second slow precise linear axis to progress over a PCB, line by line. Both axis are power by stepper motors. Electronic side of the project was design around Raspberry Pi as a main processing unit and few axillary circuits. Pi reads a PCB layout as a bit-map image (easily exportable from most of PCB design programs). After a few kinematic calculations, Pi is able to create the signal pattern for the laser. This patter is then transmitted over the RPi’s SPI. Each SPI data packet controls one laser pass over the PCB. Output data goes directly to the laser driver. In the driver, the SPI packet is decoded into bit stream by single D-type flip-flop. The signal from the flip-flop is then applied to the voltage to current amplifier which then drives a laser. Laser diode used in this printer is standard Blu-Ray recording diode (Sony SLD3234 125mW 405nm). The SPI’s clock signal is also send to the motor controller which tries to match it with the motor position. The motor controller is made out of an ATmega328 and two DRV8825 stepper motor drivers. Step resolution of the arm motor (1.8deg/step) is not enough for printing, but assuming a constant speed, its position is interpolated in time.

At the current state of development the printer achieves a desired resolution but printout has a small insignificant wave in it. Main down side of the printer is its lacks in speed. It takes around 10 minutes for it to progress 1cm over the PCB, which results in half an hour printing time even for a small circuits. Main factor which stops the printer from achieving higher speeds is the inertia of the arm. The stepper motor has to accelerate, maintain constant speed over a PCB and then decelerate the arm in the shortest possible time. At best it still takes around half a second to do it. The best solution to this problem is to copy the design from the paper laser printers. In such printers the laser is stationary and its beam is swept across a paper by rotating with constant speed mirror. Reproducing this arrangement will be probably the next step in the development.

  • Version 2.0

    Peter Bogdan09/24/2017 at 21:46 0 comments

    After some usage,  limitation of the first version came obvious. I have noticed that relatively long printing time is not the biggest problem and focused on fixing other issues. First of all use of a rotational axis for carrying laser created some distortion of the final print. It might have been caused by some errors in kinetic calculation or imprecise initial conditions, hard to say. Secondly, first version was supposed to achieve high resolution using microstepping  and linear interpolating of the arm position in time between steps. This worked to some degree. Unfortunately need for stronger exposure forced lower arm speeds which in turn resulted in jerky movement breaking the assumptions needed for interpolation. In the end it resulted in unreliable print with some traces broken and with jagged edges.

    This all force me to rethink the whole strategy. The first linear Y axis with slow precise stepper motor was good but second rotational arm axis was a mistake. This made me to return the proven solution and use linear axis for the second X axis too. This simplified all the calculation and referencing but increased hardware complexity. Next problem was the motor. I needed something fast and accurate. After bad experience with steppers I decided to go for DC servo motor with encoder. I used motor from the old inkjet printer (because of double-sided shaft) with added magnetic 10bit encoder (Part No. AEAT-6010-A06).  After implementing PID algorithm on Atmega and some trimming I was able to control the position of the motor in motion within ±1 bit of encoder resolution. This  was better than I could achieve with most of the stepper motors and with the small pulley on the output shaft it gave me reasonable resolution for printing (see specs).

    From the mechanical side I wanted to move laser in the straightest and most smoothest motion possible so I created small two piece cart with angled bearings which with use of the spring anchors itself  between two round rails (see video bellow). I also added an amber tinned cover to shield blue light scattered from the laser as a safety precaution.

    In the end the whole printer is quite functional at this configuration. It is able to print two sided PCBs with the traces down to 10mills. I found that below that size developing and etching  of the PCB becomes tricky and needs to be more tightly controlled. So far in total I have printed more than 800cmsqr of PCBs for different projects with only few rejects.

    Some specs:

    Maximum PCB size:        110x150mm

    Estimated laser dot size: 0.025mm

    Laser power:                      125mW (most limiting factor for increasing printing speed)

    Y axis resolution:              0.0115 mm/step (usually two steps per line 0.023 mm/step)

    X axis resolution:              0.03125 mm/step (with x5 interpolation 0.00625mm/step)

    X axis printing speed:     150mm/sec  (2 seconds per line)

    Y axis printing speed       0.0115 mm/sec  (which results in 5cm/hour)

    Here's a short video of the new version:

View project log

Enjoy this project?



Stepanov78 wrote 12/11/2017 at 23:49 point

  Are you sure? yes | no

George I Fomitchev wrote 06/25/2017 at 20:40 point

there is an alternative for making a PCB. have a look: 

  Are you sure? yes | no

SnipeHunting wrote 01/05/2017 at 01:00 point

Hi Peter,

I like your project!

Do you know or can estimate the maximum resolution and smallest spot size that can be achieved with the current setup?  Asking the same question n a different way, what is the thinnest line that you were able to print, and how close could you print another line next to it?

Also, what laser (part name) did you use in this project?  

Happy New Year!

  Are you sure? yes | no

Martin wrote 03/07/2016 at 12:12 point

EDIT: I just saw that this idea s already written here.

Instead of moving the laser physically I think it would be good to use the polygon mirror unit of an old laser printer to deflect the beam in x-direction. In y-direction the movement of the PCB is possible or the movement of the laser unit (including the polygon mirror assembly).

  Are you sure? yes | no

Peter Bogdan wrote 03/10/2016 at 01:37 point

One thing I didn’t write is that this mirror idea does not only complicates the mechanical design but also the electronic side. Right now Pi orders when to put a new line. When you have the other arrangement you have to start sending data at precise moment determined by the mirror position. And it is impossible to get this kind of fast response from Pi. So you have to employ bigger microcontroller and all the simplicity is gone.

  Are you sure? yes | no

Martin wrote 03/11/2016 at 12:17 point

That's true, a LINUX system is no good realtime system. But perhaps there is a solution. You probably know the popular WS2812 LEDs which require a steady constant data rate PWM data stream (a 0 is a 30% duty cycle pulse, a 1 has about 60%) for 24bit per LED for 10s to 100s of LEDs. It was said, that this is not possible with a RaspberryPI type system. Until somebody just did it. :-)

With a clever use of timers and the quite capable DMA system he wrote driver to deliver this kind of stable timing. Perhaps you can use this drivers as a starting point if you do not want to use an additional (even small, it has to buffer only at least one line) microcontroller.

The printing speed with the XY vector approach is really slow. I think with a polygonal mirror and raster scan it must get much better.

  Are you sure? yes | no


[this comment has been deleted]

Peter Bogdan wrote 02/21/2016 at 01:35 point

In this printer is not really the copper that gets effected by the laser but the photosensitive paint on it. This paint is design to be only sensitive to UV so it will not be
accidentally develop by visible light. After washing away the developed paint the copper is etched away by acid.

  Are you sure? yes | no

Similar Projects

Does this project spark your interest?

Become a member to follow this project and never miss any updates