好文档 - 专业文书写作范文服务资料分享网站

MPU6050教程

天下 分享 时间: 加入收藏 我要投稿 点赞

1.4读取MPU6050原始数据分析

为什么要获取这些数据呢?看完下一个小节你就会明白。这个要配合一个第七实验室的文档《MPU6050原始数据分析》。

我们看在初始化化MPU6050时配置MPU6050

12345PMU6050_WriteReg(MPU6050_RA_ACCEL_CONFIG,0x00);//配置加速度传感器工作在2G模式,不自检PMU6050_WriteReg(MPU6050_RA_GYRO_CONFIG,0x18);//陀螺仪自检及测量范围,典型值:0x18(不自检,2000deg/s)查英文寄存器的手册可以知道我配置的陀螺仪的量程是±2000°/s,再查可知灵敏度是16.4LSB°/s。这里还要知道量程越大,测量精度越低。LSB的意思是最小有效位,为数字输出方式下使用;一般我们可以用mg/LSB来表示灵敏度,例如:mpu6050输出的位数为16位(2的16次方共65536个LSB)对应满量程,当量程为±8g时对应灵敏度就为16g/65536LSB=0.244140625mv/g,取倒数为4096LSB/g,因为mpu6050只能16位输出,所以测量范围越大,对应精度就越低。

根据第七实验室的描述一除可以知道我的陀螺仪绕3个轴的角速度最小是不够1°/s,最多是6°/s左右。当时我是保持静止测得的。

图1-7陀螺仪配置跟量程的关系图1-8第七实验室文档中对于读取陀螺仪数据的意义的解析接下来是加速度的分析,同样查英文寄存器手册可以知道我设置的加速度例程是±2g,灵敏度是16384LSB/g,这样子下来加速度在y轴上面是1g,这个是重力加速度,说明我放的时候是y轴在竖直方向上的,其他的两周加速度

第错误!未定义书签。

页共10页是接近于0,说明我放得很垂直啊,你也可以换其他的轴在竖直方向上,看那个轴显示出来的值是否是16384左右,我试了,结果是。更加说明我们的结果很对啦。

图1-9加速度配置跟量程的关系图1-10第七实验室文档中对于读取加速度数据的意义的解析软件IIC读取原始数据的例程接线和验证方法如下:VCC:连接到板子5V或者3.3VGND:连接到板子的地SCL:连接到板子的B10SDA:连接到板子的B11AD0:连接到地

然后用串口助手看数据即可

硬件IIC读取原始数据的例程接线由于硬件IIC是固定的两个硬件管脚,B6和B7,所以要改下上面的SCL和SDA到B6和B7即可1.5圆点博士DMP移植

先让大家看一个DMP数据上传到电脑通过上位机来显示的视频

http://v.youku.com/v_show/id_XNzEyNjQ3ODEy.html你如果是初学者,只是获取了原始数据,那只能告诉你,其实原始数据没有处理没有多大的用处。我们还需要将那些数据根据数学方面的东西转化为姿

第错误!未定义书签。

页共10页态有关的四元数和欧拉角。这个过程有两种办法,一种你可以去学下数学,然后编程把我们上面获取的原始数据转化为四元数和欧拉角;另一种是直接用MPU6050内部的DMP。这里我们介绍后者。

DMP是什么意思?DMP就是指MPU6050内部集成的处理单元,可以直接运算出四元数和姿态,而不再需要另外进行数学运算。DMP的使用大大简化了四轴的代码设计。DMP是数字运动处理器的缩写,顾名思义mpu6050并不单单是一款传感器,其内部还包含了可以独立完成姿态解算算法的处理单元。如在设计中使用DMP来实现传感器融合算法优势很明显。首先,invensense官方提供的姿态解算算法应该比像楼主这样的小白要可靠的多。其次,由DMP实现姿态解算算法将单片机从算法处理的压力中解放出来,单片机所要做的是等待DMP解算完成后产生的外部中断,在外部中断里去读取姿态解算的结果。这样单片机有大量的时间来处理诸如电机调速等其他任务,提高了系统的实时性。直接上E文吧。标准一点。

DMPandDMPfeatures:TheDMPisauniquehardwarefeatureof

InvenSenseMPUdeviceswhichiscapableofcomputingquaterniondatafromsensorreadings,performingdevicecalibration,andalsoincludesapplicationspecificfeaturessuchaspedometerstep-counting.TheDMPimage(firmware)isheldinvolatilememoryontheMPUandneedstobeupdatedtotheDMPeverytimethechippowersuptoleveragethisfunctionality.

四元数和欧拉角是什么?我简单理解,简单解释。标准的自己去查下概念。四元数就是4个数,经过DMP或数学+软件你就可以得到四元数,四元数就是4个数,可以表征姿态,经过几个数学公式之后就可以的出姿态,姿态包括pitch,roll,yaw。

