12
\$\begingroup\$

I have a joystick that puts out analog voltage somewhere between 1.5V and 3.5V.

I want to transform this range of voltage to control a motor controller that takes analog voltage between 0V and 5V.

How do I level shift and amplify properly?

asked Apr 26, 2012 at 5:15
\$\endgroup\$
10
  • \$\begingroup\$ Is there no intermediary microcontroller? If so just use an ADC. \$\endgroup\$ Commented Apr 26, 2012 at 5:24
  • 2
    \$\begingroup\$ I think you might want to elaborate on what exactly you want to do here. Are you trying to scale an analog voltage from 1.5V-3.5V to 0V-5V? Are you trying to convert an analog voltage to some digital output? \$\endgroup\$ Commented Apr 26, 2012 at 5:27
  • \$\begingroup\$ A boost converter could help you in going from 3.5 V up to 5 V, but not in going from 1.5 V down to 0 V. Its gain is always greater than or equal to 1. \$\endgroup\$ Commented Apr 26, 2012 at 9:21
  • 1
    \$\begingroup\$ @Telaclavo a boost is not useful here, since it's used for powering, but we assume he has a greater supply than 3.5 V. \$\endgroup\$ Commented Apr 26, 2012 at 9:23
  • 1
    \$\begingroup\$ We know that those are analog voltages. What is your supply? \$\endgroup\$ Commented Apr 26, 2012 at 9:37

3 Answers 3

14
\$\begingroup\$

You want a simple gain of 5/2 = 2.5 centered around 2.5 V. This is easy assuming you have 5 V power available, like from the motor controller:

This needs to be a rail to rail output opamp that can run from 5 V power, like the MCP6041 and many others. R1 and R2 form a voltage divider to make the 2.5 V around which the input signal will be amplified. C2 attenuates noise from the 5V supply even more than the DC to make a quiet and smooth DC level. The opamp is in a classic positive gain configuration, with R4 and R3 setting the gain. The impedance of the 2.5 V source produced by R1 and R2 effectively add to R3 for the purposes of gain, but that is a small contribution of 1.2 kΩ on 100 kΩ. The gain will be slightly less than 2.5.

answered Apr 26, 2012 at 12:31
\$\endgroup\$
10
  • 1
    \$\begingroup\$ +1. More precisely, rail-to-rail output (rail-to-rail input not needed here) \$\endgroup\$ Commented Apr 27, 2012 at 15:59
  • \$\begingroup\$ @Jason - Fixed. \$\endgroup\$ Commented Apr 27, 2012 at 16:06
  • \$\begingroup\$ How did you pick the values for R1 and R2? \$\endgroup\$ Commented Apr 27, 2012 at 22:41
  • 1
    \$\begingroup\$ @abdullah: Since the supply is 5 V and the point is to make 2.5 V, one constraint was R1 = R2. The other choice was what the impedance of the 2.5 V source should be, which is R1//R2. Lower is better, but lower also means more current. I felt 100 kOhm was about as high as I wanted to go with R3 to keep stray noise pickup down. 1.2 kOhms seemed low enough impedance relative to that, and draws about 1 mA from the 5V supply, which sounded reasonable. \$\endgroup\$ Commented Apr 27, 2012 at 23:22
  • 1
    \$\begingroup\$ @jfenwick: I can't tell what you think those equations mean without your properly defining terms, like "Ad". Also, it seems you may have missed the fact that there is negative feedback in this circuit, which sets the gain. The open loop gain of the opamp is so large as to not matter to the gain of the closed loop circuit. I don't see 5V and GND coming together anywhere. You'll have to be more specific with less waving of hands. \$\endgroup\$ Commented Apr 29, 2012 at 0:54
7
\$\begingroup\$

This is possible with only one op amp. What you're trying to do is level shift and amplify. We used to make these all the time. They're useful in robots where you have a sensor with a small analog voltage output range, and you want to expand the voltage swing so that you can get maximum resolution from your ADC.

