I need to implement the equivalent of a variable resistor of range 10 - 200 Ohms, to be controlled by a microcontroller or FPGA. It is for a gain setting resistor for an op-amp, so I need be ends of the ‘resistor’ available (ie. not one at ground).

What is a cheap, simple way to implement this?

I’m thinking of using analog switches with various resistors, but I can’t think of a structured way to choose these. Maybe this is another question, but if this is the best way to go, then what is a good way to find the setup and values?

Digital potentiometers have too high wiper resistance to use here.

AD8351 gain resistor

  • 1
    \$\begingroup\$ How low of a wiper resistance do you need? That would affect your choices for analog switches. How many possible gain values do you need? How accurate does the gain need to be? \$\endgroup\$ – user4574 Mar 13 '17 at 16:21
  • \$\begingroup\$ Sure my choice of analog switches, were I to go that way, would be limited by the lower end of my resistance range, ie. 10R total for the resistance chain. At least tens of values over the listed resistance range. Precision is not paramount since the variable resistor will be decreased iteratively until satisfactory gain is found. All the above aside, I am looking for a general answer. \$\endgroup\$ – Jacob Mar 13 '17 at 17:55
  • \$\begingroup\$ Scratch the 'tens of values'. More like hundreds. Ex. 256. Though it could be less total as long as there are many values close together around 10-50R. \$\endgroup\$ – Jacob Mar 13 '17 at 18:02
  • \$\begingroup\$ Is one side of the gain resistor connected to ground, by any chance? \$\endgroup\$ – mkeith Mar 13 '17 at 20:35
  • \$\begingroup\$ Unfortunately no. I have added an illustration to the OP. \$\endgroup\$ – Jacob Mar 14 '17 at 6:33

1) Create an array of parallel resistors having values that are binary weighted (R, 2*R, 4*R, 8*R, 16*R ...). Put a small mechanical relay in series with each resistor.

The 8L01-05-001 mechanical relay made by Coto Relay has a typical capacitance of 1pF across open contacts and supports 1 million switching cycles.



If you only need to make a small adjustment around a point (say 1000 ohms ± 50 ohms then just put the whole array in series with a resistor that is slightly lower than what you need, for example 950 ohms.

2) The MAX5128 digital potentiometer has only 0.6 ohms of wiper resistance, you may be able to use that.


3) You could increase the resistances you are using to create your gains. For example, 25 ohms of wiper resistance matters a lot more on a 1K pot compared to a 100K pot. The MAX5394 is one example that could be used.


4) Use a programmable gain amplifier

The AD8556ARZ. It has gains programmable from 70 to 1280 in 1024. The first gain stage is programmable in 128 steps, and the second stage is programmable in 8 steps.


The PGA870IRHDR has a programmable gain in 64 steps and a 650MHz gain bandwidth product.


5) If you just need to calibrate the gain one time, use a multi-turn mechanical potentiometer and glue it once its set.

  • \$\begingroup\$ 1) That one is 0.6k, not 0.6R. It's a mistake on Digikey that I reported a few days ago, but see they haven't fixed. There are not digital pots with wiper resistance below tens of Ohms that I know of. 2) I can't since the feedback resistors are integrated. 3) The bandwidth is way too low. My signal is in the range of 5-30 MHz. \$\endgroup\$ – Jacob Mar 13 '17 at 17:50
  • \$\begingroup\$ @Jacob any solution that has multiple solid state switches (or even a digital pot) attached to it is likely to have significant parasitic capacitance and therefore very low bandwidth. \$\endgroup\$ – user4574 Mar 13 '17 at 19:36
  • \$\begingroup\$ That's a good point. \$\endgroup\$ – Jacob Mar 13 '17 at 19:41
  • 1
    \$\begingroup\$ Upvote for PGA suggestion. They're available with bandwidths as wide as you like, into the GHz. \$\endgroup\$ – pericynthion Mar 14 '17 at 6:36
  • \$\begingroup\$ Well sure, I could use another PGA/VGA, but that was not my question. There are good reasons for my preference based on comparison of many parameters. A mechanical pot is not an option due to a need for gain setting at commissioning of a sealed product, and due to long-term unreliability. Again, not the question I was asking. \$\endgroup\$ – Jacob Mar 16 '17 at 7:47

There are low wiper resistance digital pots but they may not go down to that kind of total resistance.

A more meaningful approach is to build one using real resistors plus analog switches. You will have to be careful in picking a low resistance switch.

  • \$\begingroup\$ I have found wiper resistances down to 14R, but that's still too high. I need the 10R. I /could/ do something where I combined the digipot with a 10R and 12R switch or something, but I'd still have to content with 10k pot resistance, which is way too high. I too have a feeling that analog switches is the only real option, as I also wrote in the question, but I don't know of a systematic way to design this. Do you? \$\endgroup\$ – Jacob Mar 13 '17 at 18:08
  • \$\begingroup\$ The audio guys build that sorts of stuff all the time. Google resistive ladder design and it should get you started. \$\endgroup\$ – dannyf Mar 13 '17 at 18:25

You could possibly put digital pots in parallel to lower the minimum resistance but I do not know if that is advisable?

Otherwise you may need to use relays to switch resistors in and out. In series each resistor should be twice the previous value (1,2,4,8...) so that switching the relays in a binary increasing sequence will produce a consistent linear change in resistance. Reed relays would probably be the way to go if only for size. You can use 7 to get from 2-254 ohms in 2 ohm increments but you could reduce that a lot if you did not need the precision. In parallel you can do the same but it will be inverse rather than linear which will give you greater precision at lower values, 5 bits will get you from 10-320 ohms if you use 320 ohm resistors switched in parallel. That will be big steps at the high end though so maybe go for 6 bits and 640 ohm max.


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.