打印
[信息]

垂直翻转(Flip Down)

[复制链接]
611|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主

小伙伴们可以先去github上下载下ST的MEMS有限状态机的例程仓库,为方便起见,我已经将LSM6DSOX的例程打包上传到百度云了,链接和提取码如下:

https://pan.baidu.com/s/1PAexCkAoEr5qmKMo5xYMOg

提取码:ufln

下载并解压后,可以得到如下七个文件夹:


每个文件中包含了README.md、后缀.h、后缀.ucf文件,其中:

README.md 简单的介绍了示例的基本信息

后缀.h文件是根据FSM的具体配置参数,通过Unico GUI生成的C代码头文件,可以很方便的将其独立的运行在自己的工程程序中。

后缀.ucf文件是Unico GUI的标准配置文件,Unico GUI可以直接将配置信息保存为ucf文件,也可以将其加载并导入到传感器中。

本帖主要来讲解下 翻转识别Flip-Down detection示例的实现过程。

LSM6DSOX这款传感器定位在物联网、低功耗角度,那么一定是考虑各种物联网设备的应用角度来设计的。

例程中的翻转识别,顾名思义就是识别设备是否被翻转到一定的角度,这个应用在智能手表、手机上可以经常简单到,比如有的手机可以设置翻扣手机设置静音、智能手表抬腕显示时间等等。

那么翻转识别是怎么是实现的呢?

在地球上任意地方,都会存在一个指向地心的重力加速度,而传感器中的加速度计就可以感应到这个加速度存在,加速度计有三个方向的感知能力,分别是X\Y\Z,重力加速度在这三个轴方向上的矢量和便指向了地心,那么通过重力加速度就可以判断出传感器的方向。


明白了该如何实现此功能之后,我们来看下官方给的Flip-Down detection例程,通过Unico GUI的load功能,将ucf文件配置到传感器上


当load按钮左边显示Loaded的时候,参数就加载好了。

此时,打开左边的FSM控件,我们就可以看到翻转识别的状态机代码了。


关于这个编程界面的讲解,可以参考上一篇**:有限状态机编程使用方法

我们来看下这个这段例程,一共7条语句,结合上篇**中的末尾的指令集说明文档,

逐句的分析下每句的意义:

S0: RNC  NOP GNTH2

一条判断语句,GNTH2:当某轴数据大于Thresh2则成立,NOP:否则就重置。

可以看到左边变量区中Thresh2 = 0,Mask A = 08 ,那么根据掩码的设置规则:


这里选择的就是Z轴正方向,那么这条语句的意义就是 当Z轴正向加速度数值大于0的时候就成立,可以跳转到S1条,否则则返回S0.

S1: RNC LNTH2 TI4

又是一条判断语句,这里的前进条件是TI4:当定时计数大于Timer4设置的阈值则成立,重置条件是LNTH2:当某轴的数据小于Thresh2。这里的定时计数器时间基准是根据FSM OCR设置的频率来计数的,Timer = 0x0D,则总时长为1/26*13 = 0.5s。那么这条语句的意思就是如果Z轴正方向加速度值大于0g超过0.5s则跳转到S2,否则跳转到S0.

S2: SRP

这是一条命令指令,意义是将复位重置指针设置为下一个地址,也就是之后再遇到判断语句的重置状态则跳转到S3,而不跳转到S0.

S3: GNTH1 TI3

这条判断语句的前进条件为TI3:也就是当定时计数大于Timer3设置的阈值则成立,重置条件是GNTH1:当某轴的数据大于Thresh1,则重置。Thresh1 = -0.85,Z轴正方向加速度值大于-0.85,那也就是Z轴正向加速度小于-0.85g超过1/26*10=0.38s以上,则跳转到S4,否则跳转S3。

S4:CRP

这条命令指令重置SRP的作用,将复位重置指针设置回S0,

S5:CONTREL

这条指令执行循环到重置点S0,并且将掩码输出到OUTSx寄存器中,同时,由于SM1 Status中设置了INT1,也就是将中断路由到了外部输出中断引脚上,那么在执行S5指令时,则可以看到外部中断输出INT1产生脉冲。

S6:STOP

这条指令时停止执行指令,从上数代码来看一般不会跳转到这个位置。

ST官方为了方便编程,还做了状态机图显示界面,打开Debug标题栏,就可以看到如下:

[size=0.83em]

6.png (83.13 KB, 下载次数: 0)

下载附件  [url=]保存到相册[/url]

[color=rgb(153, 153, 153) !important]2020-8-24 23:43 上传





那么结合上述指令简介和状态机图,我们不难分析出他的具体工作流程是:

1、首先,传感器正向为Z轴正向方向,那么在一般的时候,他应该是朝着向上的方向,S0和S1 才回成立,也就避免了设备处于面板朝下的状态,再变到反向正朝下的时候产生中断的问题。

2、当排除了1的问题后,只要判断设备是否正向超下了一定时间,就可以得到翻转识别的效果了。

下面是测试效果的视频:

思考题:

1、假如设备安装传感器的方向不是Z轴正向朝向面板方向,而是X轴正向的话,那么我们想要实现识别翻扣设备的动作该怎么修改配置呢?


使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1499

主题

4486

帖子

6

粉丝