最近在研究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的操作:

  1. #include "mpu6050.h"
  2. #include "bsp_usart1.h"
  3. #include "bsp_i2c.h"
  4.  
  5. /**
  6. * @brief 写数据到MPU6050寄存器
  7. * @param
  8. * @retval
  9. */
  10. void MPU6050_WriteReg(u8 reg_add,u8 reg_dat)
  11. {
  12. i2c_Start();
  13. i2c_SendByte(MPU6050_SLAVE_ADDRESS); //写从机地址,并配置成写模式
  14. i2c_WaitAck();
  15. i2c_SendByte(reg_add); //写寄存器地址
  16. i2c_WaitAck();
  17. i2c_SendByte(reg_dat); //写寄存器数据
  18. i2c_WaitAck();
  19. i2c_Stop();
  20. }
  21.  
  22. /**
  23. * @brief 从MPU6050寄存器读取数据
  24. * @param
  25. * @retval
  26. */
  27. void MPU6050_ReadData(u8 reg_add,unsigned char*Read,u8 num)
  28. {
  29. unsigned char i;
  30.  
  31. i2c_Start();
  32. i2c_SendByte(MPU6050_SLAVE_ADDRESS);
  33. i2c_WaitAck();
  34. i2c_SendByte(reg_add);
  35. i2c_WaitAck();
  36.  
  37. i2c_Start();
  38. i2c_SendByte(MPU6050_SLAVE_ADDRESS+); //写从机地址,并配置成读模式
  39. i2c_WaitAck();
  40.  
  41. for(i=;i<(num-);i++)
  42. {
  43. *Read=i2c_ReadByte();
  44. Read++;
  45. }
  46. *Read=i2c_ReadByte();
  47. i2c_Stop();
  48. }
  49.  
  50. //**************至此mpu6050的读写操作函数都搞定了,下面只需要初始化就可以读取他的数据了
  51.  
  52. /**
  53. * @brief 初始化MPU6050芯片
  54. * @param
  55. * @retval
  56. */
  57. void MPU6050_Init(void)
  58. {
  59. int i=,j=;
  60. //在初始化之前要延时一段时间,若没有延时,则断电后再上电数据可能会出错
  61. for(i=;i<;i++)
  62. {
  63. for(j=;j<;j++)
  64. {
  65. ;
  66. }
  67. }
  68. MPU6050_WriteReg(MPU6050_RA_PWR_MGMT_1, 0x00); //解除休眠状态
  69. MPU6050_WriteReg(MPU6050_RA_SMPLRT_DIV , 0x07); //陀螺仪采样率,1KHz
  70. MPU6050_WriteReg(MPU6050_RA_CONFIG , 0x06); //低通滤波器的设置,截止频率是1K,带宽是5K
  71. MPU6050_WriteReg(MPU6050_RA_ACCEL_CONFIG , 0x00); //配置加速度传感器工作在2G模式,不自检
  72. MPU6050_WriteReg(MPU6050_RA_GYRO_CONFIG, 0x18); //陀螺仪自检及测量范围,典型值:0x18(不自检,2000deg/s)
  73. }
  74.  
  75. /**
  76. * @brief 读取MPU6050的ID
  77. * @param
  78. * @retval
  79. */
  80. uint8_t MPU6050ReadID(void)
  81. {
  82. unsigned char Re = ;
  83. MPU6050_ReadData(MPU6050_RA_WHO_AM_I,&Re,); //读器件地址
  84. if(Re != 0x68)
  85. {
  86. printf("MPU6050 dectected error!\r\n检测不到MPU6050模块,请检查模块与开发板的接线");
  87. return ;
  88. }
  89. else
  90. {
  91. printf("MPU6050 ID = %d\r\n",Re);
  92. return ;
  93. }
  94.  
  95. }
  96. /**
  97. * @brief 读取MPU6050的加速度数据
  98. * @param
  99. * @retval
  100. */
  101. void MPU6050ReadAcc(short *accData)
  102. {
  103. u8 buf[];
  104. MPU6050_ReadData(MPU6050_ACC_OUT, buf, );
  105. accData[] = (buf[] << ) | buf[];
  106. accData[] = (buf[] << ) | buf[];
  107. accData[] = (buf[] << ) | buf[];
  108. }
  109.  
  110. /**
  111. * @brief 读取MPU6050的角加速度数据
  112. * @param
  113. * @retval
  114. */
  115. void MPU6050ReadGyro(short *gyroData)
  116. {
  117. u8 buf[];
  118. MPU6050_ReadData(MPU6050_GYRO_OUT,buf,);
  119. gyroData[] = (buf[] << ) | buf[];
  120. gyroData[] = (buf[] << ) | buf[];
  121. gyroData[] = (buf[] << ) | buf[];
  122. }
  123.  
  124. /**
  125. * @brief 读取MPU6050的原始温度数据
  126. * @param
  127. * @retval
  128. */
  129. void MPU6050ReadTemp(short *tempData)
  130. {
  131. u8 buf[];
  132. MPU6050_ReadData(MPU6050_RA_TEMP_OUT_H,buf,); //读取温度值
  133. *tempData = (buf[] << ) | buf[];
  134. }
  135.  
  136. /**
  137. * @brief 读取MPU6050的温度数据,转化成摄氏度
  138. * @param
  139. * @retval
  140. */
  141. void MPU6050_ReturnTemp(short*Temperature)
  142. {
  143. short temp3;
  144. u8 buf[];
  145.  
  146. MPU6050_ReadData(MPU6050_RA_TEMP_OUT_H,buf,); //读取温度值
  147. temp3= (buf[] << ) | buf[];
  148. *Temperature=(((double) (temp3 + )) / )-;
  149. }

