5
\$\begingroup\$

My goal is to determine all the unknown resistances connected to a 16 channel analog multiplexer. Currently, I have a DAC to apply some voltage, a calibrated resistor, and ADC to measure the drop across that resistor. Using that information, I can easily calculate Rmux + R.

The problem is that I don't want Rmux + R. I need to determine R isolated. This is easily circumvented if I simply ground right after Rmux and use the same method to find each channel's resistance, store it, and use those values to calculate R. However, I am not sure how to do that. I'm designing a pcb and I need the resistance of the mux to be factored into measurements.

Basically I'm wondering how can I either characterize or ignore Rmux in my calculations to find R. Or should I use a different approach entirely? The other size of the resistors must always remain grounded and I need these measurements to be relatively precise.

Description of the problem

Edit: Multiplexer Datasheet

Added from OP's comment

the range of unknown resistances is ~350 to 800 ohms. My current multiplexer has 470 ohm on resistance with 15 ohm max fluctuations between channels (4067BM) datasheet attached to post. Ideally I'm looking to determine the resistances as accurately as possible considering their values are used for further calculations with the microcontroller.

\$\endgroup\$
4
  • 1
    \$\begingroup\$ Accuracy requirements are needed as is the expected range of the unknown resistances. A max of 1 Ohm of mux resistances means something different if the minimum unknown resistance you expect to measure is 10Ohms versus 100kOhms. Also, Kelvin connections. \$\endgroup\$
    – DKNguyen
    Oct 16, 2022 at 4:46
  • \$\begingroup\$ @DKNguyen the range of unknown resistances is ~350 to 800 ohms. My current multiplexer has 470 ohm on resistance with 15 ohm max fluctuations between channels (4067BM) datasheet attached to post. Ideally I'm looking to determine the resistances as accurately as possible considering their values are used for further calculations with the microcontroller. Maybe I need to look for a new mux with less deviations between channels. \$\endgroup\$
    – AuFries
    Oct 16, 2022 at 4:48
  • \$\begingroup\$ Just a thought, but ground it with a FET with a low Rds(on) could get you below an ohm if you pick the right part. \$\endgroup\$
    – Ian Bland
    Oct 16, 2022 at 5:59
  • \$\begingroup\$ Do note that if you change the current through to the mux channel (by grounding at one end) you will also change the voltage across the mux, changing the voltage also changes the on-resistance of the channel. \$\endgroup\$
    – Nedd
    Oct 16, 2022 at 8:54

4 Answers 4

4
\$\begingroup\$

Would you be willing to add another similar Mux in parallel with the first? The second Mux would bring the voltage back from the selected unknown resistor to another ADC (or use another 2:1 Mux and the same ADC). You already know the current into the Mux: Imux=((Vdac-Vmux)/1k), and you know (Rmux + Rx)=Vmux/Imux, so knowing the current into the MUX and the voltage drop across the Mux you can accurately determine the Mux channel resistance, Rmux=(Vmux-Vrx)/Imux. Then Rx=(Vmux/Imux) - Rmux.

The advantages with this arrangement are:
Mux A and Mux B are set up exactly the same.
The current through Mux A will not change so the On-resistance will not change.
The only extra code would be to switch Mux C.
Mux C could be eliminated if a single 2 channel ADC were used.
There are no additional discrete parts needed to ground each Rx line.

.

schematic

simulate this circuit – Schematic created using CircuitLab

\$\endgroup\$
1
  • \$\begingroup\$ This is a great solution, I will try it out and see how accurate it can get! I'm just unsure whether I would need to buffer input into Mux C in order to reduce current draw from the ADC or how much that can throw off calculations. \$\endgroup\$
    – AuFries
    Oct 16, 2022 at 19:30
4
\$\begingroup\$

You can do exactly what you are proposing. Firstly, determine what tolerances are acceptable, then accordingly choose logic level mosfets with an Rds(on) that are within this tolerance.

All you need to do is add an N channel MOSFET which you can turn on to pull down the node between Rmux and R, making R parallel to Rds(on) netting a low enough equivalent resistance that you can consider them 0, finding the mux resistance. This will take up some time, but you can do it every once in a while to "calibrate".

Instead of taking up 16 GPIO pins, you can use a demux for this.

schematic

simulate this circuit – Schematic created using CircuitLab

\$\endgroup\$
4
\$\begingroup\$

Precision resistors are relatively cheap, and ADC input is relatively high-impedance. So you could consider one precision pull-up resistor per each unknown resistance:

schematic

simulate this circuit – Schematic created using CircuitLab

The C1 capacitor is optional, but further reduces the effect of the mux resistance on ADC readings.

If a simple resistor divider does not provide sufficient accuracy, the next step up is having a precision constant current source feeding through a second mux, which then gets connected to the same channel you are measuring. A current source will give linear voltage related to the unknown resistance.

\$\endgroup\$
4
\$\begingroup\$

You can use Kelvin connections. This uses two pairs of wires: the first pair sends the test current, and the second pair takes the measurement and is placed right at the resistor terminals.

Since the wire pair that takes the measurement carries almost zero current, the resistances along that path are negligible. If you use a current source for the pair of wires sending the test current then the extraneous resistances along that path are also ignored.

schematic

simulate this circuit – Schematic created using CircuitLab

If you are muxing then you can share one of the wires that sends the test current among all the resistors. You can also share one of the wires taking the measurement amongst all resistors (at the expense of being able to place the wire right at the end of the resistor but since the measurement current is so low this extra resistance is probably still negligible. This reduces your switches by half. You can use two single-channel multiplexers under the same control signals or you can use a single dual channel multiplexer. But remember that the actual layout of the wiring matters here. When sharing wires, minimize the length that current flows in the measurement wire path to just the resistor as much as possible. In other words have the test current and measurement paths overlap as little as possible.

schematic

simulate this circuit

This reduced switch setup is identical to the setup that @Nedd proposed with the only difference being that a current source is used to measure resistance whereas Nedd's setup uses a voltage source and resistor divider.

\$\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.