You are on page 1of 4

14/09/2017 Arduino Leonardo + 3 wire Load Cells + INA125P Analog Signal Bounce / Noise - Electrical Engineering Stack Exchange

sign up log in tour help

_
Electrical Engineering Stack Exchange Here's how it works:
is a question and answer site for
electronics and electrical engineering
professionals, students, and
enthusiasts. Join them; it only takes a
minute:
Anybody can ask Anybody can The best answers are voted
a question answer up and rise to the top
Sign up

Arduino Leonardo + 3 wire Load Cells + INA125P Analog Signal Bounce / Noise

I actually have a software background so my experience in electrical engineering is somewhat lacking. Never the less, I
have given my first Arduino project a go and for the most part I am quite happy. However I feel as though there could be a
vast amount of improvement that can be achieved regarding the load cell readings.

I am building a digital scale that weighs a maximum of 40Kg. At the push of a button, the scale outputs the current weight
to a pc connected via USB. Everything is working quite well except I am getting a lot of bounce when reading the analog
input from the loadcells.

I have 4x 50kg 3-wire loadcells (the ones typically found in bathroom scales similar to these load cells - my wires were
different colors, blue, black, red) wired in the configuration below:

I am using an INA125P to amplify the signal to my Arduino as per the diagram below:

https://electronics.stackexchange.com/questions/131613/arduino-leonardo-3-wire-load-cells-ina125p-analog-signal-bounce-noise 1/4
14/09/2017 Arduino Leonardo + 3 wire Load Cells + INA125P Analog Signal Bounce / Noise - Electrical Engineering Stack Exchange

I have a regulated 9v dc external supply powering the entire system.


I am using a booster to increase the voltage to 10V to the load cells as that is the specified excitation voltage. I am
also using this 10V supply to the INA125P
I have modified a USB cable such that it is a data-only cable by removing the voltage line, so that when the power
supply is turned off the entire system turns off and is not powered by the connected USB.

I have basically followed a bunch of online articles, pulled apart a scale, read a bunch of tutorials, a bit of trial and error
and came to the above arrangement. This much I was able to do on my own. I have smoothed out the analog readings
dramatically on the software end by using a running median combined with an averaging function but still get to much
bouncing.

There are loads of articles online that are very helpful in showing exactly how to create a scale using an Arduino and the
INA125P, but I was unable to find one that clearly demonstrated how to apply a negative voltage to the INA125P. I recall
reading somewhere that I should be able to achieve better resolution by applying a negative voltage to the INA125P but
struggled to understand how it was done and now I cant seem to find where I read it to begin with. Even if I somehow
worked out how to create the negative voltage and then worked out how to apply it to the INA125P and managed to use
the entire 10-bits of the Arduinos built in ADC to get a resolution of 1023 I still feel as though the bounce I am
experiencing is unusually high, especially on the lower end of the weight (I get almost 200 grams of swing when weighing
an object that weighs 400 grams).

After a lot of tinkering and testing I discovered the following unusual behavior

The voltage at A0 varies slightly when I change the USB from one pc to another (even such that the usb cables voltage
line is removed) and as a result the reading on the scale changes slightly from one pc to another.
The voltage at A0 increases if the PC connected to the USB has the Arduino Leonardo drivers installed (so it is not just
connected as a HID device).

I should note that

Changing the USB from PC to PC shows no change to the excitation voltage or the voltage supplied to the INA125P
from the buck booster.
Changing the USB from PC to PC shows no change to the voltage at Aref or at Vin.

I was hoping that I could get the answers to the following questions...

1. How can I modify my circuit so as to reduce the bouncing and stabilize the analog signal from the INA125P at A0?
2. How do I create the required negative voltage and how do I then apply it to my circuit such that I am able to achieve
the full 10bits of resolution?
3. How do I stop the voltage variation at A0 when connected via USB to different PCs?

I really appreciate any help I get on this.

---- UPDATE ----

After some more digging I stumbled across a cheap voltage converter IC ( ICL7660A ) that I was hoping I could use in
conjunction with two 10uF capacitors to create the negative 10V supply to the INA125P V- pin.

The documentation for the ICL7660A can be found here.

Is there any problem with using the ICL7660A to create the negative 10V as shown in my circuit below?

Could this cause any foreseeable issues with the INA125P or the rest of the circuit?

https://electronics.stackexchange.com/questions/131613/arduino-leonardo-3-wire-load-cells-ina125p-analog-signal-bounce-noise 2/4
14/09/2017 Arduino Leonardo + 3 wire Load Cells + INA125P Analog Signal Bounce / Noise - Electrical Engineering Stack Exchange

--- UPDATE 2 ---

I ended up testing the above circuit and indeed it appears to supply the -10V to the V- pin of the INA125P, however it does
not seem to improve the analog reading range... I am still getting readings between 300 - 1023. I was under the
impression that by supplying a negative voltage to pin V- I would be able to get the full range 0 - 1023.

