小伙伴们可以先去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轴正向的话,那么我们想要实现识别翻扣设备的动作该怎么修改配置呢?
|