4980|7

2

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

LSM6DSL加速度唤醒阈值使用(WAKE_UP_THS (5Bh)) [复制链接]

 

求助指导一下,如标题WAKE_UP_THS (5Bh)的寄存器阈值设置配置,datasheet是这么写的

所以,FS_XL = 4g, WK_THS[5:0]设置成2时,那么唤醒的阈值 = 2*4/2^6 = 125mg 对吗?那产生中断的原理是啥?是传感器检测到X轴或Y轴或Z轴任何一个方向的加速度超过这个阈值就表示碰撞了,中断就会产生吗?

现在代码中能产生中断,就是兴趣想知道自己理解的对不对,欢迎有经验加入讨论

最新回复

其他两个轴的数据准确吗  详情 回复 发表于 2020-3-10 07:23
点赞 关注
 
 

回复
举报

1万

帖子

25

TA的资源

版主

沙发
 

这个是用来检测单击/双击事件的吧

 
 
 

回复

9790

帖子

24

TA的资源

版主

板凳
 

阈值是125mg没错,检测原理更复杂一些,你可以看一下应用笔记的5.3节

 
 
 

回复

9790

帖子

24

TA的资源

版主

4
 

en.DM00402563.pdf (1.5 MB, 下载次数: 36)

个人签名虾扯蛋,蛋扯虾,虾扯蛋扯虾
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

5
 

我现在使用的FIFO模式,但是感觉这个中断信号来的太频繁了,这个中断触发的机制是什么呢?下面是我这边的代码:

S32 init_lsm6ds3(void)
{
    S32 error = STATUS_OK;
    U8 device_id, rst;
    lsm6ds3tr_c_int1_route_t int_1_reg = {0};

    //init I2C
    error = (lsm6ds3_wire_connection_routine(LSM6DS3_WIRE_TYPE_I2C));
    kal_prompt_trace(MOD_ABM, "YOUNG TEST:DBG error of init_I2C is:""%d", error);
    if(error!= STATUS_OK) return error;

    //read device id
    error = lsm6ds3tr_c_device_id_get(&lsm6ds3, &device_id); 
    kal_prompt_trace(MOD_ABM, "YOUNG TEST:DBG error of get_device_id and device id  are:""%d,%x", error,device_id);
    if (device_id != LSM6DS3TR_C_ID) return STATUS_DEVICE_NOT_EXIST;

    //software reset,gyr and acc in power down mode
    error = lsm6ds3tr_c_reset_set(&lsm6ds3, PROPERTY_ENABLE);  
    kal_prompt_trace(MOD_ABM, "YOUNG TEST:DBG error of software_reset  is:""%d", error);
    if(error!= STATUS_OK) return error;
    do {      
        lsm6ds3tr_c_reset_get(&lsm6ds3, &rst);  
    } while (rst);

#if 1    //xb test 2020-01-7 FIFO模式初始化
    //set acc and gry full-scale 
    error = lsm6ds3tr_c_xl_full_scale_set(&lsm6ds3, LSM6DS3TR_C_2g); 
    kal_prompt_trace(MOD_ABM, "YOUNG TEST:DBG error of set_acc_full_scale is:""%d", error);
    if(error!= STATUS_OK) return error;
    error = lsm6ds3tr_c_gy_full_scale_set(&lsm6ds3, LSM6DS3TR_C_250dps);
    kal_prompt_trace(MOD_ABM, "YOUNG TEST:DBG error of set_gry_full_scale is:""%d", error);
    if(error!= STATUS_OK) return error;

    //set acc and gry data rate
    //error = lsm6ds3tr_c_xl_data_rate_set(&lsm6ds3, LSM6DS3TR_C_XL_ODR_208Hz);
    //kal_prompt_trace(MOD_ABM, "YOUNG TEST:DBG error of set_acc_data_rate  is:""%d", error);
    //if(error!= STATUS_OK) return error;
    //error = lsm6ds3tr_c_gy_data_rate_set(&lsm6ds3, LSM6DS3TR_C_GY_ODR_208Hz);
    //kal_prompt_trace(MOD_ABM, "YOUNG TEST:DBG error of set_gry_data_rate  is:""%d", error);
    //if(error!= STATUS_OK) return error;

    //enable block data update
    error = lsm6ds3tr_c_block_data_update_set(&lsm6ds3, PROPERTY_ENABLE);
    kal_prompt_trace(MOD_ABM, "YOUNG TEST:DBG error of block_data_update  is:""%d", error);
    if(error!= STATUS_OK) return error;

    /*AAKASH
      *Enable Tap Detection on X, Y, Z
      */
    lsm6ds3tr_c_tap_detection_on_z_set(&lsm6ds3, PROPERTY_ENABLE);
    lsm6ds3tr_c_tap_detection_on_y_set(&lsm6ds3, PROPERTY_ENABLE);
    lsm6ds3tr_c_tap_detection_on_x_set(&lsm6ds3, PROPERTY_ENABLE);
    lsm6ds3tr_c_4d_mode_set(&lsm6ds3, PROPERTY_ENABLE);

    /*AAKASH
      *Set Tap threshold to 01001b, therefore the tap threshold is
      *562.5 mg (= 9 * FS_XL / 25)
      */
    lsm6ds3tr_c_tap_threshold_x_set(&lsm6ds3, 0x09);

    lsm6ds3tr_c_tap_quiet_set(&lsm6ds3, 1);
    lsm6ds3tr_c_tap_shock_set(&lsm6ds3, 2);
    lsm6ds3tr_c_tap_mode_set(&lsm6ds3, LSM6DS3TR_C_ONLY_SINGLE);

    //Set FIFO watermark to a multiple of a pattern
      pattern_len = 12;
      lsm6ds3tr_c_fifo_watermark_set(&lsm6ds3, 10*pattern_len);

    //Set FIFO mode to Stream mode
      lsm6ds3tr_c_fifo_mode_set(&lsm6ds3, LSM6DS3TR_C_STREAM_MODE);

    //Enable FIFO watermark interrupt generation on INT1 pin
      lsm6ds3tr_c_pin_int1_route_get(&lsm6ds3, &int_1_reg);
    int_1_reg.int1_fth = PROPERTY_ENABLE;
    //int_1_reg.int1_fifo_ovr = PROPERTY_ENABLE;
    int_1_reg.int1_full_flag = PROPERTY_ENABLE;
    int_1_reg.int1_single_tap = PROPERTY_ENABLE;
    lsm6ds3tr_c_pin_int1_route_set(&lsm6ds3, int_1_reg);

    //Set FIFO sensor decimator
    lsm6ds3tr_c_fifo_xl_batch_set(&lsm6ds3, LSM6DS3TR_C_FIFO_XL_NO_DEC);
    lsm6ds3tr_c_fifo_gy_batch_set(&lsm6ds3, LSM6DS3TR_C_FIFO_GY_NO_DEC);

    //Set ODR FIFO
      lsm6ds3tr_c_fifo_data_rate_set(&lsm6ds3, LSM6DS3TR_C_FIFO_12Hz);

    //Set XL and Gyro Output Data Rate:
      lsm6ds3tr_c_xl_data_rate_set(&lsm6ds3, LSM6DS3TR_C_GY_ODR_26Hz);
      lsm6ds3tr_c_gy_data_rate_set(&lsm6ds3, LSM6DS3TR_C_XL_ODR_26Hz);
#endif

    return STATUS_OK;}

