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

  • 閱讀:9794
  • 回復:0
轉(zhuǎn)帖 【LSM6DSOX有限狀態(tài)機例程學習 二】
微信Czh6402
中級會員
鎵嬫満鍙風爜宸查獙璇? style=


 發(fā)短消息    關注Ta 

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

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

 

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

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

 

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

那么每個程序塊長什么樣子呢?


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

 

輸入選擇器能夠?qū)鞲衅餍盘柣蛘邇?nèi)部計算的數(shù)據(jù)信號中選擇輸入信號源,

所支持的信號如下:

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

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

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

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

  • 正確配置的機器學習模塊的輸出。

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


 

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

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

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

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

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


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

自動更新,無需自己更改。

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

隨用隨設置。

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

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

 

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

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

 

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

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

 

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

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

 

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

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

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

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

會需要參數(shù),參數(shù)會作為一個單獨的指令來執(zhí)行,后面詳細講。

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

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

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

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

條件指令的特點和使用方法。

 

命令指令(CMD)

 

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

 

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

被設置為下一行,將執(zhí)行如下動作:

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

  • 如果新的一行是一個條件指令,則在下一個輸入采樣值到來之時,

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

 

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

 

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

Unico中的配置方法如下:


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

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

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

 

條件指令(RESET/NEXT,RNC

 

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

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

 

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

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


當進入條件指令后,首先判斷重置條件(RESET),只有在RESET條件不滿足時,

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

 

當兩個條件均不滿足時,狀態(tài)機會等待一個新的采樣集到來,然后重新開始判斷。

 

滿足RESET條件時,就會發(fā)生向復位點切換的狀態(tài)過渡,即PP=PR。

RESET條件不滿足,NEXT條件滿足時,就會向下一個狀態(tài)過渡,即PP = PP+1;

 

默認情況下,復位點(RP)被設置為第一個狀態(tài),但可以通過"SRP/CRP"指令動態(tài)改變

復位點的位置。

 

值得注意的是,RESETNEXT條件為同一個條件的情況是沒有意義的。

 

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

  • 超時:當設置了定時器,定時計數(shù)器TC的值達到的時候,條件滿足,成立。

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

  • 過零檢測:當啟動的輸入越過零位時,條件滿足,成立。

 

以上就是命令指令和條件指令的所有特點了。

 

FSM指令集中一共提供了16條件指令和35命令指令。

 

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

 

UnicoGUI

 

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

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

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

 

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

箱與體驗“Port not open & not supported ”問題解決。這里默認大家都能

正常打開UnicoGUI軟件了哈。

 

Unico的主界面左側,點開FSM模塊,可以看到界面中一共有三個標簽欄,

Configuration,InterruptDebug

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


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

我標注了8個紅框區(qū)域,逐一來看:

1、StateMachine Selection,狀態(tài)機選擇,這個下拉菜單中一共有16個選項,對應

的就是前面講的16個獨立的狀態(tài)機程序塊

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

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

是在Unico主界面OpitionsAccelerater output data rate

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

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

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

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

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

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

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

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

5、SMx status,狀態(tài)機x狀態(tài)設置,這個區(qū)域有三個選項,Enabled用于啟動狀態(tài)機x,

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

INT1、INT2外部中斷上,16個狀態(tài)機可以獨立設置啟動與否,綁定外部中斷。

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

  • ConfigAconfigB中儲存了程序所使用的的資源量

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

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

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

信號等等。

  • Reset Pointer(RP)復位點,儲存了條件指令中返回判斷(RESET)

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

  • Program Pointer(PP)當前運行程序點,儲存了當前采樣時間內(nèi)

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

  • Hysteresis ,回滯變量開關,啟動該選項后,下方的Hysteresis

回滯變量可以設置。

  • Decimation,降頻變量開關,啟動該選項后,下方的dest降頻變量

可以設置。

上面的固定變量,在用UnicoGUI的時候這六個變量都是跟隨編程操作自動更改的,

無需自行更改。

當我們想要直接使用LSMC6DSOX在自己的項目中的時候,則需要考慮設置其中的值。

 

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

共計36個字節(jié),當我們用不到某些變量的時候,Unico就不會配置該變量到

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

  • Thresh1-3,閾值,在條件指令中,用來比較輸入信號對應軸的數(shù)據(jù)是

否到達閾值。

  • Hysteresis,回滯參數(shù),當設置了回滯參數(shù)后,在對某軸進行閾值比較時,

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

 

 

 

 

 


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

過零條件判斷。

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

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

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

  • Decision Tree,機器學習決策樹接口,通過“CHKDT”命令檢查

機器學習核心內(nèi)部的決策樹結果,當FSM和機器學習結合的時候

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

灰色字體的是沒法直接設置的變量,

  • Temporary MaskA-C,臨時掩碼,用來保存MasksA-C的復制值。

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

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

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

  • PAS,Previous axis sign,上一個軸號,儲存前一個采樣的軸號,在

零點交叉條件下使用。

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

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

過期。

 

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

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

Export State Machine導出狀態(tài)機指令Reset State Machine重置狀態(tài)機指令

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


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

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

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

復位點Program Pointer(PP)當前運行程序點中的數(shù)據(jù)就是指這個

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

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

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

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

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

  • 16進制指令碼,所選指令的16進制形式

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

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

 

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

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

右側為16個狀態(tài)機的輸出寄存器OUT_Sx的數(shù)據(jù),通過點擊read,可以讀取當前的值。


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

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

改變的。

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

這里就先不細說了。


 

以上就是對LSM6DSOXFSM編程模塊各個模塊和參數(shù)的基礎認識,對這些有了初步的

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

 

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

命令指令


條件指令


 


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

     
    [充值威望,立即自動到帳] [VIP貴賓權限+威望套餐] 另有大量優(yōu)惠贈送活動,請光臨充值中心
    充值擁有大量的威望和最高的下載權限,下載站內(nèi)資料無憂

    快速回復主題    
    標題
    內(nèi)容
     上傳資料請點左側【添加附件】

    當前時區(qū) GMT+8, 現(xiàn)在時間是 2025-04-05 23:14:57
    渝ICP備11001752號  Copyright @ 2006-2016 mscbsc.com  本站統(tǒng)一服務郵箱:mscbsc@163.com

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