I need to detect a shock in our PCB (Sometimes it is 10G, sometimes 14G or 16G and even higher). The shock is very short. I don't care about the acceleration value. I just want to detect that a shock has occured.
Thus, I need to detect when one sample is above a threshold (lets say 10G). Configuring the BMA400 to 16G range, what is the best interrupt configuration for my purpose? (I tryed using the two generic interrupts to the same PIN, configuring inactivity detection, 12G and 14G reference , and 2G threshold, one sample duration, which should fire the interrupt when one sample is between 12 and 16G but some shocks are missed)
- Does the generic interrupt fire only when Actual_acce > (threhold+reference) ? or does is compare in absolute level ? (reference - threshold)> Actual_acce > (threhold+reference). When testing, it seems to be above and below but the datasheet says: "the difference between actual acceleration and reference is calculated and compared against a threshold"
- Does the generic interrupt system work at 800Hz?
- When the BMA400 is configured at 16G range and current acceleration is higher. How does the generic interrupt system behave?
It’s right to use the generic interrupt to detect the shock.
To make sure all the shocks from normal movements can be detected, you need to
To prevent missing detection, you can try with lower reference, for example, ref= 0g, threshold = 2g (max_value@16g_range), and duration = 3~10 samples (depending on the ODR setting).
With this configuration, the detecting formula is:
actual_acc- 0g > threshold(2g) (@3~10samples).
So, the range of detection is (-16g, -2g) and (2g, +16g).
The generic interrupt system can operate at 800Hz, but it can significantly consume higher current, and perform more calculations per second.
When When the BMA400 is configured to the 16g range, the detection range is max. 16g, the higher acceleration will be saturated to +/-16g, and the calculation of generic interrupt will take +/-16g into consideration.