understanding accelerometer's sensitivity

Hi everyone,

I'm trying to understand the sensitivity of an accelerometer, specifically, the LIS3DH. Based on the datasheet, it appears to a have 16-bit data output, but according to the functionality section (3.2 in the datasheet), the highest-resolution it can afford is 12-bits. Where are the "missing" 4-bits here?

Secondly, I'm trying to understand the smallest electrical measurement an Arduino can detect with the accelerometer. If, for example, I operate the accelerometer at +/- 16g in high-resolution mode, that means the smallest acceleration that could be measured is 32/212 = 0.0078125g. But since the Arduino Uno's ADC is limited to 10-bits, does that mean the measurement range is restricted to 10-bits only, i.e., 32/210 being the smallest possible measurement? So each "g" corresponds to (5/210)*32 = 0.15625 V of measurement? The sensitivity specified in the sheet is measured in mg/digit, so I'm not sure how to correlate my calculation here (I don't have the accelerometer to test it at the moment).

The I2C bus can transfer bytes of 8 bits. The registers of the LIS3DH are bytes of 8 bits. How would you put 12 bit in there ? That requires two bytes of course.

Before using it, you have to connect it to the Arduino board. Since basic Arduino boards are 5V and the sensor is 3.3V, there might be a problem on the I2C bus.
Which Arduino board do you use. A Arduino Uno ? Do you have a 3.3V Arduino board ?
Which LIDS3DH module do you have (can you give a link to where you bought it) ?

Next, you need is a library.
In the Library Manager of the Arduino IDE are four libraries.
Both Adafruit and Sparkfun can select the sensitivity of the sensors (see Adafruit example and Sparkfun example).

Then you can try the sensor and see how noisy it is and how very small vibrations cause a big readout.

The ADC of the Arduino Uno is 10-bit. That is 10-bit resolution for an analog input that is read with analogRead(). The LIS3DH is not connected to the analog input. The LIS3DH has its own internal circuit to make digital values.

The accelerometer is a digital device and its output can be read using the I2C or SPI interface. The Arduino ADC has nothing to do with it.

The "sensitivity value" is in milli-g per bit, depending on the full scale setting and resolution setting. A one-bit difference in the output value is the smallest change in acceleration that the sensor can detect.

Buy a sensor module and experiment with various settings, until their meaning becomes clear. When the sensor is held still, the output of the accelerometer along any exactly vertical axis is 1 g, which is convenient for calibration purposes.

You can correct errors in the offset and scale by following this calibration tutorial.

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.