社区导航

 

搜索
查看: 474|回复: 5

[求助] 求助LSM6DSL用FIFO_DATA_OUT_采数据

[复制链接]

4

TA的帖子

0

TA的资源

一粒金砂(初级)

Rank: 1

发表于 2019-5-31 14:33 | 显示全部楼层 |阅读模式
3芯币


我现在再用Raspberry Pi和LSM6DSL来沟通去采取accel 和 gyro的数据,往后还会加上每组fifo的时间戳。 因为我用的是raspberry pi所以我用的语言是python。我看到谈论里的h文件都是c的,所以可能用不了这些h文件


现在出来的数据都是不太对的,感觉数字挺接近正确的的 但是顺序就一直不太对。 我试着度fifo_status3 和 4 但是读出来的规律很奇怪 从0一直增加到1018,感觉和数据表上预计的不一样。还有当我查fifo_status1 和 2 的时候, fifo的所剩下数据也是读起来很奇怪,因为它不是一直下降,所剩的数据有时也会上升。 而且当我读取了一组数据xl_x,xl_y,xl_z和g_x,g_y,g_z的时候 一共是6组数据 我期待的是总剩下的数据会下降6,但是有时候就不见了20多,10多这样,不太清楚是什么回事。


我用过普通模式读出来的(OUTX_L_G这些)数据看起来是没问题的,但是fifo_data_out_h 和 fifo_data_out_l 读出来就很多问题,我不太清楚怎么回事。


然后很大一个问题是偶尔读出来的寄存器的数据和写进去的有些不太一样,但是一段时间后又会恢复正常了,但是现在fifo_ctrl2的寄存器一直读出来是错的, 一直都是0,也就是第四个fifo的时间戳似乎启动不了,不知道你们有没有这个问题。


