社区导航

 
查看: 1280|回复: 33

[力学传感器] 关于LSM6DSL的遇到的未解决问题

  [复制链接]

31

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

发表于 2018-4-13 13:01:26 | 显示全部楼层 |阅读模式
大家好我又来了,各位大神 就这之前的板子 我读取LSM6DSL的6轴数据。然后就发现一个我的加速度数据能读出来 但是我的角速度数据死活读不出来, 4.png
然后我换成开发板度我买的模块。(代码没改)然后我发现就刚开始一瞬间有而且我用手扶着模块角速度就有数据了。


2.png

刚开始以为灵敏度问题 然而我拿着线晃动模块角速度也没有数据 只有加速度的 我懵逼了。这是什么鬼。我手扶着就有。
1.png
但是自己打的板怎么都没有数据。 后来我度去温度数据 发现也没问题 。

在后来我读取STATUS_REG寄存器 发现我不扶着的时候是0x04;啥这不是加速度和角速度都没有吗? 我扶着的时候是0x07;这才是我想要的啊。。。 没办法了 我弄这个很久了 就是不行 不知道啥情况。


较少有时候还会出现由于没有数据传输跑死的情况、
等待.png
下面是我的初始化代码:                                       以及原理图:
3.png 6.png 5.png


回复

使用道具 举报

5201

TA的帖子

9

TA的资源

版主

Rank: 6Rank: 6

发表于 2018-4-13 13:30:10 来自手机 | 显示全部楼层
在论坛里搜索“LSM6DSL(加速度 陀螺仪)驱动例程ver”下载这两个驱动试试


回复

使用道具 举报

5201

TA的帖子

9

TA的资源

版主

Rank: 6Rank: 6

发表于 2018-4-13 13:42:08 来自手机 | 显示全部楼层
lsm6dsl_acc_gyro_ctrl6_g 对应的寄存器地址是多少?


回复

使用道具 举报

31

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

 楼主| 发表于 2018-4-13 13:48:39 | 显示全部楼层
对应#define LSM6DSL_ACC_GYRO_WHO_AM_I_REG          0X0F
#define LSM6DSL_ACC_GYRO_CTRL1_XL          0X10
#define LSM6DSL_ACC_GYRO_CTRL2_G          0X11
#define LSM6DSL_ACC_GYRO_CTRL3_C          0X12
#define LSM6DSL_ACC_GYRO_CTRL4_C          0X13
#define LSM6DSL_ACC_GYRO_CTRL5_C          0X14
#define LSM6DSL_ACC_GYRO_CTRL6_G          0X15
#define LSM6DSL_ACC_GYRO_CTRL7_G          0X16
#define LSM6DSL_ACC_GYRO_CTRL8_XL          0X17
#define LSM6DSL_ACC_GYRO_CTRL9_XL          0X18
#define LSM6DSL_ACC_GYRO_CTRL10_C          0X19
#define LSM6DSL_ACC_GYRO_MASTER_CONFIG          0X1A
#define LSM6DSL_ACC_GYRO_WAKE_UP_SRC          0X1B
#define LSM6DSL_ACC_GYRO_TAP_SRC          0X1C
#define LSM6DSL_ACC_GYRO_D6D_SRC          0X1D
#define LSM6DSL_ACC_GYRO_STATUS_REG          0X1E


回复

使用道具 举报

31

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

 楼主| 发表于 2018-4-13 15:03:02 | 显示全部楼层
比起更换驱动我更想知道问题出在那里 。而且驱动好难改啊 删除都删死我了

点评

你可以参考一下官方驱动里都配置了哪些寄存器、对应的值是多少,对比一下  详情 回复 发表于 2018-4-13 15:11


回复

使用道具 举报

5201

TA的帖子

9

TA的资源

版主

Rank: 6Rank: 6

发表于 2018-4-13 15:11:02 来自手机 | 显示全部楼层
zf1995 发表于 2018-4-13 15:03
比起更换驱动我更想知道问题出在那里 。而且驱动好难改啊 删除都删死我了

你可以参考一下官方驱动里都配置了哪些寄存器、对应的值是多少,对比一下

