Después de una larga búsqueda de sensores, analizando las características y la disponibilidad de estos, se consiguieron los siguientes sensores.

Gyro

ITG-3200

Gyro de 3 ejes.

Hoja de datos

Página de SparkFun

Código de ejemplo

Este gyro tiene interfaz I2C.

Explicación de los Registros

Addr Hex	Addr Decimal	Register Name	R/W	Bit7	Bit6	Bit5	Bit4	Bit3	Bit2	Bit1	Bit0
0	0	WHO_AM_I	R/W	-	ID	-
15	21	SMPLRT_DIV	R/W	SMPLRT_DIV
16	22	DLPF_FS	R/W	-	-	-	FS_SEL	DLPF_CFG
17	23	INT_CFG	R/W	ACTL	OPEN	LATCH_INT_EN	INT_ANYRD_2CLEAR	-	INT_RDY_EN	-	RAW_RDY_EN
1A	26	INT_STATUS	R	-	-	-	-	-	ITG_RDY	-	RAW_DATA_RDY
1B	27	TEMP_OUT_H	R	TEMP_OUT_H
1C	28	TEMP_OUT_L	R	TEMP_OUT_L
1D	29	GYRO_XOUT_H	R	GYRO_XOUT_H
1E	30	GYRO_XOUT_L	R	GYRO_XOUT_L
1F	31	GYRO_YOUT_H	R	GYRO_YOUT_H
20	32	GYRO_YOUT_L	R	GYRO_YOUT_L
21	33	GYRO_ZOUT_H	R	GYRO_ZOUT_H
22	34	GYRO_ZOUT_L	R	GYRO_ZOUT_L
3E	62	PWR_MGM	R/W	H_RESET	SLEEP	STBY_XG	STBY_YG	STBY_ZG	CLK_SEL

# define WHO 0x00
# define SMPL 0x15
# define DLPF 0x16
# define INT_C 0x17
# define INT_S 0x1A
# define TMP_H 0x1B
# define TMP_L 0x1C
# define GX_H 0x1D
# define GX_L 0x1E
# define GY_H 0x1F
# define GY_L 0x20
# define GZ_H 0x21
# define GZ_L 0x22
# define PWR_M 0x3E

Configuración para nuestra aplicación

WHO, 0x00, No usado

SMPL, 0x15, Sample rate register, valor = 0

DLPF, 0x16, DLPF-Full Scale, valor = 00011000b

FS_SEL = 3 , (+-)2000 [º/s], Full scale selection for gyro sensor data

DLPF_CFG = 0 , LPF = 256Hz y SampleRate = 8KHz, Digital low pass filter configuration and internal sampling rate configuration

INT_C, 0x17, Control de Interrupción, valor = 0

PWR_M, 0x3E, Power management, valor = 00000001b

H_RESET = 0, dispositivo no reseteado

SLEEP = 0, desactivar modo de bajo consumo

STBY_XG = 0, gyro eje x en modo normal ( no standby )

STBY_YG = 0, gyro eje y en modo normal ( no standby )

STBY_ZG = 0, gyro eje z en modo normal ( no standby )

CLK_SEL = 001b, clock de referencia eje x ( ver que en código de ejemplo pone 000b )

Los siguientes son de sólo lectura.

INT_S, 0x1A, Estado de la Interrupción

TMP_H, 0x1B, Temperatura bit alto

TMP_L, 0x1C, Temperatura bit bajo

GX_H, 0x1D, Gyro eje x bit alto

GX_L, 0x1E, Gyro eje x bit bajo

GY_H, 0x1F, Gyro eje y bit alto

GY_L, 0x20, Gyro eje y bit bajo

GZ_H, 0x21, Gyro eje z bit alto

GZ_L, 0x22, Gyro eje z bit bajo

Acelerómetro

ADXL345

Acelerómetro de 3 ejes.

Hoja de dato

Página de SparkFun

ADXL202

Acelerómetro de 2 ejes.

Cálculo del ancho de banda

Donde C se expresa en uF y F en Hz.

Para un ancho de banda de 300Hz, el valor de C es de aproximadamente 16.7uF.

Cálculo del período del DCM

Elegiremos como frecuencia del DCM una frecuencia 10 veces más grande que el ancho de banda, o sea unos 3kHz. Para esta frecuencia la R es igual a 42k.

Filtros para combinar las mediciones del acelerómetro y el giroscopio

Filtro Complementario

Filtro de Kalman

Direction Cosine Matrix

Direction Cosine Matrix implementation for the CHR-6d IMU