ICM-20948 accelerometer unstable

Hi. I was previously using MPU-9250 9DOF IMU, but switched to the ICM-20948 version when it replaced the MPU version. I have done some testing of the accelerometer and found it to be less stable. For example, when fixed in space (clamped to a table), here across 80 readings I see the following total error (max. reading minus min. reading) comparison:

MPU-9250 total error:
x-axis: 0.0026g
y-axis: 0.0012g
z-axis: 0.0013g

ICM-20948 total error:
x-axis: 0.0073g
y-axis: 0.0043g
z-axis: 0.0051g

This is with the accelerometer full scale range set to +/-2g on both sensors. Looking at the data sheets, the sensitivities of the sensors are also the same.

Has anyone else seen this? Is there a solution? The stability of the ICM isn’t sufficient for my application. Does anyone know what the most accurate and stable accelerometer is?

Thanks in advance for any help!

Hey Geoff,

I’d try one of the LIS2DH12 personally, they can be a little temperamental sometimes with calibration, but from checking out the spec sheets of our stock by comparison to the accelerometers you’ve listed this should increase performance as a 3-Axis accelerometer. As for a 9DOF sensor, the FXOS8700 + FXAS21002 will likely be more precise and Adafruit claims this is one of the most precise they’ve tested so far. I’ve added links for both for you below to take a look at and compare against your current setup.

Core Electronics | Support

1 Like

I did some testing on an Adafruit MPU-6050 6-DoF Accel and Gyro Sensor (don’t have the ones you mentioned). Took 80 readings separated by 250 milliseconds each. I let this run for over an hour. It performed about the same as the ICM-20948, it was never as good as your MPU-9250.

Reading through the data sheets I think the Zero G Calibration is what we are talking about. If I understand it correctly ±50 mg means the three devices are performing well within their specification. I take the mg as being milli g.

To my understanding these sensors are used in wearable mobile devices where 0.05 of a gravity is all that is needed. If you need something with better zero g stability you may need to look at what would be used in laboratory equipment or something else etc.


EDIT: or like what Bryce has posted above (as I was writing this LOL)


I noticed that :smile: Thanks for the extra info on ideas for the project!

1 Like

Thanks Bryce and James for the insightful advice and product recommendations. I’ve just ordered those two items you suggested to give a try. Will let you know how if goes!

1 Like

Hi Geoff,

Depending on the response time you require from your sensors you can greatly increase the stability of their readings by filtering. Even a simple moving average will all you to get an order of magnitude better stability, at the expense of response time. At the expense of more computational power and increased complexity of your filter you can often even gain back a significant amount of responsiveness to disturbances while maintaining excellent zero stability.

Signal processing is the buzz word you’re after. The Wikipedia article is a great place to start: https://en.wikipedia.org/wiki/Signal_processing

Support | Core Electronics