ICM-206xx series gyro ADC overflow

By etracer , 15 December 2017

I participate in the open source Betaflight flight control software project ( https://github.com/betaflight/betaflight ) and we have identified what appears to be an overflow/inversion issue with the gyros in a number of the ICM-206xx series of products. Products such as the ICM-20608G, ICM-20602 and ICM-20689 are commonly used in current generation drone flight controller boards and we've found that if the angular rate of the gyro (particularly the Z axis) exceeds the design parameters of 2000 deg/sec then the output will generate a sequence of random noise followed by a complete inversion. After additional research we've found that the overflow onset occurs at 4000dps and then an additional event occurs at 8000dps. This will persist until the angular rate is decreased below 4000 deg/sec. We're not completely certain, but it appears to be a 16 bit 2's-complement overflow as the raw ADC output will jump from 32767 to -32768 in one sample.

Exceeding the 2000 deg/sec design limit is not done intentionally, but rather it is commonly caused by external forces usually the result of a crash or other impact by the drone at high speed. Because the gyro output inverts, the flight controller erroneously begins to reinforce the rotation with positive feedback rather than correcting the rotation. This results in a runaway unrecoverable situation.

I built a spin rig to debug and analyze the problem. In my case I have a board with an ICM-20608G and can repeatedly cause the problem on demand. We have other documented cases of it occurring with the ICM-20689 and ICM-20602 products. However we no reports and cannot replicate the problem with older products such as the MPU6000 or MPU6500 (I have tested both on my spin rig).

Below is a screenshot showing the raw ADC output from the Z axis on a ICM-20608G during the onset of the event. Any thoughts on this problem and haw we can mitigate. We're already developing workarounds to deal with the invalid gyro data but these are not ideal as our only option is to throw out the gyro data in cases where we have (hopefully) detected the overflow event.

Image removed.

phpbb Topic ID
36662