MPU6050原始数据的获取
2018-02-12 15:32
141 查看
MPU6050采用IIC通讯,IIC通讯的结构如下图
IIC 即Inter-Integrated Circuit(集成电路总线),这种总线类型是由飞利浦半导体公司在八十年代初设计出来的一种简单、双向、二线制、同步串行总线,主要是用来连接整体电路(ICS) ,IIC是一种多向控制总线,也就是说多个芯片可以连接到同一总线结构下,同时每个芯片都可以作为实时数据传输的控制源。这种方式简化了信号传输总线接口。
IIC总线一共有四根线,分别是VCC,GND,SCL,SDA。SCL的为时钟线,SDA为数据线。I2C总线上的主设备与从设备之间以字节(8位)为单位进行双向的数据传输。
[align=left] IIC发送数据是8位数据(即8个0或1)为一个小单元一起发送。整个协议发送的顺序如下:[/align][align=left] [/align][align=left] [/align][align=left]主发从收:主机发送 START 信号-> 主机发送地址 -> 从机发送ACK应答 -> (主机发送数据 -> 从机发送ACK应答 (循环)) -> 主机发送STOP信号 或 主机发送 START 信号启动下一次传输 [/align][align=left]
[/align][align=left]主收从发:主机发送 START 信号-> 从机发送发地址 -> 主机发送ACK应答 -> (从机发送数据 -> 主机发送ACK应答 (循环)) -> 接受至最后一个字节时,主机发送NACK -> 主机发送 STOP 信号或 主机发送START信号 启动下一次传输 。[/align]
[align=left][/align]MPU6050数据在寄存器中的地址:
0x3B,加速度计的X轴分量高八位
0x3C,加速度计的X轴分量低八位
0x3D,加速度计的Y轴分量高八位
0x3E,加速度计的Y轴分量低八位
0x3F,加速度计的Z轴分量高八位
0x40,加速度计的Z轴分量高八位
0x41,当前温度TEMP高八位
0x42,当前温度TEMP低八位
0x43,绕X轴旋转的角速度高八位
0x44,绕X轴旋转的角速度低八位
0x45,绕Y轴旋转的角速度高八位
0x46,绕Y轴旋转的角速度低八位
0x47,绕Z轴旋转的角速度高八位
0x48,绕Z轴旋转的角速度低八位[align=left]
[/align]接下来就是读出这些数据
[align=left]
[/align][align=left]
[/align][align=left]接线方式 [/align][align=left]
MPU6050 Arduino uno
VCC —— 3.3V/5V
GND —— GND
SCL —— SCL
SDA —— SDA
[/align]
[align=left]以下是在ARDUINO上面具体实现代码 [/align][align=left]在Arduino ide 1.81版本编译通过[/align]
[align=left]
[/align][align=left] [/align][align=left]#include <Wire.h>[/align]
波特率设为9600
IIC 即Inter-Integrated Circuit(集成电路总线),这种总线类型是由飞利浦半导体公司在八十年代初设计出来的一种简单、双向、二线制、同步串行总线,主要是用来连接整体电路(ICS) ,IIC是一种多向控制总线,也就是说多个芯片可以连接到同一总线结构下,同时每个芯片都可以作为实时数据传输的控制源。这种方式简化了信号传输总线接口。
IIC总线一共有四根线,分别是VCC,GND,SCL,SDA。SCL的为时钟线,SDA为数据线。I2C总线上的主设备与从设备之间以字节(8位)为单位进行双向的数据传输。
[align=left] IIC发送数据是8位数据(即8个0或1)为一个小单元一起发送。整个协议发送的顺序如下:[/align][align=left] [/align][align=left] [/align][align=left]主发从收:主机发送 START 信号-> 主机发送地址 -> 从机发送ACK应答 -> (主机发送数据 -> 从机发送ACK应答 (循环)) -> 主机发送STOP信号 或 主机发送 START 信号启动下一次传输 [/align][align=left]
[/align][align=left]主收从发:主机发送 START 信号-> 从机发送发地址 -> 主机发送ACK应答 -> (从机发送数据 -> 主机发送ACK应答 (循环)) -> 接受至最后一个字节时,主机发送NACK -> 主机发送 STOP 信号或 主机发送START信号 启动下一次传输 。[/align]
[align=left][/align]MPU6050数据在寄存器中的地址:
0x3B,加速度计的X轴分量高八位
0x3C,加速度计的X轴分量低八位
0x3D,加速度计的Y轴分量高八位
0x3E,加速度计的Y轴分量低八位
0x3F,加速度计的Z轴分量高八位
0x40,加速度计的Z轴分量高八位
0x41,当前温度TEMP高八位
0x42,当前温度TEMP低八位
0x43,绕X轴旋转的角速度高八位
0x44,绕X轴旋转的角速度低八位
0x45,绕Y轴旋转的角速度高八位
0x46,绕Y轴旋转的角速度低八位
0x47,绕Z轴旋转的角速度高八位
0x48,绕Z轴旋转的角速度低八位[align=left]
[/align]接下来就是读出这些数据
[align=left]
[/align][align=left]
[/align][align=left]接线方式 [/align][align=left]
MPU6050 Arduino uno
VCC —— 3.3V/5V
GND —— GND
SCL —— SCL
SDA —— SDA
[/align]
[align=left]以下是在ARDUINO上面具体实现代码 [/align][align=left]在Arduino ide 1.81版本编译通过[/align]
[align=left]
[/align][align=left] [/align][align=left]#include <Wire.h>[/align]
#define ACCEL_XOUT_H 0x3B #define ACCEL_XOUT_L 0x3C #define ACCEL_YOUT_H 0x3D #define ACCEL_YOUT_L 0x3E #define ACCEL_ZOUT_H 0x3F #define ACCEL_ZOUT_L 0x40 #define TEMP_OUT_H 0x41 #define TEMP_OUT_L 0x42 #define GYRO_XOUT_H 0x43 #define GYRO_XOUT_L 0x44 #define GYRO_YOUT_H 0x45 #define GYRO_YOUT_L 0x46 #define GYRO_ZOUT_H 0x47 #define GYRO_ZOUT_L 0x48 unsigned char DATA_H, DATA_L; //float ax,ay,az,gx,gy,gz,temp; void setup() { Wire.begin(); Serial.begin(9600); delay(10); MPU6050Reset(); } void loop() { mpu6050_TEMP_OUT_data(); mpu6050_ACCEL_X_data(); mpu6050_ACCEL_Y_data(); mpu6050_ACCEL_Z_data(); mpu6050_GYRO_X_data(); mpu6050_GYRO_Y_data(); mpu6050_GYRO_Z_data() ; Serial.print(" ACCEL_X "); Serial.print(mpu6050_ACCEL_X_data()); Serial.print(","); Serial.print(" ACCEL_Y "); Serial.print(mpu6050_ACCEL_Y_data()); Serial.print(","); Serial.print(" ACCEL_Z "); Serial.print(mpu6050_ACCEL_Z_data()); Serial.print(","); Serial.print(" GYRO_X "); Serial.print(mpu6050_GYRO_X_data()); Serial.print(","); Serial.print(" GYRO_Y "); Serial.print(mpu6050_GYRO_Y_data()); Serial.print(","); Serial.print(" GYRO_Z "); Serial.print(mpu6050_GYRO_Z_data()); Serial.print(","); Serial.print(" TEMP_OUT ");Serial.print(mpu6050_TEMP_OUT_data()); Serial.println(); } void MPU6050Write(unsigned char adr, unsigned char dat) { Wire.beginTransmission(0x68); //开启MPU6050的传输 Wire.write(adr); //指定寄存器地址 Wire.write(dat); //写入一个字节的数据 Wire.endTransmission(true); //结束传输,true表示释放总线 } void MPU6050Reset() { MPU6050Write(0x6B, 0x00); MPU6050Write(0x19, 0x07); MPU6050Write(0x1A, 0x06); MPU6050Write(0x1B, 0x18); //2000 MPU6050Write(0x1C, 0x10); //4g /*寄存器的设置参考此文章http://blog.sina.com.cn/s/blog_8240cbef01018i10.html */ } unsigned char ReadMPUReg(int nReg) { Wire.beginTransmission(0x68); Wire.write(nReg); Wire.requestFrom(0x68, 1, true); Wire.endTransmission(true); return Wire.read(); } //读 加速度计X轴 数据 int mpu6050_ACCEL_X_data() { DATA_H = ReadMPUReg(ACCEL_XOUT_H); DATA_L = ReadMPUReg(ACCEL_XOUT_L); return (DATA_H << 8) + DATA_L; } //读 加速度计Y轴 数据 int mpu6050_ACCEL_Y_data() { DATA_H = ReadMPUReg(ACCEL_YOUT_H); DATA_L = ReadMPUReg(ACCEL_YOUT_L); return (DATA_H << 8) + DATA_L; } //读 加速度计Z轴 数据 int mpu6050_ACCEL_Z_data() { DATA_H = ReadMPUReg(ACCEL_ZOUT_H); DATA_L = ReadMPUReg(ACCEL_ZOUT_L); return (DATA_H << 8) + DATA_L; } //读 陀螺仪计X轴 数据 int mpu6050_GYRO_X_data() { DATA_H = ReadMPUReg(GYRO_XOUT_H); DATA_L = ReadMPUReg(GYRO_XOUT_L); return (DATA_H << 8) + DATA_L; } //读 陀螺仪计Y轴 数据 int mpu6050_GYRO_Y_data() { DATA_H = ReadMPUReg(GYRO_YOUT_H); DATA_L = ReadMPUReg(GYRO_YOUT_L); return (DATA_H << 8) + DATA_L; } //读 陀螺仪计Z轴 数据 int mpu6050_GYRO_Z_data() { DATA_H = ReadMPUReg(GYRO_ZOUT_H); DATA_L = ReadMPUReg(GYRO_ZOUT_L); return (DATA_H << 8) + DATA_L; } //读 温度 数据 int mpu6050_TEMP_OUT_data() { DATA_H = ReadMPUReg(TEMP_OUT_H); DATA_L = ReadMPUReg(TEMP_OUT_L); return (DATA_H << 8) + DATA_L; } //by Sunlife在ide里面选择串口监视器可以看见数据
波特率设为9600
相关文章推荐
- PHP获取Post的原始数据方法小结
- Camera2.0新API下的摄像头预览、原始图像数据获取等
- 解MPU6050,用STM32读取原始数据,并相互融合算出俯仰角、翻滚角、偏航角
- MPU6050的数据获取、分析与处理
- 单片机采集的MPU6050原始数据对应关系
- php获取post原始数据
- 微型四轴设计之通过arduino读取MPU6050原始数据
- 小技巧:用CxImage将从摄像头获取的图像原始数据转成JPG,然
- Arduino教程:MPU6050的数据获取、分析与处理
- 小技巧:用CxImage将从摄像头获取的图像原始数据转成JPG,然后通过DDS发送出去
- 从接口获取的数据中,html元素<>经过转义,怎样按原始的意义将数据输出显示呢?
- 【库函数版本】基于STM32F103的MPU6050的原始数据读取程序详解
- PHP获取POST的原始数据的方法小结
- 小技巧:用CxImage将从摄像头获取的图像原始数据转成JPG,然后通过DDS发送出去
- 获取微信公众号授权失败, 请稍后重试! 公众平台返回原始数据为: 错误代码-40164,错误信息-invalid ip, not in whitelist hint:
- 大数据原始数据从那些途径获取?200个国内外经济金融行研咨询数据网站大全
- 详解MPU6050,用STM32读取原始数据,并相互融合算出俯仰角、翻滚角、偏航角
- MPU6050的数据获取、分析与处理
- Retrofit自定义Converter,获取原始请求数据,实现自定义解析
- jqgrid获取原始数据,js对象拷贝