光知道6050怎么操作还是不行的,你的有一个桥梁到6050上面去,得有一个放大镜偷窥里面的数据。这是就需要i2c闪亮登场。

伪代码我就不说了,看我的其他博客。

有了这些你就无敌了。

关于mpu6050的几个很好的帖子的更多相关文章

  1. 很励志的帖子,转来自勉,也反省一下自己写码这几年【奋斗10年,一个.NET程序员从0到拥有5系】

    http://bbs.csdn.net/topics/390833230 想想自己毕业近8年,真正写码也5年.从当初毕业时的拒绝写码,到迫不得已开始写码,是命运也好,是自己的不努力也罢.今天看来,写码 ...

  2. 4、CC2541芯片中级教程-OSAL操作系统(简单AT指令实现+IIC软件和硬件实现驱动MPU6050)

    本文根据一周CC2541笔记汇总得来—— 适合概览和知识快速索引—— 全部链接: 中级教程-OSAL操作系统\OSAL操作系统-实验01 OSAL初探 [插入]SourceInsight-工程建立方法 ...

  3. 有一个很大的整数list,需要求这个list中所有整数的和,写一个可以充分利用多核CPU的代码,来计算结果(转)

    引用 前几天在网上看到一个淘宝的面试题:有一个很大的整数list,需要求这个list中所有整数的和,写一个可以充分利用多核CPU的代码,来计算结果.一:分析题目 从题中可以看到“很大的List”以及“ ...

  4. 网络问卷调查js实现代码

    昨天一个同行妹纸写了一个网络问卷调查的效果,但是有bug,于是就来问我该如何解决这个bug.经过我的分析,bug主要还是出在复选框的那部分,经过修改,bug问题解决,现在贴出如下代码,仅供大家参考: ...

  5. [转]ios push

    转:http://blog.csdn.net/showhilllee/article/details/8631734 APNS的推送机制 首先我们看一下苹果官方给出的对ios推送机制的解释.如下图 P ...

  6. 使用 Eclipse 调试 Java 程序的 10 个技巧

    你应该看过一些如<关于调试的N件事>这类很流行的帖子 .假设我每天花费1小时在调试我的应用程序上的话,那累积起来的话也是很大量的时间.由于这个原因,用这些时间来重视并了解所有使我们调试更方 ...

  7. manven搭建和ssm的整合(转)

    原文:http://www.cnblogs.com/youzhibing/p/5004619.html 这是个很好的帖子,但是原文的maven搭建上有点问题. 帖子后面有说,其实不用配环境变量也是可以 ...

  8. 线程的Abort方法有感

    今天看CSDN上一个很老的帖子,有个人说Thread.Abort()方法调用之后一定会抛出异常,我对这个有点疑问. 于是自己做了一个测试demo,来研究Abort抛出异常的时机.废话少说,直接上代码: ...

  9. IIS7.0上传文件限制的解决方法

    在 Windows7(iis7.5).Win2008(iis 7.0)和Win2003(iis 6.0) 中,默认设置是特别严格和安全的,这样可以最大限度地减少因以前太宽松的超时和限制而造成的攻击. ...

随机推荐

  1. redux-form的学习笔记二--实现表单的同步验证

    (注:这篇博客参考自redux-form的官方英文文档)左转http://redux-form.com/6.5.0/examples/syncValidation/ 在这篇博客里,我将用redux-f ...

  2. DOM的内部插入和外部插入

    /*****************返回值都是最前面调用这个方法的元素 ***************** */ //这是外部插入 $("div").insertBefore($( ...

  3. 解决input的回车enter和失焦blur冲突问题:实现回车保存,blur还原编辑内容功能

    最近做项目遇到: 背景:点击单元格,easyUI自动生成input可编辑框. 问题点:input的回车enter和失焦blur冲突问题:实现回车保存,blur还原编辑内容功能 要实现需求: 1.回车键 ...

  4. poj 2892---Tunnel Warfare(线段树单点更新、区间合并)

    题目链接 Description During the War of Resistance Against Japan, tunnel warfare was carried out extensiv ...

  5. 10分钟精通SharePoint - SharePoint拓扑结构

    SharePoint服务器角色:前端,应用程序和数据库服务器 应用程序服务:搜索.Office文档.User Profile和App等应用服务器 数据库类型:内容数据库.应用程序数据库和配置数据库 规 ...

  6. ArcGIS API for JavaScript FeatureLayer服务属性编辑

    首先说一下感想吧,刚入行时感觉深似海,掉到了GIS开发的陨石大坑里了,首先是学了小半年的Flex,用到了ArcGIS API for Flex,接着又是半年的ArcEngine开发,现在终于摸到了一点 ...

  7. React中使用CSSTransitionGroup插件实现轮播图

    动画效果,是一个页面上必不可少的功能,学习一个新的东西,当然就要学习,如何用新的东西,用它的方法去实现以前的东西啦.今天呢,我就在这里介绍一个试用react-addons-css-transition ...

  8. js控制滚动条默认在底部

    html: <div id="chat_content" class="chat_content">                    < ...

  9. VC加载显示bmp图片的函数

    void ShowBitmap(HDC hdc,const char *srcpath) { HBITMAP hBitmap = (HBITMAP)::LoadImage(0, srcpath, IM ...

  10. 轻量级代码生成器-OnlyCoder

    程序猿利器:代码生成器,使用代码生成器已经好几年了,增删改查各种生成,从UI到DATA层均生成过.之前有使用过动软的,T4模板等....  T4生成实体还是没有问题的,但是生成MVC视图就有点烦杂了, ...