我造轮子,你造车,创客一起造起来!塔克创新资讯【塔克社区 www.xtark.cn 】【塔克博客 www.cnblogs.com/xtark/

    

本文介绍X-CTR100控制器 板载加速度陀螺仪MPU6050的使用。

X-CTR100集成三轴加速度三轴陀螺仪MEMS芯片MPU6050,使X-CTR100具有IMU(Inertial measurement unit)功能,通过姿态解算可获得X-CTR100姿态角,用于自平衡车、四旋翼飞行器、3D鼠标等作品设计。

原理

MPU6050是InvenSense公司推出的整合性6轴运动处理组件,相较于独立方案免除了组合陀螺仪与加速器时之轴间差的问题,内部整合3轴陀螺仪和3轴加速度传感器,并且具有数字运动处理引擎(DMP:Digital Motion Processor),方便实现姿态解算,降低主处理器运算负荷。MPU6050系统框图如下图所示。

MPU6050主要参数特性见下表,详细特性请参考芯片资料。

参数

说明

供电电压

3.3V-5V

功耗

500uA~3.9mA@3.3V

工作温度

-40~+85℃

通信接口

I2C协议(最高频率400K)

测量

加速度3轴 陀螺仪3轴

ADC分辨率

16位

陀螺仪量程

±250 º/s 、±500 º/s 、±1000 º/s、±2000 º/s

陀螺仪最高分辨率

131 LSB/(º/s)

加速度量程

±2g、±4g、±8g、±16g

加速度最高分辨率

16384 LSB/g

温度量程

-40~+85℃

温度分辨率

340 LSB/℃

MPU6050集成数字低通滤波器DLPF,通过低通滤波器可滤除高频噪声,获取更平滑的数据曲线。低通滤波器设置位DLPF_CFG[2:0],滤波器设置及对应的特性如下表所示。

X-CTR100坐标定义,MPU6050芯片坐标定义如下图左图所示,MPU6050芯片在X-CTR100上的安装方向如下右图所示,使用时请注意坐标系定义。

 

例程 l 数据读取

初始化MPU6050,采集3轴加速度、3轴陀螺仪、温度传感器数据并输出显示。

硬件说明

硬件资源:

  • 串口UART1
  • 板载资源MPU6050

硬件连接:

    

X-CTR100集成三轴加速度、三轴陀螺仪一体芯片MPU6050,可实现IMU功能,通过IIC2接口控制,MPU6050中断输出连接到PB8引脚。使用IIC2接口扩展其它功能模块时,请注意地址是否冲突。

软件生态

X-SOFT软件生态,X-API文件如下。

ax_mpu6050.c——X-CTR100 板载 MPU6050加速度陀螺仪源文件

ax_ mpu6050.h——X-CTR100 板载 MPU6050加速度陀螺仪头文件

操作函数如下:

void AX_MPU6050_Init(void); //MPU6050传感器初始化

 

//设置参数函数

void AX_MPU6050_SetAccRange(uint8_t range); //MPU6050设置加速度量程

void AX_MPU6050_SetGyroRange(uint8_t range); //MPU6050设置陀螺仪量程

void AX_MPU6050_SetGyroSmplRate(uint16_t smplrate); //MPU6050设置陀螺仪采样率

void AX_MPU6050_SetDLPF(uint8_t bandwidth); //MPU6050设置低通滤波器带宽

 

//获取数据函数

float AX_MPU6050_GetTempValue(void);    //MPU6050获取传感器温度值

int16_t AX_MPU6050_GetAccData_X(void); //MPU6050获取X轴加速度寄存器输出值

int16_t AX_MPU6050_GetAccData_Y(void); //MPU6050获取Y轴加速度寄存器输出值

int16_t AX_MPU6050_GetAccData_Z(void); //MPU6050获取Z轴加速度寄存器输出值

void AX_MPU6050_GetAccData(int16_t *pbuf); //MPU6050获取三轴加速度寄存器输出值

int16_t AX_MPU6050_GetGyroData_X(void); //MPU6050获取X轴陀螺仪寄存器输出值

int16_t AX_MPU6050_GetGyroData_Y(void); //MPU6050获取Y轴陀螺仪寄存器输出值

int16_t AX_MPU6050_GetGyroData_Z(void); //MPU6050获取Z轴陀螺仪寄存器输出值

