Bosch Sensortec Community

    Showing results for 
    Search instead for 
    Did you mean: 

    BNO055 accelerometer sensitivity

    BNO055 accelerometer sensitivity

    New Poster


    I read in the datasheet that BNO055 accelerometer is using 14 bit for data output. I also found in this forum that I need to refer to BMA280 datasheet to understand the sampling rate and the relationship with bandwith. I will use BNO055 in ACCGYRO mode so it is non fusion mode and connect it to raspberrypi as host.

    I have several questions regarding that:

    0. Does BMA280 used in BNO055?

    1. From BNO055 datasheet, the register for the accelerometer output is 2 bytes, so it is 16 bit. From the C language driver in github, it is also apparent that the reading of the register use 2 bytes (left shifting MSB with 8 bit and add the LSB). When I read BMA280, the LSB register consist of new_data flag which is the first bit and the second bit of LSB is not used. So, from what I understand, the LSB register that needed to be read is from bit 2-7. The MSB part is no problem. So, to read this, the method should be the LSB shifted to to right for 2 bit to remove the unused and new flag bit and then MSB shifted to the left for 6 bit. Then add MSB  and LSB. This reading method would produce different data output. Which one is correct?

    2. From BMA280, when I use 2G range, the sensitivity for 1LSB is 0.244 mg or in m/s2 it is 0.00244 m/s2. In the BNO055 datasheet, 1LSB is 0.01 m/s2. In the driver, the reading is also divided by 100. Which one is correct and which one should I use? I believe if I use non-fusion mode and set it to 2G, I would be able to get sensitivity 1LSB = 0.00244 m/s2. I would want this because I need to measure slight acceleration.

    3. For the bandwith, it is written that if I use 125Hz, the sampling rate is twice that which is 4ms. I use UART/serial protocol to connect to raspberry pi. Does it mean that in my C/C++ code, I would be able to read data every 4ms? For example I use loop that read data with 4ms sleep? Any suggestion on how to obtain this data in a consistent sampling rate? What happen if I read it without sleep (infinite loop)? Will it block until I get the new data or I will get old data?


    Thank you very much.

    6 REPLIES 6

    Thanks for your response.

    So I'm a little bit confuse. In BNO055 datasheet (section 1.2 Eletrical and Physical Caracteristics, measurement performance) I can read the following information:
    Output Signal Accelerometer (Accelerometer Only Mode)
    Sensivity: 1LSB/mg

    So how the change of g-range from +-2g to +-4g or +-16g affects the sensivity of the Accelerometer in BNO055 sensor and why are you telling me to convert LSB to g following BMA280 datasheet? The two bytes of raw data in Accelerometer Only Mode are always in 1LSB/mg like datasheet say or not? Or this change if I change g-range? The two bytes of raw data in IMU Mode (fusion mode) use a fix g-range of +-4g and the sensitivity is fix to 1LSB/mg? 

    If raw data (accelerometer only mode aka NO fusion mode) change their own sensitivity based on g-range configuration the bno055_convert_float_accel_xyz_msq() functions in your API can't be used, since the divison of raw data by 100 always occurs, right? Can you explain all of this concepts step by step?

    Since the sensor is still on the market, Bosch should think about improving the sensor documentation (datasheet, application notes and so on...). All the information is very confusing and the questions on this forum about the BNO055 prove it.

    Best regards

    Community Moderator
    Community Moderator

    BNO055 register 0x3B bit 0 has defination of accel unit,  you can select the output unit as mg or m/s2.   

    This means the accel data was already convert inside BNO055 .  and directly output as mg or m/s2.  if you select output unit as mg,  then the sensitivity is 1mg/LSB.  

    When select the fusion mode,  the accel range is fixed to 4G range,  you can't change the range by yourself.  the output accel value in register on page 0 was converted according to its output unit.  

    WHen select non-fusion mode, you can change the acc range in register 0x08 on page 1 to other range like 8G,  the maximum range of accel will be changed,  the internal sensitivity from internal MEMS sensor output  was also updated.  but the accel value stored into BNO055 acc data read out register will be still 1mg/LSB.  those value are processed by BNO FW, converted to the desired unit,  not directly map the output register from internal MEMS sensor.