← Back to Weekly Assignments

Electronics Production

Introduction

This week focuses on the physical production of circuit boards. I designed, milled, and assembled a custom microcontroller development board based on the Seeed Studio XIAO RP2040. The goal was to understand the full workflow from digital EDA (Electronic Design Automation) to a functional, "stuffed," and programmed hardware device.

Objectives

Group Assignment

  • Characterize the design rules for our in-house PCB production process.
  • Document settings for the milling machine (speeds, feeds, tooling).
  • Document the workflow for sending a PCB to a boardhouse.

Group Assignment documentation →

Individual Assignment

  • Make and test a microcontroller development board.
  • Demonstrate tool-path generation, milling, soldering (stuffing), and programming.
  • Identify problems and implement fixes during the fabrication process.

Tools & Technologies

1. KiCad 9.0 (EDA)

I used KiCad for schematic design, PCB routing, and generating output files required for toolpath generation.

2. Desktop CNC Router (PCB Milling Machine)

Equipped with a high-speed spindle to mill isolation traces in copper stock and cut the final board outline.

3. Tooling

  • 0.1mm 30° V-bit: Used for trace isolation engraving.
  • 1.0mm Flat End Mill: Used for cutting board outlines (Edge Cuts).

Process & Workflow

INDIVIDUAL PROJECT: CUSTOM XIAO RP2040 SHIELD

Design & Board Preparation

I finalized my PCB routing in KiCad, setting track widths to 0.6mm to survive high-speed isolation milling cleanly.

Preparing the Stock Board for Milling

Aligning the finalized layout design for export:

Finalized PCB Layout in KiCad

Applying heavy-duty double-sided tape onto the bottom of the FR-1 copper sheet to secure it tightly to the spoilboard, preventing bed vibration during spindle passes:

Applying Double Sided Tape to FR1 Stock

Positioning the prepared single-sided copper sheet firmly onto the CNC machine platform:

Secured FR1 Copper Board on Machine Bed

Generating Toolpaths Using Mods

I imported the PCB SVG/PNG graphics into Fab Mods to generate toolpaths for isolation milling and contour cutting.

  • Imported PCB design graphic into Mods.
  • Set tool diameter (0.1mm V-bit angle) and cut depth parameters.
  • Generated toolpath using mill raster 2D.
  • Exported toolpath file as trace.nc.
Generating Toolpaths in Mods

Setting up OpenBuildS CONTROL Software

To control the desktop milling machine and execute the G-code, I installed the OpenBuildS CONTROL application.

Download OpenBuildS Software →

OpenBuildS Installer Screen

Accepted license agreements to proceed with installation setup:

OpenBuildS Terms and Conditions

Selected the installation destination path on local disk storage:

Selecting Install Folder Path

Monitored installation completion progress:

Installing Application Files

Completed application installation and launched OpenBuildS CONTROL:

Completing OpenBuildS Setup

Loading and Simulating G-code

Opened the main CONTROL interface dashboard to initialize machine communication and toolpath previews:

OpenBuildS CONTROL Interface Dashboard

Clicked Open G-CODE in the main toolbar menu:

Selecting Open G-Code Option

Selected the exported G-code toolpath file Fab trace (1).nc:

Browsing Local G-Code NC File

Verified the generated 3D visualizer toolpath layout overlaying the workpiece origin:

Visualizing 3D Toolpath in OpenBuildS

PCB Milling Simulation Video

Ran a dry simulation path to confirm toolhead clearance bounds prior to cutting copper:


Connected the computer to COM3 port. Resolved an initial "Unknown error code 121" port error by re-seating USB controller cables:

Connecting Machine via Serial COM Port

Machine Setup & Z-Zeroing

Secured stock board onto the sacrificial bed layer and installed the 0.1mm V-bit into the collet using dual wrenches. Set Z-zero precisely so the bit tip makes physical contact with the copper plane surface without gouging.

Positioning Board on PCB Milling Bed
Installing Milling Bit into Spindle Collet
Setting Z-Zero Contact Point on Copper Board

Milling the Isolation Traces

Executed G-code toolpaths to engrave isolation paths and separate traces on the board surface:

Initializing Isolation Milling Pass
Milling Copper Trace Paths in Progress

Cutting Board Outline

Replaced the V-bit engraver with a 1.0mm flat end mill to execute the profile cutout file, freeing the milled board from raw FR-1 stock.

Changing to 1.0mm End Mill for Contour Cutting
Milling Outer Edge Cuts Boundary

Soldering & Assembly (Stuffing)

Soldered surface-mount passive components first, installing SMD LEDs and current-limiting resistors:

Soldering Surface-Mount LEDs and Resistors

Soldered pin headers and mechanical pushbuttons:

Soldering Breakout Headers and Switches

Final Assembly

Mounted the XIAO RP2040 core module onto the breakout header sockets:

Mounted XIAO RP2040 on Milled Shield PCB
Completed Assembled Custom XIAO RP2040 Board

Programming & Hardware Testing

Uploaded an Arduino C++ blinking test program to verify GPIO output routing. The LED toggled correctly, confirming power delivery, clean solder joints, and working microcontroller pin continuity.

PCB Operational Testing Video

Acknowledgment

Special thanks to our local facilitator for explaining PCB milling operation principles, optimal feed rates, and guiding trace width scaling. Thanks also to my lab peers for sharing troubleshooting insights during machine setup.

Challenges & Problem Solving

Problem: Initial KiCad layout used a 0.4mm trace width. Facilitator feedback advised increasing trace widths to minimize tear-outs during isolation milling.
Solution: Increased trace width by 0.2mm (scaling from 0.4mm up to 0.6mm), yielding robust copper tracks.

What I Learned

  • The critical importance of spoilboard leveling and Z-zeroing for consistent trace depth.
  • Managing iron heat during soldering to prevent lifting delicate milled copper pads.
  • Generating isolation toolpaths while accounting for bit tip geometry to avoid short circuits.