【STM32F407开发板试用体验】+ 【qizc】体验MPU6050六轴部分

  • 传感器
  • 开发
  • 无人机
  • qizc
  • LV4工程师
  • |      2017-04-24 15:45:12
  • 浏览量 3077
  • 回复:2
近年来无人机已经被玩烂了,这款开发板上也配置了MPU6050模块,不妨来体验一下。 1、传感器介绍: MPU6050 是 InvenSense 公司推出的全球首款整合性 6 轴运动处理组件,相较于多组件方案,免除了组合陀螺仪与加速器时之轴间差的问题,减少了安装空间。 MPU6050 内部整合了 3 轴陀螺仪和 3 轴加速度传感器,并且含有一个第二 IIC 接口,可用于连接外部磁力传感器,并利用自带的数字运动处理器( DMP: Digital Motion Processor)硬件加速引擎,通过主 IIC 接口,向应用端输出完整的 9 轴融合演算数据。有了 DMP,我们可以使用 InvenSense 公司提供的运动处理资料库,非常方便的实现姿态解算,降低了运动处理运算对操作系统的负荷,同时大大降低了开发难度。 MPU6050 的特点包括: ① 以数字形式输出 6 轴或 9 轴(需外接磁传感器)的旋转矩阵、四元数(quaternion)、欧拉角格式(Euler Angle forma)的融合演算数据(需 DMP 支持) ② 具有 131 LSBs/°/sec 敏感度与全格感测范围为±250、±500、±1000 与±2000°/sec的 3 轴角速度感测器(陀螺仪) ③ 集成可程序控制,范围为±2g、±4g、±8g 和±16g 的 3 轴加速度传感器 ④ 移除加速器与陀螺仪轴间敏感度,降低设定给予的影响与感测器的飘移 ⑤ 自带数字运动处理(DMP: Digital Motion Processing)引擎可减少 MCU 复杂的融合演算数据、感测器同步化、姿势感应等的负荷 ⑥ 内建运作时间偏差与磁力感测器校正演算技术,免除了客户须另外进行校正的需求 ⑦ 自带一个数字温度传感器 ⑧ 带数字输入同步引脚(Sync pin)支持视频电子影相稳定技术与 GPS ⑨ 可程序控制的中断(interrupt),支持姿势识别、摇摄、画面放大缩小、滚动、快速下降中断、 high-G 中断、零动作感应、触击感应、摇动感应功能 ⑩ VDD 供电电压为 2.5V±5%、 3.0V±5%、 3.3V±5%; VLOGIC 可低至 1.8V± 5% ⑪ 陀螺仪工作电流: 5mA,陀螺仪待机电流: 5uA;加速器工作电流: 500uA,加速器省电模式电流: 40uA@10Hz ⑫ 自带 1024 字节 FIFO,有助于降低系统功耗 ⑬ 高达 400Khz 的 IIC 通信接口 ⑭ 超小封装尺寸: 4x4x0.9mm( QFN) 2、初始化步骤: 1) 初始化 IIC 接口 MPU6050 采用 IIC 与 STM32F4 通信,所以我们需要先初始化与 MPU6050 连接的 SDA 和SCL 数据线。这个在前面的 IIC 实验章节已经介绍过了,这里 MPU6050 与 24C02 共用一个 IIC, 所以初始化 IIC 完全一模一样。 2)复位 MPU6050 这一步让 MPU6050 内部所有寄存器恢复默认值,通过对电源管理寄存器 1( 0X6B)的 bit7写 1 实现。 复位后, 电源管理寄存器 1 恢复默认值(0X40),然后必须设置该寄存器为 0X00, 以唤醒 MPU6050,进入正常工作状态。 3)设置角速度传感器(陀螺仪)和加速度传感器的满量程范围 这一步,我们设置两个传感器的满量程范围(FSR),分别通过陀螺仪配置寄存器( 0X1B)和加速度传感器配置寄存器( 0X1C)设置。我们一般设置陀螺仪的满量程范围为±2000dps,加速度传感器的满量程范围为±2g。 4)设置其他参数 这里,我们还需要配置的参数有:关闭中断、关闭 AUX IIC 接口、禁止 FIFO、设置陀螺仪采样率和设置数字低通滤波器( DLPF)等。本章我们不用中断方式读取数据,所以关闭中断, 然后也没用到 AUX IIC 接口外接其他传感器,所以也关闭这个接口。分别通过中断使能寄存器( 0X38)和用户控制寄存器( 0X6A)控制。 MPU6050 可以使用 FIFO 存储传感器数据,不过本章我们没有用到,所以关闭所有 FIFO 通道,这个通过 FIFO 使能寄存器( 0X23)控制,默认都是 0 (即禁止 FIFO),所以用默认值就可以了。陀螺仪采样率通过采样率分频寄存器( 0X19)控制,这个采样率我们一般设置为 50 即可。数字低通滤波器(DLPF)则通过配置寄存器( 0X1A)设置,一般设置 DLPF 为带宽的 1/2 即可。 5)配置系统时钟源并使能角速度传感器和加速度传感器 系统时钟源同样是通过电源管理寄存器 1( 0X6B)来设置,该寄存器的最低三位用于设置系统时钟源选择,默认值是 0(内部 8M RC 震荡),不过我们一般设置为 1,选择 x 轴陀螺 PLL 作为时钟源,以获得更高精度的时钟。同时,使能角速度传感器和加速度传感器,这两个操作通过电源管理寄存器 2( 0X6C)来设置,设置对应位为 0 即可开启。 3、DMP计算欧拉角 要得到欧拉角数据,就得利用我们的原始数据,进行姿态融合解算,这个比较复杂,知识点比较多,初学者 不易掌握。而 MPU6050 自带了数字运动处理器,即 DMP,并且, InvenSense 提供了一个 MPU6050 的嵌入式运动驱动库,结合 MPU6050 的 DMP,可以将我们的原始数据,直接转换成四元数输出,而得到四元数之后,就可以很方便的计算出欧拉角,从而得到 yaw、roll 和 pitch。使用内置的 DMP,大大简化了四轴的代码设计,且 MCU 不用进行姿态解算过程,大大降低了 MCU 的负担,从而有更多的时间去处理其他事件,提高系统实时性。 使用 MPU6050 的 DMP 输出的四元数是 q30 格式的,也就是浮点数放大了 2 的 30 次方倍。
q0=quat / q30; //q30 格式转换为浮点数

