Close
0%
0%

WaveCatcher: 200MSps portable oscilloscope

4 channels, battery powered oscilloscope

Similar projects worth following
This project features an homemade, 4 channels oscilloscope which is planned to be released as opensource on a crowdfounding platform when it is finished. Basically, it consists of : 1) hardware - one PSU 2-layers board with USB-C power delivery + data, battery charger and cut-off, power votlage rails for CPU board, HMI inputs (rotary encoders, silent buttons) - one CPU 4-layers board with USB-A (memory stick), 4 analog inputs, 1 digital trigger input, 1 digital trigger output. Embeds MCU+FPGA. - 7" TFT screen - battery - debug board 2) firmware - Verilog code for the Spartan 7 FPGA - C code for the STM32F426 MCU 3) housing - 3D printed parts (front and back face, BNC plate, support legs, buttons), threaded inserts, screen glass protection, HMI sticker, anti-slipping pads etc. Performance: 4 non-interleaved channels at 200MSps each, 16.7M samples memory, 20mV/DIV to 5V/DIV inputs, x1 and x10 probes, 20ns/DIV to 50ms/DIV, superzoom, shuffle mode, FFT etc.

This project started in september 2024. It is made only using free, open source software (Kicad, Freecad, Inkscape, Gimp) or free for commercial use (STM32CubeIDE, Vivado).

The current prototype version is the third and works at 100MSps. The next version is to be the last one, it will sample at 200 Msps and include USC-C for power delivery, with improved hardware and case. This version is almost already ready for manufacturing as of june 2026.

Any further hardware modification will only be for bug-correction purposes (if any) without adding new features.

The MCU is based around a Cortex M-7 STM32: the STM32F426. It goes along with a 32-bits SDRAM which is used as frame buffer for the screen. It connects to the screen with a RGB888 parallel bus, to the FPGA using a SPI, to FLASH using QSPI, and to PSU board using I²C.

The sampling system is based around a Spartan7 FPGA: XC7S15. The samples are stored into a 16-bits DDR3 memory. Each canal uses one 8-bits 100MHz AD9283 ADC (two for 200Msps version). The front-end is made of several gain amplifiers, anti-aliasing filter, analog multiplexers, vertical position control, miniature relays and photomos for AC/DC/GND input selections. Bandwidth is expected to be >50MHz. There are one additionnal external trigger input, and one trigger output, also used as a 1KHz probe calibration output (selectable). The input capacitance can be adjusted with trimmer capacitors.

The firmware (STM32) is built around FreeRTOS. The drivers are written "bare-metal" without using HAL drivers. The graphics library is custom, made from scratch and is highly optimised for speed. It takes advantage of DMA2D and ChromeART. It uses triple-buffering. Global performance is about 45-60FPS at almost anytime. The firmware embeds semi-automatic calibration procedure, which allows user to calibrate the vertical input of the scope, for each channel and each caliber. After calibration, vertical precision is < 1%. Basic functions are supported: run/stop modes, superzoom and fast samples shuffle, min/max/avg measurement, FFT, cursors etc. For smaller calibers, a sinc interpolation filter is used, using ARM CMSIS DPS library.

The FPGA is programmed with Verilog/SystemVerilog. Free ARM (Xillinx) IP cores are used for the DDR3, PLL, FIFOs. AXI interface is not used. The sampling sections uses a configurable decimation min/max filter for slower timebases. The interface to MCU use 16-bits lenght SPI, using simple protocol (header + datas). Only the current displayed samples are transfered to the MCU, with the use af a second min/max decimation/compression algorithm.

Work ahead:

- Manufacture last version (200MSps)
- Add RTC
- Add 200MSps support
- Final hardware validation
- Bug fixes

  • USB support and bootloader

    Nolly07/06/2026 at 18:17 0 comments

    Just added USB support.
    I'm using TinyUSB and FatFS, on FreeRTOS.
    The scope can now save screenshots of the screen in BMP format!


    Also, I wrote a buildloader and separated the project in two executables: the buildloader, and the main application.
    The bootloader runs with minimal-simplified graphics, no RTOS and fit in 32KB first flash sector.
    Now user can update the firmware of the STM32 with USB key!

View project log

Enjoy this project?

Share

Discussions

Similar Projects

Does this project spark your interest?

Become a member to follow this project and never miss any updates