High side current sensing with LM358

Basically I want to measure high side current through a 1 Ohm shunt with this configuration: The circuit works perfectly in a simulation. However on a bench it doesn't produce any meaningful output. The only voltage that I see on the output is a constant 700 mV. When I put a load on a circuit and draw more than 1 amp the only thing that changes is that a small ripple adds on top of the 700 mV offset. When I check the voltage drop on the resistor with a voltmeter it is the expected 1 volt or so.

When I place the 1.2 Volt battery instead of the resistor at the inputs, the output is almost exactly the voltage applied, so the circuit works fine in that case.

I thought that maybe I am trying to operate the opamp too close to the rails so I tried to use voltage dividers as so:

Still the output was the same 700mV.

I can't understand why does the circuit measure the battery voltage and can't do so with the resistor voltage drop.

I'd switch to the low-side measurement however I already have the power PCB printed with the shunt on it so I am still trying to make it work, and also want to understand why this circuit doesn't work.

Edit: Here is the opamp output vs load current graph, where the load is changed from 2 amps to 0 amps. Edit N2:

I made changes according to some of the suggestions and now the circuit works relatively well. First of all I increased the loop's impedance by increasing the resistor values. Next I biased the opamp to 1.5 volts. I also fiddled with power supply itself to reduce noise. The circuit looks like this: Thanks to everyone now it at least doesn't spew out random nonsense and increases voltage with applied load. I haven't checked for linearity yet but it's a start.

• Can you specify V2 range? – Dorian Jul 27 '18 at 12:53
• V2 is constant at around 16.2 volts. It may have some ripple on it with a large load. – Anthropomorphous Dodecahedron Jul 27 '18 at 12:58
• You have then at least 8.1mV offset from R23 and R24 that draw 8.1mA, still does not explain the nonlinearity at low current values. – Dorian Jul 27 '18 at 13:18
• The non linearity is an unwanted effect, however right now I am faced with I'd say more mind boggling problem: why does the actual circuit show constant 700 mV output regardless of what current is drawn, even at relatively high currents up to 1.5 Amps? – Anthropomorphous Dodecahedron Jul 27 '18 at 13:38
• Had to upvote to make your reputation above 666... God bless ;) lol – KingDuken Jul 27 '18 at 16:18

The LM358 can't get to the negative rail perfectly. There is a typical 50uA current sink in the output circuit that allows it to get close, particularly when it is dealing with a resistance to ground as a load or a very light load to >0V. You, on the other hand, have a 20K resistance (R19+R20) to ~8.5V (R23/R24) which is 425uA, which overpowers the current sink. Given that, you're going to get more than 1 diode drop at the output. If you bias it upward so that 0A = 1V you should be able to get a linear output.

• Thanks, that's interesting. I'll see what I can do. – Anthropomorphous Dodecahedron Jul 27 '18 at 14:17
• It's still not a great circuit. Quite sensitive to all the resistor tolerances, so use good resistors everywhere ( R16 is the least sensitive). – Spehro Pefhany Jul 27 '18 at 14:19
• I don't see how this answer explains a flat output even above 1A and why a battery shows the right output. I don't see how how this has been chosen by the OP misleading others that might want help from this question. – Dorian Jul 30 '18 at 8:02

The input common mode range of the LM358 DOES NOT include the positive supply rail. Adding the resistors will work but the 1kohm needs to develop at least 2 volts across it to bring the common mode voltage down to data sheet values.

Your modified circuit should work. What does the simulator give as a result?

It gives almost exactly half of the voltage across the resistor. 480 mV at 1 amp current draw.

Do you have output linearity down to zero amps? It's about half the value because of the 1 kohm potential dividers reducing the voltage by about 2.

It looks quite linear until you get down to approx. 100 mA range: - I thought this might happen: With a single supply rail the LM358 is going to struggle below 50 mV. You could try addding a 1 kohm resistor down to 0 volts on the 358 output. Alternatively, you bias the resistor values so that 0 amps would produce say 100 mV intentionally.

Which side of R16 have you got the load - this does matter because if you have it opposite to your schematic then it won't work and will do what you have found.

@Andyaka The lower voltage side goes into the inverting input. I also exchanged the sides to double check, with the same result.

Maybe the chip is damaged. Try replacing the chip.

• Yes I know, that's why I added the voltage dividers. Or did I do something wrong there? – Anthropomorphous Dodecahedron Jul 27 '18 at 12:33
• I was just editing so please read my answer again. – Andy aka Jul 27 '18 at 12:34
• Your modified circuit should work. What does the simulator give as a result? – Andy aka Jul 27 '18 at 12:37
• It gives almost exactly half of the voltage across the resistor. 480 mV at 1 amp current draw. – Anthropomorphous Dodecahedron Jul 27 '18 at 12:41
• OK, that's a start and, with some arbitrary low current, do you have output linearity down to zero amps? It's about half the value because of the 1 kohm potential dividers reducing the voltage by about 2. – Andy aka Jul 27 '18 at 12:59

Your circuit is very sensitive to resistor tolerances. Using two resistor dividers 1/2 in cascade as you did do not result in 1/4 divider but less.

See the somehow equivalent schematic I did altering a bit the + input divider. The result is OA output saturation since a negative output is not possible. simulate this circuit – Schematic created using CircuitLab

Click simulate this circuit , simulate , DC sweep ,run DC sweep to see the results.

• Play with R5 around 30k and see the results. – Dorian Jul 27 '18 at 14:58

Try to use a better differential amplifier like MCP6H01, it gives better results and its application is well explained by many microchip application notes. Another suggestion is to use dedicated IC for high side current measurements like ZXCT1009 or MAX4172