We are currently integrating a BMI085 into our measurement environment and we want to have the Gyro and Accelerometer synchronized or even better having the sensor(s) triggered externally. Internet research led us to your Github project https://github.com/BoschSensortec/BMI08x-Sensor-API/ .
1) Is the latency constant between actual measurement time and data ready rising edge?
2) Can I trigger both sensors using an external signal? (not just the accelerometer)
The following questions came up after using the example API with synchronization of GYRO and ACCEL:
3) Using the example code (INT1 as ACCEL trigger input, INT2 disabled, INT3, INT4 as GYRO data ready output) seems to work. However, we are unsure if the accelerometer is really synchronized to GYRO or not. Especially when we move the configuration code to our framework, we are unsure if it works. Hence, we would like to enable the data ready output of the accelerometer on INT2. Unfortunately, this did not work (enabling seemed to be accepted by the API, but we cannot measure pulses on that pin). Is it possible to enable trigger input and data ready output on different ports? If so, how?
4) Are there any constraints on synchronization pins? Can we switch to INT2 as ACCEL trigger input (and INT1 as ACCEL data ready output if possible)?
5) Does the config dump cover functionality for synchronization (function bmi085_apply_config_file)? Does this improve measurements?
6) Is there any restriction on the measurement rate when synchronization is enabled? The flyer as well as some texts only mention 2kHz measurement rate for synchronization but we only need to measure at 200Hz.
I am looking forward for your answer.
Solved! Go to Solution.
to your questions:
1. The latency between actual measurement time and data ready interrupt is indeed constant, as it is mainly caused on the digital filter in the signal path.
2. Unfortunately not.
3. You can check whether sync feature works when you read both the sync values from the accerometer's internal registers and the unsynched values, which are still available in the normal registers 0x12-0x17. If you move the sensor a lot, you should see that in the normal registers sometimes the value is repeated, while value repetition should be by far less in the data obtained from the other registers (these values are a little bit ditributed, see details in bmi085_get_synchronized_data function in bmi085.c). This is not a super-proof that the sync is working, but should already give you a high level of confidence.
The unsynched data is avaialble every 625us from the accelerometer part (when ODR is chosen to 1600Hz), while the values in the synched registers are updated every 500us.
4. There are constraints, but swapping INT1 and INT2 is not a problem. Also, swapping INT3 and INT4 is possible, but not for example INT3 and INT1. Swapping is only possible pairwise.
5. The config file contains the configuration for the sync feauture, the feature will not work without loading that config into the sensor. But the configuration does not effect the quality of the sensor signals, the sensor works fine without the configuration.
6. The reason is that the first version of the api and configuration only contained the case of 2kHz data sync, later the other sync rates wer added. Sync is supported down to 400Hz, but not 200Hz. You may want to check reading sensor output not based on the data ready interrupt, but timer based, i.e. every 5ms, to achieve your 200Hz data rate.
Hope this helps.
Thank you very much for your quick and detailed answer!
1) This is good. Is the latency specified?
3) Therefore, activating the ACCEL data ready output is not possible when the sync feature is activated. Is this correct?
in case of 2kHz ODR of gyro signal, the latency of the synchronized data (accel+gyro) is typically 1.5ms. When you choose lower ODR rates, this effects also the filter settings, which means the latency increases due to the increasing filter delay time.
3. That is correct.
Thank you very much! This helps a lot.