Skip to content

8. Electronics production

This week I used our lab’s LPKF ProtoMat S63 PCB mill to bring a schematic from KiCAD to life.

For the group assignment I once again teamed up with Anna, Kerstin and Lars, the other students from HRW FabLab, to get to know the machine and check what kind of performance we can get out of it.

We also took a look at how to order professionally manufactured PCBs from JLCPCB.

You can find our group work page right here.

Preparing a devboard in KiCAD

I already covered PCB design in KiCAD in a previous assignment, so I’ll give you the abridged version for this week.

If you are asking yourself why I didn’t simply use the design I already had, the answer is quite simple. My components didn’t arrive on time.

To be fair I would have had to change up some key things there as well but we’ll take a closer look at that next week.

Anyways, the design for this week is pretty bare bones. I used a Seeed Studio XIAO SAMD21, as well as a small LED, a corresponding resistor and a few pin headers to create a breakout board.

Pretty, isn’t it? Just wait until you see the fully soldered board…

The schematic looks like this:

All of the components I used came from the fab libraries or the default KiCAD library.

For the LED and resistor I used 0603 packages. If that doesn’t ring a bell, I’d recommend reading this article about SMD sizes.

I chose this size not only because it was the first that I saw when looking for components in the lab but also because I wanted to learn how to use solder paste and a hotplate.

In hindsight I really wish I had gone with SMD pin headers as well because soldering those as THT components was a gigantic pain in the rear, but more on that later.

Routing the traces was pretty straight forward, as the amount of components was so small.

A neat shortcut I learned while doing this is clicking on a part of a trace and pressing U to select the whole chain.

Also R to rotate and M to move stuff around have been really helpful.

Once I was done with connecting everything, defining the board outline and setting up the GND planes, I headed over to File -> Fabrication Outputs -> Gerbers (.gbr).

Here I only selected the front and back copper layers and the board outline and clicked on Plot.

After that I clicked on Generate Drill Files, where I simply selected Generate.

Gerber files store all of the shape and location data for every element in a printed circuit board layout and can be used to fabricate the board.

Read this article to learn more about the topic.

You can find all the design and gerber files for my devboard in the Download section at the bottom of this page.

Setting up the software and milling the board

Our LPKF ProtoMat S63 is not necessarily new, so it came with some quirks.

For example you have to start the machine before you start the software, otherwise it won’t connect properly.

Also the 8th tool slot is bent out of shape and cannot be used anymore.

The spoil board has definitely seen better days as well but as long as the vacuum function still works I won’t complain.

I started by turning on the machine and placing a sheet of double sided copper plated FR4 onto the spoil board, which I secured using masking tape.

I put more masking tape into the previously milled holes to prevent unnecessarily large amounts of dust to accumulate in them.

This should have given the computer more than enough time to recognize the machine, so I started LPKF CircuitPro.

After initial checks and a homing routine, I was greeted by the templates menu, where I selected DoubleSided_NoTHP.cbf.

THP stands for through-hole plating, which our machine does not support.

I headed over to File -> Import and selected my gerber files from before.

Since I am using the double sided process, I needed to set some fiducials.

These are small holes that the machine can reorient itself by after flipping over the sheet to machine the other side.

Usually you would place fiducials somewhere around your parts but my design already has drilled holes in it so I simply set the two that are the furthest apart as my fiducials in order to reduce wasted material.

Select a hole, right click it and select Assign objects to layer -> Fiducial.

Next I selected Toolpath -> Technology Dialog to genereate a toolpath.

At the top, I changed the Copper layer thickness from 18μm to 20μm to get a slightly deeper cut and hopefully better results.

In the Isolate tab I changed the isolation method to Complete rubout and checked the box for Genereate optimized rubout.

The Contour routing tab basically controls where the tabs that keep the part connected to the sheet are placed.

I went with horizontal gaps but I honestly don’t think it would have made much of a difference if I had chosen a different setting.

I left the Drills, Fiducials and Blind vias tabs as they were but unchecked the box labeled Process in the Pockets tab, followed by clicking Start.

Any errors would have been reported in this window, but since everything seemed to have worked fine, I closed it.

Next I opened the tool magazine via Edit -> Tool magazine to check if all the necessary tools for this job were loaded already and how much they have been used.

WARNING! If you ever find yourself in this window, do NOT use your mousewheel to scroll up and down or you might end up accidentally changing a tool.

With all that done I started the Board Production Wizard via the Wizards menu at the top.

This guided me through all the steps involved in producing my board. (Who could have guessed…)

I checked the material once again, positioned the board and then the production already started with drilling the fiducials.

All the automatic tool changes and milling processes went off without a hitch and I was quickly prompted to flip the sheet over the horizontal axis.

The machine started looking for the fiducials and let me confirm via the built in camera that it was at the correct position.

About 10 minutes later the whole board was already done so I started cleaning the machine and board with a vacuum cleaner to get rid of any loose dust.

Post processing and soldering the components

With a little twist I removed the board from the FR4 sheet and proceeded to file down the tabs.

Next I roughed up the surface with a coarse sponge to make soldering a little easier.

Speaking of soldering: I started applying solder paste to the pads with the tip of a needle.

I grabbed some tweezers, checked my LED’s orientation and placed it onto the pads along with the resistor and the XIAO controller.

After that I started preheating the Hotplates, yes, multiple.

One was set to 150°C and the other one to 220°C.

The first one is used to bring the board up to temperature and the second one actually liquifies the solder paste.

This double hotplate setup reduces the amount the board bends due to heat.

Soldering this way is awesome!

I checked for any solder bridges with a multimeter but luckily didn’t find any.

Soldering on the pin headers was totally different.

I don’t claim to be an expert about soldering but I do have a fair bit of experience with it and I must say that I have never encountered such a pain in the rear to solder.

For the life of me I could not get the solder to stick to the pads.

The pins themselves? Sure, it stuck to those with no problems. But the pads, I assume, were just to small to grab onto anything.

No amount of flux would help either.

In some places I used way too much solder in hopes of getting any connection which is why there are some blobs stuck to the ground plane.

After almost giving up for the third time I finally got it to work though.

These may be the ugliest solder joints I have ever created but for some reason they still formed a connection.

Neil forgive me for I have soldered

Of course these hideous joints came with their very own bridges so I put the board under a microscope and scratched away at them with a scalpel.

After one more continuity check and uploading a modified blink example sketch via the Arduino IDE I had a working breakout board.

Here is the code I used:

void setup() {
  pinMode(D3, OUTPUT);
}

void loop() {
  digitalWrite(D3, HIGH);
  delay(1000);
  digitalWrite(D3, LOW);
  delay(1000);
  }

Downloads

Devboard_Gerbers.zip

Devboard_KiCAD.zip