文章目录

  • 前言
  • 一、调通IIC
  • 二、 官方器件初始化
    • 1. 惯性唤醒(绕过高通滤波器)
    • 2. 自由落体检测
  • 三、最终初始化值
  • 四、寄存器设置说明
    • 1. CTRL_REG1:寄存器20h
    • 2. CTRL_REG2:寄存器21h
    • 3. CTRL_REG3:寄存器22h
    • 4. CTRL_REG4:寄存器23h
    • 5. CTRL_REG5:寄存器24h
    • 6. CTRL_REG6:寄存器25h
    • 7. INT1_CFG:寄存器30h
    • 8. INT1_THS:寄存器32h(阈值)
    • 9. INT1_DURATION:寄存器33h(阈值)
  • 五、读取寄存器
  • 六、初始化写寄存器读出结果
  • 七、硬件测试

前言

本文记录LIS3DH wakeup模式输出中断调试过程:

  1. 期初IIC读取寄存器为FF,原因为IIC驱动问题和从机地址有误;
  2. 寄存器初始化值为实测验证值;
  3. INT1正常输出中断信号;
  4. 测试低功耗模式下工作电流;

参考文档
LIS3DH datasheet
AN3308应用笔记

一、调通IIC

  • 读取who am I 寄存器,结果是0x33说明IIC接口正常;
  • 注意SDO接地,从机地址为0x30,读寄存器地址+1为0x31;
  • SDO接高电平,从机地址为0x32,读寄存器地址+1为0x33;

地址错了就会读到FF;

二、 官方器件初始化

1. 惯性唤醒(绕过高通滤波器)

  1. 将A7h写入CTRL_REG1 //启动传感器并使用X、Y、和Z ODR = 100Hz
  2. 将00h写入CTRL_REG2 //高通滤波器已禁用
  3. 将40h写入CTRL_REG3 //中断被驱动到INT1焊盘
  4. 将00h写入CTRL_REG4 //FS = 2g
  5. 将08h写入CTRL_REG5 //中断已锁存
  6. 将10h写入INT1_THS //阈值 = 250mg
  7. 将00h写入INT1_DURATION //持续时间 = 0
  8. 将0Ah写入INT1_CFG //使能XH和YH中断生成
  9. 轮询INT1焊盘;如果INT = 0,则转至8
  10. 读INT1_SRC //返回触发中断事件
  11. (发生了唤醒事件;在此插入用户代码) //事件处理
  12. 转至8
  • 对应初始化代码:
     LIS3DH_Write(CTRL_REG1, 0xA7);      //数据速率设置LIS3DH_Write(CTRL_REG2, 0x00);LIS3DH_Write(CTRL_REG3, 0x40);LIS3DH_Write(CTRL_REG4, 0x00);LIS3DH_Write(CTRL_REG5, 0x08);LIS3DH_Write(INT1_THS, 0x10);       //中断阈值LIS3DH_Write(INT1_DURATION, 0x00);    //设置最小持续中断时间,ODR;LIS3DH_Write(INT1_CFG, 0x0A);
  • 按照官方配置无法产生中断,问题在CTRL_REG5 中断锁存;
  • CTRL_REG5寄存器写00,中断能够正常产生;
     //LIS3DH_Write(CTRL_REG5, 0x08);LIS3DH_Write(CTRL_REG5, 0x00);

2. 自由落体检测

利用INT1_CTRL寄存器特定配置识别器件,是否沿有轴测量的加速度变为零;

  1. 将A7h写入CTRL_REG1 //启动传感器并使用X、Y、和Z ODR = 100Hz
  2. 将00h写入CTRL_REG2 //高通滤波器已禁用
  3. 将40h写入CTRL_REG3 //中断被驱动到INT1焊盘
  4. 将00h写入CTRL_REG4 //FS = 2g
  5. 将08h写入CTRL_REG5 //中断已锁存
  6. 将16h写入INT1_THS //将自由落体阈值设置 = 350mg
  7. 将03h写入INT1_DURATION //设置最短事件持续时间
  8. 将95h写入INT1_CFG //配置自由落体识别
  9. 轮询INT1焊盘;如果INT = 0,则转至10
  10. (发生了自由落体事件;在此插入代码) //事件处理
  11. 读取INT1_SRC寄存器 //清除中断请求
  12. 转至9
  • 对应初始化代码:
     LIS3DH_Write(CTRL_REG1, 0xA7);      //数据速率设置LIS3DH_Write(CTRL_REG2, 0x00);LIS3DH_Write(CTRL_REG3, 0x40);LIS3DH_Write(CTRL_REG4, 0x00);LIS3DH_Write(CTRL_REG5, 0x08);LIS3DH_Write(INT1_THS, 0x16);       //中断阈值LIS3DH_Write(INT1_DURATION, 0x03);    //设置最小持续中断时间,ODR;LIS3DH_Write(INT1_CFG, 0x95);
  • 同样将CTRL_REG5寄存器写00,中断能够正常产生;
     //LIS3DH_Write(CTRL_REG5, 0x08);LIS3DH_Write(CTRL_REG5, 0x00);

三、最终初始化值

