Gyro Range for ISM330dhcx

I bought this one and am running the simplest example sketch that shipped with it in Ardunio 2.0

https://www.sparkfun.com/products/20176

I set the full scale range to 500 dps but I am seeing values 100k times that at 500k plus.

Then I cannot observe any changes when the filter is set to on or off or at any available setting from “MEDIUM” to “XTREME”. I think the setGyroFilterLP1 takes a boolean parameter, but there’s no difference if this is blank or 0 or 1.

The gyro is sensitive to vibration, or at least it responds very rapidly to shaking, where I was expecting the filter to dull/slow the reacton to vibration.

The results I am seeing are so far out of whack that I don’t know where to start troubleshooting, no settings seem to make any difference and the data are far far out of range.

  // Set the output data rate and precision of the gyroscope
  myISM.setGyroDataRate(ISM_GY_ODR_208Hz);
  myISM.setGyroFullScale(ISM_500dps); 

  // Turn on the accelerometer's filter and apply settings. 
  myISM.setAccelFilterLP2();
  myISM.setAccelSlopeFilter(ISM_LP_ODR_DIV_100);

  // Turn on the gyroscope's filter and apply settings. 
  myISM.setGyroFilterLP1(1);
  //myISM.setGyroLP1Bandwidth(ISM_MEDIUM);
  //myISM.setGyroLP1Bandwidth(ISM_VERY_STRONG);
  myISM.setGyroLP1Bandwidth(ISM_XTREME);

Anyone have tips for what’s going on here? Is this expected and “oh yeah you’re supposed to divide that by 100k”? or is there something wrong with my config or perhaps a bug in the driver somewhere?

Thanks!

The Sparkfun “industrial” IMU seems to have some nice built-in functions for filtering, sensor fusion, a “sensor hub”, other stuff for “machine learning”, but it’s difficult to see how to use any of that stuff. See my previous post about even the filters not seeming to do anything.

I’m so grateful for having examples built into the libraries for the various Sparkfun products! I learn a lot. But, the examples for this IMU don’t really do anything except print raw values to serial. I was hoping to see examples for how to use the built in sensor fusion capabilities so I didn’t need to hack up slow math or borrow fast but inaccurate math from FASTLED for Kalman/Madgwick/Complementary in my own code.

Is anyone else using this IMU and have examples of how you are using any of the built-in functions?

Thanks!

After some more reading, I located some github code from stm32duino that suggests the driver software, which is the same as used by the example I think for the ISM 330dhcx will return gyro readings in mdps, i.e thousandths of a degree per second. This is not in the datasheet as far as I can tell, although a few things like error rates, sensitivities are reported in those units.

I guess it makes sense that if you’re sampling at high frequencies and integrating the rate over time that having a higher number will allow to not lose resolution, but it sure would have been nice if that was reported somewhere since the “full range” settings are in dps.

Also I guess the device has “headroom” (?) since the full scale at 500dps is outputting 600k+ mdps, I guess that’s good for sanity sake, unless I’m misunderstanding what I’m seeing further. I was expecting to see a flatline above the full scale range.