3D加速度传感器LIS2DS12硬件计步功能相关寄存器详解

LIS2DS12是ST 3D MEMS家族中拥有stepcounter(硬件计步)功能的产品之一。它内部其实是有一套已经固化的有限状态机,专门用于计步器功能:步长检测器和步长计数器。

LIS2DS12被广泛应用于医疗、穿戴、运动检测等和人体行为相关的产品中。

因此,它比其它不带硬件计步的MEMS多了一些寄存器,如下:

STEP_COUNTER_MINTHS (计步配置寄存器)

定义如下:

RST_nSTEP:重置计步寄存器,当该位为1时,强制将STEP_COUNTER_L / STEP_COUNTER_H里保存的计步值清零。

PEDO4g:4g量程配置位,1选择4g量程,0选择2g量程。考虑到使用者会出现疾跑急停等现象,此时加速度有可能超过2g,为避免饱和,通常建议stepcounter的加速度设置为4g。但前提是 CTRL1中设的量程必须>= 4g

SC_MTHS:计步触发门限。手册中没有给出,查阅其它资料,该值LSB=16mg@ PEDO4g=0或LSB=16mg@ PEDO4g=1,。即用户可配置一个门限值SC_MTHS*32mg,当行走时产生的加速度超越这个门限,则计步有效,步数加1,反之则无效。

STEP_COUNTER_L / STEP_COUNTER_H(计步值寄存器)

定义如下:

nSTEP_L[7:0]和nSTEP_H[7:0]组成一个16位的寄存器,用于存储过去时间内的计步值,共计可存储65535步。溢出清零。应用时MCU应定期访问该寄存器,避免溢出。

PEDO_DEB_REG (去抖寄存器),该寄存器处于高级寄存器内,注意需要先配置 CTRL2 寄存器FUN_CFG_EN位才能访问高级寄存器



定义如下:

DEB_TIME[4:0]是防抖时间,LSB=80ms,即定义一个时间范围DEB_TIME*80ms,例如DEB_TIME=11,那这个时间是880ms。这时,芯片会自行判断计步的间隔时间,前后两次计步间隔时间若<=880ms,则计步有效;反之若前后两次计步间隔时间>880ms,则认为这是一次无效的抖动造成的,不是走路,后一次的计步将会被舍弃。

DEB_STEP[2:0]是防抖门限。它用于补偿在计步判断时丢掉的步数。例如,人体从静止开始行走,芯片此时开始做计步介入判断,判断有个反复确认的过程,这难免会使之前已经行走的几步没有计算在内。为了补偿,DEB_STEP提供了最大7步的补偿,一旦芯片判断出人开始行走后,这个补偿会自动加入到计步寄存器STEP_COUNTER中

STEP_COUNT_DELTA (规定时间内检测到计步的中断),该寄存器处于高级寄存器内,注意需要先配置 CTRL2 寄存器FUN_CFG_EN位才能访问高级寄存器

定义如下:

手册中的解释比较晦涩: Instead of generating an interrupt every time a step is recognized, it is possible to generate it if at least one step is detected within a certain time period. This time period is defined by setting a value higher than 00h in the bits [0:7] of the STEP_COUNT_DELTA register in the advanced configuration registers (1 LSB of the value of the STEP_COUNT_DELTA register corresponds to 1.6384 seconds). 个人理解是,该寄存器和中断有关。芯片是可以设置stepcounter触发中断输出的,但是每次计步都触发1次中断,显得没有必要,而且会占用MCU响应资源。这个寄存器的目的就是设置一个时间段STEP_COUNT_D*1.6384s,在这个时间段内,只要识别到至少1次计步,那么在这段时间结束后才触发中断,上报MCU。这样可大大节省MCU线程的开支。

以上就是LIS2DS12关于stepcounter硬件计步的几个寄存器解释,用户可根据自身产品的需要,灵活配置这些寄存器,实现精准触发、精确计步而且防止其它干扰动作。

★博文内容均由个人提供,与平台无关,如有违法或侵权,请与网站管理员联系。

★文明上网,请理性发言。内容一周内被举报5次,发文人进小黑屋喔~

评论