I am also contemplating adding a fixed 10V voltage regulator to the excitation voltage to see if that has a stabilising
effect... does it matter where this is placed? I.e. close to the load cells or close to the voltage supply or is it irrelevant??

arduino load-cell

edited Oct 3 '14 at 9:03 asked Oct 2 '14 at 7:41


Tome A
16 1 1 3

What do you mean by bouncing? Andy aka Oct 2 '14 at 7:54

I mean that the analog reading keeps fluctuating and never seems to steady itself. Say for example I
apply a load to the load cells and get an output of the analog reading to serial of around 305. It won't
just sit on 305 but bounce around, for example 300,301,307,310,305 etc etc. It is even worse without
my smoothing logic on the software side. Tome A Oct 2 '14 at 19:36

What gain is your INA125 set for and how much gain is there afterwards? The booster is bound to
create noise of course and most people would use an extremely stable excitation voltage. I don't
consider this device as giving a problem on a single supply btw. What sampling rate are you using and
do you have an anti alias filter before your ADC? Andy aka Oct 2 '14 at 20:45

I am using a trimpot to set Rgain and did this by applying my max load of 40Kg to the load cell
platform and slowly adjusting the trimpot until I got as good a reading of 1022 as possible. Measuring
the resistance with my multimeter shows a reading of 72.4ohm which would give me a gain of 832.7
from a possible range of 4 - 10000 according to the formula provided in the INA125P doc. Tome A
Oct 2 '14 at 21:50

1 Do the readings fluctuate the same with no load on the weigh plate? Have you tried using the same
reference voltage as the excitation voltage - at least this way you make a ratiometric reading and rule
out some errors. Andy aka Oct 2 '14 at 22:38

1 Answer

A few things to be aware of first: With only 10 bits your 1 bit resolution will be
(Full Range)/1023, in this case 40kg/1023 = 0.0391kg (39.1g). The 1 bit noise
level (39.1g) at the Arduino analog input is 5v/1023 = 4.89mv, (assuming a 5v
Arduino system). At the amplifier input the 1 bit voltage value is further divided by
the amplifier gain. So any system noise over these values will reduce your
resolution further unless extra filtering is used. Also remember that the Arduino
chip can be damaged if the A0 input goes below GND or over VCC. Protection
diodes could help here if there is no other control.

The +10 and -10 supply setup only helps if needed by the amplifier chip, and/or if
it brings the voltage across each load cell to the max 10v level, thereby giving the
max output. But as above this could also lead to a negative voltage on A0. For

https://electronics.stackexchange.com/questions/131613/arduino-leonardo-3-wire-load-cells-ina125p-analog-signal-bounce-noise 3/4
14/09/2017 Arduino Leonardo + 3 wire Load Cells + INA125P Analog Signal Bounce / Noise - Electrical Engineering Stack Exchange
example with a +- supply just lifting your system up by the weighing platform
might send A0 negative. (If you do test for this be sure to disconnect A0 from the
Arduino first.)

To filter the S+ and S- lines you could try placing low value series resistors onto
each line then placing a parallel cap (non-polarized) across them, (with the cap
nearer to the amplifier chip). 1k resistors and a 1uf cap might be good values to
try. A same value series resistor and cap to GND on the A0 line may also help,
(with the cap nearer the Arduino input). These filtering ideas might not help much
if your system noise is already too high. The extra RC parts will reduce the
response time slightly. If the slower response is unacceptable then a lot of digital
filtering would be needed.

Check your zero point noise. Short S+ and S- and see if you get a stable reading
near zero. (Do this first by disconnecting A0 and verify with a DVM that A0 does
not go negative.) With A0 connected, any "bouncing" you see will likely be system
noise from the amplifier or the Arduino. To reduce amplifier noise place larger
value caps from the V+ pin to GND and from the V- pin to GND. (10uf to 47uf
should do, observe correct polarity). A small cap (maybe 0.1uf) across the gain
resistor might help, (check the amplifier's data sheet). To reduce Arduino noise be
sure you are using the analog function that switches off the digital system before
taking a reading. I don't know if the standard analogRead does this or not. Most of
the Atmel chips have this capability. You may need to look up the library function
and read through the Atmel chip data book.

To calibrate your system use a good resolution DVM. Temporarily disconnect the
A0 input and connect it to the DVM +, with DVM - to GND (or E-). Place a full
range mass (40kg) on the scale, adjust Rgain (add a small potentiometer if
needed) until you get a reading very close to, but not over Vref. Next remove the
40kg mass and see if the voltage reading is very near 0v. If not near 0v you can
give some voltage offset by adding a very high value potentiometer (100k to 1M)
connected between E+ and E- with the center connected to a 100k then to S+ or
S-. After adjusting the zero point retest and readjust Rgain if needed.

answered Jan 9 '15 at 13:54


Nedd
41 2

https://electronics.stackexchange.com/questions/131613/arduino-leonardo-3-wire-load-cells-ina125p-analog-signal-bounce-noise 4/4

You might also like