点评

恩 好的 谢谢 官方的驱动不是分开的嘛 得自己调用来配置 我也对比了下 我自己配置应该没问题 不然扶着不会出数据,但是不知道为啥要扶着才能有数据 而且自己画的板子是直接没用 只有加速度的有数据  详情 回复 发表于 2018-4-13 15:15


回复

使用道具 举报

31

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

 楼主| 发表于 2018-4-13 15:15:34 | 显示全部楼层
littleshrimp 发表于 2018-4-13 15:11
你可以参考一下官方驱动里都配置了哪些寄存器、对应的值是多少,对比一下

恩 好的 谢谢  官方的驱动不是分开的嘛 得自己调用来配置 我也对比了下 我自己配置应该没问题 不然扶着不会出数据,但是不知道为啥要扶着才能有数据 而且自己画的板子是直接没用 只有加速度的有数据

点评

我用我的BlueCoin Starter kit开发板做了测试,开发板上的传感器是LSM6DSM配置和LSM6DSL一样 陀螺仪只需要将0x40写入ctrl2_g就可以正常工作,我在初始化时对传感器做了软复位[attachimg]350871[/attachimg]  详情 回复 发表于 2018-4-13 16:51


回复

使用道具 举报

5201

TA的帖子

9

TA的资源

版主

Rank: 6Rank: 6

发表于 2018-4-13 16:51:59 | 显示全部楼层
zf1995 发表于 2018-4-13 15:15
恩 好的 谢谢  官方的驱动不是分开的嘛 得自己调用来配置 我也对比了下 我自己配置应该没问题 不然扶着不 ...

我用我的BlueCoin Starter kit开发板做了测试,开发板上的传感器是LSM6DSM配置和LSM6DSL一样
陀螺仪只需要将0x40写入ctrl2_g就可以正常工作,我在初始化时对传感器做了软复位 QQ图片20180413165104.png

  1.   //读取who am i
  2.   uint8_t who_am_i;
  3.   HAL_I2C_Mem_Read(&hi2c1,0xD4,0x0f,I2C_MEMADD_SIZE_8BIT,&who_am_i,1,0x100);
  4.   while(who_am_i != 0x6a);
  5.   //复位 CTRL3_C->SW_RESET(BIT0)
  6.   uint8_t swreset = 1 << 0;
  7.   HAL_I2C_Mem_Write(&hi2c1,0xD4,0x12,I2C_MEMADD_SIZE_8BIT,&swreset,1,0x100);
  8.   //写CTRL2_G
  9.   uint8_t ctrl2_g = 0x40;//CTRL2_G-> ODR_G2(BIT6) = 1 104 Hz 250 dps
  10.   HAL_I2C_Mem_Write(&hi2c1,0xD4,0x11,I2C_MEMADD_SIZE_8BIT,&ctrl2_g,1,0x100);
  11.   while(1)
  12.   {
  13.       //读取STATUS_REG
  14.       HAL_I2C_Mem_Read(&hi2c1,0xD4,0x1e,I2C_MEMADD_SIZE_8BIT,&status,1,0x100);
  15.       if(status & 0x02)
  16.       {
  17.         //读取OUTX_L_G=22h~OUTZ_H_G=27h
  18.         HAL_I2C_Mem_Read(&hi2c1,0xD4,0x22,I2C_MEMADD_SIZE_8BIT,buf,6,0x100);
  19.         x = ( ( ( ( int16_t )buf[1] ) << 8 ) + ( int16_t )buf[0] );
  20.         y = ( ( ( ( int16_t )buf[3] ) << 8 ) + ( int16_t )buf[2] );
  21.         z = ( ( ( ( int16_t )buf[5] ) << 8 ) + ( int16_t )buf[4] );
  22.       }
  23.   }
复制代码



点评

对了虾哥 你看下是不是我原理图有问题啊  详情 回复 发表于 2018-4-13 18:44
额 我试了下加复位 也是不行 还是一样的。没办法我就换成了LSM6DS3读取数据发现角速度存在偏移 这个是怎么回事?  详情 回复 发表于 2018-4-13 17:27
虾扯蛋


