I am trying to improve the accuracy of the accelerometer and gyro readings from BMI160 by using the FOC.
For the accelerometer, I noticed that the offsets change depending on the orientation: I tried g on x axis, g on y axis and then g on z axis.
Is there an explanation to this?
Solved! Go to Solution.
For accel, the solder strain make sensor offset different. So you need make offset calibraiton. Please refer to this application note:BMA400-accelerometer-design-guide .
Calibrating the sensor.
Mayny thanks for your answer.
I read in the link you provided that there are 2 types of offsets: static and dynamic. Does it mean the FOC isn't sufficient as it only corrects the static offset? Is there any documentation about the dynamic offset?
In my application, I am integrating the accelerometer outputs to determine the position. I am having drift in the position by simply integrating the data even with using FOC. This means there is still some error I need to composate in dynamic.
Also, for the FOC, I'd like to store the offsets in NVM to be used all the time. I am calling the API bmi160_update_nvm() just after runningbmi160_start_foc(). Is that correct?
Thank you for your help.
FOC only used to calibrate static offset. The BMI160_driver API provide how to do FOC calibration, but we don't recommend customer write value to NVM, because bmi160's NVM have limited re-write times. You could save the static offset to local flash, and compensate this offset by yourself.
The dymamic offset refer to sensitivity calibration，we don't have special doc. Maybe you could review this doc Six-point Calibration，hope it's useful for you.
Many thanks for your reply.
My plan is to learn the static offset afeter assembly of the PCB and store it in the bmi160 NVM. This means I am assuming the static offset won't significantly change throughout the sensor life. However, from your answer, I conclude that the static offset variability is signaficant and I should be learning it more than once. Is that correct?