12324|18

973

帖子

15

TA的资源

纯净的硅(高级)

楼主
 

晒设计方案+STM32F429i开发板之MEMS三轴陀螺仪初体验 [复制链接]

 
     总的来说,这块板子上的外围器件并不算多,主要的就是VGA TFT,另外,还有就是USB、SDRAM、按键以及今天要体验的陀螺仪。
     MEMS是微机电系统的意思,这个东西可以说给我们的生活带来了很大的变化,就比如最常见的手机,现今的手机都离不开它,没有哪个智能手机敢不用它。
今天要介绍的陀螺仪在手机中也有他的身影,在手机中它一般用于拍照防抖功能,短时间的离线导航等。
     陀螺仪的作用可大了,小到你的手机,再到飞机、舰船,再到导弹、火箭,这些东西没一个离得开它,不对,有一个能不用,就是你的手机,除了你的手机没一个离得开它。
     板子上的陀螺仪芯片型号为L3GD20,搜了一下,这是ST自家的一款传感器。这款传感器有spi和i2c两种接口可用,我们看看它在板子上的电路图不难发现,他的两种接口我们都能用,但显然ST的意图是让我们用SPI接口。

     看看他的庐山真面目:


     在官方的例程里,有个简单的小例子,我们来看看:其名字为“MEMS_Example”。
     关于这款芯片的手册在ST的官网及其他许多网站都有,大家可自行下载。
     
     先大概浏览了一下程序,发现例程里边貌似只有两个轴的,先编译下载验证一下:
果然,程序少一个轴向的。
程序大概意思就是,把板子往前滚,则显示向前的箭头;往后滚,则显示向下的箭头;往左滚,则显示向左的箭头;往右滚,则显示向右的箭头。
如下图:
         

     然而板子在板子所在的平面旋转却无反应,所用陀螺仪分明是三轴的,可是程序却只用了其中的两轴,略微有点缺憾吧,于是我把第三轴方向加了上去,及Z轴。
     修改后,在原基础上,当板子绕板子顺时针和逆时针分别旋转时,用屏幕显示出来。如下图:
   

下面是部分代码:
if(Xval>Yval)
        {
                if(Xval>Zval)
                        max_of_xyz = 1;
                else
                        max_of_xyz = 3;
        }
        else
        {
                if(Yval>Zval)
                        max_of_xyz = 2;
                else
                        max_of_xyz = 3;
        }
        //max_of_xyz = 3;

        if(max_of_xyz==3)
        {
                if ((int16_t)Buffer[2] > 40)
                {
                        LCD_Clear(LCD_COLOR_WHITE);
                        LCD_SetTextColor(LCD_COLOR_BLUE);
                        //LCD_DrawFullRect(100, 40, 40, 120);
                        //LCD_FillTriangle(50, 190, 120, 160, 160, 310);
                        LCD_DrawCircle(120, 160, 90);
                        LCD_DrawCircle(120, 160, 91);
                        LCD_DrawCircle(120, 160, 92);
                        LCD_FillTriangle(120,105,105, 251,  241,  261);
                        Delay(50);
                }
                if ((int16_t)Buffer[2] < -40)
                {
                        LCD_Clear(LCD_COLOR_WHITE);
                        LCD_SetTextColor(LCD_COLOR_BLUE);
                        //LCD_DrawFullRect(100, 40, 40, 120);
                        //LCD_FillTriangle(50, 190, 120, 160, 160, 310);
                        LCD_DrawCircle(120, 160, 90);
                        LCD_DrawCircle(120, 160, 91);
                        LCD_DrawCircle(120, 160, 92);
                        LCD_FillTriangle(120,135,135, 251,  241,  261);
                        Delay(50);
                }
        }
       
  if (max_of_xyz == 1)
  {
    if ((int16_t)Buffer[0] > 40)
    {
      /* Clear the LCD */
      LCD_Clear(LCD_COLOR_WHITE);
      LCD_SetTextColor(LCD_COLOR_MAGENTA);
      LCD_DrawFullRect(100, 40, 40, 120);
      LCD_FillTriangle(50, 190, 120, 160, 160, 310);
      Delay(50);
    }
    if ((int16_t)Buffer[0] < -40)
    {
      /* Clear the LCD */
      LCD_Clear(LCD_COLOR_WHITE);
      LCD_SetTextColor(LCD_COLOR_RED);
      LCD_DrawFullRect(100, 160, 40, 120);
      LCD_FillTriangle(50, 190, 120, 160, 160, 10);
      Delay(50);
    }
  }
  if(max_of_xyz == 2)
  {
    if ((int16_t)Buffer[1] < -40)
    {
      /* Clear the LCD */
      LCD_Clear(LCD_COLOR_WHITE);
      LCD_SetTextColor(LCD_COLOR_GREEN);
      LCD_DrawFullRect(120, 140, 100, 40);
      LCD_FillTriangle(120, 120, 5, 60, 260, 160);      
      Delay(50);
    }
    if ((int16_t)Buffer[1] > 40)
    {      
      /* Clear the LCD */
      LCD_Clear(LCD_COLOR_WHITE);
      LCD_SetTextColor(LCD_COLOR_BLUE);
      LCD_DrawFullRect(20, 140, 100, 40);
      LCD_FillTriangle(120, 120, 235, 60, 260, 160);
      Delay(50);
    }
  }
}