We'd usually make them with variable offset and gain, so that we could adjust them for each sensor on the robot.

Op amp variable level shift and amplify

Having got your settings right, you could always measure the resistances of the pots, and used fixed value resistors instead.

Or you can calculate the values directly:

Op amp level shift and amplify

There's an online calculator to help you work out the resistor values.

answered Apr 26, 2012 at 11:42
\$\endgroup\$
4
  • \$\begingroup\$ Correct, but he needs to provide his supply voltages \$\endgroup\$ Commented Apr 26, 2012 at 12:12
  • \$\begingroup\$ @clabacchio - True. But I think we can assume there's 5v available. \$\endgroup\$ Commented Apr 26, 2012 at 12:30
  • 4
    \$\begingroup\$ Note that this inverts. That could be a issue in the user interface if the joystick has to be moved opposite from the intuitive direction to make higher motor speed. \$\endgroup\$ Commented Apr 26, 2012 at 12:34
  • \$\begingroup\$ Thanks for pointing out that this is called level shifting. \$\endgroup\$ Commented Apr 27, 2012 at 18:04
4
\$\begingroup\$

Contrarily to what Cybergibbons says, it's quite simple analog electronics. But you have to specify which supply you intend to use for your circuit.

You need a circuit which brings down your common mode signal (1.5 V) to 0, and applies a gain of 5/2 = 2.5 to the rest. You can easily do it with an Op-Amp based level shifter with some gain.

A solution is to use an analog subtractor with a reference voltage placed at 1.5 V, an even simpler solution is just a non-inverting amplifier with the reference in the right place.

This circuit will do the job:

enter image description here

The Opamp is just the default in the simulator, you may need another one, depending on the supply.

It's a non inverting amplifier with gain given by \$ \dfrac{R_1 + R_2}{R_1} \$, and the reference voltage makes the voltage shifting.

answered Apr 26, 2012 at 6:22
\$\endgroup\$
8
  • \$\begingroup\$ It's simple if you are just drawing a schematic - the complication comes with the requirement that the signal must go from 0-5V and it is an input to a motor controller. 0.05V isn't going to cut it - so it needs a split supply opamp. That means you need to provide a split supply, which is a lot of additional effort. \$\endgroup\$ Commented Apr 26, 2012 at 6:46
  • \$\begingroup\$ @Cybergibbons not so much, depending on what he's got; and, using rail-to-rail op-amps, he might also do the job without it. \$\endgroup\$ Commented Apr 26, 2012 at 7:07
  • \$\begingroup\$ Possibly. I've been taught that relying on rail to rail performance is a bit of a no no for control for a few reasons. Firstly, rail to rail is never really rail to rail - the best performing opamps get to around 10mV or so, which can cause problems. Second, they aren't that linear in that region. Third, if you load the output the rail to rail performance gets much worse (a motor control may load the output - we don't know). Of course, if the motor controller has a dead band it doesn't matter. \$\endgroup\$ Commented Apr 26, 2012 at 7:28
  • \$\begingroup\$ @Cybergibbons well, about the degradation of performance, you may be right (I don't know) but Analog Devices has rail-to-rail op-amps which go to about 2-5 mV (max) from the rails. But this problem doesn't exist if he has 12 V supply for instance, so it's dependent on how he wants to supply it. About the driving capability, he can use another op-amp to buffer the signal, as long as he has the right supply. \$\endgroup\$ Commented Apr 26, 2012 at 7:34
  • \$\begingroup\$ @Cybergibbons - Is it any more likely that a processor PWM output pin will go to within 10mV of ground - even at 0% duty cycle? \$\endgroup\$ Commented Apr 26, 2012 at 9:10

Your Answer

Draft saved
Draft discarded

Sign up or log in

Sign up using Google
Sign up using Email and Password

Post as a guest

Required, but never shown

Post as a guest

Required, but never shown

By clicking "Post Your Answer", you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.