新手上路
- 积分
- 35
- 金钱
- 35
- 注册时间
- 2015-4-14
- 在线时间
- 0 小时
|
发表于 2015-4-18 19:32:30
|
显示全部楼层
//******************6050初始化函数*******************************
void Init_MPU6050(void)
{
GPIO_6050_I2C_Config(); //初始化6050的I2C接口
if(Single_Read(MPU6050_Addr,WHO_AM_I)==0x68)
{
Single_Write(MPU6050_Addr,PWR_MGMT_1, 0x80); //.decive 复位reset 解除休眠状态,关闭温度传感器
delay_ms(10);
Single_Write(MPU6050_Addr,PWR_MGMT_1, 0x00); //复位,温度开,NO CYCLE
delay_ms(10);
Single_Write(MPU6050_Addr,SMPLRT_DIV, 0x07); //采样率1KHz/(6+1)7ms转换一次
delay_ms(10);
Single_Write(MPU6050_Addr,CONFIG, 0x06); //低通滤波器的值:0x01=188Hz 0x02=98Hz 0x03=42Hz 0x04=20Hz 0x05=10Hz 0x06=5Hz
delay_ms(10);
Single_Write(MPU6050_Addr,GYRO_CONFIG, 0x10); //XYZ均不自测,:0x18(不自检,范围1000deg/s)
delay_ms(10);
Single_Write(MPU6050_Addr,ACCEL_CONFIG, 0x08); //加速计自检、测量范围及高通滤波频率,典型值:0x01(不自检,+-4G,5Hz)
delay_ms(10);
}
//****************读6050数据(滤波前的角度角速度)*****************************
Data_6050_str Data_6050; //6050数据结构定义结构体
void READ_MPU6050(void)
{
unsigned char BUF[12]; //接收数据缓存区
//**********角速度传感器测量**************
// BUF[0]=Single_Read(MPU6050_Addr,GYRO_XOUT_L);
// BUF[1]=Single_Read(MPU6050_Addr,GYRO_XOUT_H);
// Data_6050.GX=((BUF[1]<<8)+BUF[0])+GRY_offset;
// Data_6050.Gryo_X =((float)Data_6050.GX)*(0.030517); //滤波前X的角速度
/*-----------------------------------------------------------*/
BUF[2]=Single_Read(MPU6050_Addr,GYRO_YOUT_L);
BUF[3]=Single_Read(MPU6050_Addr,GYRO_YOUT_H);
Data_6050.GY=((BUF[3]<<8)+BUF[2])+GRY_offset;
Data_6050.Gryo_Y =((float)Data_6050.GY)*(0.030517); //滤波前Y的角速度
/*-----------------------------------------------------------*/
// BUF[4]=Single_Read(MPU6050_Addr,GYRO_ZOUT_L);
// BUF[5]=Single_Read(MPU6050_Addr,GYRO_ZOUT_H);
// Data_6050.GZ=((BUF[5]<<8)+BUF[4])+GRY_offset;
// Data_6050.Gryo_Z =((float)Data_6050.GZ)*(0.030517); //滤波前Z的角速度
//************加速度传感器测量*************
BUF[6]=Single_Read(MPU6050_Addr,ACCEL_XOUT_L);
BUF[7]=Single_Read(MPU6050_Addr,ACCEL_XOUT_H);
Data_6050.AX= (BUF[7]<<8)+BUF[6]; //滤波前x的加速度
/*-----------------------------------------------------------*/
// BUF[8]=Single_Read(MPU6050_Addr,ACCEL_YOUT_L);
// BUF[9]=Single_Read(MPU6050_Addr,ACCEL_YOUT_H);
// Data_6050.AY= (BUF[9]<<8)+BUF[8]; //滤波前y的加速度
/*-----------------------------------------------------------*/
BUF[10]=Single_Read(MPU6050_Addr,ACCEL_ZOUT_L);
BUF[11]=Single_Read(MPU6050_Addr,ACCEL_ZOUT_H);
Data_6050.AZ= (BUF[11]<<8)+BUF[10]; //滤波前z的加速度
// MPU6050_Adj(); //修正参数
//*******************计算X轴倾斜角**************************
if(Data_6050.AX>0)
{
Data_6050.Acc_X = atan2((float)Data_6050.AX,(float)Data_6050.AZ)*(180/3.14159265); //反正切计算
}
else
{
Data_6050.Acc_X = atan2((float)Data_6050.AZ,(float)Data_6050.AX)*(180/3.14159265)-90; //反正切计算
Data_6050.Acc_X = -Data_6050.Acc_X;
}
} |
|