完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
本帖最后由 wghou 于 2015-6-22 16:14 编辑
有关MPU-6050的介绍这里就不赘述了。两个比较重要的文档 RM-MPU-6000A.pdf 和 ,自行百度。 硬件:MPU-6050模块+STM32F103VET6板+STM32固件库V3.5 1、接线:VCC、GND;SCL接PB6 / I2C1_SCL,SDA接PB7 / I2C1_SDA;当AD0引脚逻辑低电平时,设备的地址是0xD0,当AD0引脚逻辑高电平时,设备的地址是0xD1。(这儿AD0不接,地址为0xD0)MPU-6050模块接线还是挺方便的。 2、MPU-6050常用寄存器(摘自liuzhangchao的博客http://blog.sina.com.cn/s/blog_8240cbef01018i10.html) 1) Register 25 — Sample Rate Divider (SMPRT_DIV)(R/W) SMPRT_DIV 8位无符号值,通过该值将陀螺仪输出分频,得到采样频率。传感器寄存器的输出、FIFO 输出、DMP 采样和运动检测的都是基于该采样率。 采样率的计算公式 采样率 = 陀螺仪的输出频率 / (1 + SMPLRT_DIV) 当数字低通滤波器没有使能(Disable)时,陀螺仪的输出频率为8KHz,使能(Enable)时陀螺仪的输出频率为1KHz。 2)Register 26 — Configuration (CONFIG)(R/W) EXT_SYNC_SET 3位无符号值,配置帧同步引脚的采样(待续...) DLPF_CFG 3位无符号值,配置数字低通滤波器 数字低通滤波器是由DLPF_CFG来配置,根据下表中DLPF_CFG的值对加速度传感器和陀螺仪滤波: 3)Register 27 — Gyroscope Configuration (GYRO_CONFIG)(R/W) XG_ST 设置此位,X 轴陀螺仪进行自我测试; YG_ST 设置此位,Y 轴陀螺仪进行自我测试; ZG_ST 设置此位,Z 轴陀螺仪进行自我测试; FS_SEL 2 位无符号值。选择陀螺仪的量程。 关于自检待续... 根据下表,FS_SEL 选择陀螺仪输出的量程: 4)Register 28 – Accelerometer Configuration (ACCEL_CONFIG)(R/W) XA_ST 设置为 1 时,X 轴加速度感应器进行自检; YA_ST 设置为 1 时,Y 轴加速度感应器进行自检; ZA_ST 设置为 1 时,Z 轴加速度感应器进行自检; AFS_SEL 2 位无符号值。选择加速度计的量程。 关于自检待续... 根据下表,AFS_SEL 选择加速度传感器输出的量程: 5)Registers 59 to 64 – Accelerometer Measurements (ACCEL_XOUT_H, ACCEL_XOUT_L, ACCEL_YOUT_H, ACCEL_YOUT_L, ACCEL_ZOUT_H, and ACCEL_ZOUT_L)(R) ACCEL_XOUT 16 位 2’s 补码值,存储最近的 X 轴加速度感应器的测量值; ACCEL_YOUT 16 位 2’s 补码值,存储最近的 Y 轴加速度感应器的测量值; ACCEL_ZOUT 16 位 2’s 补码值,存储最近的 Z 轴加速度感应器的测量值。 在寄存器 28 中定义了每个 16 位的加速度测量值的最大范围,对于设置的每个最大范围,都对应一个加速度的灵敏度 ACCEL_xOUT,如下面的表中所示: 6)Registers 65 and 66 – Temperature Measurement (TEMP_OUT_H and TEMP_OUT_L)(R) TEMP_OUT 16 位有符号值,存储的最近温度传感器的测量值。 7)Registers 67 to 72 – Gyroscope Measurements (GYRO_XOUT_H, GYRO_XOUT_L, GYRO_YOUT_H, GYRO_YOUT_L, GYRO_ZOUT_H, and GYRO_ZOUT_L)(R) 在寄存器 27 中定义了每个 16 位的角速度测量值的最大范围,对于设置的每个最大范围,都对应一个加速度的灵敏度 GYRO_xOUT,如下面的表中所示: 8)Register 107 – Power Management 1 (PWR_MGMT_1) (R/W) 该寄存器允许用户配置电源模式和时钟源。它还提供了一个复位整个器件的位,和一个关闭温度传感器的位: DEVICE_RESET 置 1 后所有的寄存器复位,随后 DEVICE_RESET 自动置 0. SLEEP 置 1 后进入睡眠模式 CYCLE 当 CYCLE 被设置为 1,且 SLEEP 没有设置,MPU-60X0 进入循环模式,为了从速度传感器中获得采样值,在睡眠模式和正常数据采集模式之间切换,每次获得一个采样数据。在 LP_WAKE_CTRL(108)寄存器中,可以设置唤醒后的采样率和被唤醒的频率。 TEMP_DIS 置 1 后关闭温度传感器 CLKSEL 指定设备的时钟源 9)Register 117 – Who Am I (WHO_AM_I)(R) WHO_AM_I 中的内容是 MPU-60X0 的 6 位 I2C 地址,上电复位的第 6 位到第 1 位值为:110100,为了让两个 MPU-6050 能够连接在一个 I2C 总线上,当 AD0 引脚逻辑低电平时,设备的地址是 b1101000 ,当 AD0 引脚逻辑高电平时,设备的地址是 b1101001 。 3、MPU-6050操作 在此之前应先初始化GPIO,I2C。 1)初始化 I2C_ByteWrite(PWR_MGMT_1,0x00); //解除休眠状态 I2C_ByteWrite(SMPLRT_DIV,0x07); //设置陀螺仪采样频率:f=(1or8)/1+值(KHz),开启带通时为1,关闭带通时为8,典型值:0x07 I2C_ByteWrite(CONFIG,0x06); //设置带通滤波器通频带 I2C_ByteWrite(GYRO_CONFIG,0x18); //陀螺仪量程0-2000度每秒,不自检测 I2C_ByteWrite(ACCEL_CONFIG,0x01); //加速度计滤波5Hz,量程2g,不自检测 2)读取原始数据 uint8_t buffer[14]; unsigned char REG_Addr=ACCEL_XOUT_H; for(i=0;i<14;i++) { buffer=I2C_ByteRead(REG_Addr++); } ax=(((int16_t)buffer[0]) << 8) | buffer[1]; ay=(((int16_t)buffer[2]) << 8) | buffer[3]; az=(((int16_t)buffer[4]) << 8) | buffer[5]; //跳过温度ADC gx=(((int16_t)buffer[8]) << 8) | buffer[9]; gy=(((int16_t)buffer[10]) << 8) | buffer[11]; gz=(((int16_t)buffer[12]) << 8) | buffer[13]; 3) 待续... |
|
相关推荐
|
|
1049 浏览 0 评论
AD7686芯片不传输数据给STM32,但是手按住就会有数据。
1017 浏览 2 评论
2123 浏览 0 评论
如何解决MPU-9250与STM32通讯时,出现HAL_ERROR = 0x01U
1219 浏览 1 评论
hal库中i2c卡死在HAL_I2C_Master_Transmit
1639 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-24 02:53 , Processed in 0.503982 second(s), Total 70, Slave 53 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号