Thursday, August 6, 2015

xy-ray x-ray scanner

In some previous posts I talked about getting an x-ray head working, reverse engineering an x-ray sensor, and working with LinuxCNC.  In this post I put them all together so that I can take a bunch of x-ray snapshots across an entire PCB.  This allows me to more quickly reverse engineer PCBs.

Problem: with my previous work I can take a PCB x-ray at fairly high resolution (see bond wires like above) but the field of view is pretty small.  The above x-ray doesn't even cover an entire PDIP-40.  How can I see the entire PCB?

Linear stage

Linear stages are great for this sort of project.  As I'm moving on the order of inches they don't necessarily need to be high precision.  I looked around eBay and a few other places and settled on some stages as HSC.  I can't find a picture of the original setup, but something like this:

These had several desirable properties:
  • Around the right scan area I'm looking for
  • Reasonably sturdy to support PCB weight
  • Motors with integrated drivers (MDrive 17Plus).  As a plus they are 3.3V compatible
Not pictured is a Z cam motor that I didn't need for the x-ray setup.  However, this motor was perfect for running early integration tests.   My specific motor model is not listed on the manufacturer's website but seems to be pin compatible with their step/direction models.  As its 3.3V compatible I'm able to directly wire the control signals to a BBB running LinuxCNC.

Next I made the PCB holder.  The Z axis motor mount makes a convenient anchor point to attach accessories.  To actually hold the PCBs I decided to use a PanaVice PCB holder left over from a previous project.  This is a great fit as it nearly wedges into the motor mount and is made out of aluminum which is mostly transparent to x-rays (minimal image impact).  With a little sanding I was able to sandwich it into the motor mount:

And drill some holes to make it secure:

Which then integrates onto the stages:

Mounting the head

Next I need to mount the x-ray head.  Its heavy so this could be a bit challenging.  I was originally thinking of making a t-slot gantry so that it would clear the stages nicely.  It would be a plus if I could adjust the height up and down but not strictly necessary.

Thinking about the z axis, I recalled I had a spare heavy duty z stage.  And guess what?  The x-ray head fits onto it perfectly!

Integrating into the system:

In this configuration the stages can't travel their full range but given the low effort this is a great starting point.  You can also see the sensor in position.


The software development is mostly covered in my previous post.  Here is an early integration test with the pr0nscope GUI I use to control my microscopes:

AXIS would have worked fine but because I was focusing on rsh it was a bit of a pain to switch back and forth.  It may be possible to launch AXIS along side linuxcncrsh but I haven't looked into it.

Notice the slopping wiring going everywhere.  Lets see what we can do about that...

Control system

Onto the control system.  In the above picture you can see an aluminum plate to the left of the stage.  This held the original indexer board that I decided not to use in favor of standardizing on LinuxCNC.  I drilled some holes for standoffs (not super great but sufficient):

And started mounting electronics:

A few boards are on standoffs but I'm DIN rail mounting what I can.

I started routing cables and found that the Y power cable doesn't reach.  After splicing it to extend it:

And then heat shrinking it to prevent it from snagging and hiding the splice:

Going back to the electronics panel, you'll notice the e-stop button to the right.  In production:

Unfortunately I don't have any drills large enough for the button.  My step drill got pretty close but not there.  I thought about putting it on my milling machine / rotary table but decided that since I only needed to shave off a little that probably wasn't the most expedient (notice I didn't say best) option.

Instead we come to "Mr. Safety" on the left.  Although I didn't use a milling machine, I did put an endmill into my rotary tool and mill out the center a bit by hand.  This is a terrible idea and you really shouldn't do this for numerous reasons but it did get the job done.

Following that I finished the button with a coat of Dykem Blue.  It already had some on there from marking holes and I decided it was going to be less work to coat it blue than to remove the layout fluid.

Filling out the control system:

I DIN rail mounted the BBB onto a Phoenix Contact PCB mount by screwing the case into the PCB mount

There are two power rails:
  • 24V for stepper drivers.  It was supposed to be supplied by the DIN rail supply but I am missing a Combicon adapter.  For now an external power supply runs it
  • 5V from the BBB sets a control line in the stepper motors

Like previous systems, a laptop orchestrates the whole thing.   At the core is my pr0ncnc which underwent a major, long overdue code cleanup for this project.

Also like previous setups, the x-ray is powered by two Variacs switched through a DLI WPS-7.

Putting it all together


For my first scan I grabbed a scrap HDD PCB in arms length:

And you can find the output files here (TODO: stitch, mapify).  A few sample images:


This system was a bit harder to shield due to the larger volume.  However, running the system at 60 kV seems to produce negligible radiation leakage even without shielding and gives pretty good copper resolution.  Still, I have lead shielding around the system as an added safety and in case I want to operate at higher voltages.

Industrial units

For comparison, here's an XD7500NT industrial x-ray scanner:

Unlike my system, these allow real time imaging, HDR, and some other cool features.   Still, I'm sure my garage system costs a fraction of what these beasts go for and is considerably more compact.


The hardware came together pretty quickly and was mostly built over last weekend.  Figuring out how to configure and control the BBB took longer but is a good investment.  The integrated MDrive 17Plus stepper drivers make the system quite compact over my previous control systems.

There are a number of things I can do to improve scan quality but should be good enough for most projects.  The system will get used in the near future for PCB reverse engineering projects.

Got something cool you want scanned?  Drop me a line!

EDIT: looks like you can get small x-ray units at industrial auction for 1k.  Still, this was well under that and was a fun project


  1. neat job! keep up the good work mate!

  2. You have to be certified to operate x-ray equipment for a reason. The equipment needs to be certified as well, and not from circa 1977. Running this in your home is reckless to you and your neighbors.

  3. @thezim: I disagree. I get full exposure, in the FACE each time I get a cavity. My dentist uses something like this, circa '77. This is very directed, spontaneous, and low-power radiation.

    How can you claim it can affect NEIGHBORS?? Heck, I get more radiation from my granite counter top than I would looking trough that garage's window.
    I'm personally more worried about lead poisoning here.

    @John: Nice work ;)

  4. Nice job!
    Can you make a unit that with high enough resolution to measure copper plating in holes?

  5. X-ray equipment can be more harmful than you think, I am aware of accidents in defective wiring for a dental X-ray generator causes it to operate constantly. One of these X-ray generators caused an injury to a dentist and later exploded throwing oil and fragments around the room.

    I might sound like a kill joy, but I would leave X-ray equipment alone before it kills or maims you thus preventing you getting joy from anything.