Electronics is my profession and my hobby (along with mathematics). For a hobbyist project of mine, I need an amplifier circuit with a programmable gain that varies exponentially with the setting on a potentiometer. When I design a circuit, I usually begin my design effort with a web search. I do not like reinventing the wheel. I found an old EDN article that has an interesting circuit, but the figures are not visible. I will reconstruct the circuit here based on the text description and make a small modification that makes it a bit more appropriate for my application.
Note that this problem is closely related to an early post of mine on potentiometers. I could use a log potentiometer, which really have an exponential resistance characteristic, but I have not been satisfied with the accuracy and repeatability of these components. So I have looked for an alternative approach and this one seems reasonable.
I need a circuit with a gain that varies exponentially according to the setting of a potentiometer. Equation 1 shows the functional form that I am looking for.
- x is the potentiometer setting as a percentage of full-scale.
- k is an arbitrary constant.
- A is an arbitrary constant.
I often end up plotting my results on a semi-log plot. Equation 1 represents a straight line on a semi-log plot, which I prove in Equation 2.
Knowing that Equation 1 will plot as a straight line will allow us to graph the circuit response and determine how well it conforms to Equation 1.
Because the schematic is no longer present in the article, I need to regenerate it. Figure 1 shows my guess for the schematic.
This circuit reminded me of some of the circuits my graduate school advisor, Arum Budak, used to come up with. A number of his circuits made clever use of op-amps driving potentiometer wipers. As he always did, I made sure sure that my opamps are "happy" -- which to Dr. Budak meant that the plus and minus inputs are at the same voltage (i.e. the virtual ground assumption holds). Another good aspect of the circuit is that both opamps are inverting. This follows the admonition of the great analog designer Jim Williams, who said "always invert (except when you can't)." Inversion is superior because the virtual ground eliminates common-mode errors.
Figure 2 shows that the gain of the circuit can be expressed as a function of the wiper setting as a percentage of the potentiometer's full scale setting.
Figure 3 shows the gain versus potentiometer setting (% of full scale) for the circuit of Figure 1. Note that the middle region of the curve is a straight-line, which indicates that Equation 1 holds in that region.
We see that this circuit has a linear gain characteristic on a semi-log plot in a range of x from 0.2 to 0.8. This is the circuit behavior is close to what I need and is good enough for me to proceed with.
While this circuit does generate an exponential gain curve, it is not very flexible. I only have one parameter that I can adjust, ß = R1/R3. This means that I can only adjust one aspect of the gain curve, say its slope or its value it a point. Ideally, I would like to adjust the gain curve's slope and set its value at a point. Let's see if we can make the circuit of Figure 1 just a bit more flexible.
Slightly Modified Circuit
The circuit of Figure 1 has a few shortcomings when it comes to implementing a specific exponential function:
- There is only one parameter, the resistor ratio R1/R3.
- The simplest thing for me to do would be to set the slope and value of my potentiometer circuit gain equal to the slope and value of my desired function at a point (e.g. mid-point of the range of x)
- adjusting the slope and value of my potentiometer independently means that I need two independent parameters in my potentiometer circuit.
As I think about it, adding some fixed resistance on both sides of the potentiometer may be the answer. These resistors will give me another parameter to "tweak." Let's analyze the performance of the circuit of Figure 4.
Figure 5 shows my analysis of this circuit.
The circuit now has two parameters that will allow me to adjust the slope and circuit gain at a specific point. Let's work an example to illustrate the procedure.
Let's assume that we need a circuit with a gain described by the function . My approach will be simple: (1) setup two equations in two unknowns, and (2) solve the resistor ratio ß = R1/R2 and the value of α = R0/RP.
- create an equation for the slope of the potentiometer circuit at x=1/2 equal to slope of at x = 1/2.
- set the gain of the potentiometer circuit at x = 1/2 equal to the value of at x = 1/2.
- solve these two equations simultaneously using the nonlinear solver in Mathcad.
Figure 6 illustrates how I used Mathcad's nonlinear solver to set my potentiometer circuit's parameters.
Figure 7 shows the level of agreement between my ideal equation and the potentiometer circuit output.
In my opinion, the result is pretty close. Good enough for the project I have going here.
This is a simple circuit that does what I need, which is to accurately render the exponential function over a limited range. I like the fact that I can obtain a dual opamp and linear potentiometer more readily than I can obtain an accurate and repeatable "logarithmic" potentiometer. See the Appendix for empirical Data.
Figure 8 shows the circuit that I constructed in LT Spice.
Figure 9 shows a plot of the data from a quick test.