I am working with BNO055 on a wearable device wherein I frequently make use of suspend and normal power modes of BNO055.
The datasheet documents that the sensor requires calibration on every POR which is fine with me as POR is a rare event for me.
But when I read the calibration status register (page 0 0x35), to read the calibration status, the system calibration bits behave strangely.
Initially after POR all bits show un calibrated status. The gyroscope and magnetometer get calibrated pretty fast ( I am using NDOF mode) but the accelerometer takes a long time to calibrate. I am following the procedure documented in this video: https://www.youtube.com/watch?v=Bw0WuAyGsnY&t=11s
Eventually the accelerometer gets calibrated (sometimes it takes time in minutes) but system calibration fluctuates between 3 (calibrated) and other values.
This happens more frequently when I change power modes (Normal --> Suspend --> Normal).
If anyone could provide more information regarding this it would be of great help.
Thanks for your reply and sorry for my late response.
I can neglect the system calibration bits for now as per your recommendation. (same I recommended to our client earlier 🙂 )
Further testing the device I see other issues with the calibration bits. I went through the datasheet and it is recommended to read the calibration values and store it in an persistant memory. For fast calibration these values should be written to device on power on. Anyhow the device is running its calibration routine and gets calibrated even if we do not write the calibration registers. As of now we do not store calibration values in persistent memory.
What I could understand was writing calibration values to the device for fast calibrarion is only required when the device boots up from OFF --> Normal mode. Usually we do not power off the motion sensor and it mostly remains in suspend mode. But what we notice is, several times when the sensor wakes up from Suspend --> Normal mode, the calibration status bits indicate loss of callibration. Anyhow if we follow the calibration procedure again the calibration bits become 3.
Callibrating again and again is not possible in my case. So can you please recommend some workaround to avoid frequent recallibration?
I think it would be important here to specify exactly which bit you are monitoring, as each calibrator is different. The purpose of the calibration save & reload feature is to enable either a faster calibrated state, or enable calibration for devices that we would never make the correct movement in-use (e.g. anything mounted on a vehicle isn't expected to rollover during normal use).
So can you please recommend some workaround to avoid frequent recalibration?
Unfortunately, BNO055 calibrators are always-on by design, so the calibration will always run in the background, and if it finds better calibration values, it will keep updating the registers.
what we notice is, several times when the sensor wakes up from Suspend --> Normal mode, the calibration status bits indicate loss of calibration.
Could be several causes for this. For magnetometer, if the environment changed while powered off (e.g. moving from outdoor to indoor, or moving several kilometers, staying off for an extended period of time) then the calibration is no longer valid. The magnetic field really isn't a constant at all. You can take a look at a free magnetic field calculator: https://www.ngdc.noaa.gov/geomag/calculators/magcalc.shtml#igrfwmm
This will give you the value of the expected magnetic field outdoor, without the shielding effect from metal around the device or building structure.
For gyroscope calibration, very small changes in offset due to temperature or aging will be compensated out by the built-in calibrator, this will be reflected by the status indicator.
I understand that if location changes the calibration can be affected but the magnetometer calibration looses even if I am at the same location.
How much time do you mean by "extended period of time"? In our case we see that sometimes the device looses calibration even if it is kept in suspend mode for around 5 - 10 mins.
By the way I would like to mention that a FCC certified BLE module and the IMU sensor share the board. By any chance is it possible that it may cause any issues?
I am working on a few more tests like turning radio off and verifying sensor performance and saving callibration values to permenant memory. Will update you soon with the results.