BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / smartcar / #299同步于 2018/3/7
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Smartcar机器人发帖

陀螺仪、ENC03、MPU6050、I2C等知识科普

Ncer
2018/3/7镜像同步1 回复
# 陀螺仪、ENC03、MPU6050、I2C等知识科普 --- ## 陀螺仪: 大家都知道,陀螺仪是一种能测量角速度的器件,是姿态解算、角度测量等任务中无法缺少的工具。 单轴的陀螺仪配合单轴的加速度计,就能结算出一个姿态角。在平衡车的应用中,一维的姿态角(倾斜角)就足够了。而在飞行器中,一般需要三个轴的陀螺仪和三个轴的加速度计,解算出三个姿态角。 经常可以见到模拟陀螺仪和数字陀螺仪,实际上这仅关乎器件输出是模拟量还是数字量。 输出模拟量的陀螺仪,如ENC03。输出数字量的陀螺仪,如MPU6050、MPU9250等等。 模拟陀螺仪使用简单,仅需要在单片机中进行AD采集即可。至于数字陀螺仪,因为输出为数字量,因此都需要相应的通信协议进行通信,如I2C、SPI等。 ### ENC03 ENC03 是电磁平衡组官方教程中使用的单轴模拟陀螺仪,因为是官方教程中使用的,因此使用的人很多,造成了市面上价格不菲。 ENC03 仅仅是一个陀螺仪,因此在角度解算中,还需要另一个加速度计。在官方教程中,加速度计使用的是MMA7361,二者输出都是模拟量。由于购买的人很多,**大部分淘宝店家出售的都是集成了ENC03和MMA7361的模块。** 模拟陀螺仪输出的是电压,所以使用简单,单片机AD采集即可。官方使用的这两款,由于已经是多年前的产品,性能一般。当然,用在智能车比赛中还是足够的。 ### MPU6050 MPU6050是一个比较常见的“陀螺仪”,实际上它不仅包含三轴陀螺仪,还包含了三轴加速度计。如果是MPU9250,甚至还包含了一个三轴的磁力计(电子罗盘)。MPU6050是一个典型的MEMS,将六轴的东西集成到了大概3mm×3mm×1.5mm的体积之中,因此在飞控中得到广泛应用。 因此,**在平衡车的应用中,角度解算仅需要一个MPU6050就足够了。** MPU6050使用I2C进行通信。I2C使用两条线SCL、SDA进行通信,再加上供电的两条线,使用MPU6050仅需要电源、GND、SCL、SDA即可。 其他引脚 - XCL、XDA,一般是接其他I2C器件,如磁力计等,然后通过编程,可以让MPU6050帮你读取磁力计的数据,再一起读回单片机。 - IRQ,中断引脚,可以编程设定当数据准备好时,该引脚有电平变化,触发单片机的外部中断。 ## I2C I2C是NXP制定的一种串行通信协议,该协议仅使用两条信号线(SCL、SDA),即可达到最高400K的通信频率,且可支持多个器件(有兴趣的可以再去了解一下实现方式,为什么仅需两条线即可实现多器件通信,可与SPI协议进行对比)。 SCL是时钟线,SDA是数据线。当SCL为高电平时,对SDA的电平进行采样,高电平则为1,低则为0。 因为该协议通过SCL高电平时,数据线的变化来决定传输的终止或者开始,**因此数据必须在SCL为低电平的时候改变,在SCL高电平的时候,SDA必须保持稳定。** 开始信号:SCL为高电平,SDA从高->低 终止信号:SCL为高电平,SDA从低->高 ### 软件(模拟)I2C、硬件I2C 这是两种单片机的I2C协议实现方式。 现在常见的单片机都有自己的I2C外设,因此可以直接使用单片机的I2C接口,此即**硬件I2C**。 同理,有的单片机没有I2C外设,如8051单片机,或者单片机I2C引脚用作他用,可以直接控制通过其他GPIO的高低变化的时序来模拟I2C。这是**软件I2C** 两种方式相比,软件I2C较方便移植,但速率较慢。硬件I2C配置较为麻烦,但速率较高,通过配置可以知道I2C通信的确切速率。 ### 几个概念 #### 主机:通信发起的一方,一般是单片机 #### 从机:被主机寻址的一方,如MPU6050 #### 从机地址:不同从机的标识符,从机仅会对自己的地址的寻址做出响应(ACK) #### 通信时序: 1. 主机发送开始信号 2. 主机发送要寻址的从机地址(7位) 3. 主机发送写或者读标志位 (1位) 4. 从机响应(ACK) 5. 开始数据的传输 6. 主机发送结束信号 #### 以MPU6050为例的通信时序: 写或者读寄存器: 1. 主机(单片机)发送开始信号 2. 主机发送要寻址的从机地址(7位0x68) 3. 主机发送写和读标志位(1或者0) 4. MPU6050响应 5. 主机发送要写或者读的寄存器(如0x02) 6. MPU6050响应 7. MPU6050发送数据 8. 主机不响应(NACK),发送停止信号 **需要注意的是,有的单片机中,使用从机的地址是8位,实际上他是将2、3步合成一步,这种情况下,MPU6050的地址为0xD0(即0x68左移一位)** 补充: 关于MPU6050的驱动,可参考: https://github.com/Ncerzzk/drivers_mcu/blob/master/mpu9250.c 该驱动用的是MPU9250(但实际上MPU6050与MPU9250其从机地址是一样的,仅有dev_ID不同)
订阅后,新回复会通过你的通知中心匿名送达。
1 条回复
bdyzhy9527机器人#1 · 2018/3/7
bd,可轮到我说这句话了[ema9]