I'm trying to design a relatively high accuracy auto ranging Ohmmeter. A typical Arduino example can be found here:


multi-source stimulus for Arduino ohmmeter

The problem with this design is that it uses Diodes to prevent reverse currents. Now to ensure accuracy the exact Diode drop of each and every Diode needs to be known. Initially I thought I could order a "high tolerance Diode" like you can resistors (0.1% etc) but apparently there is no way to guarantee a diode drop.

My next bright idea was to replace all diodes with an 8 channel multiplexer. I had assumed that the "switch" in the multiplexer had an independent resistance but soon found that the On resistance(Ron) of a multiplexer is dependent on the input voltage of the channel selected. Due to the fact that the circuit is used as a voltage divider and there will always be an unknown resistance, the input voltage to each channel will never be the same and so it seems impossible to know what the Ron would be at any given time.

I'm really hoping someone knows of a simple alternative method/solution? I guess relays are an option but they are bulky and seem like overkill. I'm almost tempted to just use diodes and individually measure the diode drop but that makes reproducibility difficult.

  • \$\begingroup\$ The answer you may not like: you can't use this approach for more precision measurements. You will need to switch to multiple ranges of precise current sources for your stimulus with the associated complexity. I don't think there's much of a way to calibrate-out the diodes in this design. \$\endgroup\$ – user2943160 Aug 31 '16 at 23:50
  • \$\begingroup\$ "High accuracy" requires calibration to traceable standards. Do you have access to these? Or do you mean "high precision?" Either way, what are your accuracy and precision requirements for measuring resistance? \$\endgroup\$ – jonk Sep 1 '16 at 0:01
  • \$\begingroup\$ @jonk you're right, Precision. The actual R precision requirements are still to be determined. I will be fabricating a bio-material and tracking a change in R over time, hence the need for autoranging. It is still to be determined what base R the material will be at and by how much it will change. I might have even been a bit bold in saying "High" precision because it's possible the changes are so great that it doesn't matter, but I'm designing for worst case. The bigger issue is that the reading must be stable when switching to the next R range.Did that answer your question? \$\endgroup\$ – Nick Law Sep 1 '16 at 0:36
  • \$\begingroup\$ Yeah. That helps. What's the likely range of values? How many decades do you think you'll need? From what to what? \$\endgroup\$ – jonk Sep 1 '16 at 0:43
  • 1
    \$\begingroup\$ That helps a lot. I guess the remaining thing that bothers me is that you haven't or can't, for reasons that aren't clear to me, make measurements using the high precision lab systems to get an idea of the order of resistances. Is it that you can't just go use gold coatings and waste them? Also, given these are viruses... is there a current limit/voltage limit that can be used on them without inducing some unwanted chemical reactions or changing the equilibrium balance of the products? Cripes. All kinds of things are popping to mind that may be problems here. So what's the volt limitation? \$\endgroup\$ – jonk Sep 1 '16 at 7:56

To expand a bit on the comments. By ordinary DMM standards, it will take an enormous amount of work to get anything like "precision" out of this circuit. The most important factor is one which is not addressed: the Arduino digital outputs are hardly precision voltage sources. Without knowing those voltages there is no way to tell (with any precision) what the resistance is.

Second, even if all your diodes are identical, their voltage will change with current, which means that you need to calibrate all your channels. Voltage drop on the active diode will change with the value of the resistance being measured.

Third, while this is probably unnoticeable at the scale you're working, for a given current the diode voltage will vary with temperature, and that includes temperature changes caused by self-heating.

So perhaps you should define "precision", along with "accuracy" - they are not the same, after all. The circuit strikes me as the work of someone not very knowledgeable about electronics who had "this great idea", and who is demonstrating that when your only tool is a hammer, all your problems look like nails.

EDIT - An alternative would be to use p-type MOSFETs as isolators rather than diodes. This would look like


simulate this circuit – Schematic created using CircuitLab

with a couple of notes. First, the 5 volts is not the Arduino power supply. It is a separately derived, stable and accurate 5 volts. Second, the gates of the FETs are driven by the Arduino, and their polarities are reversed from your nominal circuit. That is, a HIGH disables a resistor, while a LOW drives it to +5. Third, the FETs should be logic-level FETs. "Regular" FETs are typically not guaranteed to turn on fully with 5 volts on the gate (although they usually will. Sort of).

  • \$\begingroup\$ Thanks! I fully agree with you! I'm using the Arduino for proof of concept and then upgrading when I know exactly what I want(results of tests may indicate need for more complex analysis like EIS or Voltammetry). Your second point: calibrate all the channels? can you explain? and yes I agree with you on the link, I don't agree with half of what they did (especially the code), I figured I'd use it as a base and work my way up to a better design. But if you know of any better schematics or links I'm more than willing to re-design? \$\endgroup\$ – Nick Law Sep 1 '16 at 0:58
  • \$\begingroup\$ Calibrate all the channels. If the 1k resistor feeds a 1k unknown, the resulting voltage across D3 will be different than the voltage across D4 when the unknown is resistor is 2.2k. Each channel is a resistor/diode driven high when the others are driven low. Since each has a different current, each will have different diode voltages when near optimum. For what it's worth, you should be able to get 1% resolution, but that assumes a precision voltage supply for the Arduino, AND very consistent behavior of the digital outputs. And you still haven't stated your requirements. \$\endgroup\$ – WhatRoughBeast Sep 1 '16 at 3:40
  • \$\begingroup\$ @NickLaw - See edit. \$\endgroup\$ – WhatRoughBeast Sep 1 '16 at 3:55
  • \$\begingroup\$ Awesome! that actually makes a lot of sense! I'm gonna have to brush up on my MOSFETs theory, I'm wondering if the MOSFETs would need to be calibrated, like the diodes? But if MOSFETs are like BJTs I'm thinking the current and Vds will be equal across all channels. Regarding the requirements. Did you see the comment to Jonk? Basically The requirements are still to be determined by a bio-material that has not yet been manufactured. It really depends on the initial Resistive base and then the overall change in resistance over a period of time. \$\endgroup\$ – Nick Law Sep 1 '16 at 7:36
  • \$\begingroup\$ @NickLaw - As long as Rds(on) is less than about 0.5% of the reference resistor, its error contribution will be less than the errors caused by the 10 bit ADC in the Arduino. For the resistor values you're usiing, this should not remotely be a problem. Plus, of course, your resistor tolerances will probably be 1%, which puts a 1% limit on your meaurement accuracy, so Rds is almost certainly not a problem. You need to do the calculations to get a feel for your error limits. Calculate voltages assuming errors in supply voltage, and resistor errors. \$\endgroup\$ – WhatRoughBeast Sep 1 '16 at 12:43

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

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