本文转载: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-sensorZ轴垂直放置在水平桌面上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-offset0g 偏置表示在没有加速度(零输入)时输出的测量值。模拟输出的传感器通常用伏特或毫伏表示,数字输出的传感器用码字表示。不同型号的G-sensor的 0g-offset 不同型号的芯片不同 0g-offset 不同的芯片甚至不同的轴 0g-offset 不同的是,是否需要校正取决于具体的应用。若只关心加速度的相对变化,而不关心加速度的具体值,则无需校正。如果您关心所选设备的加速度的具体值 0g-offset 又大,必须校正。某些G-sensor本身有 offset 寄存器只需静止放置待校准的轴沿水平方向,并测量其 0g 将此值乘以-1 写入 offset 寄存器。如果G-sensor本身没有 offset 寄存器要求用户在自己的处理器中记录该值,并在实际测量结果中减去该值 offset。
-
输出速率 ODRODR(Output Data Rate),表示G-sensor刷新输出数据的频率。ODR输出数据更新越快,功耗越高。G-sensor的ODR通常可以配置。
二、BOSCH的BMA222E
三、ST的LIS2DH12
LIS2DH功能及特点如下:
- I2C/SPI两个通信接口
- 1Hz~5.3kHz的ODR可配置
- high-resolution/normal/low-power三种操作模式high-resolution输出为12bitsnormal输出为10bitslow-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/INT中断输出引脚INT1/INT2,前者是G-sensor内部中断资源,后者是G-sensor实际物理输出引脚。
INT相关寄存器
INT1寄存器包括配置寄存器INT1_CFG,状态寄存器INT1_SRC,门限寄存器INT1_THS,持续时间寄存器INT1_DURATION。
- INT1_CFG
- INT1_SRCINT1_SRC只读寄存器,读寄存器将被清除IA位中断。
- INT1_THS根据配置的测量范围,1LSB代表不同的门限值。
- INT1_DURATION
INT中断模式
INT1_CFG中AOI
位和6D
位决定了INT四种中断模式: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