1335|0

97

帖子

0

资源

一粒金砂(中级)

【LSM6DSOX有限状态机例程学习 三】--垂直翻转(Flip Down) [复制链接]

上周末,有限状态机及例程简介有限状态机编程使用方法这两篇帖子已经较为详细的介绍了LSM6DSOX的有限状态机的特点和基本的使用方法。本周开始,我将对ST官方所提供的FSM例程进行讲解分享,从例程理解到复现,进一步掌握LSM6DSOX有限状态机的使用方法。

 

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

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

提取码:ufln

 

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

1.png

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

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

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

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

 

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

 

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

 

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

 

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

 

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

2.png

 

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

3.png

 

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

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

4.png

 

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

 

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

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

S0: RNC  NOP GNTH2

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

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

5.png

这里选择的就是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标题栏,就可以看到如下:

6.png

 

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

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

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

 

下面是测试效果的视频:

思考题:

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


回复
您需要登录后才可以回帖 登录 | 注册

最新文章 更多>>
    关闭
    站长推荐上一条 1/5 下一条

    About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

    站点相关: 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

    北京市海淀区知春路23号集成电路设计园量子银座1305 电话:(010)82350740 邮编:100191

    电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2020 EEWORLD.com.cn, Inc. All rights reserved
    快速回复 返回顶部 返回列表