玩转X-CTR100 l STM32F4 l MPU6050加速度陀螺仪传感器

我造轮子,你造车,创客一起造起来!塔克创新资讯【塔克社区 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 |
|
工作温度 |
|
|
通信接口 |
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 #define #define #define
//陀螺仪量程 #define #define #define #define
//带宽 #define #define #define #define #define #define |
软件说明
本例程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加速度陀螺仪传感器的更多相关文章
- 玩转X-CTR100 l STM32F4 l ADC 模拟数字转换
我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ] 本文介绍X-CTR100控制器 AD转换接 ...
- 玩转X-CTR100 l STM32F4 l X-CTR100与树莓派搭建机器人平台
我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ] 本文介绍X-CTR100控制器与树莓派Linux系统 ...
- 玩转X-CTR100 l STM32F4 l 舵机控制
我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ] 本文介绍X-CTR100控制器的舵机控制,X-CTR ...
- 玩转X-CTR100 l STM32F4 l DRV8825 A4988 步进电机控制
我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ] 本文介绍X-CTR100控制器控制步进电机 ...
- 玩转X-CTR100 l STM32F4 l 基础例程printf、LED、蜂鸣器、拨码开关、位带操作
我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ] 本文介绍X-CTR100控制器基础板载资源 ...
- 玩转X-CTR100 l STM32F4 l PS2无线手柄
我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ] SONY的PS2无线手柄是索尼游戏机的遥控手柄,控制 ...
- 玩转X-CTR100 l STM32F4 l AT24C02 EEPROM存储
我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ] 本文介绍X-CTR100控制器 板载EEP ...
- 玩转X-CTR100 l STM32F4 l DSP指令集性能测试
我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ] 本文介绍X-CTR100控制器 DSP库的 ...
- 玩转X-CTR100 l STM32F4 l FPU单精度浮点性能测试
我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ] 本文介绍X-CTR100控制器如何开启ST ...
随机推荐
- Java中的参数传递 --Java
1.基本类型传值,对象类型传地址 按值传递:当将一个参数传递给一个方法时,方法接收的是原始值的一个副本.因此,如果方法修改了该参数,仅改变副本,而原始值保持不变. 按引用传递:当将一个参数传递给一个方 ...
- C#如何实现类似QQ那样靠边隐藏的功能
http://www.cnblogs.com/yechensi/archive/2009/08/02/1537145.html C#如何实现类似QQ那样靠边隐藏的功能 你想过为自己的程序添加靠边隐藏的 ...
- 4.1.2 A Funny Game(POJ 2484)
Problem description: n枚硬币排成一个圈,A和B轮流从中取一枚或两枚硬币,不过取两枚时,所取的两枚硬币必须是连续的.硬币取走之后留下空位,相隔空位的硬币视为不连续的.A开始先取,取 ...
- 使用LVM方式安装Ubuntu 16.04
--- By 小甘丶 注: 这里只讲解如何配置LVM,其他不再陈述! 这个方法,通用的!只要操作系统支持LVM即可!(个人推测,尚未证实) 配置好虚拟机后,开始安装,先进入Ubuntu使用界面,对磁盘 ...
- python--model进阶
一.QuerySet 1.可切片 使用Python 的切片语法来限制查询集记录的数目 .它等同于SQL 的LIMIT 和OFFSET 子句. >>> Entry.objects.a ...
- hdu1569-方格取数-二分图网络流
方格取数(2) Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Su ...
- bzoj-2038-莫队
2038: [2009国家集训队]小Z的袜子(hose) Time Limit: 20 Sec Memory Limit: 259 MBSubmit: 15784 Solved: 7164[Sub ...
- Leetcode 1021. 最佳观光组合
1021. 最佳观光组合 显示英文描述 我的提交返回竞赛 用户通过次数91 用户尝试次数246 通过次数92 提交次数619 题目难度Medium 给定正整数数组 A,A[i] 表示第 i 个观 ...
- 函数使用七:AUTHORITY_CHECK_RFC
此函数是用来检查用户使用RFC函数的权限 感觉是个废物,从来没遇到过这么蛋疼的权限设置,以及这么挫的检查... Import USERID 执行RFC函数的用 ...
- ORACLE SQL 函数 INITCAP()
INITCAP() 假设c1为一字符串.函数INITCAP()是将每个单词的第一个字母大写,其它字母变为小写返回. 单词由空格,控制字符,标点符号等非字母符号限制. select initcap('h ...