点评

你看一下中断的波形是什么样的,大概多长时间一次 看你的代码里使用了3种中断,和波形比较一下是否一样 然后分别注释掉其它2个,只使用1个中断看看和实际情况是否一致找到有问题的中断  详情 回复 发表于 2020-1-16 10:10
 
 
 

回复

9790

帖子

24

TA的资源

版主

6
 
独行狼 发表于 2020-1-8 16:37 我现在使用的FIFO模式,但是感觉这个中断信号来的太频繁了,这个中断触发的机制是什么呢?下面是我这边的代 ...

你看一下中断的波形是什么样的,大概多长时间一次

看你的代码里使用了3种中断,和波形比较一下是否一样

然后分别注释掉其它2个,只使用1个中断看看和实际情况是否一致找到有问题的中断

个人签名虾扯蛋,蛋扯虾,虾扯蛋扯虾
 
 
 

回复

3

帖子

0

TA的资源

一粒金砂(初级)

7
 

有没有遇到过,加速度X,Z两个值能更新,Y一直是0的?就是这两个寄存器:

#define LSM6DSL_OUTY_L_XL                        0x2A
#define LSM6DSL_OUTY_H_XL                        0x2B

点评

其他两个轴的数据准确吗  详情 回复 发表于 2020-3-10 07:23
 
 
 

回复

9790

帖子

24

TA的资源

版主

8
 
英雄末路 发表于 2020-3-4 19:42
有没有遇到过,加速度X,Z两个值能更新,Y一直是0的?就是这两个寄存器:

#define LSM6DSL_OUTY_L_XL &nb ...

其他两个轴的数据准确吗
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

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

 
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
快速回复 返回顶部 返回列表