参考视频:https://www.bilibili.com/video/BV1Fy4y1t7me
https://www.bilibili.com/video/BV1kx411k7JT?p=63
效果图:
接线:
SDA–PB11
SCL–PB10
MPU6050模块的介绍:
MPU6050内部整合了三轴MEMS陀螺仪、三轴MEMS加速度计以及一个可扩展的数字运动处理器DMP(Digital Motion Processor),而且还可以连接一个第三方数字传感器(如磁力计),这样的话,就可以通过IIC接口输出一个9轴信号(链接第三方数字传感器才可以输出九轴信号,否则只有六轴信号)。更加方便的是,有了DMP,可以结合InvenSense公司提供的运动处理资料库,实现姿态解算。通过自带的DMP,可以通过IIC接口输出9轴融合演算的数据,大大降低了运动处理运算对操作系统的负荷,同时也降低了开发难度。其实,简单一句话说,陀螺仪就是测角速度的,加速度传感器就是测角加速度的,二者数据通过算法就可以得到PITCH、YAW、ROLL角了。
陀螺仪知识点介绍:
陀螺仪是用高速回转体的动量矩敏感壳体相对惯性空间绕正交于自转轴的一个或二个轴的角运动检测装置。利用其他原理制成的角运动检测装置起同样功能的也称陀螺仪。
从力学的观点近似的分析陀螺的运动时,可以把它看成是一个刚体,刚体上有一个万向支点,而陀螺可以绕着这个支点作三个自由度的转动,所以陀螺的运动是属于刚体绕一个定点的转动运动。更确切地说,一个绕对称铀高速旋转的飞轮转子叫陀螺。将陀螺安装在框架装置上,使陀螺的自转轴有角转动的自由度,这种装置的总体叫做陀螺仪。
陀螺仪的原理就是,一个旋转物体的旋转轴所指的方向在不受外力影响时,是不会改变的。人们根据这个道理,用它来保持方向,制造出来的东西就叫陀螺仪。我们骑自行车其实也是利用了这个原理。轮子转得越快越不容易倒,因为车轴有一股保持水平的力量。陀螺仪在工作时要给它一个力,使它快速旋转起来,一般能达到每分钟几十万转,可以工作很长时间。然后用多种方法读取轴所指示的方向,并自动将数据信号传给控制系统。
用正点原子的MPU6050案例库
主函数改为:
#include "led.h"
#include "delay.h"
#include "sys.h"
#include "usart.h"
#include "mpu6050.h"
#include "inv_mpu.h"
#include "inv_mpu_dmp_motion_driver.h"
//aacx,aacy,aacz:x,y,z三个方向上面的加速度值
//gyrox,gyroy,gyroz:x,y,z三个方向上面的陀螺仪值
//roll:横滚角.单位0.01度。 -18000 -> 18000 对应 -180.00 -> 180.00度
//pitch:俯仰角.单位 0.01度。-9000 - 9000 对应 -90.00 -> 90.00 度
//yaw:航向角.单位为0.1度 0 -> 3600 对应 0 -> 360.0度
int main(void)
{
float pitch,roll,yaw; //欧拉角
short aacx,aacy,aacz; //加速度传感器原始数据
short gyrox,gyroy,gyroz; //陀螺仪原始数据
short temp; //温度
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
uart_init(115200); //串口初始化为500000
delay_init(); //延时初始化
LED_Init(); //初始化与LED连接的硬件接口
MPU_Init(); //初始化MPU6050
while(mpu_dmp_init()!=0){}
while(1)
{
while(mpu_dmp_get_data(&pitch,&roll,&yaw)!=0){}
temp=MPU_Get_Temperature(); //得到温度值
MPU_Get_Accelerometer(&aacx,&aacy,&aacz); //得到加速度传感器数据
MPU_Get_Gyroscope(&gyrox,&gyroy,&gyroz); //得到陀螺仪数据
// mpu6050_send_data(aacx,aacy,aacz,gyrox,gyroy,gyroz);//用自定义帧发送加速度和陀螺仪原始数据
// usart1_report_imu(aacx,aacy,aacz,gyrox,gyroy,gyroz,(int)(roll*100),(int)(pitch*100),(int)(yaw*10));
printf("roll:%d pitch:%d yaw:%d rn",(int)(roll*100),(int)(pitch*100),(int)(yaw*10));//打印出来
}
}
工程文件:https://download.csdn.net/download/weixin_51102592/21445006
后续增加oled屏幕显示
设计资源 培训 开发板 精华推荐
- 具有 12VDC 和 24VAC 辅助输入的 LT4275AHMS 25W PD 解决方案的典型应用电路
- 使用 ON Semiconductor 的 NCP1230D65R2 的参考设计
- ADR3412 1.2V 输出微功率、高精度电压基准的典型应用
- ADA4841-2YRMZ-R7 典型应用电路 用于 ADC 驱动器的低功耗、低噪声运算放大器原理图
- 使用 ON Semiconductor 的 NCP1529 的参考设计
- LT3091HDE 具有 LDO 输入至输出控制的高效低噪声单电感正负转换器的典型应用
- AD7858 的典型低功耗电路、3V 至 5V 单电源、200ksps、8 通道、12 位采样 ADC
- 迷你特斯拉线圈
- LT1308AIS8 锂离子至 5V 升压转换器的典型应用电路提供 1A
- AS3955-WL_DK_ST,基于近场通信的演示套件