Bosch Sensortec Community

    Showing results for 
    Search instead for 
    Did you mean: 

    BNO055 no-motion interrupt not cleared

    BNO055 no-motion interrupt not cleared


    Hi all,

    I configured the BNO055 to trigger a no-motion interrupt according to some threshold and duration value.
    The interrupt is triggered after duration amount of time being at rest position, which is what I expect.

    However, when moving the sensor arround with accelerations clearly above the threshold (threshold is 1 LSB), the interrupt pin stays high instead of going low. From the diagram in the data sheet page 43 I read that the interrupt is cleared once the slope is above the threshold. Is this assumption correct?

    When I clear the interrupt by writing to the SYS_TRIGGER (0x3F) register bit RST_INT (6),  the interrupt is cleared and stays low while the sensor is moving. When the sensor is at rest again, the interrupt is triggered after duration amount of time, but again is not cleared when moving again.

    What is the correct behaviour of this interrupt?

    I use the following API functions to configure the no-motion interrupt:

        bno055_ret = bno055_set_accel_any_motion_no_motion_axis_enable(BNO055_ACCEL_ANY_MOTION_NO_MOTION_X_AXIS, BNO055_BIT_ENABLE);
        bno055_ret += bno055_set_accel_any_motion_no_motion_axis_enable(BNO055_ACCEL_ANY_MOTION_NO_MOTION_Y_AXIS, BNO055_BIT_ENABLE);
        bno055_ret += bno055_set_accel_any_motion_no_motion_axis_enable(BNO055_ACCEL_ANY_MOTION_NO_MOTION_Z_AXIS, BNO055_BIT_ENABLE);
        bno055_ret += bno055_set_accel_slow_no_motion_thres(1);
        bno055_ret += bno055_set_accel_slow_no_motion_durn(0);
        bno055_ret += bno055_set_accel_slow_no_motion_enable(1);
        bno055_ret += bno055_set_intr_accel_no_motion(BNO055_BIT_ENABLE);
        bno055_ret += bno055_set_intr_mask_accel_no_motion(BNO055_BIT_ENABLE);


    Thanks for your help.

    8 REPLIES 8

    Community Moderator
    Community Moderator

    Let me explain for the following level:

    1. if INT pin is not latched,  then the interrupt signal also with the INT status bit will be cleared when the interrupt conditoin is not fulfilled.

    2. If the INT pin is latched,  even the interrupt condition is not fulfilled,  the INT pin level and status bit will kept as it is. 

    3. when host reset the INT pin, both INT pin level and status will be cleared.  if the INT condition is still fulfilled,  then after INT duration time,  the INT pin level and status will be set.

    4.  If the device is really in constent speed,  there is no way to distinguish with real static situation because both accel and gyro output is 0. 

    5.  the Latch mode of BNO055 is not able to disabled.  it is already fixed in its FW.  

    Many thanks for your explanation!

    I was able to reproduce the behaviour you described with the accel any-motion interrupt.

    But for your point 3. I encountered an issue with the accel no-motion interrupt.
    In my case the sensor is standing always at rest position. After reseting the INT pin, the INT pin level and status did not raise again after INT duration time although INT condition is still fullfiled. The INT pin level and status only get high after moving the sensor and then put in rest/motionless position again.

    Is this a know issue with the no-motion interrupt? I'm running on software version 3.11

    I have a follow up question:

    How fast can an interrupt be retriggered after the host  resets the INT pin? I know this depends on multiple factors.

    I have the following settings for the any-motino interrupt example:
    Any-motion threshold = 1 (LSB), any-motion duration = 0. When the sensor is moved, an interrupt is triggered. I read the INT_STA register, and then reset the INT pin. Then the INT pin gets raised and cleared again and so on while the sensor is moving.

    In the data sheet it says:

    The time difference between the successive acceleration signals depends on the selected bandwidth and equates to 1/(2*bandwidth) (t=1/(2*bw)).

    I'm running in NDOF mode, hence the unchangable bandwith is BW=62.5Hz. According to the statement above the time difference betweent 2 slop signal points is then 8ms. With an any-motion threshold of 0, there 1 or at most 2 slope signal points and the maximal time to trigger a interrupt would be 2*8ms=16ms (theoretically).

    However, when I measure the time how fast successive interrupts are generated, then I see that they are spaced approx. 250ms appart from each other?
    Why does it take that much time for an interrupt to be retriggered when the INT condition is still met (i.e. sensor still moving)?

    Community Moderator
    Community Moderator

    With the BNO055 FW version 3.11,  we can see the no motion interrupt generated again after reset interrupt status.

    The Accel INT is mapped from internal accel ASIC to the integrated MCU chip. 

    There is no SW control for the INT pins. 

    So the behavior should be follow the description of datasheet.   But the result shows variable value here.    So it might be affected by MCU INT control engine.