标签:比例 mit pac 情况 信号 latency click cimage 例子
本文转载自: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。
MEME(Micro-Electro-Mechanical System),微型电子机械系统,也叫微机电系统,是指可批量制作的,将微型机构、微型传感器、微型执行器以及信号处理和控制电路、直至接口、通信和电源等于一体的微型器件或系统。可以把它理解为利用传统的半导体工艺和材料,用微米技术在芯片上制造微型机械,并将其与对应电路集成为一个整体的技术。
MEMS传感器的种类繁多,G-sensor是MEMS传感器的一种。
G-sensor(Gravity sensor),重力传感器,又名加速度传感器(accelerometer),是能感知加速度大小的MEMS传感器。
如图中的模型, 一个质量块两端通过弹簧进行固定。在没有加速度的情况下,弹簧不会发生形变,质量块静止。当产生加速度时,弹簧发生形变,质量块的位置会发生变化。 弹簧的形变量随着加速度的增大而增大。在弹簧的劲度系统 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。因为内部质量块在重力加速度的作用下,产生了位移。
测量范围 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往往都是可以配置的。
LIS2DH12的功能和特色如下:
其中6D/4D方向检测、自由落体检测和动作检测并不是由独立的单元实现的,这三种功能的实现都是通过对可配置中断资源INT1和INT2进行设置后实现的。
单击/双击识别和自动休眠/唤醒都是由独立的单元实现的,其中单击/双击识别有相应的中断标志位,自动休眠/唤醒没有标志位。
LIS2DH12提供了两个可配置中断资源INT1和INT2,这里针对INT1进行说明,INT2与INT1是相似的。
注意区分中断资源的INT1/INT2和中断输出引脚的INT1/INT2,前者是G-sensor的内部中断资源,后者是G-sensor的实际物理输出引脚。
INT1的寄存器包括配置寄存器INT1_CFG,状态寄存器INT1_SRC,门限寄存器INT1_THS,持续时长寄存器INT1_DURATION。
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的大小关系和其正负。6-direction movement
模式下,器件从某个方向移向不同的已知方向时将触发INT1中断,中断持续1/ODR。其应用场景是movement recognition。6-direction position
模式下,器件稳定在已知的方向时将触发INT1中断,中断持续直到方向改变。其应用场景是positions recognition。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。
通过中断资源INT1和INT2,可实现wake-up检测,但是需要加入额外的逻辑处理。LIS2DH12直接提供了自动休眠、唤醒的功能。
当加速度小于设置的activation threshold时,器件自动切换到low-power模式。一旦加速度大于threshold,器件马上自动切换到由CTRL_REG1
的LPen
位和CTRL_REG3
的HR
位配置的工作状态。
自动休眠/唤醒功能的寄存器包括门限寄存器Act_THS和时长寄存器Act_DUR。
标签:比例 mit pac 情况 信号 latency click cimage 例子
原文地址:http://www.cnblogs.com/zzb-Dream-90Time/p/6511742.html