G-sensor概述及常用概念整理【转】
本文转载自:http://www.jianshu.com/p/d471958189a0?nomobile=yesG
本文对G-sensor进行整理,先介绍G-sensor的一些基本概念,再具体讲解BOSCH、ST、ADI三家的G-sensor,其中BOSCH的G-sensor重点讲BMA222E,ST的G-sensor重点讲LIS2DH12,ADI的G-sensor具体讲ADXL362。
一、G-sensor概述
什么是MEMS
MEME(Micro-Electro-Mechanical System),微型电子机械系统,也叫微机电系统,是指可批量制作的,将微型机构、微型传感器、微型执行器以及信号处理和控制电路、直至接口、通信和电源等于一体的微型器件或系统。可以把它理解为利用传统的半导体工艺和材料,用微米技术在芯片上制造微型机械,并将其与对应电路集成为一个整体的技术。
MEMS传感器的种类繁多,G-sensor是MEMS传感器的一种。
什么是G-sensor
G-sensor(Gravity sensor),重力传感器,又名加速度传感器(accelerometer),是能感知加速度大小的MEMS传感器。
G-sensor工作原理
如图中的模型, 一个质量块两端通过弹簧进行固定。在没有加速度的情况下,弹簧不会发生形变,质量块静止。当产生加速度时,弹簧发生形变,质量块的位置会发生变化。 弹簧的形变量随着加速度的增大而增大。在弹簧的劲度系统 k 和质量块的质量 m已知的情况下,只要测量出弹簧的形变量,就可以求出系统的加速度。
G-sensor内部有 finger sets, 用来测量产生加速度读时质量块的位移。 每一个finger set 相当两个电容极板, 当有加速度时质量块会产生相对运动,而位移的变化会导致差分电容的变化。
当然,具体的差分电容检测和计算加速度过程由G-sensor内部完成,我们只需要直接读取其转化后的值即可。G-sensor输出值也不是直接的加速度值,它的计量单位是通常用g表示,1g代表一个重力加速度,即9.8m/s^2。1g=1000mg。
这里用一个例子再次强调一下G-sensor的输出值是根据其内部质量块的位移计算得出的:
将G-sensor的Z轴垂直向地,静止放置在水平桌面上,此时G-sensor芯片是静止的,虽然芯片整体加速度为0g,但是读取其输出值,X/Y轴输出为0g,Z轴输出为1g。因为内部质量块在重力加速度的作用下,产生了位移。
G-sensor重要参数
测量范围 Measurement Rang
测量范围是传感器可以支持的输出加速度范围,通常用±g 表示。这就是G-sensor可以测量并准确输出的最大加速度。例如,一个测量范围是±8g G-sensor,它的输出一直到加速度达到±8g 时是线性的。灵敏度 Sensitivity
灵敏度表示传感器输出随加速度(输入)变化的比例,它定义理想情况下加速度和传感器输出的直线关系。数字输出的传感器的灵敏度通常使用 LSB/g 或mg/LSB 表示。例如,一个灵敏度为4mg/LSB的G-sensor,若其Z轴输出为100,则可计算出Z轴加速度为400mg。0g偏移 0g-offset
0g 偏置表示在没有加速度(零输入)时输出的测量值。模拟输出的传感器通常使用伏特或毫伏表示,数字输出的传感器使用码字表示。
不同型号的G-sensor的 0g-offset 不同,同一型号的不同芯片的 0g-offset 也不同,甚至同一颗芯片中不同轴的 0g-offset 也不同,是否需要校正要视具体应用而定。如果应用中只关心加速度的相对变化,而不关心加速度的具体数值,则不需要校正。如果是关心加速度的具体数值,而所选器件的 0g-offset 又比较大,则必须要校正。
某些G-sensor本身有 offset 寄存器,这是只需要把待校准的轴沿水平方向静止放置,测量其 0g 时的输出,并把这个值乘以-1 写入 offset 寄存器即可。如果G-sensor本身没有 offset 寄存器,则需要用户在自己的处理器中记录这个数值,并在实际的测量结果中减去这个 offset。输出速率 ODR
ODR(Output Data Rate),表示G-sensor的输出数据的刷新频率。ODR越高,输出数据更新越快,功耗越高。G-sensor的ODR往往都是可以配置的。
二、BOSCH的BMA222E
三、ST的LIS2DH12
LIS2DH12的功能和特色如下:
- I2C/SPI两种通信接口
- 1Hz~5.3kHz的ODR可配置
- high-resolution/normal/low-power三种运行模式
high-resolution模式时输出为12bits
normal模式时输出为10bits
low-power模式时输出为8bits; - 测量范围 ±2g/±4g/±8g/±16g可选
- 两个可配置的中断资源INT1和INT2
- 内置温度传感器
- 内置FIFO
- 两个中断输出引脚
- 6D/4D方向检测 6D/4D orientation detection
- 自由落体检测 Free-fall detection
- 动作检测 Motion detection
- 单击/双击识别 Click/double-click recognition
- 自动休眠/唤醒 Sleep-to-wake and return-to-sleep
其中6D/4D方向检测、自由落体检测和动作检测并不是由独立的单元实现的,这三种功能的实现都是通过对可配置中断资源INT1和INT2进行设置后实现的。
单击/双击识别和自动休眠/唤醒都是由独立的单元实现的,其中单击/双击识别有相应的中断标志位,自动休眠/唤醒没有标志位。
可配置中断资源INT1和INT2
LIS2DH12提供了两个可配置中断资源INT1和INT2,这里针对INT1进行说明,INT2与INT1是相似的。
注意区分中断资源的INT1/INT2和中断输出引脚的INT1/INT2,前者是G-sensor的内部中断资源,后者是G-sensor的实际物理输出引脚。
INT相关寄存器
INT1的寄存器包括配置寄存器INT1_CFG,状态寄存器INT1_SRC,门限寄存器INT1_THS,持续时长寄存器INT1_DURATION。
- INT1_CFG
- INT1_SRC
INT1_SRC是只读寄存器,读取该寄存器将会清除IA位中断。 - INT1_THS
根据所配置的测量范围,1LSB代表不同的门限值。 - INT1_DURATION
INT中断模式
INT1_CFG中AOI
位和6D
位决定了INT1的四种中断模式:OR combination
、AND combination
、6-direction movement
、6-direction position
OR combination
和AND combination
OR combination
和AND combination
模式下,是将三轴数据的绝对值与threshold值进行比较。大于threshold时,将状态寄存器INT1_SRC中XH(YH, ZH)置1,XL(YL, ZL)置0;小于threshold时,XH(YH, ZH)置0,XL(YL, ZL)置1。OR combination
模式时,任一使能了的事件发生,都将触发INT1中断。其应用场景之一就是wake-up检测。AND combination
模式时,所有使能的事件都发生,才能触发INT1中断。其应用场景之一就是free-fall检测。6-direction movement
和6-direction position
6-direction movement
和6-direction position
模式下,是将三轴数据直接与threshold值进行比较。XH、YH、 ZH、XL、YL、 ZL的值反应了三轴数据与threshold的大小关系和其正负。
当三轴数据为正,且大于threshold时,XH(YH, ZH)将置为1;当三轴数据为负,且大于threshold时,XL(YL, ZL)将置为1。6-direction movement
模式下,器件从某个方向移向不同的已知方向时将触发INT1中断,中断持续1/ODR。其应用场景是movement recognition。6-direction position
模式下,器件稳定在已知的方向时将触发INT1中断,中断持续直到方向改变。其应用场景是positions recognition。
wake-up检测
wake-up事件,反映到加速度上,就是选定轴的任一轴的加速度值超过threshold。属于OR combination
事件。
参考配置如下:
1. Write A7h into CTRL_REG1 // Turn on the sensor and enable XYZ, ODR = 100 Hz
2. Write 00h into CTRL_REG2 // High-pass filter disabled
3. Write 40h into CTRL_REG3 // Interrupt driven to INT1 pad
4. Write 00h into CTRL_REG4 // FS = 2 g
5. Write 08h into CTRL_REG5 // Interrupt latched
6. Write 10h into INT1_THS // Threshold = 250 mg
7. Write 00h into INT1_DURATION // Duration = 0
8. Write 0Ah into INT1_CFG // Enable XH and YH interrupt generation
9. Poll INT1 pad; if INT1=0 then go to 8 // Poll RDY/INT pin waiting for the wake-up event
10 Read INT1_SRC // Return the event that has triggered the interrupt
11 (Wake-up event has occurred; insert your code here) // Event handling
12 Go to 8
自由落体检测
free-fall事件,反映到加速度上,就是三轴加速度都都接近于0g。属于AND combination
事件。
参考配置如下:
1 Write A7h into CTRL_REG1 // Turn on the sensor, enable XYZ, ODR = 100 Hz
2 Write 00h into CTRL_REG2 // High-pass filter disabled
3 Write 40h into CTRL_REG3 // Interrupt driven to INT1 pad
4 Write 00h into CTRL_REG4 // FS = 2 g
5 Write 08h into CTRL_REG5 // Interrupt latched
6 Write 16h into INT1_THS // Set free-fall threshold = 350 mg
7 Write 03h into INT1_DURATION // Set minimum event duration
8 Write 95h into INT1_CFG // Configure free-fall recognition
9 Poll INT1 pad; if INT1 = 0 then go to 10 // Poll INT1 pin waiting for the free-fall event
10 (Free-fall event has occurred; insert your code here) // Event handling
11 Read INT1_SRC register // Clear interrupt request
12 Go to 9
单击/双击识别
LIS2DH12可同时使能单击检测和双击检测,但要注意,如果这样设置,发生单击事件时,SClick
位会置为1,但是IA
位不会置为1,也就不能触发CLICK中断;只有发生双击事件时,才能使IA
位置1,触发中断,并且由于双击事件是满足一定时序关系的两个单击事件,所以双击事件的第一击会使得SClick
置为1,这样就还需要加上逻辑判断才能确定没有发生单击事件。
综上,单击、双击检测最好只使能一种。如果两种都使能,当SClick
置为1时,就还是需要加入额外的逻辑判断来区别到底是一次单击事件还是双击事件中的一击。
单击/双击识别的寄存器包括:配置寄存器CLICK_CFG,状态寄存器CLICK_SRC,门限寄存器CLICK_THS,时序相关寄存器CLICK_LIMIT、CLICK_LATENCY和CLICK_TIMELIMIT。
- CLICK_CFG
- CLICK_SRC
- CLICK_THS
- TIME_LIMIT
- TIME_LATENCY
- TIME_WINDOW
自动休眠/唤醒
通过中断资源INT1和INT2,可实现wake-up检测,但是需要加入额外的逻辑处理。LIS2DH12直接提供了自动休眠、唤醒的功能。
当加速度小于设置的activation threshold时,器件自动切换到low-power模式。一旦加速度大于threshold,器件马上自动切换到由CTRL_REG1
的LPen
位和CTRL_REG3
的HR
位配置的工作状态。
自动休眠/唤醒功能的寄存器包括门限寄存器Act_THS和时长寄存器Act_DUR。
- Act_THS
- Act_DUR
四、ADI的ADXL362
G-sensor概述及常用概念整理【转】的更多相关文章
- 007-elasticsearch5.4.3【一】概述、Elasticsearch 访问方式、Elasticsearch 面向文档、常用概念
一.概述 Elasticsearch 是一个开源的搜索引擎,建立在一个全文搜索引擎库 Apache Lucene™ 基础之上. Elasticsearch 也是使用 Java 编写的,它的内部使用 L ...
- MAC机常用快捷键整理表格
MAC机常用快捷键整理表格 范围 快捷键 说明 图形 (Command 键)在某些 Apple 键盘上,此键也可能为标志() Control (Control 键) Alt Opt ...
- NSIS常用代码整理
原文 NSIS常用代码整理 这是一些常用的NSIS代码,少轻狂特意整理出来,方便大家随时查看使用.不定期更新哦~~~ 1 ;获取操作系统盘符 2 ReadEnvStr $R0 SYSTEMDRIVE ...
- javascript中字符串常用操作整理
javascript中字符串常用操作整理 字符串的操作在js中非常频繁,也非常重要.以往看完书之后都能记得非常清楚,但稍微隔一段时间不用,便会忘得差不多,记性不好是硬伤啊...今天就对字符串的一些常用 ...
- DNS,TCP,IP,HTTP,socket,Servlet概念整理
DNS,TCP,IP,HTTP,socket,Servlet概念整理 常见的协议虽然很容易理解,但是看了之后过一段时间不看还是容易忘,笔记如下,比较零碎,勉强供各位复习.如有错误欢迎指正. D ...
- 【linux】---常用命令整理
linux常用命令整理 一.ls命令 就是list的缩写,通过ls 命令不仅可以查看linux文件夹包含的文件,而且可以查看文件权限(包括目录.文件夹.文件权限)查看目录信息等等 常用参数搭配: l ...
- salt 常用命令整理
salt 常用命令整理 ***********模块*********** 查看模块列表module salt 'minion' sys.list_modules 查看指定module的function ...
- Unit05: JavaScript对象概述 、 常用内置对象一 、 常用内置对象二 、 常用内置对象三
Unit05: JavaScript对象概述 . 常用内置对象一 . 常用内置对象二 . 常用内置对象三 常用内置对象使用演示: <!DOCTYPE html> <html> ...
- Linux常用指令整理
Linux常用命令整理 快捷键 [Tab] [Tab] 接在一串指令的第一个字的后面,则为"命令补全": [Tab] 接在一串指令的第二个字以后时,则为"文件补齐&quo ...
随机推荐
- 为什么你的javascript学了这么久,水平还是烂成了渣?
今年我给公司面试时,面试了百来个人,水平我就呵呵了,还觉得自己学了很久很厉害了,其实呢,渣的很呀,这篇文章送给想学好javascript找份工作的同学们. 首先要说明的是,咱现在不是高手,最多还是一个 ...
- 锋利的jQuery 要点归纳(一) jQuery选择器
1 基本选择器 $(#id) 根据给定的id匹配一个元素$(.class) 根据给定的类名匹配元素$(element) 根据给定的元素名匹配元素$(*) 匹配所有元素$(sel ...
- [LeetCode] 109. 有序链表转换二叉搜索树
题目链接 : https://leetcode-cn.com/problems/convert-sorted-list-to-binary-search-tree/ 题目描述: 给定一个单链表,其中的 ...
- Lock和synchronized的区别和使用(转发)
今天看了并发实践这本书的ReentantLock这章,感觉对ReentantLock还是不够熟悉,有许多疑问,所有在网上找了很多文章看了一下,总体说的不够详细,重点和焦点问题没有谈到,但这篇文章相当不 ...
- Centos 修改当前路径显示为全路径
1.修改显示全路径: vim /etc/bashrc 找到[ "$PS1" = "\\s-\\v\\\$ " ] && PS1="[\ ...
- HTML回顾之表单和列表
FORM HTML 表单 表单是一个包含表单元素的区域. 表单元素是允许用户在表单中输入内容,比如:文本域(textarea).下拉列表.单选框(radio-buttons).复选框(checkbo ...
- SpringBoot 单元测试忽略@component注解
springboot框架在单元测试时可能需要忽略某些带有@component的实例 例如以下代码: @Component public class MyCommandLineRunner implem ...
- Java httpClint实现文件上传
Maven依赖 <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId&g ...
- Verilog-2001标准在2001年就发布了
,不过翻了一些Verilog书籍,对Verilog-2001的新增特性很少有提及,即使提到了,也只是寥寥数语带过,其实在Verilog-2001中做了很多有用的改进,给编程带来很大的帮助,有必要详 ...
- vim 修改复制过来的代码缩进
命令模式下 :1,9< //1至9行回退一个tab :1,9> //1至9行缩进一个tab 让不可打印字符心事出来::set list