RobotHardware-UESTC/Hardware/Pibot驱动底盘/PiRobot_Firmware v1.0/STM32/Lib/IMU/ITG3200.h

109 lines
3.3 KiB
C++

#ifndef _ITG3200_H_
#define _ITG3200_H_
#define ITG3200_ADDRESS_AD0_LOW 0x68 // address pin low (GND), default for SparkFun IMU Digital Combo board
#define ITG3200_ADDRESS_AD0_HIGH 0x69 // address pin high (VCC), default for SparkFun ITG-3200 Breakout board
#define ITG3200_DEFAULT_ADDRESS ITG3200_ADDRESS_AD0_LOW
#define ITG3200_RA_WHO_AM_I 0x00
#define ITG3200_RA_SMPLRT_DIV 0x15
#define ITG3200_RA_DLPF_FS 0x16
#define ITG3200_RA_INT_CFG 0x17
#define ITG3200_RA_INT_STATUS 0x1A
#define ITG3200_RA_TEMP_OUT_H 0x1B
#define ITG3200_RA_TEMP_OUT_L 0x1C
#define ITG3200_RA_GYRO_XOUT_H 0x1D
#define ITG3200_RA_GYRO_XOUT_L 0x1E
#define ITG3200_RA_GYRO_YOUT_H 0x1F
#define ITG3200_RA_GYRO_YOUT_L 0x20
#define ITG3200_RA_GYRO_ZOUT_H 0x21
#define ITG3200_RA_GYRO_ZOUT_L 0x22
#define ITG3200_RA_PWR_MGM 0x3E
#define ITG3200_DEVID_BIT 6
#define ITG3200_DEVID_LENGTH 6
#define ITG3200_DF_FS_SEL_BIT 4
#define ITG3200_DF_FS_SEL_LENGTH 2
#define ITG3200_DF_DLPF_CFG_BIT 2
#define ITG3200_DF_DLPF_CFG_LENGTH 3
#define ITG3200_FULLSCALE_2000 0x03
#define ITG3200_DLPF_BW_256 0x00
#define ITG3200_DLPF_BW_188 0x01
#define ITG3200_DLPF_BW_98 0x02
#define ITG3200_DLPF_BW_42 0x03
#define ITG3200_DLPF_BW_20 0x04
#define ITG3200_DLPF_BW_10 0x05
#define ITG3200_DLPF_BW_5 0x06
#define ITG3200_INTCFG_ACTL_BIT 7
#define ITG3200_INTCFG_OPEN_BIT 6
#define ITG3200_INTCFG_LATCH_INT_EN_BIT 5
#define ITG3200_INTCFG_INT_ANYRD_2CLEAR_BIT 4
#define ITG3200_INTCFG_ITG_RDY_EN_BIT 2
#define ITG3200_INTCFG_RAW_RDY_EN_BIT 0
#define ITG3200_INTMODE_ACTIVEHIGH 0x00
#define ITG3200_INTMODE_ACTIVELOW 0x01
#define ITG3200_INTDRV_PUSHPULL 0x00
#define ITG3200_INTDRV_OPENDRAIN 0x01
#define ITG3200_INTLATCH_50USPULSE 0x00
#define ITG3200_INTLATCH_WAITCLEAR 0x01
#define ITG3200_INTCLEAR_STATUSREAD 0x00
#define ITG3200_INTCLEAR_ANYREAD 0x01
#define ITG3200_INTSTAT_ITG_RDY_BIT 2
#define ITG3200_INTSTAT_RAW_DATA_READY_BIT 0
#define ITG3200_PWR_H_RESET_BIT 7
#define ITG3200_PWR_SLEEP_BIT 6
#define ITG3200_PWR_STBY_XG_BIT 5
#define ITG3200_PWR_STBY_YG_BIT 4
#define ITG3200_PWR_STBY_ZG_BIT 3
#define ITG3200_PWR_CLK_SEL_BIT 2
#define ITG3200_PWR_CLK_SEL_LENGTH 3
#define ITG3200_CLOCK_INTERNAL 0x00
#define ITG3200_CLOCK_PLL_XGYRO 0x01
#define ITG3200_CLOCK_PLL_YGYRO 0x02
#define ITG3200_CLOCK_PLL_ZGYRO 0x03
#define ITG3200_CLOCK_PLL_EXT32K 0x04
#define ITG3200_CLOCK_PLL_EXT19M 0x05
class ITG3200 {
public:
ITG3200();
ITG3200(unsigned char address);
void initialize();
bool testConnection();
// WHO_AM_I register
unsigned char getDeviceID();
// SMPLRT_DIV register
void setRate(unsigned char rate);
// DLPF_FS register
void setFullScaleRange(unsigned char range);
void setDLPFBandwidth(unsigned char bandwidth);
// GYRO_*OUT_* registers
void getRotation(short* x, short* y, short* z);
// PWR_MGM register
void reset();
void setClockSource(unsigned char source);
private:
unsigned char devAddr;
unsigned char buffer[6];
};
#endif /* _ITG3200_H_ */