All projects

Junior Design (ECE 342) · PCB & Mixed-Signal

Dual-Channel 34 MSa/s USB Oscilloscope

A USB-powered, two-channel oscilloscope built by a team of three. I led the schematic and the 4-layer PCB layout across both revisions and designed the microcontroller block. It samples at 34 MSa/s per channel, more than 11× the previous course record of 3 MSa/s.

per channel
34 MSa/s
previous course record (3 MSa/s)
11×
PCB, BGA microcontroller
4-layer
rev-1 to rev-2 re-spin
5 days
The finished two-channel USB oscilloscope in its orange 3D-printed case, powered over USB with two BNC probes attached

The problem

Build a portable oscilloscope as the ECE 342 junior design project. It had to capture two independent analog channels, digitize them and stream them to a laptop. The spec required at least 200 kSa/s per channel and under 100 ms response to user input.

My part

  • Schematic and layout. I designed the full schematic and the 4-layer KiCad layout around the BGA NXP LPC4370 (138 components). Parts came from LCSC and the board was fabricated at JLCPCB.
  • Analog front end (designed by Cooper Holm; I laid it out). Photo-relay AC/DC coupling and a multiplexer that selects one of four attenuation paths (0.256× to 10×). Op-amp buffer and level-shift stages scale ±10 V inputs into the ADC’s 100–900 mV window, with overvoltage clamping and a ~10 MHz anti-aliasing filter.
  • Bring-up. Rev 1 arrived with a mirrored 100-pin microcontroller footprint and the wrong LDO. We validated the power and analog blocks on their own, and I re-spun a smaller rev-2 board within 5 days. We hand-assembled it with a solder stencil.
Top view of the rev-2 board under a clear lid: BGA microcontroller at the top, two analog front-end channels below, BNC inputs at the bottom
Rev-2 board in its case. Microcontroller and USB at the top, the two analog front-end channels below, BNC inputs at the bottom.

The LPC4370 firmware (DMA capture and USB 2.0 streaming) and the PyQt5 host app were written by my teammates.

Result

The finished instrument samples at 34 MSa/s per channel, more than 11× the previous course record and over 150× the 200 kSa/s requirement. It streams to the laptop with sub-100 ms response to controls.

Host app showing channel 2 capturing a clean 1.78 MHz sine wave, 796 mV peak-to-peak
Channel 2 capturing a 1.78 MHz sine (796 mVpp, 1 µs/div).
Host app showing both channels at once: a 1 kHz square wave on channel 1 and a 1.7 kHz sine on channel 2
Both channels at once: 1 kHz square on Ch1, 1.7 kHz sine on Ch2.

What I’d improve: bandwidth. In testing, displayed amplitude began to drift once the input went above about 1 MHz, well below the ~10 MHz anti-aliasing corner. Next step: sweep gain against frequency on each attenuation range to find which stage rolls off first.

Team: Cooper Holm, Luke Neilson, Griffin Ziemer. Project showcase