Electronic – ADC for many piezos at once

adcmusicpiezo

I'm building an electronic musical instrument, using piezoelectric contact microphones as inputs. I want ~80 buttons, each with a piezo connected to an ADC. The idea is that you hit the piezo, then depending on how hard you hit it I trigger a louder or quieter sound.

I'm trying to figure out what to use for the ADC. I could run ~14 arduinos, but that seems kind of silly? Is there a better way to get ~80 ADCs?

I'm also trying to figure out about how to set up the circuits. For each one I could just put a piezo and 1M resistor in parallel across the ADC:

ADC in0 ---+------+
           |      |
         1MOhm  piezo
           |      |
ADC in1 ---+------+

This is fine, but requires a relatively high sample rate from the ADC to accurately capture the peak of the input signal. It seems like I should be able to put something in series with the piezo to cut off the negative side of the signal, and then something else to smooth out the signal, which would let me run a much lower sampling rate?

(This question is basically "what should the electronics for a an electronic drum kit's input look like", though that's not what I'm building.)

Best Answer

You can multiplex a single ADC, with throughput reduced, of course. So if you have a 1MSPS ADC that settles in 1usec (probably available on-chip with some micros) you could sample 100 inputs at 5kHz.

Sampling at 5kHz with a realistic analog anti-aliasing filter on each input you might be able to capture 1-1.5kHz fairly well (the theoretical limit is 2.5kHz).

That may be an acceptable bandwidth for triggering musical sounds. To that you'd have to add processing time which will probably be limiting. You might do better to devote a processor to each input or somewhere in between, but you will have to profile the code you intend to run.


You might also consider using a simple analog-input comparator (with input protection) for each piezo and generating a digital signal. Something like an LM339. It won't be able to find the peak of the signal, but neither will you using any algorithm in real time, since it's non-causal. You could add a one-shot to each comparator output to stretch the pulse giving you time to sample one at a time (or maybe 8 at a time).