InvenSense IMU-3000 digital triaxial gyroscope.
This module implements a driver for the InvenSense IMU-3000 digital 3-axis MEMS gyroscope and digital motion processor (IMU). The IMU-3000 provides digital-output x-, y-, and z-axis angular rate sensor readings with a sensitivity of 16 LSBs per deg/sec and programmable full-scale ranges of +/-250, +/-500, +/-1000, and +/-2000 deg/sec. The device includes a dedicated I2C master accelerometer sensor bus facilitating direct data acquisition from an off-chip third party accelerometer without intervention from an external processor. A configurable 512 Byte FIFO allows system microcontrollers to burst read the sensor data and then sleep while the IMU collects more data.
Copyright (c) 2014-2018 Microchip Technology Inc. and its subsidiaries.
#include <asf.h>
Macros | |
#define | IMU3000_TWI_ADDR (0x68) |
#define | TEMP_COUNTS_PER_DEG_C (280) /* counts per degree C */ |
#define | TEMP_OFFSET (-13200) /* temperature sensor offset */ |
#define | TEMP_REF_DEG (35) /* reference temp (degrees C) */ |
#define | IMU3000_ID_VAL (IMU3000_TWI_ADDR) |
IMU3000 Register Bit Definitions. More... | |
#define | FIFO_EN_TEMP_OUT (0x80) /* insert temperature data in FIFO */ |
#define | FIFO_EN_GYRO_XOUT (0x40) /* insert X gyro data in FIFO */ |
#define | FIFO_EN_GYRO_YOUT (0x20) /* insert Y gyro data in FIFO */ |
#define | FIFO_EN_GYRO_ZOUT (0x10) /* insert Z gyro data in FIFO */ |
#define | FIFO_EN_AUX_XOUT (0x08) /* insert X accel data in FIFO */ |
#define | FIFO_EN_AUX_YOUT (0x04) /* insert Y accel data in FIFO */ |
#define | FIFO_EN_AUX_ZOUT (0x02) /* insert Z accel data in FIFO */ |
#define | FIFO_EN_FOOTER (0x01) /* insert last word for FIFO read */ |
#define | AUX_VDDIO_VDD (0x04) /* VDD I/O logic for aux. I2C bus */ |
#define | AUX_VDDIO_VLOGIC (0x00) /* VLOGIC I/O logic for aux. I2C bus */ |
#define | AUX_ADDR_CLKOUTEN (0x80) /* enable reference clock at CLKOUT */ |
#define | DLPF_CFG_FIELD (0x07) /* low pass bandwidth (3 bits) */ |
#define | DLPF_CFG_256HZ (0x00) /* 256Hz low pass b/w */ |
#define | DLPF_CFG_188HZ (0x01) /* 188Hz low pass b/w */ |
#define | DLPF_CFG_98HZ (0x02) /* 98Hz low pass b/w */ |
#define | DLPF_CFG_42HZ (0x03) /* 42Hz low pass b/w */ |
#define | DLPF_CFG_20HZ (0x04) /* 20Hz low pass b/w */ |
#define | DLPF_CFG_10HZ (0x05) /* 10Hz low pass b/w */ |
#define | DLPF_CFG_5HZ (0x06) /* 5Hz low pass b/w */ |
#define | DLPF_CFG_2100HZ (0x07) /* 2.1KHz low pass b/w */ |
#define | FS_SEL_FIELD (0x18) /* full scale range (2 bits) */ |
#define | FS_SEL_250 (0x00) /* +/-250 deg/sec full scale */ |
#define | FS_SEL_500 (0x08) /* +/-500 deg/sec full scale */ |
#define | FS_SEL_1000 (0x10) /* +/-1000 deg/sec full scale */ |
#define | FS_SEL_2000 (0x18) /* +/-2000 deg/sec full scale */ |
#define | INT_CFG_RAW_RDY_EN (0x01) /* data available interrupt */ |
#define | INT_CFG_DMP_DONE_EN (0x02) /* DMP done interrupt */ |
#define | INT_CFG_IMU_RDY_EN (0x04) /* device ready interrupt */ |
#define | INT_CFG_I2C_MST_ERR_EN (0x08) /* accel NACK on secondary I2C bus */ |
#define | INT_CFG_ANYRD_2CLEAR (0x10) /* clr latch on any reg read */ |
#define | INT_CFG_LATCH_INT_EN (0x20) /* latch until int cleared */ |
#define | INT_CFG_OPEN (0x40) /* open drain for int output */ |
#define | INT_CFG_ACTL (0x80) /* int is active low */ |
#define | INT_STATUS_RAW_DATA_RDY (0x01) /* raw data is ready */ |
#define | INT_STATUS_DMP_DONE (0x02) /* digital motion processor done */ |
#define | INT_STATUS_IMU_RDY (0x04) /* device (PLL) is ready */ |
#define | INT_STATUS_I2C_MST_ERR (0x08) /* accel NACK on secondary I2C bus */ |
#define | INT_STATUS_FIFO_FULL (0x80) /* FIFO has overflowed */ |
#define | USER_CTRL_GYRO_RST (0x01) /* reset gyro analog & digital funcs */ |
#define | USER_CTRL_FIFO_RST (0x02) /* reset / clear the FIFO */ |
#define | USER_CTRL_DMP_RST (0x04) /* reset digital motion processor */ |
#define | USER_CTRL_AUX_IF_RST (0x08) /* reset auxiliary accelerometer */ |
#define | USER_CTRL_AUX_IF_EN (0x20) /* enable auxiliary accelerometer */ |
#define | USER_CTRL_FIFO_EN (0x40) /* enable FIFO for sensor data */ |
#define | USER_CTRL_DMP_EN (0x80) /* enable digital motion processor */ |
#define | PWR_MGM_CLK_SEL_INT (0x00) /* internal oscillator */ |
#define | PWR_MGM_CLK_SEL_X (0x01) /* PLL w/ X gyro reference */ |
#define | PWR_MGM_CLK_SEL_Y (0x02) /* PLL w/ Y gyro reference */ |
#define | PWR_MGM_CLK_SEL_Z (0x03) /* PLL w/ Z gyro reference */ |
#define | PWR_MGM_CLK_SEL_EXT_32K (0x04) /* PLL w/ external 32.768 KHz */ |
#define | PWR_MGM_CLK_SEL_EXT_19M (0x05) /* PLL w/ external 19.2 MHz */ |
#define | PWR_MGM_STBY_ZG (0x08) /* put Z gyro in standby mode */ |
#define | PWR_MGM_STBY_YG (0x10) /* put Y gyro in standby mode */ |
#define | PWR_MGM_STBY_XG (0x20) /* put X gyro in standby mode */ |
#define | PWR_MGM_SLEEP (0x40) /* enable low power sleep mode */ |
#define | PWR_MGM_H_RESET (0x80) /* reset device */ |
Functions | |
bool | imu3000_init (sensor_t *, int) |
InvenSense IMU-3000 motion processor driver initialization. More... | |
#define AUX_ADDR_CLKOUTEN (0x80) /* enable reference clock at CLKOUT */ |
Referenced by imu3000_default_init().
#define AUX_VDDIO_VDD (0x04) /* VDD I/O logic for aux. I2C bus */ |
#define AUX_VDDIO_VLOGIC (0x00) /* VLOGIC I/O logic for aux. I2C bus */ |
#define DLPF_CFG_10HZ (0x05) /* 10Hz low pass b/w */ |
#define DLPF_CFG_188HZ (0x01) /* 188Hz low pass b/w */ |
#define DLPF_CFG_20HZ (0x04) /* 20Hz low pass b/w */ |
#define DLPF_CFG_2100HZ (0x07) /* 2.1KHz low pass b/w */ |
#define DLPF_CFG_256HZ (0x00) /* 256Hz low pass b/w */ |
#define DLPF_CFG_42HZ (0x03) /* 42Hz low pass b/w */ |
#define DLPF_CFG_5HZ (0x06) /* 5Hz low pass b/w */ |
#define DLPF_CFG_98HZ (0x02) /* 98Hz low pass b/w */ |
#define DLPF_CFG_FIELD (0x07) /* low pass bandwidth (3 bits) */ |
Referenced by imu3000_set_bandwidth().
#define FIFO_EN_AUX_XOUT (0x08) /* insert X accel data in FIFO */ |
#define FIFO_EN_AUX_YOUT (0x04) /* insert Y accel data in FIFO */ |
#define FIFO_EN_AUX_ZOUT (0x02) /* insert Z accel data in FIFO */ |
#define FIFO_EN_FOOTER (0x01) /* insert last word for FIFO read */ |
#define FIFO_EN_GYRO_XOUT (0x40) /* insert X gyro data in FIFO */ |
#define FIFO_EN_GYRO_YOUT (0x20) /* insert Y gyro data in FIFO */ |
#define FIFO_EN_GYRO_ZOUT (0x10) /* insert Z gyro data in FIFO */ |
#define FIFO_EN_TEMP_OUT (0x80) /* insert temperature data in FIFO */ |
#define FS_SEL_1000 (0x10) /* +/-1000 deg/sec full scale */ |
#define FS_SEL_2000 (0x18) /* +/-2000 deg/sec full scale */ |
#define FS_SEL_250 (0x00) /* +/-250 deg/sec full scale */ |
#define FS_SEL_500 (0x08) /* +/-500 deg/sec full scale */ |
#define FS_SEL_FIELD (0x18) /* full scale range (2 bits) */ |
Referenced by imu3000_set_range().
#define IMU3000_ID_VAL (IMU3000_TWI_ADDR) |
IMU3000 Register Bit Definitions.
Referenced by imu3000_default_init().
#define IMU3000_TWI_ADDR (0x68) |
#define INT_CFG_ACTL (0x80) /* int is active low */ |
#define INT_CFG_ANYRD_2CLEAR (0x10) /* clr latch on any reg read */ |
#define INT_CFG_DMP_DONE_EN (0x02) /* DMP done interrupt */ |
#define INT_CFG_I2C_MST_ERR_EN (0x08) /* accel NACK on secondary I2C bus */ |
#define INT_CFG_IMU_RDY_EN (0x04) /* device ready interrupt */ |
#define INT_CFG_LATCH_INT_EN (0x20) /* latch until int cleared */ |
#define INT_CFG_OPEN (0x40) /* open drain for int output */ |
#define INT_CFG_RAW_RDY_EN (0x01) /* data available interrupt */ |
#define INT_STATUS_DMP_DONE (0x02) /* digital motion processor done */ |
#define INT_STATUS_FIFO_FULL (0x80) /* FIFO has overflowed */ |
#define INT_STATUS_I2C_MST_ERR (0x08) /* accel NACK on secondary I2C bus */ |
#define INT_STATUS_IMU_RDY (0x04) /* device (PLL) is ready */ |
#define INT_STATUS_RAW_DATA_RDY (0x01) /* raw data is ready */ |
#define PWR_MGM_CLK_SEL_EXT_19M (0x05) /* PLL w/ external 19.2 MHz */ |
#define PWR_MGM_CLK_SEL_EXT_32K (0x04) /* PLL w/ external 32.768 KHz */ |
#define PWR_MGM_CLK_SEL_INT (0x00) /* internal oscillator */ |
#define PWR_MGM_CLK_SEL_X (0x01) /* PLL w/ X gyro reference */ |
#define PWR_MGM_CLK_SEL_Y (0x02) /* PLL w/ Y gyro reference */ |
#define PWR_MGM_CLK_SEL_Z (0x03) /* PLL w/ Z gyro reference */ |
#define PWR_MGM_H_RESET (0x80) /* reset device */ |
#define PWR_MGM_SLEEP (0x40) /* enable low power sleep mode */ |
#define PWR_MGM_STBY_XG (0x20) /* put X gyro in standby mode */ |
#define PWR_MGM_STBY_YG (0x10) /* put Y gyro in standby mode */ |
#define PWR_MGM_STBY_ZG (0x08) /* put Z gyro in standby mode */ |
#define TEMP_COUNTS_PER_DEG_C (280) /* counts per degree C */ |
#define TEMP_OFFSET (-13200) /* temperature sensor offset */ |
#define USER_CTRL_AUX_IF_EN (0x20) /* enable auxiliary accelerometer */ |
Referenced by imu3000_default_init().
#define USER_CTRL_AUX_IF_RST (0x08) /* reset auxiliary accelerometer */ |
Referenced by imu3000_default_init().
#define USER_CTRL_DMP_EN (0x80) /* enable digital motion processor */ |
#define USER_CTRL_DMP_RST (0x04) /* reset digital motion processor */ |
#define USER_CTRL_FIFO_EN (0x40) /* enable FIFO for sensor data */ |
#define USER_CTRL_FIFO_RST (0x02) /* reset / clear the FIFO */ |
#define USER_CTRL_GYRO_RST (0x01) /* reset gyro analog & digital funcs */ |
enum imu3000_register_t |
IMU3000 Register Addresses.
InvenSense IMU-3000 motion processor driver initialization.
This is the main initialization function for the IMU-3000 device.
sensor | Address of a sensor device descriptor. |
resvd | Reserved value. |
References ARRAYSIZE, sensor_desc::aux, sensor_device_t::func, sensor_desc::hal, imu3000_event(), imu3000_ioctl(), imu3000_read(), sensor_funcs_t::read, SENSOR_CAPS_3_AXIS, SENSOR_CAPS_AUX_ACCEL, SENSOR_CAPS_AUX_TEMP, SENSOR_UNITS_deg_per_sec, SENSOR_VENDOR_INVENSENSE, and status.