ST 六轴传感器LSM6DSO系列有限状态机(FSM)简介及使用

意法半导体ST最新一代6轴传感器LSM6DSO系列,较以往的6轴传感器相比,LSM6DSO系列集成了有限状态机FSM(Finite State Machine)模块,只需要进行相应的配置,就可以直接输出特定动作的识别结果,使用状态机姿态识别功能可以节省算法和算法带来的整体功耗。可编程 FSM最多16 程序可同时运行,一套完整的命令和条件指令集每个程序都可以输出多个状态编程基于加速度,陀螺,磁力计的处理。总共由16个可编程的状态机组成,每个状态机的是独立运行的基于相同的输入 。

定义:

有限状态机(FSM)是由一系列的命令条件组成的逻辑,执行器按照这个逻辑和传感器数据生成的周期一步一步执行。

命令:

  • 每个命令占8个比特,有时后面还有参数。
  • 当执行器执行的到一个命令时,指针会立刻指向下一个命令或条件并进行评估
下图是命令表:

条件:

  • 条件是由4bits 的复位和4bits继续执行的两个条件组成。
  • 当复位条件为真时,程序指针会指向上一次配置的的复位地址,复位地址可以有SRP和CRP两个指令实时指定。
  • 当继续执行条件为真时,程序指针会指向下一行命令或条件,并当新的传感器数据产生时,执行器立即执行新的命令或条件。
  • 如果条件语句是NONE时,指针不会变,当下一次的传感器数据产生时执行器还是评估原本这一行的条件


状态机运行流程图

状态机从一个启动状态开始,通过依赖于输入的转换进入不同的状态,并最终以一个特定的状态(称为停止状态)结束。当前状态由系统的过去状态决定。下图描述了通用状态机的流程。

输入输出信号

通过SIMNUX(0X23)命令可以选择输入信号:

  • 000 加速度数据 [ax ay az av]
  • 001 陀螺仪数据 [gx gy gz gv]
  • 010 校准后的磁力计数据[mx my mz mv]
  • 111 陀螺的积分角度值 [dx dy dz dv]
以上每类输入的v表示 三轴的矢量V = sqrt( x2 + y2 + z2 )

输出信号:

  • 通过一些指令可以把状态机执行的状态输出到out 寄存器,每一个状态机都有一个对应的输出寄存器。
  • 每一个状态机都可以选择在中断管脚 INT1 , INT2 产生对应的中断。

状态机程序的组成

一个简单程序可以由一下组成:

  • 一个数据区域,包括一个固定数据组成的固定去和一个变量组成的数据区。

         --固定数据区是由六个字节组成,位于每个状态机的最前面, 用于指定哪些资源指令区域将要用到的以及一些有用的参数。

         --变量区是一个可变字节的区域,位于固定区的后面, 用于分配变量的区域

  • 指令区, 有条件和命令语句组成 。

               --指令区也是一个可变字节的区域,位于变量区的后面, 用户通过命令和条件定义算法的一个区域。

               --三个区域最大长度不超过256个字节。

FSM开发工具(UNICO)

Unico工具主页面:




FSM通用配置:



上图页面标注释义:

  1. 选择要配置的状态机编号
  2. FSM ODR设置(所有状态机通用),传感器ODR必须大于等于FSM ODR
  3. 长计数器:内部16位计数器(所有状态机都通用),INCR命令用于增加内部计数器,当内部计数器等于最大配置值时,可生成一个中断
  4. 输出长计数器中断在INT1和INT2
  5. 数据转换:为了帮助用户正确填写FSM参数,GUI提供“Float32转Float16”和“Float16转Float32”的转换器

FSM配置选项卡


FSM中断选项卡


FSM调试选项卡



FSM调试log的获取


更多LSM6DSO系列的资料,可以访问ST官方网站:https://www.st.com/content/st_com/en/products/mems-and-sensors/inemo-inertial-modules/lsm6dso.html

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

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

评论