3
\$\begingroup\$

I'm building a MIDI controller with a bunch of endless potentiometers. They can be either 10k or 20k. I'm planning to read the values with an ADS7953. This is a 16-channel ADC. It has one converter and an analog multiplexer in the case. The output of the multiplexer is available on the MXO pin as well as the input of the ADC on AINP so it's possible to connect them directly or implement buffering between the two if the source impedance is too high. The MIDI messages sent by the device will be 14-bit high resolution MIDI CCs, so I need accuracy and low noise. I do not need a high sample rate, but at least 300SPS. I have 3 of these ADCs sitting on the same SPI bus so can't use them in parallel, that will give me 100SPS for each of them.

I'm wondering what's the best way to connect the potentiometers to the ADC. The relevant section in the datasheet starting on page 46. Not sure I understand the calculations there with regards to input channel voltage disturbance, settling time, capacitances and impedances.

Considering the following options:

  • A. Simplest solution: don't use any buffers, just route the pots' wiper directly to the multiplexer input and short the ADC's MXO to AINP. Not sure whether this is a good idea if I need the 300SPS conversion rate. Whether there would be crosstalk between the channels because of the long settling times resulting from high source impedance. The advantage is that I can use the full range of the ADC since there's no op-amp to limit the voltage swing between ground and VREF.

  • B. Use a buffer between MXO and AINP like in the datasheet on page 50. According to the curves on datasheet page 49 and 51, this would give a bit more headroom with regards to input source impedance. Still not sure about settling times on the multiplexer input potentially resulting in crosstalk. Even if I use a rail-to-rail op amp, there's at least few mV dead zone at the bottom and the top of the full range. If it's just 5mV, I'll lose the top and bottom 8-10LSB (2.5V VREF / 4096 = 0.6 mV per LSB). I can fix the top end by powering the op-amp from 3.3V or higher, but for the bottom I'll need a negative voltage which means additional headache (components, PCB real estate, cost, points of failure etc.).

  • C. Buffer each input channel separately. This would eliminate the entire crosstalk and settling time problem by providing a very low source impedance, but would still result in dead zones, and it's a lot of additional components.

Not sure how far I need to go to achieve a reasonable result according to my goals. Any thoughts, advices, experience?

\$\endgroup\$

2 Answers 2

4
\$\begingroup\$

Section 9.2.1 in the datasheet you linked shows what happens when the input impedance increases without a buffer: The maximum achievable sample rate drops. Your 20k pots have an output impedance of less than 10k Ohms (it's "cut in two" by the wiper at a variable point). At 10k Ohms input impedance, the ADS7953 is able to achieve around 100k SPS without any degradation in resolution, which is shown in figures 64 and 65.

You only need 1.6k SPS to sample each of your 16 channels 100x per second. This is more than 50x slower than what the ADC is capable of.

Settling time is also not an issue at all: 10k Ohms driving an absolute worst-case 200pF load results in a RC time constant of 2 microseconds. At 1600 SPS, each sample has around 660µs available. That's plenty of settling time - just switch the channel, wait 100µs or so, then convert.

You could easily sample all 16 channels at 2k SPS and it would still be absolutely fine without any buffering.

TL;DR: Don't bother with the buffer.

\$\endgroup\$
1
\$\begingroup\$

Simplest solution: don't use any buffers, just route the pots' wiper directly to the multiplexer input

Use a buffer between MXO and AINP

Those are great solutions if you want to get scratchy pots eventually. Not a good thing in audio, I'd think.

Buffer each input channel separately

Yes. And buffer it close to the potentiometer - ideally with a single op-amp in a small package.

Potentiometer controls can be insensitive to grime if they are buffered by a high-impedance "electrometer"-style op-amp. The idea is that even if the wiper gets isolated by a thin layer of contamination, it's still within the electric field at a particular location on the trace. The lower the input current to the buffer, the less the voltage will change until the wiper regains contact. This can be improved with a holding capacitor.

In my experience, the following circuit will be scratch-free in all but worst contamination:

schematic

simulate this circuit – Schematic created using CircuitLab

The capacitor and the op-amp should be as close to the potentiometer as possible. OA1 can be a special ultra-low input current type, or just a garden variety CMOS-input type. The lower the input current, the better, in any case. C1 needs to have low leakage, and low dielectric absorption. In a pinch, a C0G 100V type will work, otherwise try with various foil caps.

The non-inverting node of the op-amp needs to have a guard trace around the pot wiper terminal, the upper terminal of the capacitor, and the non-inverting input itself. The guard trace shunts leakage currents due to inevitable board contamination etc. The guard trace should be on all layers. Ground- and power planes should be cut out within the guard trace.

Again, keep all of it very close together. Ideally you'd want the area enclosed by the guard trace to be a couple dozen mm^2 at most, ideally less.


As you can see, an ADC wasn't even a concern yet! The buffering described above is needed just to get a clean DC control voltage out of a potentiometer. There will need to be a glitch-damping series resistance between the output of this buffer and any ADC MUX inputs. In your case, 1kΩ should do fine.

\$\endgroup\$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.