回复

使用道具 举报

31

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

 楼主| 发表于 2018-4-13 17:27:12 | 显示全部楼层
本帖最后由 zf1995 于 2018-4-13 17:28 编辑
littleshrimp 发表于 2018-4-13 16:51
我用我的BlueCoin Starter kit开发板做了测试,开发板上的传感器是LSM6DSM配置和LSM6DSL一样
陀螺仪只需 ...

额 我试了下加复位 也是不行 还是一样的。没办法我就换成了LSM6DS3读取数据发现角速度存在偏移 这个是怎么回事? 8.png

点评

额我 查了下需要校准。  详情 回复 发表于 2018-4-13 17:39


回复

使用道具 举报

31

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

 楼主| 发表于 2018-4-13 17:39:49 | 显示全部楼层
zf1995 发表于 2018-4-13 17:27
额 我试了下加复位 也是不行 还是一样的。没办法我就换成了LSM6DS3读取数据发现角速度存在偏移 这个是怎 ...

额我 查了下需要校准。


回复

使用道具 举报

31

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

 楼主| 发表于 2018-4-13 18:09:41 | 显示全部楼层
就是这样的情况 V80413-180325.mp4 (2.17 MB, 下载次数: 14)


回复

使用道具 举报

31

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

 楼主| 发表于 2018-4-13 18:44:00 | 显示全部楼层
littleshrimp 发表于 2018-4-13 16:51
我用我的BlueCoin Starter kit开发板做了测试,开发板上的传感器是LSM6DSM配置和LSM6DSL一样
陀螺仪只需 ...

对了虾哥 你看下是不是我原理图有问题啊

点评

从现象看软件问题的可能性更大,你试试单步调试慢速读取数据,必要时检查一下i2c写入和读取代码  详情 回复 发表于 2018-4-14 07:57


回复

使用道具 举报

5201

TA的帖子

9

TA的资源

版主

Rank: 6Rank: 6

发表于 2018-4-14 07:57:49 来自手机 | 显示全部楼层
zf1995 发表于 2018-4-13 18:44
对了虾哥 你看下是不是我原理图有问题啊

从现象看软件问题的可能性更大,你试试单步调试慢速读取数据,必要时检查一下i2c写入和读取代码


回复

使用道具 举报

31

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

 楼主| 发表于 2018-4-14 15:07:58 | 显示全部楼层
我今天试了下 单步除了第一次有数据 其他都没有和全速是一样的现象。 今天我吧S3的模块取下来焊在我的板子上 能读出数据排除了我硬件问题 我将SL的焊接在S3的模块上发现现象是一样的 排除了是模块的问题。 哎看来还是软件问题 但是原因就不知道了

点评

试试按照我的测试代码先复位 再对ctrl2_g写0x40 然后读取状态和数据 还不行把你的i2c读写函数拿出来看下  详情 回复 发表于 2018-4-16 22:22


回复

使用道具 举报

5201

TA的帖子

9

TA的资源

版主

Rank: 6Rank: 6

发表于 2018-4-16 22:22:19 来自手机 | 显示全部楼层
zf1995 发表于 2018-4-14 15:07
我今天试了下 单步除了第一次有数据 其他都没有和全速是一样的现象。 今天我吧S3的模块取下来焊在我的板子 ...

试试按照我的测试代码先复位 再对ctrl2_g写0x40 然后读取状态和数据
还不行把你的i2c读写函数拿出来看下

点评

谢谢虾哥 我解决了这个问题啊 是因为LSM6DSL_ACC_GYRO_CTRL6_G(0x15)中的TRIG_EN我配置为了1导致角速度不能出现数据。但是遇见新的问题了以前能够唤醒的代码现在不能唤醒了 然后检查中断引脚发现没产生中断了 哎解  详情 回复 发表于 2018-4-17 14:05


回复

使用道具 举报

31

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

 楼主| 发表于 2018-4-17 14:05:56 | 显示全部楼层
littleshrimp 发表于 2018-4-16 22:22
试试按照我的测试代码先复位 再对ctrl2_g写0x40 然后读取状态和数据
还不行把你的i2c读写函数拿出来看下

谢谢虾哥 我解决了这个问题啊 是因为LSM6DSL_ACC_GYRO_CTRL6_G(0x15)中的TRIG_EN我配置为了1导致角速度不能出现数据。但是遇见新的问题了以前能够唤醒的代码现在不能唤醒了 然后检查中断引脚发现没产生中断了 哎解决一个坑又来一个。我再弄弄。

点评

你先参考一下官方例程 我这几天在外边 等回去帮你看看  详情 回复 发表于 2018-4-17 14:35


回复

使用道具 举报

5201

TA的帖子

9

TA的资源

版主

Rank: 6Rank: 6

发表于 2018-4-17 14:35:35 来自手机 | 显示全部楼层
zf1995 发表于 2018-4-17 14:05
谢谢虾哥 我解决了这个问题啊 是因为LSM6DSL_ACC_GYRO_CTRL6_G(0x15)中的TRIG_EN我配置为了1导致角速度 ...

你先参考一下官方例程 我这几天在外边 等回去帮你看看

点评

好的 我的中断也解决了 但是低功耗有问题 睡眠了还有570多ua的电流 正常应该在12uA左右的 我再看看  详情 回复 发表于 2018-4-17 15:25


回复

使用道具 举报

31

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

 楼主| 发表于 2018-4-17 15:25:25 | 显示全部楼层
littleshrimp 发表于 2018-4-17 14:35
你先参考一下官方例程 我这几天在外边 等回去帮你看看

好的 我的中断也解决了 但是低功耗有问题 睡眠了还有570多ua的电流 正常应该在12uA左右的 我再看看

点评

试试只把器件的CS和I2C上拉,上电不操作测一下电流(保证彻底掉电)  详情 回复 发表于 2018-4-17 16:04


回复

使用道具 举报

5201

TA的帖子

9

TA的资源

版主

Rank: 6Rank: 6

发表于 2018-4-17 16:04:01 来自手机 | 显示全部楼层
zf1995 发表于 2018-4-17 15:25
好的 我的中断也解决了 但是低功耗有问题 睡眠了还有570多ua的电流 正常应该在12uA左右的 我再看看

试试只把器件的CS和I2C上拉,上电不操作测一下电流(保证彻底掉电)


回复

使用道具 举报

31

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

 楼主| 发表于 2018-4-17 16:33:16 | 显示全部楼层
我试过 那样功耗是对的还有就是我吧配置LSM6DSL的代码屏蔽了,功耗也是对的。
    现在的现象就像角速度没掉电一样且处于高性能模式有555uA的电流加上MCU的就对上了570uA的电流了。
    而且正常工作是电流也不对 有700多uA我选用的采样频率是104Hz 配置为低功耗模式 但是功耗却是高性能是的功耗0.65mA加上我的muc的100多uA。按照应用手册上的功耗来说应该是360uA+100多uA应该在500uA的电流左右。是不是配置成低功耗是有什么特殊的步骤啊?应用手册的第30页的3.9节倒是说了 但是没看懂。。。 LSM6DSL.应用手册.pdf (1.7 MB, 下载次数: 19)

点评

先排除硬件连接造成的功耗上升 参考下边方法: 1、将CS、SDA、SCL的上拉电阻放置在传感器侧(用于保证断开传感器与MCU的连接后引脚不浮动)单片机只通过CS、SDA、SCL、VDD、GND连接传感器、连接好万用表准备测量电  详情 回复 发表于 2018-4-18 18:24
看了这个我以为是时间的问题 但是我加大延迟也不行 所以我是真的不知道原因了  详情 回复 发表于 2018-4-17 17:21


回复

使用道具 举报

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

本版积分规则

  • 论坛活动 E手掌握

    扫码关注
    EEWORLD 官方微信

  • EE福利  唾手可得

    扫码关注
    EE福利 唾手可得

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

GMT+8, 2018-9-19 23:15 , Processed in 0.552074 second(s), 17 queries , Gzip On, Redis On.

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