通过IIC驱动LIS3DH

LIS3DH_Write(0x20, 0x3f);    //CTRL_REG1
LIS3DH_Write(0x21, 0x09);   //CTRL_REG2
LIS3DH_Write(0x22, 0x40);   //CTRL_REG3
LIS3DH_Write(0x23, 0x00);   //CTRL_REG4
LIS3DH_Write(0x24, 0x00);   //CTRL_REG5
LIS3DH_Write(0x32, 0x10);   //INT1_THS
LIS3DH_Write(0x33, 0x80);   //INT1_DURATION
LIS3DH_Write(0x30, 0x2A);   //INT1_CFG
LIS3DH_Write(0x25, 0x02);   //CTRL_REG6

初始化寄存器表

寄存器 地址
CTRL_REG1 0x20 0x3f
CTRL_REG2 0x21 0x09
CTRL_REG3 0x22 0x40
CTRL_REG4 0x23 0x00
CTRL_REG5 0x24 0x00
CTRL_REG6 0x25 0x02
INT1_CFG 0x30 0x2a
INT1_THS 0x32 0x10
INT1_DURATION 0x33 0x80

四、寄存器设置说明

1. CTRL_REG1:寄存器20h

  1. 寄存器设置:0x3f
  2. ODR[3:0] = 0b0011;
  3. LPen:低功耗模式;
  4. Zen:Z轴使能;
  5. Yen:Y轴使能;
  6. Xen:X轴使能;

2. CTRL_REG2:寄存器21h

  1. 寄存器设置:0x09


  2. 数据经过滤波器送给输出寄存器;
  3. 使能中断1高通滤波器;

3. CTRL_REG3:寄存器22h

  1. 寄存器设置:0x40
  2. 使能中断INT1

4. CTRL_REG4:寄存器23h

5. CTRL_REG5:寄存器24h

6. CTRL_REG6:寄存器25h

  1. 寄存器设置:0x02
  2. INT1 和 INT2低电平有效;

7. INT1_CFG:寄存器30h

  1. 寄存器设置:0x1a
  2. 使能Z轴高中断触发条件
  3. 使能Y轴高中断出发条件
  4. 使能X轴高中断出发条件

8. INT1_THS:寄存器32h(阈值)

  1. 寄存器设置:0x10
  2. 中断INT1:加速度阈值

9. INT1_DURATION:寄存器33h(阈值)

  1. 寄存器设置:0x08
  2. 中断INT1

五、读取寄存器

 printf("LIS3DH testing\r\n"); ucRegValue[0] = LIS3DH_Read(WHO_AM_I);ucRegValue[1] = LIS3DH_Read(CTRL_REG1);ucRegValue[2] = LIS3DH_Read(CTRL_REG2);ucRegValue[3] = LIS3DH_Read(CTRL_REG3);ucRegValue[4] = LIS3DH_Read(CTRL_REG4);ucRegValue[5] = LIS3DH_Read(CTRL_REG5);ucRegValue[6] = LIS3DH_Read(CTRL_REG6); ucRegValue[7] = LIS3DH_Read(INT1_CFG);ucRegValue[8] = LIS3DH_Read(INT1_THS);ucRegValue[9] = LIS3DH_Read(INT1_DURATION);while(1){delay_ms(1000);printf("LIS3DH who am I: %2x\r\n",ucRegValue[0]);printf("CTRL_REG1: %2x\r\n",ucRegValue[1]);printf("CTRL_REG2: %2x\r\n",ucRegValue[2]);printf("CTRL_REG3: %2x\r\n",ucRegValue[3]);printf("CTRL_REG4: %2x\r\n",ucRegValue[4]);printf("CTRL_REG5: %2x\r\n",ucRegValue[5]);printf("CTRL_REG6: %2x\r\n",ucRegValue[6]);printf("INT1_CFG: %2x\r\n",ucRegValue[7]);printf("INT1_THS: %2x\r\n",ucRegValue[8]);printf("INT1_DURATION: %2x\r\n",ucRegValue[9]);}

串口打印

六、初始化写寄存器读出结果

七、硬件测试

  • 用示波器测量INT1管脚:晃动传感器,示波器会显示低电平脉冲;
  • 3.3V供电实测电流(低功耗模式)及官方参考功耗;
数据速率 1Hz 10Hz 25Hz 50Hz 100Hz 200Hz
实测电流 5.5uA 6.2uA 7.5uA

  • 触发中断灵敏度
    由寄存器33h和寄存器32h决定;
LIS3DH_Write(0x20, 0x2f);
LIS3DH_Write(0x21, 0x09);
LIS3DH_Write(0x22, 0x40);
LIS3DH_Write(0x23, 0x00);
LIS3DH_Write(0x24, 0x00);
LIS3DH_Write(0x32, 0x41);
LIS3DH_Write(0x33, 0x82);
LIS3DH_Write(0x30, 0x2A);
LIS3DH_Write(0x25, 0x02);

What you leave behind is not what is engraved in stone monuments, but what is woven into the lives of others.


