I am designing a weigh scale for a bee hive, using AD7780, using four load cells, 20kg each, 1mV/V, powered at 3.3V.
I ordered 2 samples and I etched a small evaluation circuit (schematics and layout attached), based on the CN0107 reference design. The part is powered with 3.3V, the AVDD and DVDD pins are decoupled using tantalum and ceramic capacitors, and the AVDD is powered through a low pass filter. The part is configured with 128 gain and 10Hz filter.
I tested with two individual load cells and the behavior is the same: above a specific load () the DOUT/RDY pin remains HIGH. If I reverse the sense wires and the force direction, the behavior is the same.
Vref is 3.3V. Gain is 128, so the maximum measurable voltage should be ~25mV. My multimeter, set on mV, indicated 0.09mV between AIN+ and AIN-. Referenced to GND, I measured 1.532 at AIN+ and AIN-. Excitation voltage is 3.281V and AVDD is 3.290 (the load cell is powered through the BPDSW pin). DVDD is 3.332V.
Filter an Gain pins are solidly connected to 3.3V and GND. All solder joints and wiring is intact. The load cell does not appear to be faulty (as measured with the multimeter set on Ohms)
As for the interface, the level is 3.3V, the clock frequency is 200KHz and the MCU waits for DOUT/RDY pin to go low before attempting anything. At no load, the status byte reads correctly: no conversion errors, gain and filter are as set by hardware, and the PAT bits are correct.
I also attached the interface code, in case there might be something wrong with it. It is written in Arduino IDE, targeted for the ESP8266. Also, at no load, the measured voltage was 12.84mV, so I think I am doing something wrong there.
What am I mistaking ?
Forgot to write the load. The DOUT/RDY pin remains high at around 800g.
Is that specific to 800g only? May I know what is the equivalent input voltage at that weight? Have you tried to test a single load cell or try to put a fixed DC input voltage and reference and check if you are reading an accurate measurement. From your code, can you just try to read the data register (in code) and send me what you read based on the corresponding input voltage.
First at no load, you said you have a differential input voltage of -0.08mV. From the above code that you have read from the data register, It's equal to 7F88CC (hex). Which is close to the expected code of 7F9A51 (hex). For 800g you have read 7FFFF7 (hex) which is also close to expected code of 7FF34A (hex). So when you connected your input to GND (zero) it is expected to be 0 and to REF+ it is expected to be full scale. So I was thinking that you might be reading the correct data register value based on your measured input voltage. Can you try to measure the load cell output voltage when it is not connected to ADC, are you seeing -0.08mV at no load? and -0.01mV at 800g? It is also important to meet the absolute input voltage of GND+1.5V and AVDD-1.5V to avoid linearity issue. So each inputs should be within this specification.
Yes, over ~800g, the DOUT/RDY remains high.
All tests were made using individual load cells, they were never connected together. The load cell is excited with 3.3V, it has a sensitivity of 1mv/V and it is rated at 20kg. So, at 800g, it should output 0.132mV.
I re-wrote the code to display the measured voltage, as indicated in the datasheet. The previous statement (12.84mV) is wrong, the equation for determining the voltage was completely wrong. At 0 load (no weight pushing on the load cell) I get 25.66mV, which is very close to the maximum measurable voltage for Vref=3.3V and Gain=128. At ~800g, the measured voltage is 25.78mV (exactly the measurable limit). Above this, the RDY pin will remain high.
So the converter stops converting if the limit is exceeded.With the multimeter, at no load, I measured only -0.08mV between AIN+ and AIN-, very far away from the indicated 25.66mv. At 800g the multimeter shows -0.01mV.
Here is what I get from the converter at 0 load (MSB first): 01111111 10001000 11001100 01001001The status bits appear OK.Here is what I get close to 800g: 011111111 11111111 1110111 01001001. Saturation occurs.
If I connect the AIN+ to GND, it reads full 0 (except the status register). If I connect it to +REFIN, is stops converting, showing that it reached saturation.
I don't get it, why does it see 25mV when there are only 0.09mV ?
The reference voltage is fixed: 3.3V. REFIN+ is connected to AVDD. REFIN- is connected to BPDSW. To test the operation with a fixed DC voltage, I tied AIN- to REFIN-, and I connected a potentiometer from REFIN+ to REFIN-. The center tap is connected to the AIN+ pin. At any value, the DOUT/RDY pin stays high. The same happens even if I short AIN+ to AIN- and to REFIN-. I only see a clean 0 if I take AIN+ to GND (below BPDSW). Also, shorting BPDSW to GND has no effect. The situation occurs at any gain, and at any filter (10Hz and 16Hz).
Next, I will change the chip with another one. Luckily, I requested two sample chips.
Also, the datasheet states that, at Gain=128, input voltage is between GND+1.5V and AVDD-1.5V. My AVDD is 3.3V...
I will try to increase AVDD.
Any other ideas ?
I'm confused. If your load cell is specified with 1mV/V rated at 20kg. So the maximum output voltage of your load cell with 3.3V excitation voltage is 3.3mV. With 800g, the output of your load cell should be 0.132mV. Is that correct? But when you probe it with you measured -0.01mV. Can you try to put a max load 20kg and see if the load cell can output a 3.3mV?
What I want you to try is without connecting the load cell, try to input a known value fixed differential voltage (let say put 2V at AIN+ and 1.5 at AIN-) and see the conversion result corresponds to 500mV. We just want here to isolate the issues and see if the ADC is converting at correct data.