Digital Oscilloscope
PCB Oscilloscope emulating workbench oscilloscope, waveform display and adjustment capabilities
PCB Oscilloscope emulating workbench oscilloscope, waveform display and adjustment capabilities
Description:
A PCB oscilloscope able to display waveforms in the same manner as a testbench oscilloscope (vertical and horizontal scaling), sine, square, etc.
Features:
Displays Waveforms from 1Hz-30MHz, up to 10 V
STM32H503 32-Bit ARM Microcontroller, 250Mhz, 2.5Msps
10-Bit ADC 105Msps
Waveform trigger on waveform RMS, calculated via Opamp w/ Automatic Gain Control
USB to Stlink debug via JTAG protocol
USB-C Power Delivery controlled by microcontroller (5-100W)
Decoupling capacitors and ESD diodes for high voltage, overcurrent, noise reduction
Impedance matched traces for maximizing power efficiency
Differential pair routing for USB
Test points for ease of debug
Main Schematic:
Details (scroll to see circuitry on each component):
Analog front end:
Details:
Power (LDOS):
Layout (Front) 4 layer, signal (Mostly analog), ground, signal (extra routing layer), Power + Digital
Layout (back)
3D Model (Front)
3D Model (Back)
Boards!
State of boards upon first recieving, some components preassembled by JLCPCB.
Finished soldered reworks
We used STM32CubeIDE to make a config file supporting our specific STM32 pinouts and JTAG communications, and flash the STM32 with our STLink, read 1024 signal samples along with control inputs such as our gain and trigger values (can be changed). This is put into a data packet, sent to laptop via USB-C, and we read the data packet and unpack the ADC output values, gain and trigger values on our end. We then reconstruct the original amplitude that was attenuated during our original analog front end processing, and finally display our real-time waveform with matplotlib via continuous sampling.
Fixing pinouts on STM32
Adding multiplexing capabilities
Better gain adjustment between different types of waves (sine, square, triangle) (rms calculation slightly differs for each)