Link

un0rick

Overview

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

Step-by-step

  1. Program the fpga using a open-source toolchain to synthetise the embedded firmware.
  2. Control the board fully through SPI, be it through USB, a Raspberry Pi, or even an arduino (though a cheap one may not have sufficient resources to do what you want do to).
  3. Set up the acquisition sequence
  4. Get the data back again
  5. Process / visualize the acquistion

I recommend using RPi, particularly W for the wireless aspects, which then becomes the board server. There’s a dedicated 20x2 header. Prepared is a python lib as well. The v1.0.0 version is RPi4 proofed.

Two control options: usb or raspberry

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, another Rasbperry pi.

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

  • With a M5Stack (or any microcontroller really)

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

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

Others

Changelog

  • lit3rick v1.4
    • Using AD8332 for more gain
    • ADC: 12bits -> 10bits
  • lit3rick v1.3
    • lighter board
    • 12bits ADC
    • up5k based
    • external HV modules
  • un0rick dual _v1.2 - to be done
    • 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

Pinouts

Raspberry Pi header

FTDI breakout

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

This work is based on a previous TAPR project, the echOmods project. The un0rick project and its boards are open hardware and software, developped with open-source elements.

Copyright Kelu124 (kelu124@gmail.com) 2018

  • The hardware is licensed under TAPR Open Hardware License (www.tapr.org/OHL)
  • The software components are free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
  • The documentation is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License.

Disclaimer(s)

This project is distributed WITHOUT ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING OF MERCHANTABILITY, SATISFACTORY QUALITY AND FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. 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!

Table of contents