Group Assignment 05: Characterising our PCB Mills

The objective of our group project for this week was to characterise the PCB-making mills we had at our disposition. In the FabLab, we have a Roland MDX-40A machine, while in my little satellite lab, I have a Sainsmart Genmitsu 3018 Pro. Both machines needed characterising.

Roland MDX-40A

The FabLab workhorse is a reliable beast. Looks good too!

The team that did the work in the FabLab produced a lovely example of a test strip using the settings on the Roland mill.

They’ll describe in their own words the magic they used to achieve that result.

Sainsmart Genmitsu 3018 Pro

In our satellite workshop in Qualburg, we have a little no-frills mill, which also doubles as a very dangerous lasercutter.

Characterize the design rules for your PCB production process: document feeds, speeds, plunge rate, depth of cut (traces and outline) and tooling.

The Genmitsu mill is a sturdy little beast, but it has no safety switches anywhere, so it has to be operated with care. The worry isn’t so much the operator as the steppers and, as we’ve discovered a few times now, the milling tools.

To characterise the mill, we used the linetest.png example file from Neil’s lecture, shown below.

We used FabModules to generate the g-code for the job, with a cut speed of 4mm/s and tool diameter of 0.4mm. For the rest of the parameters we just accepted the defaults. When we ran the cut in air, with no tool, it was clear that the machining speed had to be cut back, as recent experience had taught us that none of the tools in the FabLabchen can handle that kind of force. That led us into the g-code. (We could just have gone back to FabModules and changed the speed, but we were curious to see how the code was laid out.)

To understand the g-code, we referred to the following document, from Using the guide, we annotated the header of the FabModules g-code as follows (FabModules is not verbose - the comments after the semicolons are ours).

G17 ; xy-plane
G20 ; set units to inches
G40 ; compensation off
G49 ; cancel current tool offset, z axis
G54 ; work coordinate system X0 Y0 Z0
G80 ; cancel canned cycle
G90 ; absolute distance mode
G94 ; feed rate units per minute (sets units for F words)
T1M06   ; T1 picks tool #1, M06 executes the tool change
F4.7244 ; feedrate in inches per minute (set by G94)
S1000   ; set the spindle speed
G00Z0.1969  ; G00 - fast move to Z-coordinate
M03     ; start spindle clockwise
G04 P1      ; hold still for a unit of time
Z0.1969     ; move to the Z-coordinate
G00X0.0514Y0.4252Z0.1969    ; move quickly to the starting point
G01Z-0.0040 F4.7244     ; plunge to the cutting depth
F4.7244             ; pick up the speed
G01X0.0584Y0.4262Z-0.0040   ; start cutting

The exploration of the code explained a few of the problems we’d been facing with the Genmitsu. The first was the switch to inches as units. We’d noticed that the machine controller sends the motors off into orbit after the job: instead of jogging by 10mm, it was jogging by 10in. We couldn’t figure it out until we saw the G20 line in the g-code. The other thing we noticed was that the job would simply finish at the last point of cutting, which made it difficult to then position the milling head for the outline cut. So we added two lines to the end of the g-code, between the M05 stop spindle and M30 program stop lines:

G00X0Y0Z0.1969          ; go back to zero position
G21             ; return units to millimetres

The first of those lines zeros the cutter back to the home position, but still positioned safely above the board. The second we’ve just added, and are hoping will reset the machine controls so that it doesn’t have to be hard reset after every job.

Finally we discovered that the Genmitsu requires the DOS CR/LF text format, so we had to translate the code from the Unix/Mac format provided by FabModules. This we did with the following command in Terminal:

perl -pe 's/\r\n|\n|\r/\r\n/g' >
cp /volumes/Genmitsu

The first line converts the newline characters into CR/LF pairs. The second copies the new file to the SD card for the mill.

The complete g-code file is available here

The results of our tests are shown in the picture below:

We tried three different setups, shown in the left hand picture. The bottom left panel shows the results of an engraver tool with its z-axis calibrated at the bottom left corner by descending until a piece of writing paper was just snagged by the tip of the tool against the PCB stock. The result is that the tool doesn’t cut deep enough to clear away the copper, except in the top right corner, where the top of the PCB is warped up towards the cutter. The cuts are clean, but not deep enough.

The bottom right panel shows the results of using the same cutter, calibrated in the bottom left corner with the same piece of paper but this time, after the paper was removed, the spindle was started and the engraving tool driven down 0.200mm (0.1mm for the paper, and another 0.1mm into the copper). The result is a bit more jagged, but the traces are mostly clear.

The top left panel shows the results produced using a 1/64in two-fluted square sided milling bit. The results shown are the second pass, created in the same way as described above for the bottom right panel. The second picture above shows the results of the first pass - to the left of the test fingers, the failure to remove the copper on the first pass.

Lessons learned

  • Run the machine at max 2mm/s with the small bits
  • Calibrate by catching the paper and going down one more 0.1mm step (with spindle on)
  • Add the two lines to the end of the g-code to reset the machine after the job
  • Convert the FabModules file to DOS format if the machining is to be done from the SD Card (with Candle running on a computer via USB, the conversion is not necessary.)
  • The plunge rate could be faster, and the clearance could be smaller, but both can be lived with.

Snapmaker Mill