Imprecision on accelerometer data read

Asked by RobertoA

I need an help to understand why obtain these data:

1544 -84 -24172 -37 25 -5 333 -65 351 2171 30479
1560 -48 -24264 -38 42 -3 329 -67 353 2171 30478
1616 -84 -24192 -44 29 10 330 -65 354 2172 30478
1560 -124 -24292 -42 30 3 331 -71 353 2172 30478
1644 -64 -24200 -36 40 12 330 -68 350 2172 30478
1360 12 -24072 -31 34 25 330 -66 352 2172 30478
1492 4 -24244 -32 41 -15 329 -65 355 2172 30478
1460 -96 -24292 -40 26 20 328 -65 350 2172 30479
1492 -84 -24144 -37 35 -14 331 -69 351 2171 30479
1556 -28 -24316 -40 34 -4 335 -65 350 2171 30478
1476 -76 -24288 -35 43 23 330 -67 351 2171 30478
1536 -84 -24304 -32 33 -4 330 -69 352 2171 30478
1456 -48 -24252 -40 33 6 330 -66 351 2171 30478
1544 -52 -24144 -48 47 -5 330 -67 352 2171 30479
1600 -92 -24288 -37 36 -11 331 -68 352 2171 30479
1492 -36 -24176 -44 45 19 331 -65 353 2171 30478
1480 -116 -24272 -36 27 7 330 -66 354 2172 30478
1584 -128 -24280 -51 32 11 328 -66 352 2172 30478
1552 -16 -24204 -38 31 13 331 -69 353 2171 30478
1644 -52 -24136 -49 28 -11 331 -68 349 2171 30479
1488 -80 -24284 -43 42 24 330 -68 350 2172 30479
1540 -28 -24300 -46 29 3 331 -70 350 2172 30478
1480 -8 -24340 -44 27 5 330 -67 351 2171 30478
1484 -72 -24308 -42 44 16 332 -65 351 2171 30479
1632 -76 -24356 -40 21 -6 330 -70 349 2171 30479
1452 -56 -24204 -41 43 -8 333 -69 349 2171 30478
1468 76 -24192 -45 36 15 332 -65 351 2172 30478
1512 24 -24204 -45 38 -17 331 -65 351 2172 30479
1512 -36 -24212 -36 30 4 331 -66 352 2171 30479

The first three number of each rows, are x,y,z accelerometer axis data
The board is a Freeimu 0.4.1 (4r3) + Arduino Nano
Why there is so high variability also with Freeimu on the desk ?

Question information

Language:
English Edit question
Status:
Solved
For:
FreeIMU Edit question
Assignee:
No assignee Edit question
Solved by:
RobertoA
Solved:
Last query:
Last reply:
Revision history for this message
Fabio Varesano (fabio-varesano) said :
#1

That looks like a perfectly fine sampling. The accelerometer, as well as any other MEMS sensor, is affected by noise.. here you are seeing a noise of about 100 units.. since 16384 makes for 1g, you are seeing a noise in the order of 0.006g which is acceptable for many applications.

Revision history for this message
RobertoA (amorosik) said :
#2

Difference between values are about 300 point, not 100 (from 1644 to 1360 in the first column)
Not very low
300 on 30k point (for 180 degree of rotation) is about 1% of variation, like to say "2 degree on 180"
I would like to work in the range of 0.1-0.2 degree on 180 degree
Did you think there isn't any way to stabilize output data or the sensor is 'intrinsically' noisy?

Revision history for this message
Fabio Varesano (fabio-varesano) said :
#3

Sensor is of course noisy. What you see is the raw data coming from the sensor.
But there are ways around that.. you can document yourself on the DLPF features available in the MPU6050.. you would need to add a call to something like accgyro.setDLPFMode(5) to the sensor initialization routine (function FreeIMU::init(int accgyro_addr, bool fastmode))...

Then you can add some post processing techniques on the sensor output.. you may wanna look into moving averages and oversampling techniques.. this document http://www.analog.com/static/imported-files/application_notes/AN-1063.pdf is a good example of that (but for another sensor).

Moreover, note that accelerometer data will also be "noisy" due to external movements/acceleration/vibrations.. so, relying on accelerometer only for orientation sensing is not a very good idea.. fusing the accelerometer with gyro and magnetometer data will give you much better results...

I have to say tough that your goal of 0.1 degrees precision is a bit too optimistic..

Revision history for this message
RobertoA (amorosik) said :
#4

Thank for your help
Now i try