-
The design
06/09/2021 at 00:47 • 0 commentsThe design consists of 2 identical boards, each with 100 transducers.
Each board also has a controller and memory, and something to calculate and generate the phase signals for each transducer. A Raspberry Pi is used to control the two boards. The transducers I sourced are 10mm in diameter and rated to 40V. To drive each transducer, I used a MOSFET driver configured as a full H-bridge to essentially double the power the university group had used, figuring that I’d be able to move the bead that much faster (which actually turned out not to be the case). To generate the transducer signals, I decided to use an FPGA. This was partly because I needed a lot of I/O pins – more than 100 on each board – and also because I wanted to be able to calculate and change the individual signal phases at a rate of 40kHz, something that seemed to be a stretch to do on a micro. I had hoped to find an FPGA in a TQFP package with enough I/O and gates to be able to run all 100 transducers on each board but such a thing didn’t exist. It was simpler just to stick 2 FPGAs on each board and have them each run 50 transducers.I also added EEPROMs for each FPGA to store images.
On one of the boards, I put a Raspberry Pi W as the main controller. The PI sends SPI commands to all the FPGAs simultaneously. To keep the FPGAs synchronized, one of the FPGAs generates a 40kHz synchronization pulse that all the other FPGAs listen to. Because I was a little paranoid about all the EMI I might be generating, I decided to use RS485 differential signalling to send the SPI and sync signals from one board to the other.
To illuminate the foam ball, I use 4 3W RGB LEDs at each corner of the ultrasonic array. Each color is driven by dedicated LED drivers – the drivers can be PWMed to change the relative brightness of each color.
Lastly, there are 4 DC/DC converters – one to step the 24V input voltage down to drive the transducers, two separate 3V and 1.2V converters to drive the FPGA and associated logic, and one 5V converter to power the Pi
-
The simulator
06/09/2021 at 00:41 • 0 commentsOnce I had a rough handle on the physics, I built a simulation of the system to see if it was even possible to do what I wanted. The simulator calculates the phases for each of the transducers and then determines the pressure wave magnitude for every voxel in the 3D volume – each voxel in this case is 1mm^3 and the total simulation volume is 100x100x145 mm.
Since the calculation of the pressure wave involves calculating and summing the signals from each of the 200 transducers, it would take many seconds to run the math on the CPU. To make the process a little less aggravating, I dusted off my CUDA skills and wrote some GPU kernals to do the math – this is such a highly parallel problem, the GPU is able to process all the math in under 10ms. I then learned enough OpenGL to be able to draw the voxels on the screen fast enough to get some decent animations. I probably would have been able to do all the math in an OpenGL vertex shader fragment rather than using both CUDA and OpenGL – live and learn.
The simulator also helped me figure out how to move the particle along a pre-programmed path. Initially I thought it would be faster for the particle to never slow down and so I made each right angle corner slightly rounded but it turned out to be faster to bring the particle to a stop at each right angle and then change direction. If the shape didn’t have angles greater than 90 degrees, it probably would be faster to never stop it.
Here I’m showing how the resulting waveforms interact with each other for two 10x10 arrays of transducers – the focus point is in the middle of the volume. You can see how the waves reinforce each other and create standing waves where a ball object might sit. You can also see that there’s not one single of high pressure but a series of them stacked on top of each, about 2mm apart. However, the further you get from the focus area, the weaker the high pressure area is.This simulation looked about right to me – it showed all the standing waves as expected and it showed that it was possible to calculate the phases of the transducers to focus the sound and that it was possible to move the focus point. With that validation I decided to build this thing
-
The How
06/09/2021 at 00:34 • 0 commentsThe first step to building this was to figure out how it worked – the paper was a great help here. Each transducer needed to be fed a 40kHz wave form – but with a phase relative to the other transducers calculated to ensure that the high pressure areas converged at a specific point in 3D space. Moreover, the signals from the downward-firing transducers had to be 180 degrees out of phase with the ones firing upwards.
The original Nature paper lists a formula that allows the calculation of the phase delay φT for each transducer given a focus point p:
Where N represents the number of discrete phases, k the wave number (k=2 pi/ lambda), pt represents the position of the transducer and the function d calculates the Euclidean distance. The function takes the focus point as an argument and for each transducer, calculates the distance from the focus point to the transducer, multiplies that by the so-called “wave-number” that converts the distance into a phase and then limits the resulting phase to an integer number from 0 to N-1. Modulo adding N/2 to the result gives the phase for the downward firing transducers.
-
The Why
06/09/2021 at 00:14 • 0 commentsAbout 5 years ago, I showed one of my kids a clip by Physics Girl (awesome channel BTW) of an ultrasonic levitator:
He immediately wanted to build one so we bought the kit and we spent most of an afternoon soldering it together. He was pretty proud of himself and he decided to make a science fair project on Sound – he even went to the local science fair! I highly recommend you watch the Physics Girl clip as she gives a great explanation of how it works but essentially there are two opposing sets of ultrasonic transducers emitting waves of 40 kHz ultrasound 180 degrees out of phase with each other. That creates standing waves of low and high pressure where a light object can hang out. The bowl shapes that the transducers sit in helps focus the sound.
Fast forward about 4 years; I ran across an interesting paper in the journal Nature of a group at the university of Sussex who took this concept further, way further. Essentially, they used a phased array of ultrasonic transducers to move a Styrofoam ball through the air so quickly, they were able to draw floating images in mid-air! http://sro.sussex.ac.uk/id/eprint/86930/
Of course, I had to build one! What was even cooler was that not only was it possible to display 3D images, it was possible to also modulate the ultrasonic waves in such a way that you could feel the waves focused in 3D space - a 3D haptic device! And you could further modulate the ultrasonic signals to interfere with each other in such a way that they could produce sound in the human audio range! A display, a haptic device and a speaker, oh my!