关于mpu6050的几个很好的帖子
最近在研究6050,真是很磨人啊,这个小东西还挺复杂,一个读取程序竟然需要600多行。
这几天连查资料找到了几个很好的帖子,要是以后有人看到这篇帖子,可以避免误入歧途,也可以省去很多时间。
1、阿西莫夫电子论坛:神贴。。ahttp://www.amobbs.com/thread-5581033-1-1.html?_dsign=5c5b5cde
2、强大的百度出来的第七实验室:https://wenku.baidu.com/view/89db87ac7375a417876f8f6b.html
3、6050角度转换原理:http://blog.csdn.net/u010389437/article/details/38541561
说一下我对他的理解。其实也不是特别的复杂,6050就是一个i2c器件,就像一个微控制器,通过它你能知道你当钱的姿态,把他想象成一个黑箱,
要使用它,首先你得了解他的寄存器,知道如何初始化,读取,写入等等。都是套路其实,看着照葫芦画瓢就行,
重要的就是知道如何将输出的数据进行转化为你能需要并且能看懂的数据。而下面你得资料你绝对用得到。
6050的操作:
#include "mpu6050.h"
#include "bsp_usart1.h"
#include "bsp_i2c.h" /**
* @brief 写数据到MPU6050寄存器
* @param
* @retval
*/
void MPU6050_WriteReg(u8 reg_add,u8 reg_dat)
{
i2c_Start();
i2c_SendByte(MPU6050_SLAVE_ADDRESS); //写从机地址,并配置成写模式
i2c_WaitAck();
i2c_SendByte(reg_add); //写寄存器地址
i2c_WaitAck();
i2c_SendByte(reg_dat); //写寄存器数据
i2c_WaitAck();
i2c_Stop();
} /**
* @brief 从MPU6050寄存器读取数据
* @param
* @retval
*/
void MPU6050_ReadData(u8 reg_add,unsigned char*Read,u8 num)
{
unsigned char i; i2c_Start();
i2c_SendByte(MPU6050_SLAVE_ADDRESS);
i2c_WaitAck();
i2c_SendByte(reg_add);
i2c_WaitAck(); i2c_Start();
i2c_SendByte(MPU6050_SLAVE_ADDRESS+); //写从机地址,并配置成读模式
i2c_WaitAck(); for(i=;i<(num-);i++)
{
*Read=i2c_ReadByte();
Read++;
}
*Read=i2c_ReadByte();
i2c_Stop();
} //**************至此mpu6050的读写操作函数都搞定了,下面只需要初始化就可以读取他的数据了 /**
* @brief 初始化MPU6050芯片
* @param
* @retval
*/
void MPU6050_Init(void)
{
int i=,j=;
//在初始化之前要延时一段时间,若没有延时,则断电后再上电数据可能会出错
for(i=;i<;i++)
{
for(j=;j<;j++)
{
;
}
}
MPU6050_WriteReg(MPU6050_RA_PWR_MGMT_1, 0x00); //解除休眠状态
MPU6050_WriteReg(MPU6050_RA_SMPLRT_DIV , 0x07); //陀螺仪采样率,1KHz
MPU6050_WriteReg(MPU6050_RA_CONFIG , 0x06); //低通滤波器的设置,截止频率是1K,带宽是5K
MPU6050_WriteReg(MPU6050_RA_ACCEL_CONFIG , 0x00); //配置加速度传感器工作在2G模式,不自检
MPU6050_WriteReg(MPU6050_RA_GYRO_CONFIG, 0x18); //陀螺仪自检及测量范围,典型值:0x18(不自检,2000deg/s)
} /**
* @brief 读取MPU6050的ID
* @param
* @retval
*/
uint8_t MPU6050ReadID(void)
{
unsigned char Re = ;
MPU6050_ReadData(MPU6050_RA_WHO_AM_I,&Re,); //读器件地址
if(Re != 0x68)
{
printf("MPU6050 dectected error!\r\n检测不到MPU6050模块,请检查模块与开发板的接线");
return ;
}
else
{
printf("MPU6050 ID = %d\r\n",Re);
return ;
} }
/**
* @brief 读取MPU6050的加速度数据
* @param
* @retval
*/
void MPU6050ReadAcc(short *accData)
{
u8 buf[];
MPU6050_ReadData(MPU6050_ACC_OUT, buf, );
accData[] = (buf[] << ) | buf[];
accData[] = (buf[] << ) | buf[];
accData[] = (buf[] << ) | buf[];
} /**
* @brief 读取MPU6050的角加速度数据
* @param
* @retval
*/
void MPU6050ReadGyro(short *gyroData)
{
u8 buf[];
MPU6050_ReadData(MPU6050_GYRO_OUT,buf,);
gyroData[] = (buf[] << ) | buf[];
gyroData[] = (buf[] << ) | buf[];
gyroData[] = (buf[] << ) | buf[];
} /**
* @brief 读取MPU6050的原始温度数据
* @param
* @retval
*/
void MPU6050ReadTemp(short *tempData)
{
u8 buf[];
MPU6050_ReadData(MPU6050_RA_TEMP_OUT_H,buf,); //读取温度值
*tempData = (buf[] << ) | buf[];
} /**
* @brief 读取MPU6050的温度数据,转化成摄氏度
* @param
* @retval
*/
void MPU6050_ReturnTemp(short*Temperature)
{
short temp3;
u8 buf[]; MPU6050_ReadData(MPU6050_RA_TEMP_OUT_H,buf,); //读取温度值
temp3= (buf[] << ) | buf[];
*Temperature=(((double) (temp3 + )) / )-;
}
,
光知道6050怎么操作还是不行的,你的有一个桥梁到6050上面去,得有一个放大镜偷窥里面的数据。这是就需要i2c闪亮登场。
伪代码我就不说了,看我的其他博客。
有了这些你就无敌了。
关于mpu6050的几个很好的帖子的更多相关文章
- 很励志的帖子,转来自勉,也反省一下自己写码这几年【奋斗10年,一个.NET程序员从0到拥有5系】
http://bbs.csdn.net/topics/390833230 想想自己毕业近8年,真正写码也5年.从当初毕业时的拒绝写码,到迫不得已开始写码,是命运也好,是自己的不努力也罢.今天看来,写码 ...
- 4、CC2541芯片中级教程-OSAL操作系统(简单AT指令实现+IIC软件和硬件实现驱动MPU6050)
本文根据一周CC2541笔记汇总得来—— 适合概览和知识快速索引—— 全部链接: 中级教程-OSAL操作系统\OSAL操作系统-实验01 OSAL初探 [插入]SourceInsight-工程建立方法 ...
- 有一个很大的整数list,需要求这个list中所有整数的和,写一个可以充分利用多核CPU的代码,来计算结果(转)
引用 前几天在网上看到一个淘宝的面试题:有一个很大的整数list,需要求这个list中所有整数的和,写一个可以充分利用多核CPU的代码,来计算结果.一:分析题目 从题中可以看到“很大的List”以及“ ...
- 网络问卷调查js实现代码
昨天一个同行妹纸写了一个网络问卷调查的效果,但是有bug,于是就来问我该如何解决这个bug.经过我的分析,bug主要还是出在复选框的那部分,经过修改,bug问题解决,现在贴出如下代码,仅供大家参考: ...
- [转]ios push
转:http://blog.csdn.net/showhilllee/article/details/8631734 APNS的推送机制 首先我们看一下苹果官方给出的对ios推送机制的解释.如下图 P ...
- 使用 Eclipse 调试 Java 程序的 10 个技巧
你应该看过一些如<关于调试的N件事>这类很流行的帖子 .假设我每天花费1小时在调试我的应用程序上的话,那累积起来的话也是很大量的时间.由于这个原因,用这些时间来重视并了解所有使我们调试更方 ...
- manven搭建和ssm的整合(转)
原文:http://www.cnblogs.com/youzhibing/p/5004619.html 这是个很好的帖子,但是原文的maven搭建上有点问题. 帖子后面有说,其实不用配环境变量也是可以 ...
- 线程的Abort方法有感
今天看CSDN上一个很老的帖子,有个人说Thread.Abort()方法调用之后一定会抛出异常,我对这个有点疑问. 于是自己做了一个测试demo,来研究Abort抛出异常的时机.废话少说,直接上代码: ...
- IIS7.0上传文件限制的解决方法
在 Windows7(iis7.5).Win2008(iis 7.0)和Win2003(iis 6.0) 中,默认设置是特别严格和安全的,这样可以最大限度地减少因以前太宽松的超时和限制而造成的攻击. ...
随机推荐
- sql 删除重复数据,保留重复数据第一条
SELECT row=ROW_NUMBER() OVER(PARTITION BY 重复字段一,重复字段二 ORDER BY GETDATE()) ,* FROM 筛选重复表名 具体实现如 ...
- AR入门系列-07-Vuforia柱形体识别
今天为大家带来Vuforia柱形体识别的使用教程 首先我们要进入Vuforia官网在TargetManager中添加Target,这次我们添加的类型为Cylinder圆柱 Bottom Diamete ...
- Objective-C日记-之NSPredicate
谓语:NSPredicate 1,概述: 用于设置指定的过滤器的条件,通俗的理解就是设置选择的条件,再对指定的对象应用这个条件 2,用法: a,首先设置谓语. NSPredicate *predica ...
- KoaHub平台基于Node.js开发的Koa EJS渲染插件代码信息详情
koa-ejs ejs render middleware for koa koa-ejs Koa ejs view render middleware. support all feature of ...
- 使用promise手动封装ajax函数
最近在做一个单页应用,node和浏览器仅通过json传输数据,因为是只有自己用等于是锻炼一下自己,所以也不用考虑seo的问题,node端我已经写好了,但是浏览器端想要用ajax原生太麻烦,用封装的函数 ...
- 【常见踩坑】USB调试安装失败(Installation failed with message INSTALL_CANCELED_BY_USER)
一.写在前面 最近一直在忙活着项目重构,忙活了一个多月(那是天天加班,不分昼夜呀,ps:这不是我司要求的哈),终于把沉积了三四年的老项目给重构了,目前在测试阶段,也总算有了点闲时来跟大家分享分享一些问 ...
- 在 sublime text 上添加 Package Control
https://packagecontrol.io/installation 打开 View > Show Consolemenu 粘贴如下文本,回车 import urllib.request ...
- wxpython分割窗研究(解决sashPosition=0无效的BUG)
用wxpython开发一个简单的exe其实很简单的,但是在开发的过程中会遇到若干的坑.疑问.甚至bug,让人摸不清头脑!恰恰关于这方面的文档是少之又少,看来看去大家还是在官方的文档上加以引用说明,但是 ...
- Jackson注解学习参考(转)
转:http://wong-john.iteye.com/blog/1753402 以下内容摘录.翻译自https://github.com/FasterXML/jackson-annotations ...
- SQL SERVER 报:由于数据移动,未能继续以 NOLOCK 方式扫描错误的解决办法。
比如在某个表中使用 select xxx from xxx with(nolock) where xxxx 查询. 提示出错:由于数据移动,未能继续以 NOLOCK 方式扫描. 它有可能某些条件出错, ...