02-14-2021 12:11 AM - edited 02-14-2021 12:13 AM
Hello,
I am using an Arduino 9 Axis Motion Shield with the BNO055 sensor.
I modified the BNO055.c file such that I optain the raw integer values for acceleration outputs.
Afterwards I perform tests (violent shaking) and observe that when set to -/+1G the integer values saturate at log2(2*max(accRecord(:))) = 11.93, where accRecord is the acceleration record array.
At -/+2G, resolution is 12.93 bits
At -/+4G, resolution is 13.93 bits
The accelerometer resolution is listed as 14 bits in the datasheet without a condition of range, therefore I expect to get 14 bits even out of the lowest range (-/+ 1G).
Am I missing something or was this overlooked in the datasheet?
void NAxisMotion::updateAccel(void)
{
BNO055_RETURN_FUNCTION_TYPE comRes = BNO055_ZERO_U8X; //Holds the communication results
comRes = bno055_convert_float_accel_xyz_msq(&accelData); //Read the data from the sensor
}
BNO055_RETURN_FUNCTION_TYPE bno055_convert_float_accel_xyz_msq(
struct bno055_accel_float_t *accel_xyz)
{
....
com_rslt += bno055_read_accel_xyz(®_accel_xyz);
accel_xyz->x = reg_accel_xyz.x;
accel_xyz->y = reg_accel_xyz.y;
accel_xyz->z = reg_accel_xyz.z;
/*
// Convert the accel raw xyz to meterpersecseq
accel_xyz->x =
(float)(reg_accel_xyz.x/ACCEL_DIV_MSQ);
accel_xyz->y =
(float)(reg_accel_xyz.y/ACCEL_DIV_MSQ);
accel_xyz->z =
(float)(reg_accel_xyz.z/ACCEL_DIV_MSQ);
*/
02-19-2021 05:15 AM
Hi Sir:
Sorry to say that maybe I don't get your point.
But I can share with you what I know about the resolution of BNO055 ACCEL.
Based on the datasheet specification of BNO055, we can get the resolution is 1lsb/mg, you alos use API code to verify it.
So 1G/2G/4G/8G/16G means 1024/2048/4096/8192/16384 bit.
Actully 14 bits resolution is from the physical sensor of Accel.
In accel only mode, output data is raw data without compensation and in other fusion mode, you will get the compensated values, it means offset will be compensated.