The electroacoustic zither is a musical instrument that I created with a team of two other students as a final project for ENGS 17.04, The Art, Science, and Symbolism of Musical Instruments, at Dartmouth College. A zither is an instrument that uses oscillating magnetic fields to vibrate steel strings. It has 16 strings, arranged in two layers. The bottom eight strings are driven by electromagnets, while the top eight are designed to be plucked by hand.
The electromagnets are controlled using a Xilinx FPGA and a custom built driver board. The instrument is MIDI controlled, so it can be played using a keyboard or a MIDI sequencer. The instrument is capable of playing up to four harmonics on each string, by precisely controlling the frequency of the oscillating magnetic field.
Initially, we planned to build a harp, but we realized that we could make the design much simpler, while still achieving our goals, by laying the strings across the resonator, resulting in a zither. We made a few foamcore mockups (shown below) to determine the shape and layout we wanted for the instrument.
My other two group members focused on building the final wooden instrument body, while I worked on the electronics and software. The FPGA runs a Microblaze soft-core processor with memory-mapped peripherals that generates pulse-width modulated square waves with the duty cycle and period controlled by the CPU. The peripherals were written in VHDL, while the CPU software was written in C. The FPGA accepts MIDI commands over its USB UART or a DIN connector, the latter allowing a MIDI keyboard to be connected.
Using PWM to control the signal amplitude made it possible to control the attack of each note. I was able to use this control to overdrive the electromagnets for a few milliseconds (they would eventually melt if this voltage was sustained) to create a much faster attack than would otherwise have been possible.
The magnetic field frequency needed to exactly match the resonant frequency of each string, and it proved too difficult to do this using just the tuning pegs built into the instrument. To perform the fine tuning, I wrote software that uses a nearby computer and a microphone to measure the actual resonant frequency of a string and adjust the magnetic field frequency to match.
Lastly, I wrote a Rust program to connect the Linux ALSA software MIDI sequencer to a TTY (e.g. RS232 or UART). This was used to play songs from a computer, as shown in the video below.
In this video, the instrument is tuned to F major, and is not able to play every note of the song or exactly reproduce the original dynamics, but I think it sounds cool anyway, even if it is somewhat different from the original.
If I were to do this project over, I would create an instrument with 12 electromagnetically driven strings, which would allow it to play a full chromatic scale. I would probably use worm gear tuners instead of tuning pegs to allow much more precise and easy tuning. I would also eliminate the tailpiece. We went through a lot of trouble trying to find materials to attach the tailpiece that would not break or stretch. It was difficult to tune one string without others going out of tune because the tailpiece shifted.