Bosch Sensortec Community

    cancel
    Showing results for 
    Search instead for 
    Did you mean: 

    BNO055 Accelerometer resolution bits vary with range

    BNO055 Accelerometer resolution bits vary with range

    ykamer
    Occasional Visitor

    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(&reg_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);
    */

     

     

    1 REPLY 1

    Jet
    Occasional Contributor

    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.

         Jet_0-1613705409973.png

        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.

       

     

    Icon--AD-black-48x48Icon--address-consumer-data-black-48x48Icon--appointment-black-48x48Icon--back-left-black-48x48Icon--calendar-black-48x48Icon--center-alignedIcon--Checkbox-checkIcon--clock-black-48x48Icon--close-black-48x48Icon--compare-black-48x48Icon--confirmation-black-48x48Icon--dealer-details-black-48x48Icon--delete-black-48x48Icon--delivery-black-48x48Icon--down-black-48x48Icon--download-black-48x48Ic-OverlayAlertIcon--externallink-black-48x48Icon-Filledforward-right_adjustedIcon--grid-view-black-48x48IC_gd_Check-Circle170821_Icons_Community170823_Bosch_Icons170823_Bosch_Icons170821_Icons_CommunityIC-logout170821_Icons_Community170825_Bosch_Icons170821_Icons_CommunityIC-shopping-cart2170821_Icons_CommunityIC-upIC_UserIcon--imageIcon--info-i-black-48x48Icon--left-alignedIcon--Less-minimize-black-48x48Icon-FilledIcon--List-Check-grennIcon--List-Check-blackIcon--List-Cross-blackIcon--list-view-mobile-black-48x48Icon--list-view-black-48x48Icon--More-Maximize-black-48x48Icon--my-product-black-48x48Icon--newsletter-black-48x48Icon--payment-black-48x48Icon--print-black-48x48Icon--promotion-black-48x48Icon--registration-black-48x48Icon--Reset-black-48x48Icon--right-alignedshare-circle1Icon--share-black-48x48Icon--shopping-bag-black-48x48Icon-shopping-cartIcon--start-play-black-48x48Icon--store-locator-black-48x48Ic-OverlayAlertIcon--summary-black-48x48tumblrIcon-FilledvineIc-OverlayAlertwhishlist