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


    无欲速,无见小利。欲速,则不达;见小利,则大事不成。
  • 相关阅读:
    浏览器的同源策略及跨域解决方案
    前端开发工具系列
    初始Vue
    form表单组件
    聚合和分组F,Q和事物,cookie,session
    js循环找id
    div模拟textarea文本域轻松实现高度自适应
    prototype原型
    Javascript异步编程方法
    js中map、filter用法
  • 原文地址:https://www.cnblogs.com/ch122633/p/7363255.html
Copyright © 2011-2022 走看看