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

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


 發(fā)短消息    關注Ta 

積分 530
帖子 106
威望 21132 個
禮品券 0 個
專家指數 0
注冊 2020-9-23
專業(yè)方向 
回答問題數 0
回答被采納數 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)機代碼塊兩部分。

 

輸入選擇器能夠將傳感器信號或者內部計算的數據信號中選擇輸入信號源,

所支持的信號如下:

  • LSM6DSOX加速度計數據、加速度和  矢量的模。

  • LSM6DSOX陀螺儀角速度數據、角速度和 矢量的模。

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

  • 內部計算的角度、角度和 角度矢量和

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

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


 

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

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

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

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

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


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

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

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

隨用隨設置。

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

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

 

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

需要重新配置FSM代碼塊內容。

 

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

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

 

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

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

 

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

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

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

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

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

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

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

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

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

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

 

命令指令(CMD)

 

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

 

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

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

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

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

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

 

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

 

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

Unico中的配置方法如下:


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

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

執(zhí)行后閾值1的值將被設置為“0x5640”即小數“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條件為同一個條件的情況是沒有意義的。

 

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

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

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

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

 

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

 

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

 

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

 

UnicoGUI

 

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

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

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

 

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

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

正常打開UnicoGUI軟件了哈。

 

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

ConfigurationInterrupt,Debug

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


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

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

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

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

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

傳輸到代碼塊的最高頻率,建議是將加速度/角速度的輸出頻率高于這個值,也就

是在Unico主界面OpitionsAccelerater output data rate

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

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

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

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

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

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

4、Converter,格式轉換,由于FSM中用的都是半精度浮點數HFP,

所以在這給我們提供了32位浮點數16位浮點數、16位轉32位的小工具。

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

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

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

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

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

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

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

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

信號等等。

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

為真所跳轉的地址。

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

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

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

回滯變量可以設置。

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

可以設置。

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

無需自行更改。

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

 

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

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

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

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

否到達閾值。

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

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

 

 

 

 

 


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

過零條件判斷。

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

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

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

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

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

就需要用到這個參數。

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

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

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

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

  • DeltaT,角速度積分參數,角速度會乘上該值后積分乘角度值。

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

零點交叉條件下使用。

  • DESC,內部計數器,在降頻時使用,由設備自動管理。

  • TC,Timer Counter,內部臨時定時計數器,用于檢測定時器是否

過期。

 

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)指令,如下圖所示


圖中紅框內容從左至右分別是:

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

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

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

地址,首狀態(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的數據,通過點擊read,可以讀取當前的值。


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

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

改變的。

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

這里就先不細說了。


 

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

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

 

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

命令指令


條件指令


 


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

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

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

    當前時區(qū) GMT+8, 現在時間是 2025-01-11 06:40:22
    渝ICP備11001752號  Copyright @ 2006-2016 mscbsc.com  本站統(tǒng)一服務郵箱:mscbsc@163.com

    Processed in 0.363987 second(s), 13 queries , Gzip enabled
    TOP
    清除 Cookies - 聯系我們 - 移動通信網 - 移動通信論壇 - 通信招聘網 - Archiver