un0rick - open source ultrasound

Non destructive testing and imaging ultrasound have been around since the '50s. Many ultrasound open-source projects are emerging, mostly focusing on image processing - while hardware has been left behind. Several teams have produced succesful designs to be used on commercial US scanners, but they are not cheap, and are difficult to access.

I couldn't find designs to play with, that would be affordable or open, so I decided to make one for makers, researchers and hackers.

the board

Overview

This is a simple single-channel ultrasound board. Block diagram below:

Step-by-step

  1. Program the fpga using a open-source toolchain
  2. Control the board fully through SPI, be it through USB, a Raspberry Pi, or even an arduino.
  3. Set up the acquisition sequence through SPI (for example using this python lib for Raspberry Pi)
  4. Get the data back again through SPI, and process it.

I recommend using RPi, particularly W for the wireless aspects, which then becomes the board server. There's a dedicated 20x2 header. Prepared are image for the RPi W, a python lib as well.

Examples

  • With a Raspberry pi

The board was connected to a single element piezo, in water, with a reflector a few centimers away, immersed in water. Pulser is set up at 25V high pulses. Control was done through a Raspberry Pi W which is used as a controler and server.

Acquisition is realized, with a small offset, between 32Msps and 64Msps. Data is explored a bit further.

  • With a M5Stack

The board was also tested with a nice m5stack board (ino file). Below an example in image:

  • Tip: reaching 128msps

Playing with the trigger, it's possible to interleave two signals and artificially double to acquisition speed, yielding clean images:

Specs (un0v1.1)

  1. FPGA: Lattice iCE40HX4K - TQFP 144 Package
  2. Memory:
    • 8 Mbit SRAM, 10ns, 512 k x 16, equivalent to 65 full lines of 120us at 64Msps or 840 lines of 120us at 10Msps, 8 bits.
    • 8 Mb SPI Flash for FPGA configuration
  3. Ultrasound processing:
    • VGA: AD8331 controled by DAC
    • Pulser: MD1210 + TC6320
    • ADC: 65Msps ADC10065
    • Data formatted over 2 bytes, with 10 bits / sample, 2 bits of line trackers, 4 bits of IOs (counters, ...) and 2 bits for tracking.
  4. Parameters: Settings programable via USB or Raspberry Pi
    • Type of acquisition (one line / set of lines)
    • Number of lines
    • Length of lines acquisitions
    • Delay between acquisitions
    • Pulse width
    • Delay between pulse and beginning of acquisitions
    • 200us time-gain-compensation programmable (8 bits, from 0 to Max), every 5us
  5. Extensibility:
    • 2 x Pmod connectors
    • SMA plug for transducers
    • RPi GPIO
  6. User Interfaces:
    • 2 x PMOD for IOs
    • 4 x push button (with software noise debouncing)
    • Jumpers for high voltage selection
    • Jumpers for SPI selection
  7. Input Voltage:
    • 5 V from RPi or USB
    • Uses 350mA-450mA at 5V (including RPi)
  8. Operating Voltage:
    • FPGA and logics at at 3.3 V
    • High voltage at 25V, 50V, 75V
  9. Fully Open Source:

Latest sources

Orders

  • First sets around 449$. Vilis Ad Bis Pretii !
    • Send me a mail at orders@un0rick.cc !
    • Or wait for the Tindie shop

Others

Changelog

  • lit3rick v1.2 - Ongoing
    • lighter board
    • external HV modules
  • un0rick dual v1.2 - Ongoing
    • Better HV generation
    • SPI muxing to update
    • Check USB too
    • PMOD-compliant headers
    • remove i2c header, but keep i2c to RPI (with PU)
  • un0Rick dual - v1.1
    • Double SMA to possibly separate TX and RX path (for dual elements transducers)
    • Still some issues with muxing
  • un0Rick - v1.01
    • Rewired SPI
    • Less MUXing
  • The "matty board" v1
    • First ice40 board - compatible with iceprog =)
    • Only one in existence, had some SPI wiring issues
    • HV module footprint reversed

Thanks & shouts

  • BiVi - always here to chat
  • Charles - bringing neat insights
  • David - what would I have done without you?
  • echOmods - the fundations of this work
  • Fabian - already so many insights
  • Fouad.. and team - awesome works there
  • Jan - piezooos
  • Johannes and Felix - hardware is .. hard, but rew-harding!
  • Sofian - early ideas!
  • Sterling - another geek
  • Tindie - to allow people sharing their niche hardware, and for others to search for these
  • Visa - exploring amode
  • Vlad - you pulse
  • Wlmeng11 - inspiring
  • all the supportive users
  • .. and all the others around the world!

License

The un0rick project and its boards are open hardware, and working with open-hardware components. Licensed under TAPR Open Hardware License (www.tapr.org/OHL) Copyright Kelu124 (kelu124@gmail.com) 2018

This work is based on a previous TAPR project, the echOmods project.

Disclaimer(s)

This project is distributed WITHOUT ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING OF MERCHANTABILITY, SATISFACTORY QUALITY AND FITNESS FOR A PARTICULAR PURPOSE. Also:

  • This is not a medical ultrasound scanner! It's a development kit that can be used for pedagogical and academic purposes - possible immediate use as a non-destructive testing (NDT) tool, for example in metallurgical crack analysis.
  • As in all electronics, be careful, especially.
  • This is a learning by doing project, I never did something related -> It's all but a finalized product.
  • Ultrasound raises questions. In case you build a scanner, use caution and good sense!

results matching ""

    No results matching ""