Level shifting a +/- 2.5V signal to 0 - 5V

First thing to try is a simple resistor adder, without opamp. But it's clear that this won't work here: a resistor adder always attenuates the signal, and we need a \$\times\$1 amplification.

enter image description here

This is a non-inverting summing amplifier. You would think that we simply have to add 2.5 V, but do you have that? I'm assuming you have 5 V, so let's use that and see where it gets us. If we have -2.5 V on the Vin input the non-inverting input should be zero if you want 0 V out, regardless of the values of R3 and R4. So R1 and R2 form a voltage divider, and R2 should be twice R1 to get the 0 V.

Next we have to find the amplification, which is determined by R3 and R4:

\$ A_V = \dfrac{R3 + R4}{R3} \$

If we have 2.5 V on the Vin input and with R2 = 2 \$\times\$R1 we get 3.33 V on the non-inverting input of the opamp. To make that 5 V out we have to amplify by 1.5, so R3 must be twice R4.

We could use the following values:

R1 = 10 kΩ
R2 = 20 kΩ
R3 = 20 kΩ
R4 = 10 kΩ

You'll need an RRIO (Rail-to-Rail I/O) opamp if you want to power if from a single 5 V supply.


Here is one way to do it:

Level Shift

The resistive divider supplies 1.25V to the non-inverting input. This can be replaced by a dedicated voltage reference if desired. You will need a rail to rail output opamp.

Here is a simulation:

Level Shift Sim

Note the input impedance is defined by R3, so you may need to increase this (and R2 by the same) or buffer if the source is high impedance. Also note that the output is inverting.

Here's a non-inverting method for reference also:

Level Shift Non Inverting

And the simulation (the "to_adc" is the output voltage):

Level Shift Non-Inverting

The above non-inverting circuit is a bit like your summing amplifier.
The summing amp you show has a problem though, the inverting gain resistors shown will not correct for the divider. It needs (R1 + R2) for the feedback resistor.
So gain equals ((R1 + R2) / R2) + 1.

Here is an example of how it should look (the a and b suffixes are just to keep SPICE happy):

Level shift summing

In the simulation you can see the opamp +IN swings from 0V to 1.25V, so it needs a gain of 4 to output 0V to 5V. Since R1c and R1d are in parallel, we get 50k. So (150k / 50k) + 1 = 4.

Level shift summing sim