8
\$\begingroup\$

I. THE CIRCUIT:

Below, an Arduino Due measures voltage signals from two parallel voltage-divider circuits:

enter image description here

We want the Due to accurately measure the voltages at the places where it makes contact with the voltage-dividers. However, we see significant crosstalk - changing the resistance in one channel changes the voltage in the other channel:

$$\textbf{TEST I} ~~(R1 = R2 = 10 MΩ):$$ enter image description here

$$\textbf{TEST II} ~~(R2 = 3.3 MΩ < R2 = 10 MΩ):$$ enter image description here

However, we can theoretically trace these effects to current leaking through the Due: the Due usually has an input impedance of around 10 kΩ, but we have under clocked it from 20 MHz to 1 MHz, which raises its input impedance to 266 kΩ. So the electrons in the voltage divider circuit will certainly prefer to enter the Arduino, rather than traverse the 1 MΩ placed in front of them.

II. THE FOLLOW-UP:

Below, we have made a tiny modification to our original circuit, in hopes of making the voltage channels truly independent: both signals are buffered by one ADA 4528-2 (a dual-channel op amp):

enter image description here

The op amp is not there to amplify the signal: it provides a gain of ~1.003. Instead, it is there to hide the high impedance of the circuit that we're trying to measure. Instead of an output impedance of 1 MΩ, the impedance is now <0.1 Ω:

enter image description here

so the electrons should stay in the circuit, and there should be no crosstalk at all. However, to my surprise, although there is some improvement, there is still noticeable crosstalk!:

$$\textbf{TEST I} ~~(R1 = R2 = 10 MΩ):$$ enter image description here

$$\textbf{TEST II} ~~(R2 = 3.3 MΩ < R2 = 10 MΩ):$$ enter image description here

The red channel should not "know" that the blue channel has increased resistance. However, its signal drops, when I have not made any changes to the red channel - What am I missing from my analysis (By the way, I'm using low-tolerance resistors <1%)?

asked Jun 22, 2015 at 6:11
\$\endgroup\$
8
  • \$\begingroup\$ I'm curious - Any reason for the feedback resistors and not just a voltage follower? \$\endgroup\$ Commented Jun 22, 2015 at 6:38
  • \$\begingroup\$ My ignorance. I guess a voltage follower is simpler. \$\endgroup\$ Commented Jun 22, 2015 at 6:43
  • 1
    \$\begingroup\$ Your opamps have a gain of 76, not ~1! \$\endgroup\$ Commented Jun 22, 2015 at 9:49
  • 1
    \$\begingroup\$ Also, 10Mohm is a lot of resistance - you're likely to see parasitic effects all over the place, including from contaminants on the PCB. \$\endgroup\$ Commented Jun 22, 2015 at 9:51
  • 1
    \$\begingroup\$ Are you sure your 3.3V can drive enough amperes? With r1, r2 10M there's 5.5M to GND. With r1 10M r2 3.3M, you only have 3M to GND. If your voltage source cannot drive any significant load, you might see the effects of your input voltage being lower 3.3V, resulting in the measurements you posted. I have worked with sensors that could only drive fractions of micro ampere before, so "regular" resistor sizes weren't high enough. \$\endgroup\$ Commented Jun 22, 2015 at 12:24

3 Answers 3

5
\$\begingroup\$

More than likely it is a problem to do with the analogue channels being multiplexed inside the arduino - try sampling with a greater time-gap between red and blue signals and this should hopefully solve/indicate the issue.

answered Jun 22, 2015 at 7:18
\$\endgroup\$
2
  • \$\begingroup\$ Interesting suggestion. I'll let you know the results in a few hours... \$\endgroup\$ Commented Jun 22, 2015 at 14:12
  • \$\begingroup\$ Underclocking the Arduino further (to 100 kHz) solved the issue!!!! \$\endgroup\$ Commented Jun 22, 2015 at 22:16
2
\$\begingroup\$

I am reading four pH meters sequentially, and have issues with one variable reading ("mV4") influencing the other three readings. When I implemented the dual read as mentioned in this previous answer to the question by Tom Binnekamp, that successfully alleviated the cross talk.

Maybe that helped, I also twisted the black/red wires of the pH meters into the board 5V and GND rails. What also really helped is using screw terminals (5mm Pitch (2-Pin)) to secure the 5V GND into the board.

Here is the Arduino code segment:

 analogRead(PH1_PIN); // buffer signal to prevent ADC cross-talk
 pHanalog1_temp[j] = analogRead(PH1_PIN); // read the voltage
 delay(200);
 analogRead(PH2_PIN); // buffer signal
 pHanalog2_temp[j] = analogRead(PH2_PIN); // read the voltage
 delay(200);
 analogRead(PH3_PIN); // buffer signal
 pHanalog3_temp[j] = analogRead(PH3_PIN); // read the voltage
 delay(200);
 analogRead(PH4_PIN); // buffer signal
 pHanalog4_temp[j] = analogRead(PH4_PIN); // read the voltage
 delay(200);

Before dual read
Figure 1: Before dual read

Dual read implemented
Figure 2: Dual read implemented

I hope this helps other people! I have spent days troubleshooting ...

SamGibson
18.5k5 gold badges42 silver badges65 bronze badges
answered May 12, 2024 at 1:44
\$\endgroup\$
2
  • \$\begingroup\$ Alexandra D. Holland - Hi, (a) As you're new here, please read the tour & help center as Stack Exchange (SE) site rules differ from typical forums e.g. the Q&A format. (b) Your post is largely confirming another answer. On its own, that would not make this a valid answer. (On SE, if you had success with an existing answer (i.e. it was useful), the etiquette is to consider upvoting it (when you have 15 points, the upvote is visible). It's not allowed to write an answer which just says that another answer worked.) However you added some additional points about cabling, so we'll allow it :) \$\endgroup\$ Commented May 12, 2024 at 4:19
  • \$\begingroup\$ You said: "What also really helped is using screw terminals (5mm Pitch (2-Pin)) to secure the 5V GND into the board." What connection method were you using to connect power & Gnd to the board before? Do you have an explanation (or at least a theory) of why using screw terminals made a difference? If so, please edit your answer and add those details of the previous, less good, connection type & any theory or explanation of why using screw terminals made an improvement. || Are you sure it wasn't the twisting of the (presumably power?) wires to the pH meters, which made the difference? TY \$\endgroup\$ Commented May 12, 2024 at 4:24
1
\$\begingroup\$

Although it is an old post, I recently experienced the same issue with the Arduino Due trying to readout two audio channels for a VU meter. When putting the balance towards one channel only, still a signal was seen on the output of both ADC channels. I tried a considerable delay between the readout of the two channels, but with no luck. What seemed to do the trick for me, is to readout each channel twice and only using the second conversion.

analogRead(Channel1);
ADCLeft = analogRead(Channel1);
analogRead(Channel2);
ADCRight = analogRead(Channel2);

Now I have complete separate channels when moving the balance slider from left to right and vice versa.

Jakub Rakus
2,2455 gold badges20 silver badges26 bronze badges
answered Dec 29, 2016 at 10:56
\$\endgroup\$

Your Answer

Draft saved
Draft discarded

Sign up or log in

Sign up using Google
Sign up using Email and Password

Post as a guest

Required, but never shown

Post as a guest

Required, but never shown

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

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.