Filtering Noise on Strain Gauge Circuit

filterinstrumentation-amplifierload cellnoise

I am making a digital weighing scale circuit and currently having difficulties understanding filters that are commonly used to reduce noise in these type of circuits. My load cell is a full-bridge with a max-capacity of 200kg and 2mV/V rated output. With an excitation voltage of 5V, I am only amplifying half the signal (0-5mV) using an AD620 in-amp. Then I used AD822 as difference amplifier to subtract an offset of 2.47V and then amplify it again by 4.9 to have an output swing of about 200mV to 4.8V.

My questions are:

1) Is the headroom voltage I have provided for the ADC large enough or actually small? Because I have read that its a common rule to provide a headroom for your ADC but I don't know exactly how much so I settled with 200mV. I am using the built-in ADC of arduino(10-bit resolution)

2) As you can see, I am using the basic way of constructing a difference amplifier and non-inverting amplifier with my AD822. Is there a more effective way of doing this? Or is there something I need to add to make my output more stable and accurate? Because on the diff amp, I'm actually having a pretty stable output but with regards to my non-inverting amp, it is having some inaccuracies, e.g. instead of having an output closely at 196mV at 40mV input (40mV * gain of 4.9 = 196mV), I'm having an output of something like 230mV. And also it is varying unexpectedly with non-moving load.

3) Sorry for this but i basically don't know something about filtering noise. What are your recommendations for my circuit on filtering noise? I think i must have to put something between my load cell and AD620 in-amp, and between my non-inverting amp and ADC but I don't know what exactly they are right now.

All kinds of help are greatly appreciated!

FYI, decoupling caps were used on each IC but were not indicated on the schematic below. (0.1micro paralleled with 0.33micro)

enter image description here

And if this could help, this is my code for testing my values, it is actually the sample code provided for smoothing analog values.

  total= total - readings[index];

  readings[index] = analogRead(inputPin);

  total= total + readings[index];

  index = index + 1;

  if (index >= numReadings)

    index = 0;

  average = total / numReadings;

  Serial.println(average); 

  delay(500);

Best Answer

You should take full advantage of your bridge to directly drive a difference amplifier. Trying to create the separate reference of 2.47V using an LM324 is going to be a source of error that will likely forever kill the performance of your circuit. After all there is a good reason that full bridges are designed into load cells.

I've not looked at any data sheets for the parts that you are using but it also seems like your use of the ADxxx parts for part of the circuit and the LM324 for the references will be another source of error. The LM324 and the ADxxx parts are likely to be in completely different leagues when it comes to error parameters such as the offset voltages.

Another thing to think about. When you get your circuit all polished out there will still be an error where zero load not equal to zero result. The best you hope for is that the total circuit is as linear as possible across its usable range. Then you take what ever reading you get at "no load" and subtract that value from readings that you make at weighing time to get the actual weight. Another factor to add into this is that it is often necessary to also use software to scale the readings to actual weight. This entails taking a reading at full weight and storing that to be used to scale subsequent readings to actual weight.

If you are unable to achieve good linearity of the analog circuitry over the full weight usage range it may then be necessary to additionally calibrate the system at additional points such as mid range or at 25%, 50% and 75% to give the ability to scale readings to actual weight by doing linear interpolation over shorter sections of the input range.

Lastly do not discount the importance of what temperature variation will do to your system.