Close
0%
0%

Haasoscope Pro

A 2 GHz oscilloscope for everyone

Public Chat
Similar projects worth following
Haasoscope Pro is a full redesign of the original Haasoscope—a successful Crowd Supply campaign from 2018—which was the first open hardware real-time USB oscilloscope. The new Pro version increases the bandwidth from 60 MHz to a whopping 2 GHz, the resolution from 8 to 12 bits, and the sample rate from 125 MS/s to an impressive 3.2 GS/s.

It’s the first open-source, open-hardware, affordable, high-bandwidth, real-time sampling oscilloscope. And just like with the original Haasoscope, you can flexibly combine and sync multiple Haasoscope Pros to interleave ADCs for a sample rate of 6.4 GS/s, or for additional channels.

To unlock the full bandwidth of the Haasoscope Pro, this project also includes an inexpensive 2 GHz bandwidth active probe. Unlike professional models which sell for top dollar, Haasoscope Pro is designed to be affordable, made with standard PCBs, off-the-shelf components, and an open-source design.

Features & Specifications

Haasoscope Pro:

  • 2 analog input channels
  • 50 Ohm (<1 pF) or 1 MOhm (10 pF) input impedance
  • 2 GHz analog bandwidth at 50 Ohm, 500 MHz at 1 MOhm
  • 3.2 GS/s for 1 channel or 1.6 GS/s for 2 channels, doubled to 6.4 GS/s with two synced Haasoscope Pro's
  • 12 bits of real-time vertical resolution per sample
  • Up to 40k samples per trigger, with adjustable trigger time offset
  • 100 ps/div to 24 hour/div, for 10 div
  • Max analog input of +-5V (50 Ohm) or +-3V (1 MOhm), +-50V or +-30V with x10 probe
  • Sensitivity of 1.6 V/div down to 8 mV/div, for 10 div, in x1 mode
  • Programmable AC or DC input coupling
  • Programmable DC offsets per channel
  • External trigger in and aux trigger out
  • Multiple Haasoscope Pros can be connected for more channels or to oversample at 6.4 GS/s, with synchronized timing and triggers
  • Standard set of triggers (rising / falling edge, time over threshold, etc.), customizable in firmware
  • Qt-based python software interface for Windows/Mac/Linux
  • Standard set of signal measurements in software
  • 5 V 1.5 A USB Type-C powered (or using 12 V 1 A 2.1 mm barrel connector)
  • Aluminum case with quiet 40 mm internal fan
  • 220 x 165 x 35 mm (8.66 x 6.5 x 1.38 in), 0.9 kg (1.98 lbs)