我们移植的并不是官方的库,而是圆点博士的库,还包括他的I2C,两者是配套使用的。这个移植要比官方的简单。添加例程文件里面的圆点博士的文件到工程里面,该include的就include。

先进行初始化

123451234567uart_init(115200);//串口初始化为115200//引用圆点博士的I2C程序,这里跟我们平常没有什么区别ANBT_I2C_Configuration();//IIC初始化AnBT_DMP_MPU6050_Init();//6050DMP初始化定义一些相关的变量

shortgyro[3],accel[3],sensors;//陀螺仪存放数组,加速度存放数组,返回状态量unsignedcharmore;longquat[4];//四元数存放数组floatYaw=0.00,Roll,Pitch;//欧拉角floatq0=1.0f,q1=0.0f,q2=0.0f,q3=0.0f;//计算姿态过程用到的变量接着用库函数读出四元数

1dmp_read_fifo(gyro,accel,quat,&sensor_timestamp,&sensors,&more);计算欧拉角,里面包含了上面所说的将四元数转化为欧拉角的公式。

1if(sensors&INV_WXYZ_QUAT)第错误!未定义书签。

页共10页2{3q0=quat[0]/q30;4q1=quat[1]/q30;5q2=quat[2]/q30;6q3=quat[3]/q30;7Pitch=asin(-2*q1*q3+2*q0*q2)*57.3;//pitch8Roll=atan2(2*q2*q3+2*q0*q1,-2*q1*q1-2*q2*q2+1)*57.3;//roll9Yaw=atan2(2*(q1*q2+q0*q3),q0*q0+q1*q1-q2*q2-q3*q3)*57.3;10//printf(\%.2froll:%.2fyaw:%.2f\\r\\n\11//普通串口输出12Data_Send_Status(Pitch,Roll,Yaw,gyro,accel);13delay_init(72);14}最后写一个符合你上位机通讯协议的发送程序,我的是匿名四轴最新版上位机,匿名四轴有在他的讲解视频中讲到怎么去写通讯协议。

http://www.amobbs.com/forum.php?mod=viewthread&tid=5580829&highlight=?????????è?′函数如下,注意这是针对匿名最新的上位机程序的

1/*函数功能:根据匿名最新上位机协议写的显示姿态的程序2*具体原理看匿名的讲解视频3*/45voidData_Send_Status(floatPitch,floatRoll,floatYaw,int16_t*gyro,int16_t*accel)6{7unsignedchari=0;8unsignedchar_cnt=0,sum=0;9unsignedint_temp;10u8data_to_send[50];1112data_to_send[_cnt++]=0xAA;13data_to_send[_cnt++]=0xAA;14data_to_send[_cnt++]=0x01;15data_to_send[_cnt++]=0;1617_temp=(int)(Roll*100);18data_to_send[_cnt++]=BYTE1(_temp);19data_to_send[_cnt++]=BYTE0(_temp);20_temp=0-(int)(Pitch*100);21data_to_send[_cnt++]=BYTE1(_temp);22data_to_send[_cnt++]=BYTE0(_temp);23_temp=(int)(Yaw*100);24data_to_send[_cnt++]=BYTE1(_temp);25data_to_send[_cnt++]=BYTE0(_temp);2627data_to_send[3]=_cnt-4;28//和校验29for(i=0;i<_cnt;i++)30sum+=data_to_send[i];31data_to_send[_cnt++]=sum;3233//串口发送数据34for(i=0;i<_cnt;i++)35AnBT_Uart1_Send_Char(data_to_send[i]);36}移植成功一开始在串口输出可以看到,后面的效果就是跟视频连接的一样,如果对匿名上位机还有不懂的地方可以去看下他的上位机演示教程。

第错误!未定义书签。

页共10页图1-11DMP移植成功串口打印内容可能有些还想要在上位机上打印出波形如下,我建议同样是去看匿名上位机的教程就可以了。

图1-12匿名上位机打印出波形除了例程文件夹里面的资料,这里再附上一些网络上的资料:DMP官方工程

http://pan.http://www.diyifanwen.net//s/1pJoF4pl一个英文讲解加速度计和陀螺仪的网站:http://www.starlino.com/imu_guide.html第错误!未定义书签。

页共10页

MPU6050教程

1.4读取MPU6050原始数据分析为什么要获取这些数据呢?看完下一个小节你就会明白。这个要配合一个第七实验室的文档《MPU6050原始数据分析》。我们看在初始化化MPU6050时配置MPU605012345PMU6050_WriteReg(MPU6050_RA_ACCEL_CONFIG,0x00);//配置加速度传感器工作在2G模式,不自检PMU6
推荐度:
点击下载文档文档为doc格式
0nfl49i19123x6i11q50
领取福利

微信扫码领取福利

微信扫码分享