搜索
bottom↓
回复: 2

有关L3G4200D的FIFO

[复制链接]

出0入0汤圆

发表于 2012-1-4 21:05:51 | 显示全部楼层 |阅读模式
前段时间,用STM32读L3G4200D数据,数据基本正确,基本成功。
使用的是直接读数的方式。设置的数据更新速率为100Hz。
但是,有个问题就是,如果程序循环一周的速度比陀螺仪更新速率低或者不配套的话,陀螺仪新更新的数据可能会被抹掉。
举个例子:
比如L3G4200D的更新速度是800Hz,即每1.25ms更新一次数据,CPU芯片在while(1)循环里循环一次的速度是500Hz,即每2ms循环一次
有人可能觉得这个cpu的速度有点低,其实我觉得对于大多数单片机,500Hz已经很快了,程序中有许多地方会需要延时、等待等

如果L3G4200D采用默认的FIFO模式,即bypass Mode时,芯片仅能保存一个数据。

那么FIFO就是用来使得两级相互匹配的。新的数据会存到FIFO里而不会丢,cpu每次都把FIFO里的数据读完。
L3G4200D自带能存32次数据的FIFO,但是我发现大多数人都不用这个,感觉有点可惜。
我今天用了下,感觉蛮好的。把L3G4200D的datasheet研究了很多次。依然有很多疑问:
1、用FIFO读数据时,读数的地址是否还是原来的地址?我是这样认为的
2、我没有用FIFO空或者满的事件来启动中断,而是在程序主循环里每次读FIFO寄存器的标志位,来判断FIFO是否为空,如果非空则读数据。一般而言,就算L3G4200D的更新速度是800Hz,我cpu的速度是100Hz,也不会丢失数据,因为FIFO里能存32组数据,cpu循环一次,FIFO里最多存9-10组数据,我一口气把这几个数据读完,并处理,这样FIFO又为空了,继续接着循环。
3、我用的是FIFO的STREAM_MODE模式
具体细节,在datasheet上都很详细。但是积分出来的值很小。不知道是什么原因

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

 楼主| 发表于 2012-1-4 22:15:47 | 显示全部楼层
问题已经解决了。
我之前用的是串口调试,数据不对劲,怀疑是串口影响了数据,就算有FIFO,但存32组数据的时间还是很快的。
我把串口输出设成循环100次输出一次,这样数据就很正确了。

出0入0汤圆

发表于 2012-2-13 10:10:44 | 显示全部楼层
mark,我刚开始研究这个传感器,无奈自己英语太水了!感谢楼主的分享!
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-24 04:10

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表