我的配置是
('CHECK reset TIMESTAMP2_REG '0b10101010')
('Check reset software: , 1)# ctrl3_c

('CHECK CTRL7_G: 0b100')
('CHECK CTRL10_C: 0b100100')
('CHECK CTRL4_C:  0b10110100')
('CHECK CTRL6_C:  0b1000010')
('CHECK GYRO_CONFIG: 0b1111000')
('CHECK ACCEL_CONFIG: 0b1111100')
('CHECK CTRL3_C: 0b1000100')
('CHECK CTRL5_C: 0b1100000')
('CHECK CTRL8_XL: 0b0')
('CHECK MASTER_CONFIG: 0b10000')
('CHECK WAKE_UP_DUR: 0b10000')
('CHECK MD1_CFG: 0b100001')


fifo
('CHECK FIFO_CTRL5: 0b0')
('CHECK FIFO_CTRL5: 0b111001')
('CHECK FIFO_CTRL1: 0b0')
('CHECK FIFO_CTRL2: 0x80')
('CHECK FIFO_CTRL3: 0b1001')
('CHECK FIFO_CTRL4: 0b0')
fifo,gyro, accel  的设置是 833hz,
No threshold
Disable 3rd and 4th data set
Enable rounding status
High performance mode
gyro full scale 1000 dps
Accel full scale 8g
Enable BDU,IF_INC
FIFO 只有Accel and gyro的数据
我读取数据的代码是这样的:
while(totaldata>0):
                   omx = readfifo(FIFO_DATA_OUT_H, FIFO_DATA_OUT_L)
                   omy = readfifo(FIFO_DATA_OUT_H, FIFO_DATA_OUT_L)
                   omz = readfifo(FIFO_DATA_OUT_H, FIFO_DATA_OUT_L)
                   ax = readfifo(FIFO_DATA_OUT_H, FIFO_DATA_OUT_L)
                   ay = readfifo(FIFO_DATA_OUT_H, FIFO_DATA_OUT_L)
                   az = readfifo(FIFO_DATA_OUT_H, FIFO_DATA_OUT_L)
                   [url=]#temp[/url] = readtemp(i) # not using
                   totaldata = totaldata-6

但是输出是:
('num data ready: ', 2044)
('pattern: ', 0)
i,     c,     ax,        ay,       az,      omx,     omy,     omz
0,   1,   4221,   2131,   7805,   3093,   12890,   -133
('pattern: ', 8)
0,   2,   1657,   7682,   -143,   7815,   -511,   4455
('pattern: ', 18)
0,   3,   4445,   2049,   259,   2050,   4503,   -490
('pattern: ', 26)
0,   4,   -103,   1825,   122,   2441,   4166,   830
('pattern: ', 39)
0,   5,   -20,   1893,   -534,   -155,   2007,   1663
('pattern: ', 51)
0,   6,   -131,   1839,   -2630,   -155,   1795,   -1194
('pattern: ', 63)
0,   7,   -111,   4163,   303,   -125,   4151,   1707
('pattern: ', 74)
0,   8,   835,   392,   -32,   143,   -20,   -979
('pattern: ', 84)
0,   9,   -949,   1049,   377,   -622,   399,   -2
('pattern: ', 95)
0,   10,   -901,   571,   133,   4127,   862,   -143
('pattern: ', 107)
0,   11,   4467,   999,   -169,   4527,   1003,   -155 ........

还有一个问题是我要读时间戳,但是数据表说它存在第4个fifo data set,我不太清楚我是不是可以把第三个fifo data set给关闭了,然后当第二组fifo data set(读完accel_Z之后)读完以后就到了第四个了?我是这么写的,但是时间戳数据也很不对,所以我现在专注再把6组重要的数据给读正确了。

如果知道的话可以帮帮我吗? 谢谢了








回复

使用道具 举报

6358

TA的帖子

10

TA的资源

版主

Rank: 6Rank: 6

发表于 2019-5-31 16:45 | 显示全部楼层


你参考一下这个文件里的例程,路径在
en.x-cube-mems-xt1_firmware.zip\STM32CubeExpansion_MEMS-XT1_V4.4.0\Projects\Multi\Examples\IKS01A2

en.x-cube-mems-xt1_firmware.zip (21.82 MB, 下载次数: 4)
虾扯蛋


回复

使用道具 举报

4

TA的帖子

0

TA的资源

一粒金砂(初级)

Rank: 1

 楼主| 发表于 2019-6-5 06:54 | 显示全部楼层
littleshrimp 发表于 2019-5-31 16:45 你参考一下这个文件里的例程,路径在 en.x-cube-mems-xt1_firmware.zip\STM32CubeExpansion_MEMS-XT1_ ...

谢谢你,做好了,原来是有硬件问题,不是软件

 

还想请问一个问题 

fifo 可不可以一边读一边写。

就想一直读fifo 但是又不想读太快把它读完这样,一边读一边加。就想保证fifo不会停止,但数据也不会被覆盖这样

可以的话请问有什么方法吗

谢谢

点评

fifo起缓冲作用 一般用来解决传感器输出数据慢 单片机读取数据快 不想让单片机跟着传感器的慢节奏工作才使用fifo 你描述的那种一直读取的方式可以不使用fifo  详情 回复 发表于 2019-6-5 07:23


回复

使用道具 举报

6358

TA的帖子

10

TA的资源

版主

Rank: 6Rank: 6

发表于 2019-6-5 07:23 来自手机 | 显示全部楼层
ivanlin 发表于 2019-6-5 06:54
谢谢你,做好了,原来是有硬件问题,不是软件

 

还想请问一个问题 

fifo 可不可以一 ...

fifo起缓冲作用 一般用来解决传感器输出数据慢 单片机读取数据快 不想让单片机跟着传感器的慢节奏工作才使用fifo
你描述的那种一直读取的方式可以不使用fifo


回复

使用道具 举报

4

TA的帖子

0

TA的资源

一粒金砂(初级)

Rank: 1

 楼主| 发表于 2019-6-5 13:47 | 显示全部楼层
littleshrimp 发表于 2019-6-5 07:23 fifo起缓冲作用 一般用来解决传感器输出数据慢 单片机读取数据快 不想让单片机跟着传感器的慢节奏工作才 ...

fifo允许一边读一边写入数据这样,可以的话我在想把读取和写入的速度控制好 保证fifo一直有数据你觉得这样行吗?

点评

也可以 你只要控制好读取速度就可以了  详情 回复 发表于 2019-6-5 18:46


回复

使用道具 举报

6358

TA的帖子

10

TA的资源

版主

Rank: 6Rank: 6

发表于 2019-6-5 18:46 来自手机 | 显示全部楼层
ivanlin 发表于 2019-6-5 13:47
fifo允许一边读一边写入数据这样,可以的话我在想把读取和写入的速度控制好 保证fifo一直有数据你觉得这 ...

也可以 你只要控制好读取速度就可以了


回复

使用道具 举报

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

关闭

站长推荐上一条 /5 下一条

  • 论坛活动 E手掌握

    扫码关注
    EEWORLD 官方微信

  • EE福利  唾手可得

    扫码关注
    EE福利 唾手可得

Archiver|手机版|小黑屋|电子工程世界 ( 京ICP证 060456 )

GMT+8, 2019-9-16 00:05 , Processed in 0.194175 second(s), 16 queries , Gzip On, MemCache On.

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