Close

MAX32660 Motion Coprocessor - MMC5983MA Low Noise Magnetometer Results

A project log for MAX32660 Motion Co-Processor

Super-small, ultra-low-power 96 MHz Cortex M4F co-processor manages sensors and processes data allowing the MCU host attend to other things.

greg-tomaschGreg Tomasch 08/11/2020 at 23:514 Comments

Update

We have been moving forward with commercial sales of the MAX32660 motion coprocessor on Tindie. We are working closely with our initial users to address the remaining "kinks" in the product that inevitably come to light when real people start using something to solve real problems. Many Thanks to our early adopters!

After resolving some initial issues, it is clear that the basic proposition of the motion coprocessor is holding up:

Having said this, the question always remains: Can we reasonably do even better? One thing we wondered about was the magnetometer. Even with appropriate low-pass filtering it seems a bit noisy... So we suspected that heading accuracy and stability could improve further with a better magnetometer. Moreover, our current choice doesn't support a wide-enough operating temperature range for automotive applications. This second point is not a serious limitation at the moment. However, as part of a previous project, the notion of a motion coprocessor for automotive use was discussed. We determined that all of the necessary components were available in AEC-Q100-qualified versions except for a compatible magnetometer. 

Kris periodically searches commercially available MEMS magnetometers for potential candidates. He recently identified the MMC5983MA from MEMSIC as a possible option. It boasts 18-bit resolution and AEC-Q100 qualification with a 400kHz-capable I2C interface. The current MAX32660 motion coprocessor product uses the LIS2MDL magnetometer offered by ST Micro. This particular triaxial magnetoresistive magnetometer responds over a full scale range of +/-50G at 16-bit resolution. The operating temperature range is -45 to +80C. The typical RMS noise level we measure for this magnetometer is ~0.35uT on each axis. The resulting RMS heading noise is ~0.1deg under static heading conditions.  The MMC5983MA is also a triaxial magnetoresistive sensor, has a full scale range of +/-8G at 18-bit resolution and can operate between -40 and 105C. The nominal RMS noise is estimated to be 0.04uT for each channel. 

MMC5983MA Testing and Results

From the perspective of specifications, the MMC5983MA does look attractive. It does cover a much smaller full scale range but +/-8G should be adequate as the geomagnetic field is ~0.5G. This means that the MMC5983MA can tolerate a hard iron offset up to ~7G without saturating, which should be adequate for the vast majority of applications. We did find the advertised reduction RMS noise and 18-bit resolution to be compelling, despite the nearly 2x increase in price compared to the LIS2MDL. 

In order to satisfy our curiosity, Kris designed a prototype version of the MAX32660 motion coprocessor using the LSM6DSM accel/gyro, MMC5983MA magnetometer and LPS22HB baro:

And I wrote a version of the firmware to support the MMC5983MA. This chip has a few quirks regarding the data ready interrupt but it does deliver high quality data at 100Hz without disrupting data collection from the other sensors on the MAX32660's  master I2C bus.

The initial data sets from this variant of the MAX32660 motion coprocessor verifies the noise improvement promised in the MMC5983MA datasheet. The magnetometer's RMS noise level ranged from 0.02 to 0.03uT across the three axes, just about 10x better than the results observed for the LIS2MDL. This improvement in magnetometer noise resulted in an RMS heading noise level of 0.015deg under static heading conditions. This is about a 7x improvement over the current LIS2MDL version.

Finally, we wanted to see if the MMC5983MA's reduced noise and improved precision would translate into better RMS heading error. Kris built two MMC5983MA-based prototype units and I subjected them to the same bench calibrations and precision goniometer characterization described in earlier project log entries. The plot below shows heading accuracy as a function of true heading as shown in a previous project log entry:

The same LIS2MDL-based results are shown as in the earlier project log entry and the additional data from the two MMC5983MA-based prototype units are plotted simultaneously and highlighted for clarity. The results from the MMC5983MA-based units are excellent (0.11 and 0.18deg RMS heading accuracy)  and show significantly less sample-to-sample noise around the compass dial.

Discussion

The higher performance of the MMC5983MA magnetometer does indeed translate into tangible improvement of the heading estimate, as we suspected. The noise level of the magnetic field component measurements is actually slightly better than advertised (~0.025uT vs. 0.04uT specified in the datasheet). But not only does this translate into a lower noise level of the heading estimate, we also see improved RMS heading accuracy. It is difficult to determine the magnitude of this improvement from a sample size of two but I would make an initial guess of ~50%. It also appears that the accuracy of the MMC5983MA magnetometer is sufficiently better as to justify the 18-bit resolution that the sensor supports. This all highlights a fundamental truth:  Sensor fusion algorithms can give you the best estimate of which the sensors are capable... but no better. If you need improved results, that starts with the quality and stability of the sensors and the accuracy of their calibration. There is no amount of math that can fix poor quality data...

At this point in time we do not have clear plans to bring out a MMC5983MA-based MAX32660 motion coprocessor as a separate product. It is not clear what the level of interest is to move from ~0.35deg RMS heading error down to ~0.2deg... Especially in light of the ~2x higher component cost of the MMC5983MA. However, if you see an application where the higher performance or AEC-Q100 qualification would be justified, please don't hesitate to leave a comment...

Discussions

Greg Tomasch wrote 12/20/2020 at 06:56 point

I also just finished a test  code repository for the new MMC-based USFSMAX. it can be found here: https://github.com/gregtomasch/USFSMAX_MMC_Module

  Are you sure? yes | no

Greg Tomasch wrote 12/20/2020 at 06:50 point

We now have an MMC5983-based part for sale: https://www.tindie.com/products/onehorse/usfsmax-module-and-carrier/ All of the USFSMAX products are I2C-based. Getting the MAX32660 to function as an SPI slave device would be quite a challenge... Thanks, Greg

  Are you sure? yes | no

david13afg wrote 12/03/2020 at 17:01 point

Hello!

Have you had the opportunity to work with this MMC5983MA sensor with SPI its interface? It has been impossible to me to manipulate its registers using SPI

  Are you sure? yes | no

d1ken wrote 11/25/2020 at 18:33 point

Hello.

Do you plan to sell MMC5983MA-based MAX32660 motion coprocessor?

I want it.

  Are you sure? yes | no