Saturday, 10 January 2015

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:


3-wire load cell arrangement


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


enter image description here




  • 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 can’t 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 Arduino’s 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 cable’s 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 PC’s?


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?


Negative 10V created by ICL7660A



--- 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??




No comments:

Post a Comment

arduino - Can I use TI's cc2541 BLE as micro controller to perform operations/ processing instead of ATmega328P AU to save cost?

I am using arduino pro mini (which contains Atmega328p AU ) along with cc2541(HM-10) to process and transfer data over BLE to smartphone. I...