/ISM330DHCX

Arduino library to support the ISM330DHCX 3D accelerometer and 3D gyroscope

Primary LanguageCBSD 3-Clause "New" or "Revised" LicenseBSD-3-Clause

ISM330DHCX

Arduino library to support the ISM330DHCX 3D accelerometer and 3D gyroscope

API

This sensor uses I2C or SPI to communicate. For I2C it is then required to create a TwoWire interface before accessing to the sensors:

TwoWire dev_i2c(I2C_SDA, I2C_SCL);  
dev_i2c.begin();

For SPI it is then required to create a SPI interface before accessing to the sensors:

SPIClass dev_spi(SPI_MOSI, SPI_MISO, SPI_SCK);  
dev_spi.begin();

An instance can be created and enabled when the I2C bus is used following the procedure below:

ISM330DHCXSensor AccGyr(&dev_i2c);
AccGyr.begin();
AccGyr.ACC_Enable();  
AccGyr.GYRO_Enable();

An instance can be created and enabled when the SPI bus is used following the procedure below:

ISM330DHCXSensor AccGyr(&dev_spi, CS_PIN);
AccGyr.begin();	
AccGyr.ACC_Enable();  
AccGyr.GYRO_Enable();

The access to the sensor value is done as explained below:

Read accelerometer and gyroscope.

int32_t accelerometer[3];
int32_t gyroscope[3];
AccGyr.ACC_GetAxes(accelerometer);  
AccGyr.GYRO_GetAxes(gyroscope);

Units

All the MEMS drivers in stm32duino repositories have the same units when returning physical (scaled) values:

- mg for accelerometer (thousandth of g, 1g is 9.81 m/s^2)
- mdps for gyroscope (thousandth of degree/s)
- mgauss for magnetometer (thousandth of gauss)

Readings can be obtained either as raw (unscaled) uint16_t values from the XXX_GetAxesRaw functions, or as physical (scaled) uint32_t values from the XXX_GetAxes functions, where XXX is either ACC or GYRO. The factor to use for scaling from a raw to a physical value is obtained from the XXX_GetSensitivity functions.

For example, to convert the raw acceleration reading to float m/s^2, the following can be done:

int16_t acc_raw[3];
float acc_ms2[3];
float acc_sensitivity;

AccGyr.ACC_GetAxesRaw(acc_raw);
AccGyr.ACC_GetSensitivity(&acc_sensitivity);

acc_ms2[0] = ((float)acc_raw[0] * acc_sensitivity) / 1000.0f * 9.81f;
acc_ms2[1] = ((float)acc_raw[1] * acc_sensitivity) / 1000.0f * 9.81f;
acc_ms2[2] = ((float)acc_raw[2] * acc_sensitivity) / 1000.0f * 9.81f;

Documentation

You can find the source files at
https://github.com/stm32duino/ISM330DHCX

The ISM330DHCX datasheet is available at
https://www.st.com/en/mems-and-sensors/ism330dhcx.html