MSCBSC 移動(dòng)通信論壇
搜索
登錄注冊(cè)
網(wǎng)絡(luò)優(yōu)化工程師招聘專欄 4G/LTE通信工程師最新職位列表 通信實(shí)習(xí)生/應(yīng)屆生招聘職位

  • 閱讀:9765
  • 回復(fù):0
轉(zhuǎn)帖 【LSM6DSOX有限狀態(tài)機(jī)例程學(xué)習(xí) 二】
微信Czh6402
中級(jí)會(huì)員
鎵嬫満鍙風(fēng)爜宸查獙璇? style=


 發(fā)短消息    關(guān)注Ta 

積分 530
帖子 106
威望 21132 個(gè)
禮品券 0 個(gè)
專家指數(shù) 0
注冊(cè) 2020-9-23
專業(yè)方向 
回答問(wèn)題數(shù) 0
回答被采納數(shù) 0
回答采納率 0%
 
發(fā)表于 2020-10-26 14:54:18  只看樓主 

上一章講了啥是有限狀態(tài)機(jī)模型和LSM6DSOXFSM的特點(diǎn)。

 

本章我將從FSM的編程模塊到Unico FSM編程界面,分別介紹各個(gè)模塊、

區(qū)域、變量的意義,為編寫自己FSM狀態(tài)機(jī)程序打個(gè)基礎(chǔ),下面我們開始吧。

 

上一帖中介紹了LSM6DSOXFSM中一共有16個(gè)完全獨(dú)立資源相同狀態(tài)機(jī)程序塊,

那么每個(gè)程序塊長(zhǎng)什么樣子呢?


一個(gè)狀態(tài)機(jī)程序塊中包含了輸入選擇器狀態(tài)機(jī)代碼塊兩部分。

 

輸入選擇器能夠?qū)鞲衅餍盘?hào)或者內(nèi)部計(jì)算的數(shù)據(jù)信號(hào)中選擇輸入信號(hào)源,

所支持的信號(hào)如下:

  • LSM6DSOX加速度計(jì)數(shù)據(jù)、加速度和  矢量的模。

  • LSM6DSOX陀螺儀角速度數(shù)據(jù)、角速度和 矢量的模。

  • 外部傳感器(比如磁力計(jì))數(shù)據(jù),磁力和 矢量的模。

  • 內(nèi)部計(jì)算的角度、角度和 角度矢量和

  • 正確配置的機(jī)器學(xué)習(xí)模塊的輸出。

其中,上述空間物理量和 矢量的模計(jì)算方法如公式:


 

怎么選擇輸入FSM信號(hào)源呢?這里就涉及到了一個(gè)命令“SINMUX”,用這個(gè)命令

就可以配置不同的數(shù)據(jù)到FSM的數(shù)據(jù)源端了,具體用法參考末尾的指令說(shuō)明。

 單位需要多本通信工程師職稱證書掛資質(zhì),歡迎有閑置證書的朋友聯(lián)系  150-0759-9549-微同

狀態(tài)機(jī)代碼塊就是我們實(shí)現(xiàn)自己狀態(tài)機(jī)的功能模塊了,如下圖所示,狀態(tài)機(jī)代碼塊

固定變量、可變變量、指令程序組成:


固定變量區(qū)位于程序塊的最前端,長(zhǎng)度固定6字節(jié),一共6個(gè)變量,根據(jù)配置系統(tǒng)

自動(dòng)更新,無(wú)需自己更改。

可變變量區(qū)位于固定變量區(qū)之后,長(zhǎng)度隨使用而改變,最長(zhǎng)36字節(jié),一共24個(gè)變量,

隨用隨設(shè)置。

指令程序區(qū)位于可變變量區(qū)之后,由條件和命令組成,控制輸入選擇器的命令

SINMUX”就在這個(gè)區(qū)域內(nèi)設(shè)置。

 

