• Stars
    star
    141
  • Rank 259,971 (Top 6 %)
  • Language
    Jupyter Notebook
  • License
    Other
  • Created over 6 years ago
  • Updated 2 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

smallish ice40 / raspberrypi ultrasound hardware

GitHub repo size GitHub language count GitHub top language GitHub last commit

Patreon Kofi

Slack made-with-Markdown

un0rick

Overview

This is a relatively 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
  1. 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.
  1. 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
  1. Extensibility:
  • 2 x Pmod connectors
  • SMA plug for transducers
  • RPi GPIO
  1. User Interfaces:
  • 2 x PMOD for IOs
  • 4 x push button (with software noise debouncing)
  • Jumpers for high voltage selection
  • Jumpers for SPI selection
  1. Input Voltage:
  • 5 V from RPi or USB
  • Uses 350mA-450mA at 5V (including RPi)
  1. Operating Voltage:
  • FPGA and logics at at 3.3 V
  • High voltage at 25V, 50V, 75V
  1. 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

Tip: reaching 128msps

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

Source experiment

Overview

In detail

It seems that the different series interleave quite nicely, even in the detail.

Useful links

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 ([email protected]) 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!

More Repositories

1

awesome-latticeFPGAs

📖 List of FPGA Lattice boards using open tools
303
star
2

echomods

Open source ultrasound processing modules and building blocks
Jupyter Notebook
291
star
3

murgen-dev-kit

Imaging ultrasound dev/hacking kit
Rich Text Format
215
star
4

pyusbus

Python APIs for usb ultrasound probes
Jupyter Notebook
26
star
5

us_rf_processing

Showcasing how to rebuild a B-mode ultrasound image from an ultrasound probe.
Jupyter Notebook
21
star
6

lit3rick

An up5k board to manage pulse-echo ultrasound acquisition.
Verilog
19
star
7

openultrasoundprojects

Curated list of open source projects
Python
15
star
8

pyUProbe1

Python barebones for uProbe-1 ultrasound probe acquisitions
Python
12
star
9

ultrasHound

Playing with (real?) audio beacon and xtracking devices
Jupyter Notebook
12
star
10

AD8332-devboard

An AD8332 devkit
8
star
11

HV9150DevKit

A devboard for the HV9150.
6
star
12

pic0rick

An rp2040-based acquisition board for pulse-echo ultrasound
Jupyter Notebook
6
star
13

ft600

A ft600 breakout - 8bits of data, on two PMODs.
AGS Script
6
star
14

hvpppn

High voltage board - positive and negative voltage, for ultrasound pulser.
HTML
5
star
15

python-usb-un0rick

python-usb-un0rick
Python
5
star
16

pyUn0-lib

Lib going to python 3
Python
5
star
17

max14866

Breakout of max14866, ultrasound high voltage 16-switches
Jupyter Notebook
3
star
18

plasmon

Surface plasmon modeling
MATLAB
3
star
19

ADC08200-PMOD

An ADC08200 PMOD
HTML
3
star
20

Analog_Frontend

An analog circuit that consists of a transmitter and receiver for an ultrasound system.
HTML
3
star
21

PMOD_rp2040

Modules for signal acquisition and transmission - using the PMOD standard
C
3
star
22

rectennas

2
star
23

oshmri

Jupyter Notebook
2
star
24

lm3478

A small board to generate ultrasound-friendly +-90V
Shell
2
star
25

Futures

Managing links shared on my substack
Python
2
star
26

ultrasound-patents

Where patents on ultrasound first technos are mined.
Jupyter Notebook
2
star
27

ice40ppl

Mapping ICE40 community
Jupyter Notebook
2
star
28

hardware_review

Rich Text Format
1
star
29

pyS3

Code to communicate with S3 probe
HTML
1
star
30

short_papers

Short papers for Zenodo
Verilog
1
star
31

EET

Ants
MATLAB
1
star
32

UltrasoundBox

C++
1
star
33

0xa5eded

sha1(pHATrick)
JavaScript
1
star
34

kelu124

1
star
35

Website_AMA

Jupyter Notebook
1
star
36

sf

Ideas of SF
1
star
37

ebayUSprobes

Analysing ebay probes offers in case something good pops up !
Jupyter Notebook
1
star
38

medicotechnical

All about the technicomedical issues
HTML
1
star
39

NFTs

1
star
40

OAI

A lib to cache calls to OpenAI API - custom
Jupyter Notebook
1
star