I am using BMA253.
I want to output an interrupt using a high-G interrupt.
The board is usually vertical.
High_en_z, high_en_x interrupts are activated.
A high-G interrupt is output by tilting the board from the above state.
The angle I want to detect is 45 degrees and the acceleration is 0.707G.
Since it is set to the 4G range, the threshold value (address 0x26) is Expect it to work correctly in 0x2D.
However, the interrupt occurs at a smaller threshold value (0x23).
Does anyone know the cause and countermeasures?
Thanks for your inquiry.
The issue comes from offset compensation and cross-axis sensitivity. If BMA253 Y axis is pointing to the sky or ground, then Y axis should be +1g or -1g respectively. You can run fast offset compensation and then store the offsets back to NVM. Then when you tilt BMA253 X axis or Z axis more than 45 degrees or +/-0.707g, the high-g interrupt should trigger. This process is so called inline calibration. Please see the attached PDF file for more information where you should set Y=+1g or -1g and X=Z=0g for fast offset compensation.
In addition, when you tilt your device's x or z axis, BMA253 X or Z axis may not be aligned with your device's x and z axis. This is so called cross-axis sensitivity or misalignment. The best way is to do 6-position BMA253 calibration and store total 12 parameters (3x3 sensitivity and cross-axis sensitivity matrix and 3 offsets) into your MCU's flash memory. Then you always need to read BMA253 raw data and apply the 12 calibration parameters to get final x/y/z values. Then you can calculate the tilt angle all the time to see if your device is really tilted more than 45 degrees on x and z axis.
The last reason is due to the BMA253 noise. you will not get the exact 45 degrees high-g interrupt. Instead, you will see a lot of interrupts at 45 degree tilt angle on and off. To avoid this situation, you should enable high-g hysteresis so that you won't get too many interrupts.