Electrical – How to build a digital potentiometer with standard value resitors and MOSFETs

arduinodigital-logicmosfetresistors

I like to create a digital potentiometer with standard value resistors and MOSFETs.

The principle is easy: I put a lot of resistors in series and parallel to each resistor I have a MOSFET which shortcuts the resistor. Then I control the MOSFETs with digital signals from an Arduino.

I tried this with 3 resistors and 3 MOSFETs and in principle it works fine.

For my project I want results from 300 Ohm to 100k Ohm with 1% tolerance for each value. With 100k Ohm this means only 1k tolerance, no problem. But for 300 Ohm this means maximum 3 Ohm tolerance!

I guess the theoretical easiest approach is to use resistors like 1, 2, 4, 8, 16, 32, … Unfortunately most of those values are not or very difficult available.

So my idea is to use standard 1% resistors like 10, 15, 22, 33, etc. They are easily available. But if I use every E6 series value between 3Ohm and 68k Ohm I end up with 26 resistors and 26 MOSFETs and 26 digital outputs. That's a lot!

So now my question is: Did anybody have a similar problem and figured out how many of those resistors are actually necessary to archive the goal to have the outputs mentioned above. I am sure I don't need all the values. But which once can I skip. I would be able to get reasonable results by letting my PC do the work and just try all combinations. But that's not very scientific and maybe there is a better way.

My question: Which commonly available resistor values do I need to archive accurate in series results between 300 Ohm and 100k Ohm with max 1% tolerance?

Here is some more info because I guess some questions will come up in the comments.

This question is similar to the following but it's not the same.

Logarithmically-spaced resistances using switches

Electronically switched decade resistance box design

I looked at available digital potentiometer. I didn't find what I want for two reasons. Many of those digital potentiometer ICs have 20% tolerance! Best case I found 4% tolerance. Most of what I found are linear, not logarithmic. And many, maybe all, allow only very little current. I found 1mA max current. That is not enough for what I need. I need at least 5mA current (long time).

I use MOSFETs because I read they are the perfect switches. My current test was with MOSFETs which I had already which have 22 mOhm resistance when closed. Now I ordered (still cheap) MOSFETs with 3.5 mOhm resistance (STP105N3LL). Maybe there are better options to switch just a few mA. Suggestions are welcome.

If I need lots of I/O lines I will use 16 bit I/O expander like these: MCP23S17-E/SP or MCP23017-E/SP

In my case I need this for max 5V DC and the switching speed is not critical.

Any suggestions are welcome. Thanks!

Edit: My application is that that I want to emulate a NTC. In my current case it's an existing NTC which is on one end on GND and on the other end connected to an electronic device which I can't change (black box). That device uses likely a 2.2kOhm Resistor on a voltage divider and then an ADC.

But in the future I want to be able to use this to emulate other NTC independently how they are connected. I want to be able to have a device which looks on the outside like a 353 Ohm resistor or a 43k1 resistor, independent on how the outside electronic actually works. These are just example values

Best Answer

If you wish to emulate a digitally variable resistance in a measuring instrument, viable scheme is to measure the voltage across the emulated device and draw a current corresponding to the desired behavior. This can be most easily accomplished with an MDAC (multiplying digital-to-analog converter). In fact, this is the normal approach used in RTD emulation calibrators.

As to your approach, you could try using a series string of very low resistance MOSFETs with resistors in parallel, in binary sequence (1/2/4/8/16/32..) perhaps driving the gates with isolators. That would work with one polarity at DC (reverse polarity only slightly) and if you used very low Rds(on) MOSFETs you might be able to cover a fairly wide range of resistances. Keep in mind that MOSFETs have a bit of leakage and low Rds(on) types tend to have more, the leakage is very temperature sensitive and large MOSFETs have a lot of capacitance which makes them far from ideal, and even useless in some situations. The Rds(on) also has a (positive) tempco, but it’s closer to linear than exponential.