05-07-2024 08:38 AM
Hello,
I am using the BMI160 and attempting to enable low power mode along with an interrupt on the INT1 pin. Currently, I have set the gyroscope to suspend mode and activated the interrupt. However, the power consumption remains between 250-270 μA, whereas I am aiming to reduce it below 100 μA.
Here are the steps I followed for initialization:
Despite these settings, the power consumption has not decreased as expected. Has anyone successfully configured the BMI160 to enable the any-motion interrupt with a power consumption of less than 100 μA? Any advice or guidance would be greatly appreciated.
05-08-2024 11:27 PM
Hi,
Thanks for your inquiry.
At point #5 in your initialization you may write value of 0x87 to register 0x40 for 50Hz ODR low power mode with no averaging. You also need to add some delay after you write a value to command register.
Please see the attached "How to generate single-tap interrupt using BMI160 accelerometer.pdf" as an example.
Thanks.
05-10-2024 08:10 AM
Hello,
Thank you for your response. The single and double tap interrupt example has been very helpful and is functioning perfectly. However, my application specifically requires the any-motion interrupt. Could you provide any guidance or instructions on how to configure this type of interrupt on the BMI160?
Thank you again for your assistance.
05-10-2024 07:32 PM
Hi,
Here is sample pseudo code for BMI160 accel any-motion interrupt.
void init_BMI160_ACC(void)
{
// basic configurations
Write value of 0xB6 to register 0x7E; // soft reset BMI160 to default settings. Both accelerometer and gyroscope are in suspend mode
Delay 55ms; // for BMI160 to stabilize
Write value of 0x12 to register 0x7E; // set the accelerometer to LPM mode
Delay 5ms; // for BMI160 accelerometer to stabilize
Write value of 0x86 to register 0x40; // set ODR to 25Hz with no average (14uA), it can be fine tuned.
// interrupt configuration
Write value of 0x0A to register 0x53; // set INT1 as output, active-high, push-pull
Write value of 0x09 to register 0x54; // temporarily latch the interrupt for 80ms
Write value of 0x04 to register 0x55; // route any-motion interrupt to INT1 pin
// any-motion configuration
Write 0x14 to register 0x60; // default value for 78.2mg threshold at +/-2g full scale range, it can be fine tuned
Write 0x00 to register 0x5F; // default value for duration of 1 meaning that as long as there is 1 single slope data which is [a(t+1) - a(t)] is beyond the threshold, any-motion interrupt will be triggered. It can be fine tuned.
// enable any-motion interrupt
Write 0x07 to register 0x50; // enable any-motion interrupt for all 3 axes
}
Thanks.