Active Probe:

  • DC - 2 GHz analog bandwidth
  • Flat response from DC -1 GHz within 0.3 dB
  • 1 MOhm input resistance
  • 1.1 pF input capacitance
  • 100 Ohm minimum impedance, near 1.6 GHz
  • x10 probe attenuation, input voltage range +-30V
  • 50 Ohm SMA output, 1m cable
  • 12 V power at ~80 mA, via 2.1 mm barrel connector, or 5V 200 mA USB using included cable

  • Walkthrough of the front-end design

    haas12/01/2024 at 20:07 0 comments

    When you hear "2 GHz oscilloscope", you might rightly wonder what kind of analog wizardry can possibly achieve such crazy bandwidth. Well, as you'll see, there was some care involved, but the real key was just to use some incredible components. In particular, the LMH5401 is a preamplifier with 8 GHz of gain bandwidth product that somehow only costs ~$10. We use it as a 4x gain, single-ended to differential amplifier. Then following that is the LMH6401, a 4.5 GHz bandwidth variable gain amplifier that somehow only costs ~$15. We use it to vary the gain by an extra factor of between -6 to 26 dB (~0.5x to ~20x), in 32 steps. Just using those two components, we basically have a 2 GHz front-end. The rest is just bells and whistles. 

    The front-end is basically all 50 Ohm (or 100 Ohm differential) impedance. 1M Ohm input impedance is accepted, but, as you'll see below, it is immediately turned into a 50 Ohm signal and then handled just like a 50 Ohm input.

    Let's take a look at the schematics. The first page is the "pre-input" part. A single-ended BNC signal comes in, and a 50 Ohm single-ended signal comes out, which will go to the LMH5401 preamplifier on the next page. Along the way, we are handling the splitting out of an analog input for oversampling, switchable 50/1M Ohm impedance, switchable 5x attenuation to increase the dynamic range, and AC/DC input coupling. The main goal here is to accomplish these functions without ruining the 2 GHz bandwidth before we get to the fancy preamplifier on the next page.

    We do have to be careful about the BNC input itself. Connectors are easy places to destroy bandwidth. Some BNC connectors only have 500 MHz or 1 GHz of bandwidth! We use Molex 73100-0105 BNC connectors, rated to 2 GHz, but I've tested them to 3 GHz and they show minimal losses (<1 dB).

    Next is a stage which can optionally split out half the signal to an SMA output on the front, so you can send it to a second Haasoscope Pro for oversampling. This is only on channel 1, since if you're bothering to oversample the signal, you're going to be using the ADC in single channel mode to first get the full 3.2 GS/s for the channel. The splitting is done by a simple resistive divider in the Delta configuration. It maintains the 50 Ohm impedance of the signal along both paths. We're assuming that the signal is 50 Ohm here, because only 50 Ohm has 2 GHz bandwidth and would require oversampling. Half of the signal is lost to heat, but that's OK, we have amplifiers afterwards. 

    This, and other options, are switched on or off by a relay. But not just any relay - most will only have a few hundred MHz of bandwidth. We need special "RF relays". Here I settled on the Omron G6K-2F-RF-T, which is rated to 3 GHz, but really starts to degrade significantly after 2 GHz. But that's good enough for us here, and already it's ~$10 each. Better relays are available, but can easily be ~$100 each! They're DPDT relays, so it's easy to route signals either on one path or another path, since there's an "input" and an "output" switched simultaneously. If the relay is off, the signal just goes straight through on a 50 Ohm wire to the output. If the relay is on, the signal goes into the splitter and half of it goes to the output.

    The next stage allows for switching to accepting 1M Ohm input impedance, for using standard 10x passive probes. These probes inherently don't have large bandwidth - the ones I usually use, the Rigol PVP2350 have 350 MHz of bandwidth, and the most you're likely to get from any passive probe is about 500 MHz. This is far from 2 GHz, so why bother with 1M Ohm impedance at all? Well, for one, some people just like to use 10x passive probes and don't care about the bandwidth. Second, if we're in two channel mode for the ADC, we have 1.6 GS/s per channel, and that's not such overkill for 500 or even 350 MHz of bandwidth.

    The goal here is to deal with 1M Ohm input impedance, but then immediately turn...

    Read more »

  • Early Development

    haas11/28/2024 at 04:59 0 comments

    In July 2024, the kids were off to camp, and I was off from teaching for the summer. Relax? Vacation? No! Work day and night developing my own 2 GHz oscilloscope! 

    The first goal was just to talk to the ADC chip and get it to do something. This would convince me I could solder the BGA chip correctly in my little reflow oven reliably, power the chip correctly, and let me start playing around with it. I had to connect an FPGA to it, to talk to it over SPI and receive the LVDS signals it sends out containing the ADC data. So I wired it up to an FPGA dev board that I had experience using, based on a Cyclone IV FPGA. You can see in the pic below all the 2mm spaced pins where the dev board would connect to this new board hosting the ADC chip on the left. There were also SMA inputs for the (differential) clock signal and two analog input channels to the ADC. I also added lots of debug headers so I could probe every signal going into and out of the ADC, plus debug the power and signals from the FPGA. There's also two headers on the right for connecting a module based on the FTDI FT232H chip I had experience with for interfacing the FPGA to USB2. 

    This is what the board looked like assembled, with everything attached to it. For power I was using these handy little USB-powered power supplies I found on Amazon to supply the ADC with 1.1V, 1.9V, and another 1.9V (separate for LVDS). The ADC also needs a very fast clock to tell it when to sample, 1.6 GHz. For this I used a cheap ADF4350 board from Amazon. But annoyingly it only had single-ended SMA output, whereas the ADC needed a differential output to two SMAs, so I used a cheap eBay single ended to differential converter. I also used another of these (not shown in pic) to input signals to the differential analog inputs of the ADC from my single-ended signal generator. To sync the clock between the FPGA and the ADF4350 board, I output a 50 MHz clock from the FPGA (big BNC connector sticking up) and connected it over to the reference clock input of the ADF4350 board.

    A lot of things worked! I could talk to the ADC chip over SPI just fine, reading back it's Vendor ID and serial number, setting its registers, and power it up and down. It could also see the clock from the ADF4350, and I'd see data coming over the LVDS lines into the FPGA. Below you can see the binary LVDS data coming in, when I'm sending in a 10 MHz or so pulse to the ADC analog input - I do see the bits going from 0 to 1 in unison on most of the LVDS outputs! It didn't work fast, only up to about 200 MHz, because those LVDS lines were hideous - very different lengths, going through tons of vias and even 2mm pin headers and who knows what on the dev board, and even unterminated. But it was more than enough to encourage me to move forward with the project.

    The next major step was clearly to put the ADC and the FPGA on the same board, and do the LVDS connections properly. 

    A very important lesson I'd learned, the hard way, was to break large projects into as many small blocks as possible. Especially for large hardware projects like this one, you don't want to put everything on one board at first. Start with each block on its own little board. Then it's quick, easy, and cheap to iterate versions of each little board you're working on, without redoing the other boards that already work fine.

    So I first made just a board with the FPGA on it, to get that working on its own. You can see a render of it below. It didn't really do anything except prove I could power it, program it with firmware over JTAG, see a 50 MHz clock input from the crystal, and make some LEDs blink. I also fanned out to .1" headers all the IO's, in case that would even be useful to me or others.

    The board worked just fine, first try!

    So then I was ready to make a board with an ADC and an FPGA on it, basically by merging together the first ADC board and the new FPGA board. ...

    Read more »

  • How it began

    haas11/22/2024 at 19:16 0 comments

    The original haasoscope was great, and still is, but as time has passed (6 years!) there were many ways I thought of to improve it.

    As I advanced in the kinds of projects I worked on, including high speed data acquisition for experiments at CERN, and one of the world's fastest random number generators, I found myself needing a much faster scope. I managed to get one, because I'm spoiled and have a great research budget, but I was shocked at how expensive they are. Even a probe was $1000+, at the low end!
    I started investigating why this stuff was so pricey. What I found was

    1. The market for fast scopes is smaller, so companies need to charge more per unit in order to recoup their upfront R&D costs
    2. They charge more because they can! A lot of the high end scope market is made up of companies and institutions, for whom money at the $20-50k level is not an issue

    I dreamed of one day making my own fast scope, to finally allow "ordinary people" to tinker with high speed electronics.
    I was inspired earlier in 2024 by an open-source 2 GHz active scope probe on hackaday. I printed and assembled a few of my own, and they worked great, for under $100 each! The probe was already half the challenge (standard x10 passive probes are limited to under a few hundred MHz) - now I just needed a fast, affordable USB scope.

    I did some research and initially hit some roadblocks. Most fast ADCs sent data out on high-speed serial links (12.5 Gbps+), which would require a "high-end" FPGA. Those can easily be many hundreds if not thousands of dollars, plus licensing fees for the software and IP, not to mention having to deal with assembling a 0.4mm pitch 782 pin BGA! I was entering a world of pain.

    But I then found a TI chip, strangely affordable, that also had a parallel LVDS interface. I could then use a "low end" FPGA - there are plenty of them with 100+ LVDS pairs for under $100, and free software and no licensing. I still had to deal with a 256 pin 0.8mm pitch BGA and a 484 pin 1mm pitch BGA, and routing ~80 LVDS pairs, each running at 800+ Mbps, but it finally sounded doable in principle.

    The routing was tough. At first I couldn't find a way to get all those signals out with less than 12 layers, and blind vias (as recommended in the data sheet / evaluation board layout). I priced it out and getting those made would be at least $500 /board in small quantities. (Blind vias are vias that connect only two specific layers of a multi-layer PCB, rather than holes going all the way through the board. They let you route other signals under (or over) the blind via, rather than having to go around it.) But I finally had a breakthrough and realized I could just get it to work, with only 10 layers, and no blind vias. I just needed thinner traces, 0.08mm (that's 80 microns wide!), and smaller vias, 0.2mm, directly under the BGA pads. Turns out that's just pushing the limits of some of the inexpensive Chinese PCB fabs, but they can do it! The boards can now be done for under $50 each in smallish quantities.

    The last obstacle was dealing with those BGAs. The FPGA could be assembled overseas, but the ADC was not available in China. I priced out having a US assembler attach the BGA, and we were back close to $500 again. I wasn't going to pay that, especially for some prototypes, of which I'd likely need many iterations. Wait, could I assemble it myself?! I bought a reflow oven on Amazon for $300 and watched some YouTube videos. It didn't look that hard. After practicing with some cheaper chips, I finally tried attaching the ADC to my board. It worked! And the Haasoscope Pro was born.

