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)
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);