void AX_MPU6050_GetGyroData(int16_t *pbuf); //MPU6050获取三轴轴陀螺仪寄存器输出值

设置项宏定义:

//加速度量程

#define
AX_ACC_RANGE_2G 0 //2g    

#define
AX_ACC_RANGE_4G 1 //4g

#define
AX_ACC_RANGE_8G 2 //8g    

#define
AX_ACC_RANGE_16G 3 //16g

 

//陀螺仪量程

#define
AX_GYRO_RANGE_250 0 //250度/秒    

#define
AX_GYRO_RANGE_500 1 //500度/秒

#define
AX_GYRO_RANGE_1000 2 //1000度/秒    

#define
AX_GYRO_RANGE_2000 3 //2000度/秒    

 

//带宽

#define
AX_DLPF_ACC184_GYRO188 1 //加速度带宽184Hz 陀螺仪带宽188Hz

#define
AX_DLPF_ACC94_GYRO98 2 //加速度带宽94Hz 陀螺仪带宽98Hz

#define
AX_DLPF_ACC44_GYRO42 3 //加速度带宽44Hz 陀螺仪带宽42Hz

#define
AX_DLPF_ACC21_GYRO20 4 //加速度带宽21Hz 陀螺仪带宽20Hz

#define
AX_DLPF_ACC10_GYRO10 5 //加速度带宽10Hz 陀螺仪带宽10Hz

#define
AX_DLPF_ACC5_GYRO5 6 //加速度带宽5Hz 陀螺仪带宽5Hz

软件说明

本例程AX_MPU6050_Init()完成MPU初始化,并设置陀螺仪量程250deg/s,加速计量程2g、陀螺采样率200Hz、低通滤波带宽陀螺98Hz、加速度94Hz。然后调用单轴读取函数分别读取每个轴数据,并显示。最后while循环中集中读取加速度、陀螺仪、温度数据,并显示。主程序代码如下。

int main(void)

{

    float tmp;

    int16_t acel[3];

    int16_t gyro[3];

 

    //X-CTR100初始化

    AX_Init(115200);

    printf("***X-CTR100 MPU6050运动传感器例程***\r\n\r\n");

 

    //模块初始化及配置

    AX_MPU6050_Init(); //MPU6050初始化

    AX_MPU6050_SetAccRange(AX_ACC_RANGE_2G); //设置加速度量程

    AX_MPU6050_SetGyroRange(AX_GYRO_RANGE_250); //设置陀螺仪量程

    AX_MPU6050_SetGyroSmplRate(200); //设置陀螺仪采样率

    AX_MPU6050_SetDLPF(AX_DLPF_ACC94_GYRO98); //设置低通滤波器带宽

 

                                                //X-API测试:分别读取加速度、陀螺仪每个轴数据

    printf("*分别读取加速度、陀螺仪每轴数据\r\n");

    acel[0] = AX_MPU6050_GetAccData_X();

    acel[1] = AX_MPU6050_GetAccData_Y();

    acel[2] = AX_MPU6050_GetAccData_Z();

    gyro[0] = AX_MPU6050_GetGyroData_X();

    gyro[1] = AX_MPU6050_GetGyroData_Y();

    gyro[2] = AX_MPU6050_GetGyroData_Z();

 

    printf("*加速度:%8d %8d %8d", acel[0], acel[1], acel[2]);

    printf(" 陀螺仪:%8d %8d %8d \r\n", gyro[0], gyro[1], gyro[2]);

 

    //X-API测试:循环读取加速度、陀螺仪、温度数据

    printf("*读取加速度、陀螺仪、温度数据\r\n");

 

    while (1)

    {

        AX_MPU6050_GetAccData(acel); //读取三轴加速度数据

        printf("*加速度:%8d %8d %8d", acel[0], acel[1], acel[2]);

 

        AX_MPU6050_GetGyroData(gyro); //读取三轴陀螺仪数据

        printf(" 陀螺仪:%8d %8d %8d", gyro[0], gyro[1], gyro[2]);

 

        tmp = AX_MPU6050_GetTempValue(); //读取温度传感器数据

        printf(" 温度:%8.2f\r\n", tmp);

 

        AX_Delayms(1000);

        AX_LEDG_Toggle();

    }

}

实现效果

