Skip to content
Simple Laser Direct Lithography / Laser Direct Imaging for PCB manufacturing
PostScript C++ Assembly Shell C Makefile Python
Branch: master
Clone or download
Type Name Latest commit message Commit time
Failed to load latest commit information.
am335x_pru_package @ 54a0617 Update am335x package. Aug 17, 2017
device-tree Improved timing; r31 input experiment Jun 3, 2017
img Update Readme for the pocket-cape; Add schematic image. Feb 19, 2018
pcb More update: convert to 5.x kicab libraries. Apr 22, 2019
scripts Detect more types of layers that should be shown with holes. Nov 19, 2017
src o Prepare cone-mirror code. Sep 17, 2017
.gitignore o First Beaglebone PRU boilerplate stuff Jan 2, 2017
.gitmodules o First Beaglebone PRU boilerplate stuff Jan 2, 2017
LICENSE Add an illustration of a plain arc scan. Jun 17, 2017 Point to NotANumber blog for another idea how to create cone mirror. Jun 21, 2017

LDgraphy - Laser Direct Lithography

A process also known as Laser Direct Imaging.

First Test

Simple implementation of photo resist exposure using a 405nm laser. Goal is to have this Open Source/Open Hardware system easy to reproduce with commonly available parts. The BOM is in the order of $100 including the Beaglebone Green.

  • 500mW 405nm laser ($30ish)
  • Commonly available polygon mirror scanner (from laser printers) ($20ish)
  • Beaglebone Black/Green to control it all (using the PRU to generate precise timings for motors and laser) ($40ish)
  • Stepper motor for linear axis (plus end-stop switches) (scrap box)
  • Photo diode to determine start-of-line (as the polygon mirrors have slightly different long faces and also phase-drift over time) (SFH203P)
  • Local electronics: fast Laser diode driver and stepmotor driver (few $$)

Stay tuned for a putting-it-together video once the design is settled.

Here is some rough design outline in case you are interested in more details.

Work in Progress

Currently, the design is work in progress while testing various different types of commonly available polygon mirrors and lasers. The PCBs for the cape and the laser current driver are in their first iteration with more focus on easy measurements and removable parts (e.g. stepper driver and DC/DC converter are external modules) than compact design. This part of the hardware is likely to change in the short term; it turns out, for instance, that some polygon mirrors have not perfectly perpendicular faces. So an additional sensor is needed to correct for that.

And of course, the software would need a little more bells and whistles (e.g. a web-server to easily upload Gerber designs).

Having said that, the device is fully operational with a reliable resolution of ~0.15mm/6mil, which is right up there with basic fab-house offerings (goal: reliable 0.1mm (4mil) traces and clearance).

Resolution test


This compiles on a BeagleBone Green/Black; it requires the PRU on these computers for hard realtime-switching of the Laser.

git clone --recursive

Install relevant packages. We are reading png-images as input, so we need the library that helps us with that (probably already installed on your system):

sudo apt-get update
sudo apt-get install libpng-dev -y

Then compile:

cd ldgraphy/src

To properly prepare the GPIOs and the PRU to be used, you have to install the device tree overlay on your Beaglebone:

cd ldgraphy/device-tree
sudo ./ LDGraphy.dts

The input is a PNG image. For converting Gerber files to PNG, see the gerber2png tool in the scripts/ directory.


./ldgraphy [options] <png-image-file>
        -d <val>   : Override DPI of input image. Default -1
        -i         : Inverse image: black becomes laser on
        -x<val>    : Exposure factor. Default 1.
        -o<val>    : Offset in sled direction in mm
        -R         : Quarter image turn left; can be given multiple times.
        -h         : This help
Mostly for testing or calibration:
        -S         : Skip sled loading; assume board already loaded.
        -E         : Skip eject at end.
        -F         : Run a focus round until Ctrl-C
        -M         : Testing: Inhibit sled move.
        -n         : Dryrun. Do not do any scanning; laser off.
        -j<exp>    : Mirror jitter test with given exposure repeat
        -D<line-width:start,step> : Laser Dot Diameter test chart. Creates a test-strip 10cm x 2cm with 10 samples.


The current version is made out of laser-cut acrylic parts to have it easily and cheaply build for everyone who has access to a laser cutter (hint: your local Hackerspace might have one).

Here, all electronics is mounted on the top for easier measurements and such. The final version will fit everything inside.


Above is current status of the case, which went through some refinements (here an earlier case which better shows the internal arrangement).

This was the first experiment

First Light

Setup Result

The first test-device was put together with extruded aluminum. Somewhat crappy first result, but had potential. Exposure time for this 30 mm long patch was around 90 seconds (for reference: on the right is how the geometry should look like).

As you can see, the early stages had some issues, e.g. you can't trust the "PLL" of the mirror to properly lock - it has a phase drift over time (hence the warped square). The current design has a HSync line sensor. Overall the progress after that improved various issues seen up to the point where it starts to be usable for PCB work.

You can’t perform that action at this time.