作者:行走的X君
来源:CSDN
原文:https://blog.csdn.net/zhouxiangjun11211/article/details/106769258
版权声明:本文为博主原创文章,转载请附上博文链接!

LIS3DH运动检测调试过程相关推荐

  1. 单片机驱动DM9000网卡芯片(详细调试过程)【下】

    http://hi.baidu.com/mcu8031/blog/item/c95903138671c625dc540171.html 单片机驱动DM9000网卡芯片(详细调试过程)[下] 4.验证初 ...

  2. stm32--FatFs调试过程(SPIFlash)

    移植方法参见我的另一篇博客:<stm32--FatFs移植(SPIFlash)>. 本文仅记录在初次移植完成后,遇到的问题,和解决的过程. 调试记录: 问题1:f_open返回3,即磁盘没 ...

  3. linux下jtag命令,[转载]LINUX内核调试过程(使用OpenJtag + OpenOCD)

    [转载]LINUX内核调试过程(使用OpenJtag + OpenOCD) (2012-04-12 02:02:27) 标签: 杂谈 [转载]LINUX内核调试过程(使用OpenJtag + Open ...

  4. [VN2020 公开赛]simpleHeap-记录一次gef调试过程

    [V&N2020 公开赛]simpleHeap 安全机制: IDA反汇编 main: Add: Edit: 可以看到get_input_content函数包含一个off_by_one漏洞. S ...

  5. c语言调试过程中的错误,C语言调试过程中duplicate symbol错误分析

    说明:在我们调试C语言的过程中,经常会遇到duplicate symbol错误(在Mac平台下利用Xcode集成开发环境).如下图: 一.简单分析一下C语言程序的开发步骤. 由上图我们可以看出C语言由 ...

  6. PIXHAWK上安装PX4Flow光流传感器及调试过程

    摘自:https://blog.csdn.net/wlrh253250/article/details/90146561 PIXHAWK上安装PX4Flow光流传感器及调试过程 置顶 wang-rh ...

  7. STM32调试过程中出现的问题1:

    STM32调试过程中出现的问题1: -\HARDWARE\KEY\key.c(47): error: #29: expected an expression if(key_up&&(K ...

  8. 百度云PCS调试过程

    其实整个调试过程按照百度的开发指南做就可以了,只是现在百度云平台又改版,而开发文档在一些地方没有同步更新.所以写下我的调试过程供大家参考. 1.当然首先是注册成为百度开发者 2.任意创建一个应用,我选 ...

  9. 腾讯在线教育互动课堂——Demo调试过程记录

    官方文档地址:https://cloud.tencent.com/document/product/680/17888 "Demo调试"不像集成使用,不需要完全按照文档一步步处理, ...

  10. RK3568驱动OV13850摄像头模组调试过程

    摄像头介绍 品牌:Omnivision 型号:CMK-OV13850 接口:MIPI 像素:1320W OV13850彩色图像传感器是一款低电压.高性能1/3.06英寸1320万像素CMOS图像传感器 ...

最新文章

  1. 细数人体十大最“无用”的器官。
  2. ubuntu 安装gcc 4.8.2
  3. Codeforces 1336E Chiori and Doll Picking (子集和变换、线性基、阈值算法、状压 DP、组合计数)...
  4. Angular里使用createEmbeddedView动态加入新的模板元素
  5. 照片识别出错_AI跨年龄人脸识别技术在跨年龄寻亲的应用简析
  6. python2.7与3.7脚本转换_python 2.7 - python 3.7 升级记录
  7. CCF201609-2 火车购票
  8. win2003 sp2 设置NLB
  9. caffe的python接口学习(7):绘制loss和accuracy曲线
  10. Atitit.软件开发的几大规则,法则,与原则Principle v3
  11. 什么是JavaScript异步编程?
  12. Xcode5 证书配置
  13. 微信小程序 人脸识别功能 代码 wx.faceDetect
  14. 如何简单抓取拼多多买家订单列表
  15. java用画正弦函数_用java语言绘制正弦曲线
  16. 泰坦尼克号分析是否获救
  17. Git Branching基础操作学习笔记
  18. Beosin(成都链安)预警:黑客攻击EOS竞猜类游戏 已获利数百EOS
  19. Android限制录制屏幕无声音,哪一个安卓录屏软件可以录制系统的声音
  20. linux|shell脚本|有趣的知识---格式化输出日志和脚本调试方法以及kubernetes集群核心服务重启和集群证书备份脚本

热门文章

  1. JS将阿拉伯数字翻译成中文的大写数字、JS将数字转换为大写金额(整理)
  2. android 解析json 日期格式,处理Json数据中的日期类型.如/Date(1415169703000)/格式
  3. 太空大战2d游戏制作
  4. 服务器ip显示静态表示什么,静态ip是什么意思 什么是静态IP
  5. 【Nodejs】用http模块写一个简单的web服务器
  6. 2018 中国Linux内核开发者大会
  7. Nodejs ORM Prisma 介绍
  8. Latex 插入的图片紧跟当前文字
  9. 边境的悍匪—机器学习实战:第九章 无监督学习任务
  10. 边境的悍匪—机器学习实战:第十四章 使用卷积神经网络的深度计算机视觉