上电MPU初始化完成后,即可循环输出3轴加速度、3轴陀螺仪、温度传感器数据。可缓慢晃动X-CTR100,观察数据变化。由于传感器未校准,存在数据偏差为正常现象,校准后即可修正,运行效果如下图所示。

    

玩转X-CTR100 l STM32F4 l MPU6050加速度陀螺仪传感器的更多相关文章

  1. 玩转X-CTR100 l STM32F4 l ADC 模拟数字转换

    我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ]      本文介绍X-CTR100控制器 AD转换接 ...

  2. 玩转X-CTR100 l STM32F4 l X-CTR100与树莓派搭建机器人平台

    我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ] 本文介绍X-CTR100控制器与树莓派Linux系统 ...

  3. 玩转X-CTR100 l STM32F4 l 舵机控制

    我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ] 本文介绍X-CTR100控制器的舵机控制,X-CTR ...

  4. 玩转X-CTR100 l STM32F4 l DRV8825 A4988 步进电机控制

    我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ]      本文介绍X-CTR100控制器控制步进电机 ...

  5. 玩转X-CTR100 l STM32F4 l 基础例程printf、LED、蜂鸣器、拨码开关、位带操作

    我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ]      本文介绍X-CTR100控制器基础板载资源 ...

  6. 玩转X-CTR100 l STM32F4 l PS2无线手柄

    我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ] SONY的PS2无线手柄是索尼游戏机的遥控手柄,控制 ...

  7. 玩转X-CTR100 l STM32F4 l AT24C02 EEPROM存储

    我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ]      本文介绍X-CTR100控制器 板载EEP ...

  8. 玩转X-CTR100 l STM32F4 l DSP指令集性能测试

    我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ]      本文介绍X-CTR100控制器 DSP库的 ...

  9. 玩转X-CTR100 l STM32F4 l FPU单精度浮点性能测试

    我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ]      本文介绍X-CTR100控制器如何开启ST ...

随机推荐

  1. boke练习: spring boot: security post数据时,要么关闭crst,要么添加隐藏域

    spring boot: security post数据时,要么关闭crst,要么添加隐藏域 http.csrf().disable(); 或者: <input name="${_cs ...

  2. 雷林鹏分享:C# 结构(Struct)

    C# 结构(Struct) 在 C# 中,结构是值类型数据结构.它使得一个单一变量可以存储各种数据类型的相关数据.struct 关键字用于创建结构. 结构是用来代表一个记录.假设您想跟踪图书馆中书的动 ...

  3. eclipse---->自己常用的快捷键

    organize imports----> ctrl+shift+o  导入其他工程的类(在学习springboot的注解@EnableAutoConfiguration时用到) 关闭当前窗口的 ...

  4. Jumpserver3.0部署(Centos6.x)

    1.jumpserver基础环境准备[root@jumpserver ~]# yum -y install epel-release[root@jumpserver ~]# yum clean all ...

  5. elasticsearch查询语句

    1,安装es 安装java环境 # java --versionjava version "1.8.0_65" Java(TM) SE Runtime Environment (b ...

  6. PHP const关键字

    常量是一个简单的标识符.在脚本执行期间该值不能改变(除了所谓的魔术常量,他们其实不是常量).常量默认大小写敏感.通常常量标识符总是大写的. 可以用define()函数来定义常量.在php5.3.0以后 ...

  7. Codeforces 1151F Sonya and Informatics (概率dp)

    大意: 给定01序列, 求随机交换k次后, 序列升序的概率. 假设一共$tot$个$0$, 设交换$i$次后前$tot$个数中有$j$个$0$的方案数为$dp[i][j]$, 答案即为$\frac{d ...

  8. 『cs231n』卷积神经网络工程实践技巧_下

    概述 计算加速 方法一: 由于计算机计算矩阵乘法速度非常快,所以这是一个虽然提高内存消耗但是计算速度显著上升的方法,把feature map中的感受野(包含重叠的部分,所以会加大内存消耗)和卷积核全部 ...

  9. 第二阶段——个人工作总结DAY05

    1.昨天做了什么:将值由一个活动传递到另一个活动. 2.今天打算做什么:打算制作修改密码的界面. 3.遇到的困难:因为是任务是分开的,所需要获取的值是通过另一个活动(不是自己任务)的传递过来的,所以还 ...

  10. php7配置多线程

    1.下载pthreads 文件  http://windows.php.net/downloads/pecl/releases/pthreads/3.1.5/ 2.把   pthreadVC2.dll ...