mpu6886

package
v0.0.0-...-0087ba1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Dec 25, 2023 License: BSD-3-Clause Imports: 3 Imported by: 0

Documentation

Overview

Package mpu6886 provides a driver for the MPU6886 accelerometer and gyroscope made by InvenSense.

Datasheet: https://m5stack.oss-cn-shenzhen.aliyuncs.com/resource/docs/datasheet/core/MPU-6886-000193%2Bv1.1_GHIC_en.pdf

Index

Constants

View Source
const (
	DefaultAddress   = 0x68
	SecondaryAddress = 0x69
)

The I2C address which this device listens to.

View Source
const (
	XG_OFFS_TC_H = 0x04
	XG_OFFS_TC_L = 0x05
	YG_OFFS_TC_H = 0x07
	YG_OFFS_TC_L = 0x08
	ZG_OFFS_TC_H = 0x0A
	ZG_OFFS_TC_L = 0x0B

	// Self test registers
	SELF_TEST_X_ACCEL = 0x0D
	SELF_TEST_Y_ACCEL = 0x0E
	SELF_TEST_Z_ACCEL = 0x0F

	XG_OFFS_USRH = 0x13
	XG_OFFS_USRL = 0x14
	YG_OFFS_USRH = 0x15
	YG_OFFS_USRL = 0x16
	ZG_OFFS_USRH = 0x17
	ZG_OFFS_USRL = 0x18

	SMPLRT_DIV      = 0x19
	CONFIG          = 0x1A
	GYRO_CONFIG     = 0x1B
	ACCEL_CONFIG    = 0x1C
	ACCEL_CONFIG_2  = 0x1D
	LP_MODE_CFG     = 0x1E
	ACCEL_WOM_X_THR = 0x20
	ACCEL_WOM_Y_THR = 0x21
	ACCEL_WOM_Z_THR = 0x22
	FIFO_EN         = 0x23
	FSYNC_INT       = 0x36

	// Interrupt configuration
	INT_PIN_CFG        = 0x37
	INT_ENABLE         = 0x38
	FIFO_WM_INT_STATUS = 0x39
	INT_STATUS         = 0x3A

	// Accelerometer measurements
	ACCEL_XOUT_H = 0x3B
	ACCEL_XOUT_L = 0x3C
	ACCEL_YOUT_H = 0x3D
	ACCEL_YOUT_L = 0x3E
	ACCEL_ZOUT_H = 0x3F
	ACCEL_ZOUT_L = 0x40

	// Temperature measurement
	TEMP_OUT_H = 0x41
	TEMP_OUT_L = 0x42

	// Gyroscope measurements
	GYRO_XOUT_H = 0x43
	GYRO_XOUT_L = 0x44
	GYRO_YOUT_H = 0x45
	GYRO_YOUT_L = 0x46
	GYRO_ZOUT_H = 0x47
	GYRO_ZOUT_L = 0x48

	SELF_TEST_X_GYRO = 0x50
	SELF_TEST_Y_GYRO = 0x51
	SELF_TEST_Z_GYRO = 0x52

	E_ID0 = 0x53
	E_ID1 = 0x54
	E_ID2 = 0x55
	E_ID3 = 0x56
	E_ID4 = 0x57
	E_ID5 = 0x58
	E_ID6 = 0x59

	FIFO_WM_TH1       = 0x60
	FIFO_WM_TH2       = 0x61
	SIGNAL_PATH_RESET = 0x68
	ACCEL_INTEL_CTRL  = 0x69
	USER_CTRL         = 0x6A
	PWR_MGMT_1        = 0x6B
	PWR_MGMT_2        = 0x6C
	I2C_IF            = 0x70
	FIFO_COUNTH       = 0x72
	FIFO_COUNTL       = 0x73
	FIFO_R_W          = 0x74
	WHO_AM_I          = 0x75

	XA_OFFSET_H = 0x77
	XA_OFFSET_L = 0x78
	YA_OFFSET_H = 0x7A
	YA_OFFSET_L = 0x7B
	ZA_OFFSET_H = 0x7D
	ZA_OFFSET_L = 0x7E
)

Registers. Names, addresses and comments copied from the datasheet.

View Source
const (
	AFS_RANGE_2_G = iota
	AFS_RANGE_4_G
	AFS_RANGE_8_G
	AFS_RANGE_16_G
)

Accelerometer and gyroscope ranges

View Source
const (
	GFS_RANGE_250 = iota
	GFS_RANGE_500
	GFS_RANGE_1000
	GFS_RANGE_2000
)
View Source
const WhoAmI = 0x19

Variables

This section is empty.

Functions

This section is empty.

Types

type Config

type Config struct {
	AccelRange uint8
	GyroRange  uint8
}

Config contains settings for filtering, sampling, and modes of operation

type Device

type Device struct {
	Address uint16
	// contains filtered or unexported fields
}

Device wraps an I2C connection to a MPU6886 device.

func New

func New(bus drivers.I2C) *Device

New creates a new MPU6886 connection. The I2C bus must already be configured.

This function only creates the Device object, it does not touch the device.

func (*Device) Configure

func (d *Device) Configure(config Config) (err error)

Configure sets up the device for communication.

func (*Device) Connected

func (d *Device) Connected() bool

Connected returns whether a MPU6886 has been found. It does a "who am I" request and checks the response.

func (*Device) ReadAcceleration

func (d *Device) ReadAcceleration() (x int32, y int32, z int32, err error)

ReadAcceleration reads the current acceleration from the device and returns it in µg (micro-gravity). When one of the axes is pointing straight to Earth and the sensor is not moving the returned value will be around 1000000 or -1000000.

func (*Device) ReadRotation

func (d *Device) ReadRotation() (x int32, y int32, z int32, err error)

ReadRotation reads the current rotation from the device and returns it in µ°/s (micro-degrees/sec). This means that if you were to do a complete rotation along one axis and while doing so integrate all values over time, you would get a value close to 360000000.

func (*Device) ReadTemperature

func (d *Device) ReadTemperature() (t int32, err error)

ReadTemperature returns the temperature in Celsius millidegrees (°C/1000).

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL