社区导航

 

搜索
查看: 759|回复: 15

[力学传感器] LSM6DS3TR的INT1检测不到中断

[复制链接]

11

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

发表于 2018-11-2 11:24 | 显示全部楼层 |阅读模式
本帖最后由 piaoroumi 于 2018-11-2 11:26 编辑

读取WHO_AM_I 得到69,
配置加速计:
          gYroscopeWrite(CTRL9_XL, 0x38);//XL configure
          gYroscopeWrite(CTRL1_XL, 0x60);//XL configure
          gYroscopeWrite(INT1_CTRL, 0x01);//

然后移动板子, INT1没有中断出来. 试了2块板子, 都一样.
求教一下大侠们, 可能是哪里的问题?  寄存器写进去读出来也是对的.



回复

使用道具 举报

6080

TA的帖子

9

TA的资源

版主

Rank: 6Rank: 6

发表于 2018-11-2 17:11 | 显示全部楼层
你想让INT1输出什么中断?
虾扯蛋


回复

使用道具 举报

11

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

 楼主| 发表于 2018-11-2 17:32 | 显示全部楼层
littleshrimp 发表于 2018-11-2 17:11
你想让INT1输出什么中断?

有加速计数据就绪的时候, INT1的状态改变

点评

你看一下这个贴子,有完整的工程 http://bbs.eeworld.com.cn/forum.php?mod=viewthread&tid=649230&highlight=LSM6DSl  详情 回复 发表于 2018-11-2 17:39


回复

使用道具 举报

11

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

 楼主| 发表于 2018-11-2 17:34 | 显示全部楼层
怎么配寄存器能简单地实现加速计有数据的时候, INT1有中断呢?


回复

使用道具 举报

6080

TA的帖子

9

TA的资源

版主

Rank: 6Rank: 6

发表于 2018-11-2 17:39 | 显示全部楼层
piaoroumi 发表于 2018-11-2 17:32
有加速计数据就绪的时候, INT1的状态改变

你看一下这个贴子,有完整的工程
http://bbs.eeworld.com.cn/forum. ... 0&highlight=LSM6DSl
虾扯蛋


回复

使用道具 举报

11

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

 楼主| 发表于 2018-11-2 17:39 | 显示全部楼层
谢谢虾哥. 我研究一下!


回复

使用道具 举报

6080

TA的帖子

9

TA的资源

版主

Rank: 6Rank: 6

发表于 2018-11-4 13:44 | 显示全部楼层
本帖最后由 littleshrimp 于 2018-11-4 13:55 编辑

我做了一个测试,如果只按照你的配置方法配置LSM6DS3寄存器确实存在不能触发中断的情况
然后我在代码里增加了上电先复位LSM6DS3,然后再配置对应的寄存器,中断正常
同样,在上电不复位的情况下,在配置好寄存器以后读取一次输出寄存器,中断也正常

你可以试一下这两种方法
问题可能是器件配置好以后数据准备好,INT1引脚输出高电平,单片机因为复位等原因没有及时读取中断
再运行时中断引脚为高电平没法再次触发上升沿断中断导致
除以上两种方法还可以尝试使用高电平中断或者上升沿中断时判断一下引脚电平
测试代码:

  1.   static uint8_t who_am_i;
  2.   //WHO_AM_I (0Fh)
  3.   HAL_I2C_Mem_Read(&hi2c1,0xd4,0x0f,I2C_MEMADD_SIZE_8BIT,&who_am_i,1,0x100);
  4.   static uint8_t reg;
  5.   //CTRL3_C (12h) 0x01 SOFT REST
  6.   reg = 0x01;
  7. #warning "1.上电时复位传感器"
  8. // HAL_I2C_Mem_Write(&hi2c1,0xd4,0x12,I2C_MEMADD_SIZE_8BIT,®,1,0x100);
  9.   HAL_Delay(500);
  10.   //CTRL3_C (12h) 0x44 BDU IF_INC  
  11.   reg = 0x44;
  12. // HAL_I2C_Mem_Write(&hi2c1,0xd4,0x12,I2C_MEMADD_SIZE_8BIT,®,1,0x100);
  13.   //CTRL9_XL (18h) x,y,z en
  14.   reg = 0x38;
  15.   HAL_I2C_Mem_Write(&hi2c1,0xd4,0x18,I2C_MEMADD_SIZE_8BIT,®,1,0x100);
  16.   //CTRL1_XL (10h)
  17.   reg = 0x60;
  18.   HAL_I2C_Mem_Write(&hi2c1,0xd4,0x10,I2C_MEMADD_SIZE_8BIT,®,1,0x100);
  19.   //INT1_CTRL (0Dh)
  20.   reg = 0x01;
  21.   HAL_I2C_Mem_Write(&hi2c1,0xd4,0x0d,I2C_MEMADD_SIZE_8BIT,®,1,0x100);
  22.   
  23. #warning "2.配置好以后读取一次output寄存器"
  24. //  HAL_I2C_Mem_Read(&hi2c1,0xd4,0x28,I2C_MEMADD_SIZE_8BIT,buffer,6,0x100);
  25.   /* USER CODE END 2 */

  26.   /* Infinite loop */
  27.   /* USER CODE BEGIN WHILE */
  28.   while (1)
  29.   {

  30.   /* USER CODE END WHILE */

  31.   /* USER CODE BEGIN 3 */
  32.     if(lsm63se_drdy_flag)
  33.     {
  34.        lsm63se_drdy_flag = 0;
  35.        HAL_I2C_Mem_Read(&hi2c1,0xd4,0x1e,I2C_MEMADD_SIZE_8BIT,&status,1,0x100);
  36.        if(status & 0x01)
  37.        {
  38.           HAL_I2C_Mem_Read(&hi2c1,0xd4,0x28,I2C_MEMADD_SIZE_8BIT,buffer,6,0x100);
  39.        }
  40.     }
  41.   }
  42.   /* USER CODE END 3 */
复制代码



测试工程文件:
使用NUCLEO-L496ZG开发板,STM32CubeMX创建工程,I2C与LSM6DSL通信,CS、SA0接低电平,CS接高电平,PA5连接LSM6DS3_INT1引脚,上升沿中断,无上下拉电阻
lsm6ds3 nucleo-l496zg.rar (9.03 MB, 下载次数: 7)
虾扯蛋


回复

使用道具 举报

11

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

 楼主| 发表于 2018-11-21 09:51 | 显示全部楼层
前段时间又忙别的东西, 上来发现虾哥又为我答疑解惑了. 真的非常感激, 我马上试一下


回复

使用道具 举报

11

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

 楼主| 发表于 2018-11-24 18:10 | 显示全部楼层
虾哥, 我已经按照您的配置, 得到了中断. 并且我配成了单击产生中断.
我说一下我的应用场景. 我们在做智能锁方案这块. 因为客户提出已经有供应商在做陀螺仪来检测开关门了. 所以我们也想上这种方案.
思路是:关好门的时候做好校准. 然后门动的时候通过陀螺仪计算门的角度, 来判断门的开关状态.
我想请问:这样的思路可行吗?


回复

使用道具 举报

11

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

 楼主| 发表于 2018-11-24 18:27 | 显示全部楼层
虾哥, 我做了测试. 用你的方法配置了. 得到中断了, 非常感谢.
我们的应用场景是这样的:
在门关闭的时候, 做初始化. 然后用陀螺仪去计算门的开合角度. 实现自动关门的功能.
我想问, 这样的使用方式是否可行?

点评

应该可以 陀螺仪工作的时候电流会大一些 电池供电需要注意 还有就是陀螺仪计算开门的角度是相对角度 可以配合加速度判断关门检测 还有一个方法是使用磁力计 相当于把指南针放在门上 周围有固定磁场感染可以通过校  详情 回复 发表于 2018-11-25 07:56


回复

使用道具 举报

6080

TA的帖子

9

TA的资源

版主

Rank: 6Rank: 6

发表于 2018-11-25 07:56 来自手机 | 显示全部楼层
piaoroumi 发表于 2018-11-24 18:27
虾哥, 我做了测试. 用你的方法配置了. 得到中断了, 非常感谢.
我们的应用场景是这样的:
在门关闭的时候,  ...

应该可以 陀螺仪工作的时候电流会大一些 电池供电需要注意 还有就是陀螺仪计算开门的角度是相对角度 可以配合加速度判断关门检测
还有一个方法是使用磁力计 相当于把指南针放在门上
周围有固定磁场感染可以通过校准解决 计算出开门的绝对角度
缺点是怕动态磁场干扰 比如传感器外边有人拿一块磁铁晃几下可能就会误判
必要时可以把这三个结合起来

点评

我现在已经使能了陀螺仪, 并且读到了中断, 然后发现会一直产生中断. 我希望在门没动的情况下不要有中断产生. 只有动的时候才有. 能在哪里设置角速度的阈值呢?  详情 回复 发表于 2018-11-26 11:28


回复

使用道具 举报

11

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

 楼主| 发表于 2018-11-26 11:28 | 显示全部楼层
littleshrimp 发表于 2018-11-25 07:56
应该可以 陀螺仪工作的时候电流会大一些 电池供电需要注意 还有就是陀螺仪计算开门的角度是相对角度 可以 ...

我现在已经使能了陀螺仪, 并且读到了中断, 然后发现会一直产生中断. 我希望在门没动的情况下不要有中断产生. 只有动的时候才有. 能在哪里设置角速度的阈值呢?
/* íó?Yò?3?ê??ˉ********
************************/
void gYroscopeG_Init(void)
{
                gYroscopeWrite(CTRL2_G, 0x1C);//
          gYroscopeWrite(CTRL6_C, 0x70);
                gYroscopeWrite(CTRL7_G, 0x43);
                gYroscopeWrite(INT1_CTRL, 0x02);//ê1?üíó?Yò??D??.
}

点评

正常情况下你需要一直接收数据然后分析出开门的角度lsm6ds3有4D或6D阈值触发中断功能,应该不能满足你的要求 [attachimg]388998[/attachimg] [attachimg]388999[/attachimg]  详情 回复 发表于 2018-11-26 11:48


回复

使用道具 举报

6080

TA的帖子

9

TA的资源

版主

Rank: 6Rank: 6

发表于 2018-11-26 11:48 | 显示全部楼层
piaoroumi 发表于 2018-11-26 11:28
我现在已经使能了陀螺仪, 并且读到了中断, 然后发现会一直产生中断. 我希望在门没动的情况下不要有中断产 ...

正常情况下你需要一直接收数据然后分析出开门的角度lsm6ds3有4D或6D阈值触发中断功能,应该能满足你的要求

QQ图片20181126114601.png

QQ图片20181126114531.png


虾扯蛋


回复

使用道具 举报

11

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

 楼主| 发表于 2018-11-26 14:02 | 显示全部楼层
那估计使用不了, 我不能一直醒着的。 是一个功耗敏感系统


回复

使用道具 举报

1

TA的帖子

0

TA的资源

一粒金砂(初级)

Rank: 1

发表于 2018-12-27 14:20 | 显示全部楼层
piaoroumi 发表于 2018-11-24 18:27
虾哥, 我做了测试. 用你的方法配置了. 得到中断了, 非常感谢.
我们的应用场景是这样的:
在门关闭的时候,  ...

兄台,我看到你的门开关方案:在门关闭的时候, 做初始化. 然后用陀螺仪去计算门的开合角度. 实现自动关门的功能
你们实现了吗?
我现在做个毕业设计,选的这个样例,想向你请教下这个方案思路和实现方式

点评

陀螺仪计算角度存在长期漂移,建议使用磁力计,或者使用磁力计配合陀螺仪使用 如果只是想判断是否开门可以通过判断角速度的大小来实现,不开门的时候角速度接近0 开门的时候角速度会增加,因为不是绝对数据,所以  详情 回复 发表于 2018-12-29 15:21


回复

使用道具 举报

6080

TA的帖子

9

TA的资源

版主

Rank: 6Rank: 6

发表于 2018-12-29 15:21 | 显示全部楼层
devil'eye 发表于 2018-12-27 14:20
兄台,我看到你的门开关方案:在门关闭的时候, 做初始化. 然后用陀螺仪去计算门的开合角度. 实现自动关门 ...

陀螺仪计算角度存在长期漂移,建议使用磁力计,或者使用磁力计配合陀螺仪使用
如果只是想判断是否开门可以通过判断角速度的大小来实现,不开门的时候角速度接近0
开门的时候角速度会增加,因为不是绝对数据,所以如果开门的速度足够慢会无法检测
虾扯蛋


回复

使用道具 举报

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

关闭

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

  • 论坛活动 E手掌握

    扫码关注
    EEWORLD 官方微信

  • EE福利  唾手可得

    扫码关注
    EE福利 唾手可得

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

GMT+8, 2019-7-21 14:19 , Processed in 0.427963 second(s), 17 queries , Gzip On, MemCache On.

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