Close
0%
0%

NS1 Oscilloscope

A compact, headless, 62.5MS/s, 7MHz bandwidth oscilloscope.

Similar projects worth following
NS1 is a compact, headless, single channel oscilloscope featuring 7MHz bandwidth and a sample rate of 62.5MS/s. NS1 is designed to be just enough for many common analysis and debugging tasks. At its core, NS1 uses the RP2040 microcontroller for signal acquisition, leveraging its PIO and DMA peripherals to achieve a high 62.5MS/s sample rate. NS1 is likely one of the few purely microcontroller-based oscilloscopes capable of this speed. Given the oscilloscope is headless, waveform visualization and control are handled via Voltpeek - a custom PC instrument control application. Voltpeek is written in Python and talks to NS1 over USB serial. Voltpeek can also be used for direct Python scripting to automate waveform capture and control.

Specs:

  • 16384 point memory depth
  • 4 ranges 1V, 2V, 5V, 10V, all full scale
  • rising edge and falling edge trigger
  • 7MHz bandwidth (+0.6dB, -3dB)
  • 62.5MS/s
  • Single Channel
  • +/-4% of full scale DC Accuracy

Example Waveforms:

Here are some example waveforms captured with the NS1:

Frequency Response

Here is a measured frequency response for each of the ranges. The frequency response is shaped digitally via a 3 point FIR filter. That is, this is the overall system frequency response, not just the analog front end response.


Triggering

The system has two triggering modes, force trigger and normal trigger. Force trigger starts the capture when the trigger is initiated, whereas normal trigger waits for a trigger edge event before starting the capture. With normal trigger mode, the trigger event is recorded at the center of the capture. Normal trigger is achieved with a comparator and a settable trigger voltage as shown below:

There is also a trigger correction algorithm in Voltpeek to properly center the trigger event.

Gain and Attenuation Settings
There are two attenuator settings and two gain settings. These are what scale the input signal to create the four possible ranges:

Software

Voltpeek is the software written to control and display the data that is sampled using NS1. Unlike other PC based oscilloscope software, Voltpeek is a command based UI. This is done because click and drag based UIs can be extremely annoying when they are controlling complicated processes. Voltpeek has a similar user interface to Vim. Different commands control the system, and the software can be put in adjustment mode. Adjustment mode is used to adjust the scales, cursors, and trigger level using the h, j, k, and lkeys. 

Prior Work

NS1 is not the first oscilloscope project to utilize the Pi Pico/RP2040 PIO and DMA peripherals to create a fast oscilloscope. Some similar projects that have done this are listed below:

https://hackaday.io/project/188051-rpscope

https://hackaday.io/project/191569-raspberry-pi-pico-super-simple-oscilloscope

NS1_schematic.pdf

Latest revision schematic

Adobe Portable Document Format - 532.15 kB - 03/09/2025 at 04:31

Preview

  • Software Trigger Flow

    schuyler44 days ago 0 comments

    Recently, I have been working on improving the trigger flow. The original issue involved starting a normal trigger or single trigger and not triggering on a waveform, and then making another adjustment like horizontal or vertical scale or trigger type. This would cause the scope to freeze and forced you to close the software and power cycle the scope. Fixing this required making changes to both the software and firmware with respect to how an armed trigger is stopped. Unfortunately, now that the problem is fixed, there is another problem where there is minor waveform ghosting when adjusting the scale when a normal trigger waveform is refreshing. Fortunately, this is a relatively minor artifact and doesn't significantly affect functionality.

  • Synchronized Multiple Channel Normal Trigger

    schuyler406/22/2025 at 04:51 0 comments

    It is now possible to use normal trigger with multiple channels with the resulting waveforms synchronized. However, this feature is experimental; there are a lot of bugs and problems still. 

    The two oscilloscopes are synchronized by passing the trigger output from one scope to the trigger input of the next scope. This is shown in the picture below

    Currently, trigger input and output are just headers on the board, but the plan is for them to eventually be SMA connectors or similar mounted on the back of the scope. 

    Using these two channels it was possible to capture the following waveform (input and output of a half wave rectifier). 



    Problems and Future Work:

    1) Better identification of scopes. There must be a master scope which actually triggers on a waveform and triggers other connected scopes. Currently it is very difficult to figure out which scope this is. To fix this each scope will have to store its own serial number which voltpeek can then read and display.

    2) Trigger jitter between channels. It is possible to correct trigger jitter from one channel in software and apply the same correction to the other channel, but when trigger jitter is uncorrelated channel to channel, it becomes a problem again. This is noticeable on very low time scales.

    3) Various bugs related to freezing and the waveforms not being displaced correctly. 

    4) Add synchronization for auto trigger. This will require new PIO code.

  • Asynchronous Multiple Channels

    schuyler406/16/2025 at 23:06 0 comments

    I have begun work on multiple channels. Multiple channels are implemented by plugging in multiple NS1s into the same host computer; Voltpeek can then connect to both of them and capture data. Each NS1 is a channel. The channels are not synchronized yet. The waveforms below show the same square wave, but they appear offset. There is a way to synchronize them using the trigger circuit; I just haven't tried to implement it yet.

  • Proper Zooming

    schuyler406/08/2025 at 21:29 0 comments

    In Voltpeek, it is now possible to zoom in on a stopped capture correctly. An example of this is shown:

  • Distortion Improvement

    schuyler406/03/2025 at 21:32 0 comments

    I have discovered that adding a low pass filter in between the last op amp stage and the ADC like shown below improves the distortion performance of the scope.

    This has -3dB frequency of ~170MHz, so it does not lower the bandwidth of the scope. Rather, as mentioned in the datasheet of the ADC08100, the circuit absorbs energy coming out of the ADC input.

    Below are triangle waves measured using scopes without and with this modification.

    Without low pass filter:

    With low pass filter:

  • Falling Edge Trigger

    schuyler409/29/2024 at 03:39 0 comments

    A falling edge trigger feature has been added. An RC discharge waveform is shown below demonstrating this:

  • Center Trigger Working

    schuyler408/30/2024 at 22:07 0 comments

    The trigger event is finally recorded at the center of the capture instead of the start. This is achieved using a more complicated PIO program, and a DMA ping pong configuration that creates a ring buffer. Here is an example RC circuit waveform that demonstrates this capability:

View all 7 project logs

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