为了尽量减少改动,我没有switch case ,不知道用了效率会不会更好。

当然,陀螺仪的作用可远不止如此,具体的话以后可能会给出详细的例子。
此帖出自stm32/stm8论坛

最新回复

楼主能分享下代码吗975378644@qq.com  详情 回复 发表于 2016-12-9 10:43

赞赏

4

查看全部赞赏

点赞 关注
个人签名我来到这个世界,就是为了遇见你。在某天我们会相遇,然后在一起,直到最后一起离去。
 

回复
举报

1944

帖子

32

TA的资源

纯净的硅(高级)

沙发
 
谢谢分享
此帖出自stm32/stm8论坛

点评

多谢版主来捧场,谢谢  详情 回复 发表于 2014-3-25 16:10
 
 

回复

1453

帖子

18

TA的资源

纯净的硅(高级)

板凳
 
增加了Z轴旋转测试,挺好!
此帖出自stm32/stm8论坛

点评

多谢支持,谢谢  详情 回复 发表于 2014-3-25 16:11
 
个人签名http://weibo.com/u/1391449055
 

回复

973

帖子

15

TA的资源

纯净的硅(高级)

4
 

多谢版主来捧场,谢谢
此帖出自stm32/stm8论坛
 
个人签名我来到这个世界,就是为了遇见你。在某天我们会相遇,然后在一起,直到最后一起离去。
 
 

回复

973

帖子

15

TA的资源

纯净的硅(高级)

5
 
sacq 发表于 2014-3-25 10:14
增加了Z轴旋转测试,挺好!

多谢支持,谢谢
此帖出自stm32/stm8论坛
 
个人签名我来到这个世界,就是为了遇见你。在某天我们会相遇,然后在一起,直到最后一起离去。
 
 

回复

5

帖子

0

TA的资源

一粒金砂(初级)

6
 
很好,谢谢了
此帖出自stm32/stm8论坛

点评

不用客气。  详情 回复 发表于 2014-3-29 16:42
 
 
 

回复

973

帖子

15

TA的资源

纯净的硅(高级)

7
 

不用客气。
此帖出自stm32/stm8论坛
 
个人签名我来到这个世界,就是为了遇见你。在某天我们会相遇,然后在一起,直到最后一起离去。
 
 

回复

2886

帖子

0

TA的资源

五彩晶圆(初级)

8
 
谢谢分享
此帖出自stm32/stm8论坛

点评

谢谢版主!  详情 回复 发表于 2014-3-29 19:59
 
个人签名昵称:灰小子
 
 

回复

973

帖子

15

TA的资源

纯净的硅(高级)

9
 

谢谢版主!
此帖出自stm32/stm8论坛
 
个人签名我来到这个世界,就是为了遇见你。在某天我们会相遇,然后在一起,直到最后一起离去。
 
 

回复

2

帖子

0

TA的资源

一粒金砂(初级)

10
 
谢谢分享
此帖出自stm32/stm8论坛

点评

不用客气。  详情 回复 发表于 2014-4-8 09:11
 
 
 

回复

5

帖子

1

TA的资源

一粒金砂(初级)

11
 
你懂用SPI读取MPU6000么?我最近遇到点问题
此帖出自stm32/stm8论坛

点评

我只用过MPU6050,是iic接口的,spi接口的MPU6000貌似要贵挺多的,不过感觉应该差不多吧,手册上说除了接口,其它都一样的。  详情 回复 发表于 2014-4-8 09:10
 
 
 

回复

973

帖子

15

TA的资源

纯净的硅(高级)

12
 
njf123 发表于 2014-4-7 23:47
你懂用SPI读取MPU6000么?我最近遇到点问题

我只用过MPU6050,是iic接口的,spi接口的MPU6000貌似要贵挺多的,不过感觉应该差不多吧,手册上说除了接口,其它都一样的。
此帖出自stm32/stm8论坛
 
个人签名我来到这个世界,就是为了遇见你。在某天我们会相遇,然后在一起,直到最后一起离去。
 
 

回复

973

帖子

15

TA的资源

纯净的硅(高级)

13
 

不用客气。
此帖出自stm32/stm8论坛
 
个人签名我来到这个世界,就是为了遇见你。在某天我们会相遇,然后在一起,直到最后一起离去。
 
 

回复

52

帖子

0

TA的资源

一粒金砂(中级)

14
 
谢谢分享
此帖出自stm32/stm8论坛
 
 
 

回复

39

帖子

0

TA的资源

一粒金砂(中级)

15
 
你好,你能把下的MEMS_Example的程序发我一份吗?我没下到这个例子,913527593@qq.com,不甚感激!
此帖出自stm32/stm8论坛
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

16
 
您好,能把程序共享给我看一下吗,我最近也在做L3GD20H的驱动开发,官方的那个linux的没有看懂,也没有看到相关例程,谢谢啦zhouqishu2009@163.com
此帖出自stm32/stm8论坛
 
 
 

回复

265

帖子

15

TA的资源

一粒金砂(中级)

17
 
多谢楼主分享
学习了
此帖出自stm32/stm8论坛
 
个人签名共同学习 共同进步
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

18
 
看看学习学习。膜拜~
此帖出自stm32/stm8论坛
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

19
 
楼主能分享下代码吗975378644@qq.com
此帖出自stm32/stm8论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表