zoukankan      html  css  js  c++  java
  • mpu6050学习

    一、MPU6050初始化

    1. /**************************实现函数********************************************
    2. *函数原型:        void MPU6050_initialize(void)
    3. *功  能:     初始化     MPU6050 以进入可用状态。
    4. *******************************************************************************/
    5. void MPU6050_initialize(void)
    6. {

    7.     IICwriteByte(devAddr, MPU6050_RA_PWR_MGMT_1, 0x80); //PWR_MGMT_1 -- DEVICE_RESET 1
    8.     delay_ms(50);
    9.     IICwriteByte(devAddr, MPU6050_RA_SMPLRT_DIV, 0x00); //SMPLRT_DIV -- SMPLRT_DIV = 0 Sample Rate = Gyroscope Output Rate / (1 + SMPLRT_DIV)
    10.     IICwriteByte(devAddr, MPU6050_RA_PWR_MGMT_1, 0x03); //PWR_MGMT_1 -- SLEEP 0; CYCLE 0; TEMP_DIS 0; CLKSEL 3 (PLL with Z Gyro reference)
    11.     IICwriteByte(devAddr, MPU6050_RA_INT_PIN_CFG, 0 << 7 | 0 << 6 | 0 << 5 | 0 << 4 | 0 << 3 | 0 << 2 | 1 << 1 | 0 << 0); // INT_PIN_CFG -- INT_LEVEL_HIGH, INT_OPEN_DIS, LATCH_INT_DIS, INT_RD_CLEAR_DIS, FSYNC_INT_LEVEL_HIGH, FSYNC_INT_DIS, I2C_BYPASS_EN, CLOCK_DIS
    12.     IICwriteByte(devAddr, MPU6050_RA_CONFIG, MPU6050_DLPF_BW_42); //CONFIG -- EXT_SYNC_SET 0 (disable input pin for data sync) ; default DLPF_CFG = 0 => ACC bandwidth = 260Hz GYRO bandwidth = 256Hz)
    13.     MPU6050_setFullScaleGyroRange(MPU6050_GYRO_FS_2000);
    14.     // Accel scale 8g (4096 LSB/g)
    15.     IICwriteByte(devAddr, MPU6050_RA_ACCEL_CONFIG, 2 << 3);
    16.     
    17. }


    初始化过程

    1. 对寄存器register 107 power management 1bit71复位

    2. 对寄存器register 25 Sample Rate Divider,设置SMPLRT_DIV0。(最大)

    3. 对寄存器register 107 power management 1 z轴重力计为参考系。

    4. 对寄存器register 55 INT PIN/BYPASS ENABLE CONFIGURATION设置为00000010INT脚逻辑电平为高电平,推挽输出,产生50us脉冲,读取INT_STATUS后中断清除,关闭FSYNC中断,I2C_BYPASSS_EN1I2C_MST_EN0时,MCU可以直接访问I2C总线。

    5. 对寄存器register 27 陀螺仪设置量程为±2000°/s

    6. 对寄存器register 28 加速度计量程为±8g


    2017年6月4日:为了移植DMP官方的5.1库,花了好多时间。这里对IIC的Slave地址进行总结。
    网上有各种各样的地址版本,如0x68,0xD0等等。明明地址不一样,为什么他们都能用呢。

    就是这里:第一个地址是b1101000,而第二个地址是b1101001。注意这是7位的二进制数,我们一般用第一个,也就是b1101000
    相关的IIC信息:

    所以地址需要在后面添加一位读写位,所以正确的地址应该是b1101 0000和b1101 0001。
    而网上的0xD0就是b1101 0000,但是0x68却是b01101000。
    所以0x68其实是7位的地址,这也就是为什么有的IIC在发送地址的时候是左移1位的。
    而使用D0的地址时却是直接使用的。这就是区别。。。。。。。艹


    无欲速,无见小利。欲速,则不达;见小利,则大事不成。
  • 相关阅读:
    Python-理解装饰器
    PHP-四种解析XML文件的方法
    学习-短信的上行(MO)和下行(MT)详解
    Linux-进程、进程组、作业、会话、控制终端详解
    Linux-进程基础
    Linux-查看进程的完整路径
    Linux-使用 screen 管理你的远程会话
    Python-常用字符串转换实例
    Python-闭包详解
    Git-Git Book阅读笔记
  • 原文地址:https://www.cnblogs.com/ch122633/p/7363255.html
Copyright © 2011-2022 走看看