BMX055 gyro offset compensation

We are using the BMX055 in a new product and I am seeing an offset on the gyro Z axis that I can't get nulled out.  I am only looking for rotation on the Z axis, so I don't know if the problem is the same on the other axes.  The SPI communications is working correctly as I can set registers and read back the setting.  I have set the following parameters on the device:
- FIFO is in BYPASS mode reading X,Y,Z.  I don't read the interrupt bytes.
- RANGE is +-1000 deg/sec (001)
- BANDWIDTH is 47Hz (0011)
- SPI reads are in burst mode when reading the rate.

I am polling the device every 10ms.  I presume by the BANDWIDTH setting, the device outputs about every 21ms.  Since my polling rate is faster than the update rate, I read presumably correct frames followed by one or more 0x8000 frames, which I assume are "no data" values.  I discard these.

For my test, I set an initial counter to zero, and then accumulate the Z axis data for a few seconds.  The accumulated data creeps up over time.  I would expect a compensated value to average out to zero over time.

I tried to enable slow compensation by setting register 0x31 to 0x07 (min threashold and duration) to 0xEF (max), but this has no effect.  In all cases, when I read the offset registers 0x36 to 0x39, their values are always zero.  I have verified that the raw Z axis values are mostly positive, with a few negative values.

Am I doing this correctly or am I missing a step or two?

 

2 replies