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的地址时却是直接使用的。这就是区别。。。。。。。艹


    无欲速,无见小利。欲速,则不达;见小利,则大事不成。
  • 相关阅读:
    Vasya and Endless Credits CodeForces
    Dreamoon and Strings CodeForces
    Online Meeting CodeForces
    数塔取数 基础dp
    1001 数组中和等于K的数对 1090 3个数和为0
    1091 线段的重叠
    51nod 最小周长
    走格子 51nod
    1289 大鱼吃小鱼
    POJ 1979 Red and Black
  • 原文地址:https://www.cnblogs.com/ch122633/p/7363255.html
Copyright © 2011-2022 走看看