提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
一、引脚接法
VCC接电源正极
GND接电源负极
SCL和SDA接单片机IO口(依据程序的定义接口接,IIC通信)
XDA和XCL接外围传感器(一般不接直接悬空)
AD0 接地/VCC 由MPU硬件地址决定
INIT外部中断(悬空)
#define MPU_ADDR 0X6
二、MPU6050陀螺仪,加速度计数据获取
1.初始化mpu6050
uint8_t MPU_Init( void )
{
uint8_t res;
MPU_IIC_Init();
MPU_Write_Byte( MPU_PWR_MGMT1_REG, 0X80 );
delay_ms(100);
MPU_Write_Byte( MPU_PWR_MGMT1_REG, 0X00 );
MPU_Set_Gyro_Fsr( 3 );
MPU_Set_Accel_Fsr( 0 );
MPU_Set_Rate( 50 );
MPU_Write_Byte( MPU_INT_EN_REG, 0X00 );
MPU_Write_Byte( MPU_USER_CTRL_REG, 0X00 );
MPU_Write_Byte( MPU_FIFO_EN_REG, 0X00 );
MPU_Write_Byte( MPU_INTBP_CFG_REG, 0X80 );
res = MPU_Read_Byte( MPU_DEVICE_ID_REG );
printf("ID:%X\r\n",res);
if( res==MPU_ADDR )
{
MPU_Write_Byte( MPU_PWR_MGMT1_REG, 0X01 );
MPU_Write_Byte( MPU_PWR_MGMT2_REG, 0X00 );
MPU_Set_Rate( 50 );
return 0;
}
else
return 1;
}
2.读取数据
uint8_t MPU_Get_Gyroscope( short *gx, short *gy, short *gz )
{
uint8_t buf[6],res;
if( (res=MPU_Read_Continue( MPU_ADDR, MPU_GYRO_XOUTH_REG, 6, buf ))==0 )
{
*gx = ((uint16_t)buf[0]<<8)|buf[1];
*gy = ((uint16_t)buf[2]<<8)|buf[3];
*gz = ((uint16_t)buf[4]<<8)|buf[5];
}
return res;
}
uint8_t MPU_Get_Accelerometer( short *ax, short *ay, short *az )
{
uint8_t buf[6],res;
if( (res=MPU_Read_Continue( MPU_ADDR, MPU_ACCEL_XOUTH_REG, 6, buf ))==0 )
{
*ax = ((uint16_t)buf[0]<<8)|buf[1];
*ay = ((uint16_t)buf[2]<<8)|buf[3];
*az = ((uint16_t)buf[4]<<8)|buf[5];
}
return res;
}
3.数据融合(四元数解算姿态角)
- 计算值 mpu6050对原始数据角度计算中关于16384 与 16.4两个参数来历
ggx = (float)gx / 16.4;
ggy = (float)gx / 16.4;
ggz = (float)gx / 16.4;
aax = (float)acxx /16384;
aay = (float)acyy /16384;
aaz = (float)aczz /16384;
总结
提示:这里对文章进行总结: 例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。
|