Some IMUs and sensors

Everybody needs an IMU. We need one too. But why buy something ready when you can create your own and learn? 🙂

We’ve been following some IMU projects while trying to figure out what kind of IMU we would like to create for our control board. The next table lists some IMUs that are more or less related to quadrotors.

IMUSparkfun 9 DoF - Sensor StickDroTek IMU 10 DoFVaresano FreeIMU 0.3.5_BMPVaresano FreeIMU v0.4ST iNEMO v1ST iNEMO v2DIYdrones ArduIMU+ V3DIYdrones ArduPilotMega 2.0Gumstix RoboveroVR IMU DigitPololu MinIMU-9
AccelerometerADXL345BMA180BMA-180MPU-6050LIS331DLH LSM303DLHMPU-6050MPU-6000LSM303DLHADXL335LSM303DLM
GyroscopeITG-3200ITG3200ITG-3200MPU-60502D LPR530AL + 2D LPY530AL2D LPR430AL + 1D LY330ALHMPU-6050MPU-6000L3G4200D1D ISZ500 + 2D IDG500L3G4200D
Pressure-BMP085BMP085MS5611-01BALPS001DL LPS001DL-MS5611-01BA03---
MCU----STM32 F103STM F103Atmega328Atmega2560LPC1769--
Interfacei2ci2ci2ci2cUSB / UART / xBeeUSB / UART / xBeei2cSPI / USB / UARTi2c / SPI /CAN??i2c
Price72€56,90 € tax incl.79€??266.50$ (202€)286$ (217€)78.90$ (60€)199.95$ (152€)99$ (75€)75€49.95$ (38.4€)


The next table lists the sensors used in the above mentioned IMUs. I didn’t list some of the sensors (namely LPR530AL, LPY530AL, LPS001DL, ISZ500, and IDG500) as they are not available anymore in small quantities or not recommended for new designs.

SensorTypeManufacturerManufacturer priceDigikey priceDatasheet
MPU-60x03D acc + 3D gyroInvensense15$ (11.4€)-Datasheet
Register map
LSM330DLC3D acc + 3D gyroSTMicroelectronics3.2$ (2.43€) in 1000 pcs9.41€Datasheet
LSM303DLM3D acc + 3D magnSTMicroelectronics3.47$ (2.6€) in 1000 pcs7.35€Datasheet
ADXL3453D accAnalog Devices-6.47€Datasheet
BMA1803D accBosch Sensortec-5.53€Flyer
LIS331DLH3D accSTMicroelectronics1.78$ (1.4€) in 1000 pcs4.27€Datasheet
ITG-32003D gyroInvensense10$ (7.6€)-Datasheet
Register map
L3G4200D3D gyroSTMicroelectronics5.08$ (3.6€) in 1000 pcs12.95€Datasheet
LPR430AL2D gyroSTMicroelectronics3.18$ (2.9€) in 1000 pcs-Datasheet
LY330ALH1D gyroSTMicroelectronics2.05$ (1.6€) in 1000 pcs-Datasheet
HMC5883L3D magnHoneywell-3.15€Datasheet from digikey
BMP085PressureBosch Sensortec-6.56€Datasheet
MS5611-01BA01PressureMeasurement Specialties?-Download from here
MS5611-01BA03PressureMeasurement Specialties?-Download from here


Some vendors have combo chips having two of the three needed sensors in one chip. It seems that the magnetometer is very sensitive and it’s good to have it as a separate chip while the accelerometer and the gyroscope can be in one chip.

MPU-60×0 is one of these combo chips but the firmware makes it a special one. It can do the sensor fusion calculations internally and provide the yaw, pitch and roll values for the host processor. This simplifies the software on the host processor and frees up some processor time. To provide good yaw values the MPU-60×0 includes an auxiliary i2c bus for the magnetometer. After the host processor has initialized the magnetometer the MPU-60×0 reads the values from the magnetometer providing nice data for the host.

OTOH, having the sensor fusion algorithm running on the MCU (maybe DSP optimized on STM32 F4?) gives the freedom to update the algorithm at any time, and changing a sensor is easier as it doesn’t mean changing the sensor fusion algorithm.

While the MPU-60×0 has both the datasheet and register map published, the register map seems to be missing the parts describing how to actually enable the 9 DoF instead of plain 6 DoF.

At the moment the hot sensor combo for an IMU seems to be MPU-60×0, HMC5883L and MS5611-01B. The downside, in addition to missing parts of the register map, is the availability. There aren’t many distributors selling the MPU-60×0 and even fewer selling the MS5611-01B. It’s risky to design a board with components that are difficult to acquire.

So, what do you think would be a good IMU? Maybe LSM330DLC + HMC5883L + BMP085?

This entry was posted in Hardware and tagged , . Bookmark the permalink.

Leave a Reply

Your email address will not be published. Required fields are marked *

Why ask?