打印
[信息]

4D检测(FourD position recognition)

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


先拿一张官方教程里的图说下4D检测,其实这里4D不是说4维…只是以X轴,Y轴构成的二维坐标系旋转后四个方向的识别。所以,基于下图来分析下识别过程,就是Y轴加速度反向接近重力加速度g,就是第一种姿态;反之,是第二种姿态;X轴加速度反向接近g,则是第三种,反之,第四种。整体识别思路还是很容易理解的吧。


接下来我们看下官方例程是怎样的,按照上一章的方式导入参数,就可以看到状态机代码了:


这个例程也是7条语句,但是有些新的指令出现了,接下来咱逐条分析下语句的作用。

S0:CMD MSKITEQ

第一条是个指令,根据指令集说明的解释,这条指令作用就是在OUTC寄存器被更新但是值没变的时候,屏蔽掉此时的中断。这条的作用接S6,待S6在讲解

S1:CMD SRP

这条再上一章有提到过,将重置点指针设置在下一条,也就是S2的位置,这样之后的判断条件重置后都会回到S2.

S2:RNC NOP GNTH1

判断条件,GNTH1 上一章也讲过了,会将输入的数据根据阈值Thresh1进行比较,如果大于的话则继续执行S3,否则返回S2。

S3: RNC LNTH1 TH3

判断条件,上一条跳转到这里后,会进行LNTH1比较,也就是如果输入的数据小于阈值 Thresh1就返回S2,否则**了Timer3的时间周期后,跳转到S4。

S4 CMD OUTC

这是一条命令指令,OUTC命令作用是将临时掩码值更新到OUTS输出寄存器上,并且产生一个中断。

这里有个额外的知识点,可以看到MaskA的值为0xF0,从上一章我们可以得知,此时选择了X轴正向、X轴负向、Y轴正向、Y轴负向为输入值,那么前面的比较指令就会对四个方向与阈值相对比,只要比对通过了的值就会在临时掩码的相应为置一,运行到OUTC的时候,就会将该值赋值在OUTS寄存器了,表现出来的现象就是上面那张动作示意图显示的样子,不同姿态对应着0x01,0x02,0x04,0x08四个值。

执行完S4,继续执行S5.

S5 RNC NOP LNTH2

此条指令的继续判断条件为LNTH2 ,也就是上一条辨别出来的轴数据要是小于阈值2就继续执行S6,否则则返回S2.

S6 CMD CONTROL

这条命令 CONTROL:有几个作用,1、将临时值都回复到默认状态,比如SRP设置的重置点值、TH3比较的临时值,临时掩码值等都恢复到默认状态;2、结束掉循环,跳转回默认的重置点,此时会产生一次中断,但是连接到S0指令的作用,这里的中断就被屏蔽掉了。表现出来的就是程序恢复初始状态,中断和OUTS都没有变化。

整体的状态机流程图如下:

[size=0.83em]

3.png (16.98 KB, 下载次数: 0)

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

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





结合上面的动作图、流程图和指令分解,我相信各位就会比较清晰的理解了这个例程的工作流程了。

根据上述的过程,我们不难分析出,只要将MaskA的值改为0xFC,就可以识别出6个方向了。


使用特权

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

本版积分规则

1426

主题

3957

帖子

6

粉丝