q1=quat / q30;

q2=quat / q30;

q3=quat / q30;

//计算得到俯仰角/横滚角/航向角

pitch=asin(-2 * q1 * q3 + 2 * q0* q2)* 57.3; //俯仰角

roll=atan2(2 * q2 * q3 + 2 * q0 * q1, -2 * q1 * q1 - 2 * q2* q2 + 1)* 57.3; //横滚角

yaw=atan2(2*(q1*q2 + q0*q3),q0*q0+q1*q1-q2*q2-q3*q3) * 57.3; //航向角
mpu_dmp_get_data 函数代码如下:
//得到 dmp 处理后的数据(注意,本函数需要比较多堆栈,局部变量有点多)

//pitch:俯仰角 精度:0.1° 范围:-90.0° <---> +90.0°

//roll:横滚角 精度:0.1° 范围:-180.0°<---> +180.0°

//yaw:航向角 精度:0.1° 范围:-180.0°<---> +180.0°

//返回值:0,正常 其他,失败

u8 mpu_dmp_get_data(float *pitch,float *roll,float *yaw)

{

float q0=1.0f,q1=0.0f,q2=0.0f,q3=0.0f;

unsigned long sensor_timestamp;

short gyro, accel, sensors;

unsigned char more;

long quat;

if(dmp_read_fifo(gyro, accel, quat, &sensor_timestamp, &sensors,&more))return 1;

if(sensors&INV_WXYZ_QUAT)

{

q0 = quat / q30; //q30 格式转换为浮点数

q1 = quat / q30;

q2 = quat / q30;

q3 = quat / q30;

//计算得到俯仰角/横滚角/航向角

*pitch = asin(-2 * q1 * q3 + 2 * q0* q2)* 57.3;// pitch

*roll = atan2(2 * q2 * q3 + 2 * q0 * q1, -2 * q1 * q1 - 2 * q2* q2 + 1)* 57.3;// roll

*yaw= atan2(2*(q1*q2 + q0*q3),q0*q0+q1*q1-q2*q2-q3*q3) * 57.3;//yaw

}else return 2;

return 0;

}
4、 硬件连接图: 5、串口返回数据,注意波特率设置为500Kbps了,因为数据量实在太大了! 5.1、通过匿名四轴这个软件观测传感器数据波形,这个软件真的太棒了。 静止时传感器的姿态:(因为是测试四轴的软件,所以显示的模型是四轴的) 倾斜开发板时的姿态:、 板载屏幕显示的参数:
  • 0
  • 收藏
  • 举报
  • 分享
我来回复

登录后可评论,请 登录注册

所有回答 数量:2
gtrjolin1986 2017-04-28
我也来
0   回复
举报
发布
qizc 2017-04-27
我来消灭零回复:'(
0   回复
举报
发布
x
收藏成功!点击 我的收藏 查看收藏的全部帖子