狀態(tài)機(jī)代碼塊中的上述三個(gè)區(qū)域總長(zhǎng)度最多256字節(jié)。每次上電時(shí),

需要重新配置FSM代碼塊內(nèi)容。

 

每個(gè)狀態(tài)機(jī)代碼塊都可以根據(jù)輸入的信號(hào)采樣集數(shù)據(jù),產(chǎn)生一個(gè)中斷信號(hào),

并且修改相應(yīng)的FSM_OUTS寄存器狀態(tài)。

 

    指令代碼保存在LSM6DSOX狀態(tài)機(jī)程序塊的可變變量區(qū)之后,由一系列實(shí)現(xiàn)

算法邏輯的狀態(tài)組成。

 

     每個(gè)指令都有一個(gè)8的操作碼,每個(gè)操作碼可以實(shí)現(xiàn)一個(gè)命令指令(CMD)

或者條件指令(RESET/NEXT,RNC,它們被稱為程序狀態(tài),多個(gè)指令在

一起組成FSM整體邏輯,其中:

  • 命令指令(CMD),用于執(zhí)行流控制、輸出同步等特殊任務(wù)有的命令

會(huì)需要參數(shù),參數(shù)會(huì)作為一個(gè)單獨(dú)的指令來(lái)執(zhí)行,后面詳細(xì)講。

  • 條件指令(RESET/NEXT,RNC,兩個(gè)條件組合在一起(4位的RESET

條件和4位的NEXT條件),用來(lái)復(fù)位或者繼續(xù)執(zhí)行程序流。

      指令代碼對(duì)LSM6DSOX寄存器狀態(tài)機(jī)內(nèi)部參數(shù)偶直接影響,有些指令

還可以產(chǎn)生額外的功能,比如更新狀態(tài)信息等,下面分別介紹下命令指令和

條件指令的特點(diǎn)和使用方法。

 

命令指令(CMD)

 

命令指令是修改狀態(tài)機(jī)行為中的流控制、輸出、和同步的行為。

 

當(dāng)一個(gè)命令被執(zhí)行時(shí),會(huì)立即執(zhí)行(不需要更新輸入采樣集),程序指針(PP)

被設(shè)置為下一行,將執(zhí)行如下動(dòng)作:

  • 如果新的一行是一個(gè)命令指令,則立即執(zhí)行此行命令。

  • 如果新的一行是一個(gè)條件指令,則在下一個(gè)輸入采樣值到來(lái)之時(shí),

  • 處理此行條件判斷指令。

 

有些命令指令可能會(huì)需要參數(shù),需要的參數(shù)必須在命令指令下一行定義

 

這里用"STHR1"命令來(lái)舉例,該指令用來(lái)動(dòng)態(tài)改變閾值1(THRESH1)的值,

Unico中的配置方法如下:


當(dāng)程序指針(PP)指向狀態(tài)S00x0A地址時(shí),設(shè)備識(shí)別出"0xAA"指令碼為"STHR1"命令。

該指令需要兩個(gè)參數(shù),那么設(shè)備就不等待新的輸入采樣集直接運(yùn)行S0-S2三個(gè)狀態(tài),

執(zhí)行后閾值1的值將被設(shè)置為“0x5640”即小數(shù)“100.0

 

條件指令(RESET/NEXT,RNC

 

條件指令用于重置或者繼續(xù)程序流,條件指令在一個(gè)新的輸入采樣集準(zhǔn)備好后,

在一個(gè)單一狀態(tài)下執(zhí)行。

 

條件指令中用于重置判斷的RESET條件定義在操作碼的高4位,而用于判斷繼續(xù)的

NEXT指令定義在操作碼的低4位,條件指令的執(zhí)行邏輯如下圖所示:


當(dāng)進(jìn)入條件指令后,首先判斷重置條件(RESET),只有在RESET條件不滿足時(shí),

才判斷繼續(xù)條件(NEXT)。

 

當(dāng)兩個(gè)條件均不滿足時(shí),狀態(tài)機(jī)會(huì)等待一個(gè)新的采樣集到來(lái),然后重新開始判斷。

 

當(dāng)滿足RESET條件時(shí),就會(huì)發(fā)生向復(fù)位點(diǎn)切換的狀態(tài)過(guò)渡,即PP=PR。

當(dāng)RESET條件不滿足,NEXT條件滿足時(shí),就會(huì)向下一個(gè)狀態(tài)過(guò)渡,即PP = PP+1;

 

默認(rèn)情況下,復(fù)位點(diǎn)(RP)被設(shè)置為第一個(gè)狀態(tài),但可以通過(guò)"SRP/CRP"指令動(dòng)態(tài)改變

復(fù)位點(diǎn)的位置。

 

值得注意的是,RESETNEXT條件為同一個(gè)條件的情況是沒(méi)有意義的。

 

條件指令能夠判斷的條件一共有三種:

  • 超時(shí):當(dāng)設(shè)置了定時(shí)器,定時(shí)計(jì)數(shù)器TC的值達(dá)到的時(shí)候,條件滿足,成立。

  • 閾值比較:當(dāng)啟動(dòng)的輸入值高于(或低于)設(shè)定的閾值時(shí),條件滿足,成立。

  • 過(guò)零檢測(cè):當(dāng)啟動(dòng)的輸入越過(guò)零位時(shí),條件滿足,成立。

 

以上就是命令指令和條件指令的所有特點(diǎn)了。

 

FSM指令集中一共提供了16個(gè)條件指令和35個(gè)命令指令。

 

我已經(jīng)將所有指令集使用說(shuō)明翻譯成了中文,并排版做成了一個(gè)速查PDF,共享給大家使用。

 

UnicoGUI

 

上面講了FSM程序塊的結(jié)構(gòu)和變量區(qū),那怎么去編程呢?ST很貼心的出了一款

上位機(jī)-UnicoGUI,可以配置LSM6DSOX里的所有寄存器,FSM甚至可以直接

顯示狀態(tài)機(jī)圖,下面我將詳細(xì)介紹下UnicoGUIFSM編程部分。

 

關(guān)于如何連接開發(fā)板和啟動(dòng)UnicoGUI軟件,如果有問(wèn)題可以參考 LSM6DSOX開

箱與體驗(yàn)“Port not open & not supported ”問(wèn)題解決。這里默認(rèn)大家都能

正常打開UnicoGUI軟件了哈。

 

Unico的主界面左側(cè),點(diǎn)開FSM模塊,可以看到界面中一共有三個(gè)標(biāo)簽欄,

Configuration,Interrupt,Debug

默認(rèn)的界面就是狀態(tài)機(jī)設(shè)置、編程的界面,如下圖所示。


在這個(gè)界面中我們可以看到有很多的按鍵和輸入框,參考UnicoFSM使用.pdf文件中,

我標(biāo)注了8個(gè)紅框區(qū)域,逐一來(lái)看:

1StateMachine Selection,狀態(tài)機(jī)選擇,這個(gè)下拉菜單中一共有16個(gè)選項(xiàng),對(duì)應(yīng)

的就是前面講的16個(gè)獨(dú)立的狀態(tài)機(jī)程序塊。

2FSM_ODR,FSM頻率(Output Data Rate),這個(gè)值在限制了加速度/角速度數(shù)據(jù)

傳輸?shù)?/span>代碼塊的最高頻率,建議是將加速度/角速度的輸出頻率高于這個(gè)值,也就

是在Unico主界面OpitionsAccelerater output data rate

Gyrocope Output data rate值高于FSM ODR的值,避免欠采樣問(wèn)題發(fā)生。

3、Long_Counter,16位計(jì)數(shù)器,一個(gè)最大可以計(jì)數(shù)65535的全局計(jì)數(shù)器,也就是

所有狀態(tài)機(jī)程序塊公用。

Max Value是設(shè)置計(jì)數(shù)器的最大溢出值,16位數(shù)據(jù)形式標(biāo)志(例如65525填寫FFFF),

底下兩個(gè)勾選可以設(shè)置計(jì)數(shù)器溢出時(shí)是否產(chǎn)生INT1/INT2外部中斷。

計(jì)數(shù)器的值可以從程序中使用INCR”來(lái)增加。

4Converter,格式轉(zhuǎn)換,由于FSM中用的都是半精度浮點(diǎn)數(shù)HFP,

所以在這給我們提供了32位浮點(diǎn)數(shù)轉(zhuǎn)16位浮點(diǎn)數(shù)、16位轉(zhuǎn)32位的小工具。

5SMx status,狀態(tài)機(jī)x狀態(tài)設(shè)置,這個(gè)區(qū)域有三個(gè)選項(xiàng),Enabled用于啟動(dòng)狀態(tài)機(jī)x

只有勾選Enabled該狀態(tài)機(jī)程序塊才會(huì)工作。INT1 INT2分別將狀態(tài)機(jī)的中斷路由

INT1INT2外部中斷上,16個(gè)狀態(tài)機(jī)可以獨(dú)立設(shè)置啟動(dòng)與否,綁定外部中斷。

6、SMx Fixed Data Section,狀態(tài)機(jī)x固定變量區(qū),顯示了6個(gè)變量和2個(gè)開關(guān):

  • ConfigAconfigB中儲(chǔ)存了程序所使用的的資源量

  • Size 顯示的是狀態(tài)機(jī)總的字節(jié)數(shù),圖中由于沒(méi)有配置任何資源,

所以顯示的6字節(jié)為固定變量區(qū)大小。

  • Setting中保存了當(dāng)前程序狀態(tài),選擇的掩碼,選擇的閾值,輸入

信號(hào)等等。

  • Reset Pointer(RP)復(fù)位點(diǎn),儲(chǔ)存了條件指令中返回判斷(RESET)

為真所跳轉(zhuǎn)的地址。

  • Program Pointer(PP)當(dāng)前運(yùn)行程序點(diǎn),儲(chǔ)存了當(dāng)前采樣時(shí)間內(nèi)

正在執(zhí)行的指令的地址。

  • Hysteresis ,回滯變量開關(guān),啟動(dòng)該選項(xiàng)后,下方的Hysteresis

回滯變量可以設(shè)置。

  • Decimation,降頻變量開關(guān),啟動(dòng)該選項(xiàng)后,下方的dest降頻變量

可以設(shè)置。

上面的固定變量,在用UnicoGUI的時(shí)候這六個(gè)變量都是跟隨編程操作自動(dòng)更改的,

無(wú)需自行更改。

當(dāng)我們想要直接使用LSMC6DSOX在自己的項(xiàng)目中的時(shí)候,則需要考慮設(shè)置其中的值。

 

7、SMx Variable Data Section,狀態(tài)機(jī)x可變變量區(qū),其中顯示了24個(gè)變量,

共計(jì)36個(gè)字節(jié),當(dāng)我們用不到某些變量的時(shí)候,Unico就不會(huì)配置該變量到

狀態(tài)機(jī)程序塊中,也就不占用內(nèi)存。其中黑色字體的就是可以設(shè)置的變量,

  • Thresh1-3,閾值,在條件指令中,用來(lái)比較輸入信號(hào)對(duì)應(yīng)軸的數(shù)據(jù)是

否到達(dá)閾值。

  • Hysteresis,回滯參數(shù),當(dāng)設(shè)置了回滯參數(shù)后,在對(duì)某軸進(jìn)行閾值比較時(shí),

會(huì)將比較值增加回滯參數(shù)變成一個(gè)比較區(qū)間,如下圖所示。

 

 

 

 

 


  • MasksA-C,軸選擇掩碼,用于指定輸入數(shù)據(jù)的哪個(gè)軸進(jìn)行閾值條件或

過(guò)零條件判斷。

  • Timer1-3,定時(shí)器值,在條件指令中,設(shè)置的定時(shí)器比較的時(shí)間值。

  • Dest,降頻因子,用來(lái)降低狀態(tài)機(jī)處理傳感器數(shù)據(jù)的頻率,

該狀態(tài)機(jī)處理數(shù)據(jù)的頻率降為FSM ODR/Dest。

  • Decision Tree,機(jī)器學(xué)習(xí)決策樹接口,通過(guò)“CHKDT”命令檢查

機(jī)器學(xué)習(xí)核心內(nèi)部的決策樹結(jié)果,當(dāng)FSM和機(jī)器學(xué)習(xí)結(jié)合的時(shí)候

就需要用到這個(gè)參數(shù)。

灰色字體的是沒(méi)法直接設(shè)置的變量,

  • Temporary MaskA-C,臨時(shí)掩碼,用來(lái)保存MasksA-C的復(fù)制值。

  • DX,DY,DZ,DV三軸角度、角度和矢量的模,顯示的是當(dāng)前傳感器

角速度積分得到的角度值。

  • DeltaT,角速度積分參數(shù),角速度會(huì)乘上該值后積分乘角度值。

  • PAS,Previous axis sign,上一個(gè)軸號(hào),儲(chǔ)存前一個(gè)采樣的軸號(hào),在

零點(diǎn)交叉條件下使用。

  • DESC,內(nèi)部計(jì)數(shù)器,在降頻時(shí)使用,由設(shè)備自動(dòng)管理。

  • TC,Timer Counter,內(nèi)部臨時(shí)定時(shí)計(jì)數(shù)器,用于檢測(cè)定時(shí)器是否

過(guò)期。

 

8SMx Instructions Section,程序指令區(qū),上圖中這個(gè)區(qū)域只有四個(gè)按鍵,

分別是Add State 增加狀態(tài)指令,Import State Machine導(dǎo)入狀態(tài)機(jī)指令,

Export State Machine導(dǎo)出狀態(tài)機(jī)指令Reset State Machine重置狀態(tài)機(jī)指令。

當(dāng)點(diǎn)擊Add State按鍵后,就可以增加一條狀態(tài)指令,如下圖所示


圖中紅框內(nèi)容從左至右分別是:

  • S0  狀態(tài)號(hào),隨著狀態(tài)指令增加,狀態(tài)號(hào)依次遞增

  • 0x06 狀態(tài)地址,也是隨著狀態(tài)指令增加而增長(zhǎng),Reset Pointer(RP)

復(fù)位點(diǎn)Program Pointer(PP)當(dāng)前運(yùn)行程序點(diǎn)中的數(shù)據(jù)就是指這個(gè)

地址,首狀態(tài)地址隨前面固變量和可變變量總長(zhǎng)度而定,圖中由于

只有6個(gè)固定長(zhǎng)度,因此狀態(tài)S0地址為0x06。

  • RNC,Reset/Next conditions,選擇該條狀態(tài)為條件指令

  • CMD,Commands,選擇該條狀態(tài)為命令指令

  • 指令選擇框,選擇需要的指令

  • 16進(jìn)制指令碼,所選指令的16進(jìn)制形式

  • Add增加狀態(tài)按鈕,在此狀態(tài)前增加狀態(tài)

  • Remove,刪除狀態(tài)按鈕,刪除此條狀態(tài)。

 

FSM模塊的Interrupt界面下,分成了兩個(gè)區(qū)域,如圖所示。

左側(cè)為輸入加速度、角速度、輸出外部中斷INT1/INT2的波形圖。

右側(cè)為16個(gè)狀態(tài)機(jī)的輸出寄存器OUT_Sx的數(shù)據(jù),通過(guò)點(diǎn)擊read,可以讀取當(dāng)前的值。


FSM模塊的Debug界面下,也是分成了兩個(gè)區(qū)域,如下圖所示。

左側(cè)為我們寫的狀態(tài)機(jī)圖,通過(guò)分析它可以很清楚的看到我們的狀態(tài)機(jī)狀態(tài)是如何

改變的。

右側(cè)為調(diào)試區(qū)域,通過(guò)導(dǎo)入采集的輸入數(shù)據(jù)集,可以對(duì)左邊的狀態(tài)機(jī)進(jìn)行仿真調(diào)試,

這里就先不細(xì)說(shuō)了。


 

以上就是對(duì)LSM6DSOXFSM編程模塊各個(gè)模塊和參數(shù)的基礎(chǔ)認(rèn)識(shí),對(duì)這些有了初步的

認(rèn)識(shí)和了解之后,我們就可以著手看看示例狀態(tài)機(jī)程序,分析下其工作流程和編寫流程了~

 

以下是35個(gè)命令指令和16個(gè)條件指令的簡(jiǎn)介截圖,翻譯文檔我放在文章末尾了~

命令指令


條件指令


 


掃碼關(guān)注5G通信官方公眾號(hào),免費(fèi)領(lǐng)取以下5G精品資料
  • 1、回復(fù)“YD5GAI”免費(fèi)領(lǐng)取《中國(guó)移動(dòng):5G網(wǎng)絡(luò)AI應(yīng)用典型場(chǎng)景技術(shù)解決方案白皮書
  • 2、回復(fù)“5G6G”免費(fèi)領(lǐng)取《5G_6G毫米波測(cè)試技術(shù)白皮書-2022_03-21
  • 3、回復(fù)“YD6G”免費(fèi)領(lǐng)取《中國(guó)移動(dòng):6G至簡(jiǎn)無(wú)線接入網(wǎng)白皮書
  • 4、回復(fù)“LTBPS”免費(fèi)領(lǐng)取《《中國(guó)聯(lián)通5G終端白皮書》
  • 5、回復(fù)“ZGDX”免費(fèi)領(lǐng)取《中國(guó)電信5G NTN技術(shù)白皮書
  • 6、回復(fù)“TXSB”免費(fèi)領(lǐng)取《通信設(shè)備安裝工程施工工藝圖解
  • 7、回復(fù)“YDSL”免費(fèi)領(lǐng)取《中國(guó)移動(dòng)算力并網(wǎng)白皮書
  • 8、回復(fù)“5GX3”免費(fèi)領(lǐng)取《 R16 23501-g60 5G的系統(tǒng)架構(gòu)1
  • 對(duì)本帖內(nèi)容的看法? 我要點(diǎn)評(píng)

     
    [充值威望,立即自動(dòng)到帳] [VIP貴賓權(quán)限+威望套餐] 另有大量?jī)?yōu)惠贈(zèng)送活動(dòng),請(qǐng)光臨充值中心
    充值擁有大量的威望和最高的下載權(quán)限,下載站內(nèi)資料無(wú)憂

    快速回復(fù)主題    
    標(biāo)題
    內(nèi)容
     上傳資料請(qǐng)點(diǎn)左側(cè)【添加附件】

    當(dāng)前時(shí)區(qū) GMT+8, 現(xiàn)在時(shí)間是 2025-02-13 05:52:42
    渝ICP備11001752號(hào)  Copyright @ 2006-2016 mscbsc.com  本站統(tǒng)一服務(wù)郵箱:mscbsc@163.com

    Processed in 0.558909 second(s), 16 queries , Gzip enabled
    TOP
    清除 Cookies - 聯(lián)系我們 - 移動(dòng)通信網(wǎng) - 移動(dòng)通信論壇 - 通信招聘網(wǎng) - Archiver