0
\$\begingroup\$

I have been trying to read a 4wire pressure transducer (M3021-000005-01KPG) with a microcontroller, but problems keep arising. First of all, I realized that the signal (0-100 mV) is differential, which means that we have to measure it between the 2 signal wires of the transducer, not between the ground of the circuit and a single wire. With lab instruments this is no problem, but I would like to read the signal with a microcontroller. In this case, the problem becomes obvious because not only is the signal too small (0-100mV), but also the microcontroller's ADC (ex. the ADC of an Arduino) compares a voltage with its ground, and does not read differential signals.

I tried to pass the signal through a differential amplifier circuit (an op amp with some resistors) with unity gain (i will add gain later) in order to convert it to a signal relative to the circuit's ground, but the signal was not correctly read. More specifically, I was reading 5mV without the sensor connected and 8mV with the sensor @6bar pressure. The sensor's signal @6 bar should be 9 mV, so I assume that i should read 5+9 = 14mV. I know that the diff. amp. circuit is correct because I was measuring the expected results when I was sending a custom differential signal instead of the sensor (I was getting the signal value + the noise). I also know that the transducer's signal is OK beause I measured it with a multimeter, without the diff. amp. circuit.

So, I can't find out what is wrong. I dont have much experience with op-amps, so any help would be appreciated !!

P.S. : Some info about the transducer. The signal is 0-100mV representing values from 1 to 69 bar linearly. I know that the signal is almost at noise level, but I could consistently measure 9mV @6 bar with a good mulimeter, so I assume that the sensor works fine. Filters and amplification will probably need to be added later on, but for now I just need to be able to convert the differential signal to single-ended.

schematic

simulate this circuit – Schematic created using CircuitLab

Datasheet : https://eu.mouser.com/datasheet/2/418/6/ENG_DS_MSP300_B-1130121.pdf

\$\endgroup\$
4
  • \$\begingroup\$ Add a schematic to your question, using the board's built-in schematic editor, showing how you've connected your differential amplifier, including its power and ground connections, and part number. The schematic editor is the 'diode/resistor/capacitor' button on the toolbar that appears when you edit your question. \$\endgroup\$ – Neil_UK May 27 at 6:38
  • \$\begingroup\$ Thanks for your response, I added the schematic. \$\endgroup\$ – Jim Moustroufis May 27 at 10:50
  • 1
    \$\begingroup\$ Does your sensor work well into those low impedances? The offset voltage of the amplifier might be enough to give you a -ve output and so saturate the amp at 0 v, return R3 to a volt or so rather than gnd, to make sure the output is above gnd. Arduino doesn't read well close to gnd either. Measure the output of the transducer + amp into a DMM, it doesn't read that you've done that. \$\endgroup\$ – Neil_UK May 27 at 12:49
  • \$\begingroup\$ You have a mV output transducer, M30*2*1, so the load resistance should be >= 1 Mohm \$\endgroup\$ – Neil_UK May 27 at 12:54
1
\$\begingroup\$

The part number you have, M3021, is a mV output device, so according to the datasheet should have a load resistance of minimum 1 Mohm.

Offset voltages at the LM358 may result in a voltage close to or even below ground. Although the input common mode goes below 0 V, the output certainly doesn't. Your amplifier may not be driving the output correctly near to ground.

The arduino ADC does not read correctly within a few counts of ground.

That's three reasons you may be having problems.

As the LM358 is a dual opamp, I suggest you use the basic two-amplifier instrumentation opamp circuit shown here. I've arranged the resistors in a configuration that makes it clear how the amplifier works, and is hopefully easy to remember. The amplifiers will do whatever they have to to get the voltage across the R1s equal to the differential input voltage. The R1s current flows through R2s, and we take the output voltage across the whole R2+R1 string.

schematic

simulate this circuit – Schematic created using CircuitLab

Now your high impedance device is loaded only by amplifier inputs.

Use the Vref input voltage to place your output voltage well within the clean range of your Arduino's ADC. Maybe have a diode to ground with a small bias current to give 0.7 V. You don't need to know it accurately as you can take it to another ADC input and read it, so you could use a voltage divider between supply and ground to reference it. The output voltage is the difference between Vref and Vout.

Without RG, the resistor values shown give the amplifier a gain of 11, or with equal values (say all of them 10k) the gain would be 2. You can use RG to adjust the gain up if you want, keeping good common mode rejection, without having to change the matched resistors R1 and R2.

This simple amplifier does have limitations. I suggest you read the tutorial I've linked to for the common-mode / Vref / gain tradeoffs that may cause OA1 to saturate. Either that, or check using a DMM or simulator whether OA1's actual output voltage is within range over the full operating range of your transducer.

\$\endgroup\$
1
  • \$\begingroup\$ Thanks for your detailed and informative reply. I had to take some time to study it, but I get what you are saying now. I will have the circuit in mind when I return to the lab. Thanks again! \$\endgroup\$ – Jim Moustroufis May 27 at 23:30
0
\$\begingroup\$

With regard to the sensor-to-buffer amplifier end: many pressure sensors implement the Kelvin Wheatstone bridge in their design. The most secure way to connect your sensor to a data acquisition system is to follow instructions from the sensor manufacturer or your supplier, but there exist scenarios where you should solve the problem on your own. See a circuit that can be used with a 4-wire pressure sensor in the Weber State University's EE4900 course notes, Fundamentals of Sensor design, page/slide 21. Maybe, with necessary changes, the circuit can be adapted to your system.

If the unexpected sensor signal measurements reported in your question are obtained with the Arduino board, the measurements can suffer timing issues unrelated to a buffer amplifier design, see my answer Troubleshooting multi-staged multiplexer design.

UPDATE

With your "differential amplifier circuit ... with unity gain" disclosed in the question edit, the unexpectedly low output of the buffer amplifier has a clear explanation: the load for a pressure transducer is too heavy, and you better use an instrumentation amplifier. A solution with two-amplifier instrumentation amplifier should work, and it is the solution offered in the EE4900 course notes, but, considering that you "dont have much experience with op-amps" (in your own words), and to be on the safe side, maybe a three-opamp instrumentation amplifier would be easier to implement.

\$\endgroup\$
2
  • \$\begingroup\$ Thanks for the quick response. I will take a look at the circuit you provided and maybe implement some part of it in my design. \$\endgroup\$ – Jim Moustroufis May 27 at 11:02
  • \$\begingroup\$ Hmm i kind of understand what you are saying about the big load. The 3 op amp instrumentation amplifier is indeed easier to implement and troubleshoot than the circuit from the EE4900 course notes. I am going to try it as soon as I return to the lab. Thanks. \$\endgroup\$ – Jim Moustroufis May 27 at 23:27

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.