View all 3 project logs

Enjoy this project?

Share

Discussions

Jesse Farrell wrote 12/01/2024 at 18:47 point

This project is awesome! Thanks for documenting and posting logs. Fingers crossed we'll be getting some front end design logs ;)

  Are you sure? yes | no

haas wrote 12/01/2024 at 19:53 point

Thanks! I was literally working on that next... 

  Are you sure? yes | no

haas wrote 12/01/2024 at 13:45 point

As for KiCAD, I'm in the process of making the switch. I actually did try importing this project's eagle files into KiCAD (the latest version) and it went fine. Try it!

  Are you sure? yes | no

dsl wrote 11/30/2024 at 21:54 point

This is one of the most (or, perhaps, the most) excited open hardware project I've seen over long time. I've spent sometime looking for a 1 GHz bandwidth MSO, but its cost is hardly justifiable for a tinkerer (PicoScope 6000E Series, for example). I'd be glad to support it on crowdsupply.

  Are you sure? yes | no

haas wrote 11/30/2024 at 23:28 point

Thank you! I'm glad you share my excitement about it. 

  Are you sure? yes | no

dsl wrote 12/01/2024 at 12:08 point

The only wish of mine would be to have it as a KiCAD project instead of Eagle.

  Are you sure? yes | no

Similar Projects

Does this project spark your interest?

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