《初始化mpu6050》由会员分享,可在线阅读,更多相关《初始化mpu6050(3页珍藏版)》请在金锄头文库上搜索。
1、/初始化MPU6050,根据需要请参考pdf进行修改u8 Init_MPU6050(void) GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE ); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD; GPIO_Init(GPIOB, &
2、GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD; GPIO_Init(GPIOB, &GPIO_InitStructure); if(Single_Read(MPU6050_Addr,WHO_AM_I)=0x68) Single_Write(MPU6050_Addr,PWR_MGMT_1, 0x00);/电源管理1,解除休
3、眠状态,时钟为内部8MHz Single_Write(MPU6050_Addr,SMPLRT_DIV, 0x07);/采样速率125Hz Single_Write(MPU6050_Addr,CONFIG,0x06); /不使能FSYNC,不使用外同步采样速率;DLPF_CFG20,设置任意轴是否通过DLPF, /典型值:0x06(5Hz)低通滤波器带宽5Hz, /对加速度和陀螺仪都有效,输出频率为1kHz,决定SMPLRT_DIV的频率基准 Single_Write(MPU6050_Addr,GYRO_CONFIG, 0x08);/不自测,量程设置500/s /*?GYRO 量程单位系数 +-
4、250 deg/s 131 LSB/deg/s 初始化hex 0x00 +-500 deg/s 65.5 LSB/deg/s 0x08 +-1000 deg/s 32.8 LSB/deg/s 0x10 +-2000 deg/s 16.4 LSB/deg/s 0x18 */ Single_Write(MPU6050_Addr,ACCEL_CONFIG, 0x00);/不自测,量程设置2g /* Accle any axe +-2 g 16384 LSB/g +-4 g 8192 LSB/g +-8 g 4096 LSB/g +-16 g 2048 LSB/g */ return 0; retur
5、n 1;/*读取MPU6050数据*/*/读取mpu6050内部数据,两个字节,合成数据/*s16 GetData(u8 REG_Address) /返回值为有符号的整形,16位 s16 H=0,L=0; H = Single_Read(MPU6050_Addr,REG_Address); /先读高字节,再读低字节 L = Single_Read(MPU6050_Addr,REG_Address+1); return (H0) Angle_accel = atan2(float)Accel_x,(float)Accel_z)*(180/3.14159265);/反正切计算rad/* atan2
6、(y,x)是表示X-Y平面上所对应的(x,y)坐标的角度, 它的值域范围是(-Pi,Pi) 用数学表示就是:atan2(y,x)=arg(y/x)-Pi 当y0时,其值为正. atan2*180/Pi可以计算出角度值 */ else Angle_accel = atan2(float)Accel_z,(float)Accel_x)*(180/3.14159265)-90;/反正切计算 Angle_accel = -Angle_accel; /angle_accel物理量单位是角度 deg! return Angle_accel;/陀螺仪计算Y轴的角速度s32 Read_Gry(void) s3
7、2 read_gyro_y; s32 Angle_gyro; /-角速度解算-/角速度量程见配置 本处使用1000 deg/s。scal系数为32.8 LSB/*?GYRO 量程单位系数 +-250 deg/s 131 LSB/deg/s offset 44.38188277*2 +-500 deg/s 65.5 LSB/deg/s offset 44.38188277 +-1000 deg/s 32.8 LSB/deg/s ok offset 44.38188277/2 +-2000 deg/s 16.4 LSB/deg/s offset 44.38188277/4*/ read_gyro_y= GetData(GYRO_YOUT_H)+Gyro_y_offset; /静止时角速度Y轴输出 /Gyro_y_offset计算方法gyro静止时候N多个数据的算术均值 Angle_gyro= -read_gyro_y/65.5; /去除零点偏移,计算角速度值,负号为方向处理 /Angle_gyro测量值的单位是 deg/s.测量的物理量是角速度。 return Angle_gyro;