单片机开发教程3 | 您所在的位置:网站首页 › 单片机无人机设计 › 单片机开发教程3 |
文章目录
1. 简介1.1 模块原理图1.2 引脚说明1.3 接线方式
2. IIC通信2.1 IIC介绍2.2 例程讲解
3. 姿态解算3.1 欧拉角3.2 解算方法3.3 一阶互补滤波
4. 串口通信4.1 概念4.2 串口显示姿态角4.3 接线图
1. 简介
MPU6050 是 InvenSense 公司推出的整合性 6 轴运动处理组件,其内部整合了 3 轴陀螺仪和 3 轴加速度传感器,并且含有一个IIC 接口, 可用于连接外部磁力传感器,并利用自带的数字运动处理器(DMP: Digital Motion Processor) 硬件加速引擎,通过主 IIC 接口,向应用端输出完整的 9 轴融合演算数据。 InvenSense 公司提供了一套基于DMP的运动处理驱动库,可大大降低单片机对动处理运算的负荷,同时也大大降低了编程难度。该模块广泛运用于飞控、计步等电子产品中。 1.1 模块原理图XDA和XCL是在MPU6050作为主机时的信号线,在与单片机的IIC通信中,MPU6050作为从机,所以用不到 AD0 是从 IIC 接口(接 MCU)的地址控制引脚,该引脚控制IIC 地址的最低位。由原理图可知,AD0 接了 GND,所以 MPU6050 的 IIC 地址默认为:0X68 INT也用不到,当模块需要输出数据时,可以通过该引脚给单片机中断信号,一般都不需要 1.3 接线方式单片机 —— MPU6050 5V VCC GND GND Px.x SCL Px.x SDA 2. IIC通信如果你学过一段时间单片机,你或多或少会听说过IIC通信(也写作I2C,通常读作:I方C),这是硬件开发里很常见、很常用的一种通信协议。 其实协议并不是听上去的那么高不可攀,它终究是人为定义的一个标准而已,我们只需遵循这个标准就可以了。 这里面的协议层会涉及到时序,如果你还不是“老司机”,暂且可以放下不去专研,因为这些都会被封装为函数,使用格式也非常固定,完全不必担心。比如通信中最频繁的 读写操作 ,会被封装成 IIC读/写函数 ,而读写只能算是最基础的操作,还可以利用它进一步封装成各种设置函数和数据采集函数。 2.1 IIC介绍I2C(Inter-Integrated Circuit)总线是由 PHILIPS 公司开发的两线式串行总线,用于连接微控制器及其外围设备。是微电子通信控制领域广泛采用的一种总线标准。它是 同步通信的一种特殊形式,具有接口线少,控制方式简单, 器件封装形式小,通信速率较高等优点。 I2C 总线 只有 两根双向信号线 。一根是 数据线 SDA ,另一根是 时钟线 SCL 。由于其管脚少,硬件实现简单,可扩展性强等特点,因此被广泛的使用在各大集成芯片内。 2.2 例程讲解开发资料中的例程代码虽然很多,但最后在main函数里对MPU6050操作的只有两个函数,其他函数大多作为这两个函数的内容。其实,对于这种不小的工程项目,我们往往会写成多个文件,方便查看和使用,这就涉及到了工程项目的管理,后续可能还会出一篇教程 (>﹏<) // 初始化MPU6050 void InitMPU6050() { Single_WriteI2C(PWR_MGMT_1, 0x00); // #define PWR_MGMT_1 0x6B Single_WriteI2C(SMPLRT_DIV, 0x07); // #define SMPLRT_DIV 0x19 Single_WriteI2C(CONFIG, 0x06); // #define CONFIG 0x1A Single_WriteI2C(GYRO_CONFIG, 0x18); // #define GYRO_CONFIG 0x1B Single_WriteI2C(ACCEL_CONFIG, 0x01);// #define ACCEL_CONFIG 0x1C } // 合成数据 int GetData(uchar REG_Address) { uchar H,L; H=Single_ReadI2C(REG_Address); // 相应寄存器地址 L=Single_ReadI2C(REG_Address+1); return ((H Ax=GetData(ACCEL_XOUT_H); Ay=GetData(ACCEL_YOUT_H); Az=GetData(ACCEL_ZOUT_H); Gx=GetData(GYRO_XOUT_H); Gy=GetData(GYRO_YOUT_H); Gz=GetData(GYRO_ZOUT_H); TR0 = 0; time = (TH0 |
CopyRight 2018-2019 实验室设备网 版权所有 |