接口/总线/驱动
1. 简述
一直想自己做个四轴飞行器,却无从下手,终于狠下决心,拿出尘封已久的MPU6050模块,开始摸索着数据手册分析,一步一步地实现了MPU6050模块的功能,从MPU6050模块中读取出加速度值和陀螺仪采样值。
模块如下图所示:
2. 模块简介
MPU-60X0将3轴陀螺仪,3轴加速度计和数字运动处理器(DMP)组合在一起。通过I2C总线可以接受外部3轴罗盘的输入,提供9轴输出。
MPU-60X0具有三个用于数字化陀螺仪输出的16位ADC转换器和三个用于数字化加速度计输出的16位ADC转换器。
对于快速和慢速运动的精确跟踪,这些器件具有用户可编程的满量程±250,±500,±1000和±2000°/秒(dps)的用户可编程陀螺仪和用户可编程加速度计满量程 范围为±2g,±4g,±8g和±16g。
I2C通讯速率400KHz,SPI通讯速率1MHz(仅MPU-6000)。高速通讯SPI通讯速率20MHz(仅MPU-6000)。
MPU-60X0电源电压范围:2.375V ~ 3.46V
MPU-6000和MPU-6050相同,只是MPU-6050仅支持I2C接口,并具有单独的VLOGIC参考引脚。MPU-6000支持I2C和SPI接口,并具有单电源引脚VDD。
MPU-60X0具有16位ADC和信号调理的三轴MEMS陀螺仪
MPU-60X0由三个独立的振动MEMS速率陀螺仪组成,可检测绕X轴,Y轴和Z轴的旋转。 当陀螺仪围绕任何感应轴旋转时,科里奥利效应会引起由电容感应检测到的振动。 所得到的信号被放大,解调和滤波以产生与角速率成比例的电压。 使用单独的片内16位模数转换器(ADC)对该电压进行数字化,以对每个轴进行采样。 陀螺仪传感器的满量程范围可以数字编程为±250,±500,±1000或±2000度/秒(dps)。 ADC采样速率可以从每秒8,000个采样点编程到每秒3.9个采样点,用户可选的低通滤波器可实现宽范围的截止频率。
MPU-60X0的坐标轴关系如下图所示:
3. I2C通信协议
参考I2C通信协议
4. MPU6050寄存器读写
I2C通讯中,主处理器芯片作为主设备,MPU6050作为从设备。
4.1 从设备地址
MPU6050作为从设备使用时,有一个芯片自身的7位的设备地址,该地址为:0b110100X,7位地址的LSB位由引脚AD0的值决定,这样在一个板子的同一个I2C总线上可以同时使用两个MPU6050芯片,所以MPU6050的从设备地址为:0b1101000(0x68,AD0为低)或者0b1101001(0x69,AD0为高)。
4.2 写寄存器
主设备发送一个起始位(S),再发送I2C的从设备地址数据(由从7bit设备地址和1bit读标志位0组成),在第9个时钟SCL为高电平时,从设备发送应答信号(ACK)。接着,主设备发送从设备的寄存器地址(RA,8bit),等待从设备应答(ACK)后,主设备再发送要在寄存器中写入的数据(8bit),等待从设备应答(ACK)后,可以发送停止位(P)结束数据传输。 如果要写多个寄存器,在上一步中可以先不发停止位(P),而是继续发送数据(8bit),这样就可以实现连续写入多个寄存器数据了。MPU6050芯片会自动增加寄存器地址,并将连续写入的数据字节,按顺序依次写入到相邻的寄存器中。
两种写数据的格式如下图所示:
4.3 读寄存器
主设备发送一个起始位(S),再发送I2C的从设备地址数据(由从7bit设备地址和1bit写标志位0组成),在第9个时钟SCL为高电平时,从设备发送应答信号(ACK)。然后发送要读取的寄存器地址,在接收到从设备发送的应答信号(ACK)后,主设备发送一个起始位(Sr),再发送从设备地址(由从7bit设备地址和1bit读标志位1组成 )。从设备会发送一个应答信号(ACK),再发送寄存器中的数据(8bit)。主设备发送一个非应答信号(NOACK),和一个停止位(P),停止I2C传输。 如果要读取多个连续的寄存器,在上一步中不能发送非应答信号(NOACK)和停止位(P),而是要发送一个应答信号(ACK),等待下一个从设备发送的数据,直到最后一个数据接收完成后,主设备发送一个非应答信号(NOACK),和一个停止位(P),停止I2C传输。
两种读寄存器数据的格式如下图所示:
4.4 MPU6050通讯中的简写符号
5. 总结
至此,I2C总线通讯协议及MPU6050寄存器的读写已经介绍完毕,下一步就是用程序实现I2C通讯,并通过I2C读写MPU6050的寄存器数据。具体内容,请参考下一节。
全部0条评论
快来发表一下你的评论吧 !