1 從零新建一個(gè)MBDT工程
- 按鍵中斷 :檢測(cè)S32K144 EVB上的按鍵SW2,每按下一次,紅色LED燈切換一次亮滅狀態(tài);
- 周期中斷 :每0.5秒(2 Hz)進(jìn)入一次周期中斷服務(wù)函數(shù),切換綠色LED燈亮滅狀態(tài),綠色LED燈會(huì)亮滅交替閃爍。
從零開始創(chuàng)建MBDT工程可以分為七個(gè)步驟:
**1. **將S32K144 EVB連接到電腦上,注意檢查OpenSDA端口號(hào)和磁盤中S32K144 EVB盤號(hào);
**2. **選擇合適的位置作為MATLAB的工作空間,新建Simulink模型,并命名保存;
**3. **在模型中添加必要模塊,包括MBD_S32K1xx_Config_Information、Digital_Input_ISR、Periodic_Interrupt_Timer和兩個(gè)Function-Call Subsystem,如下圖:
添加模塊到新建工程中 - From autoMBD
**4. **配置模塊的參數(shù),各個(gè)模塊的配置可以參照以下截圖(未給出截圖的地方保持默認(rèn)即可):
MBD_S32K1xx_Config_Information配置1 - From autoMBD
MBD_S32K1xx_Config_Information配置2 - From autoMBD
Periodic_Interrupt_Timer配置 - From autoMBD
Digital_Input_ISR配置 - From autoMBD
**5. **構(gòu)建中斷中執(zhí)行的功能,本示例執(zhí)行的功能較為簡(jiǎn)單,僅控制燈的亮滅。具體的模型如下(兩個(gè)模型實(shí)際上是一樣的,只不過(guò)輸出的引腳不一樣):
周期中斷的中斷函數(shù)模型 - From autoMBD
按鍵中斷的中斷函數(shù)模型 - From autoMBD
**6. **選擇固定步長(zhǎng),配置工程的步長(zhǎng)為0.001 s,設(shè)置求解器為離散求解器。工程的步長(zhǎng)根據(jù)實(shí)際需要進(jìn)行配置,但也要考慮模型的運(yùn)算量。如果運(yùn)算量大,在設(shè)置的步長(zhǎng)內(nèi)不能完成計(jì)算,會(huì)導(dǎo)致錯(cuò)誤結(jié)果。
工程求解器配置 - From autoMBD
**7. **至此MBDT的工程已經(jīng)完成,可以生成代碼了。在“C CODE”標(biāo)簽中點(diǎn)擊“Build”(快捷鍵ctr + B),Simulink編譯后會(huì)將代碼自動(dòng)下載到S32K144 EVB中,并運(yùn)行起來(lái)。一切正常的話,下載后可以看到綠色LED燈在不斷閃爍,按壓SW2按鍵,可以控制紅色LED燈的亮滅。
從零開始新建一個(gè)MBDT工程的基本步驟就是這樣的了。
使用模型來(lái)構(gòu)建自己的函數(shù),最常用到的是Simulink中的 Stateflow ,它可以高效的產(chǎn)生和控制各種信號(hào)(Signal)、事件(Event)和狀態(tài)(State)。后期會(huì)專門針對(duì)Stateflow開一期,歡迎關(guān)注。
2 使用S32DS下載生成的代碼
可能有讀者會(huì)疑惑,為什么需要使用S32DS下載生成的代碼,Simulink不是已經(jīng)下載好了嗎?原因我總結(jié)有以下三點(diǎn):
- 最重要的一點(diǎn)是 ,底層驅(qū)動(dòng)并不適合通過(guò)模型的方式來(lái)實(shí)現(xiàn),最高效的還是使用S32DS來(lái)配置底層。一般建議將算法部分和底層驅(qū)動(dòng)分開,這樣的話需要有一個(gè)集成的過(guò)程,這就避免不了使用S32DS;
- 使用S32DS進(jìn)行debug更加高效和便捷,功能也更加強(qiáng)大;
- 通過(guò)S32DS還可以對(duì)生成的代碼進(jìn)行擴(kuò)展,擴(kuò)展一些其它庫(kù)或者技術(shù)棧。
從我目前了解到的,一個(gè)完整的基于MBD的開發(fā),還很難擺脫對(duì)IDE的依賴,所以這里給出使用S32DS下載生成的代碼的示例。同樣給出一個(gè)視頻教程時(shí)長(zhǎng)約4 min 44 s。
使用S32DS下載生成的代碼,一共有6個(gè)步驟:
**1. **打開S32DS,新建一個(gè)空白工程,并刪去main.c文件。注意新建工程時(shí)不要選擇SDK,因?yàn)樯傻拇a中已經(jīng)包含了SDK,其他保持默認(rèn)即可。
*新建S32DS工程(不選擇SDK) * - From autoMBD
但如果你在 模型中使用了AMMCLIB的相關(guān)模塊 ,可以在新建的時(shí)候添加相應(yīng)的AMMCLIB庫(kù):
*添加AMMCLIB工具 * - From autoMBD
當(dāng)然也可以通過(guò)添加庫(kù)的方式添加AMMCLIB,添加庫(kù)的方法是:選中工程,右鍵選擇“Properties”,找到Paths and Symbols中的Library Paths和Libraries,添加S32K14x_AMMCLIB.a文件和路徑即可(其他擴(kuò)展庫(kù)也是這樣的方法添加):
*添加AMMCLIB工具 * - From autoMBD
需要注意的是路徑和庫(kù)文件的格式,以我自己安裝的AMMCLIB1.1.24為例,格式如下:
- 庫(kù)文件為 英文的冒號(hào)+文件名 ,不包含路徑
*添加庫(kù)文件 * - From autoMBD
- 庫(kù)路徑為 路徑所在目錄 ,不包含庫(kù)文件
*添加庫(kù)路徑 * - From autoMBD
視頻展示的例程沒有使用到AMMCLIB庫(kù),所以沒有上述過(guò)程。
**2. **將Simulink生成的代碼復(fù)制到S32DS工程中去,生成的代碼在Simulink工作空間一個(gè)標(biāo)題為 “工程名”+“_mbd_rtw” 的文件夾中。生成的代碼源文件有:
- common文件夾內(nèi)所有文件
- inc文件夾內(nèi)所有文件
- S32K144文件夾內(nèi)所有文件
- src文件夾內(nèi)所有文件
- 目錄內(nèi)所有***.c和.h文件***
將上述所有源文件復(fù)制到新建的工程中去:
*復(fù)制生成的代碼到S32DS工程中 * - From autoMBD
**3. **下一步,添加編譯路徑。需要添加的具體路徑如下:
- ${ProjDirPath}/src
- ${ProjDirPath}/src/common
- ${ProjDirPath}/src/inc
- ${ProjDirPath}/src/S32K144/include
- ${ProjDirPath}/src/src/clock/S32K1xx
- ${ProjDirPath}/src/src/power/S32K1xx
值得注意的是, 如添加了庫(kù),那么庫(kù)的include文件也需要包含到路徑中 。還是以AMMCLIB1.1.24為例,庫(kù)的包含路徑為:
- C:NXPAMMCLIBS32K14x_AMMCLIB_v1.1.24include
同樣視頻中也沒有這個(gè)步驟。添加庫(kù)的方法是:選中工程,右鍵選擇“Properties”,找到Paths and Symbols中的“Includes”,依次添加上述路徑即可。如下圖所示:
*添加必要的編譯路徑 * - From autoMBD
**4. **將startup.c、system_S32K144.c從編譯路徑中移除,因?yàn)檫@些文件和新建的S32DS工程有重復(fù),編譯會(huì)報(bào)錯(cuò)。從編譯路徑移除的方法是:選中要移除編譯路徑的文件,右鍵選中Buidl path -> Remove from -> Debug_FLASH。
移除編譯路徑的文件并沒有被刪除,但不會(huì)被編譯,同時(shí)文件會(huì)變成灰色。如下圖所示:
*移除編譯路徑的文件 * - From autoMBD
5. 至此生成的代碼已經(jīng)成功導(dǎo)入到S32DS中了,可以點(diǎn)擊編譯查看是否有錯(cuò)誤。
*編譯S32DS工程 * - From autoMBD
**6. **點(diǎn)擊Debug蟲,開始下載代碼
下載S32DS工程* * - From autoMBD
下載成功后,即可開始Debug,下圖方框中的按鈕分別是:運(yùn)行、暫停、終止、斷開連接、步入、步進(jìn)、步出。
*S32DS Debug調(diào)試 * - From autoMBD
通過(guò)S32DS下載的代碼,功能和Simulink下載的是完全一樣的。
3 基于MBDT實(shí)現(xiàn)PIL測(cè)試
通過(guò)MBDT,實(shí)現(xiàn)PIL(Processor In the Loop)是比較簡(jiǎn)單的。
PIL的基本原理是,Simulink在下載代碼的同時(shí),會(huì)在代碼中包含一段通信協(xié)議。該通信協(xié)議可以接受Simulink發(fā)送的指令,并傳輸代碼運(yùn)算的結(jié)果到Simulink。
在Simulink的每一個(gè)步長(zhǎng)中,Simulink會(huì)將輸入信號(hào)發(fā)送到MCU,MCU計(jì)算好后,再將結(jié)果傳回Simulink,周而復(fù)始實(shí)現(xiàn)PIL測(cè)試。一般采用的是串口通信方式,本示例中使用的是UART通訊。
**Tips:**該通信協(xié)議被稱為rtiostream,是Simulink開發(fā)的,有興趣的可以去了解一下。
這里要提一下,在MCU的應(yīng)用中,是沒必要做SIL(Software In the Loop)的,因?yàn)镾IL是在電腦上跑(跑的是exe文件),而實(shí)際代碼是在MCU中跑。這樣的SIL測(cè)試結(jié)果沒什么意義。MCU的應(yīng)用中,一般只需要執(zhí)行PIL和HIL。
開展PIL測(cè)試需要?jiǎng)?chuàng)建兩個(gè)工程:Model工程是被測(cè)工程,會(huì)生成代碼,并下載到MCU中運(yùn)行;Top工程是上位機(jī)工程,用于產(chǎn)生Model工程的輸入信號(hào),并與MCU進(jìn)行數(shù)據(jù)交互。
本示例中對(duì) AMMCLIB中的Sin函數(shù)進(jìn)行PIL測(cè)試 ,測(cè)試其在MCU中的運(yùn)行效果。開展PIL測(cè)試一共分為了四個(gè)步驟:
**1. **首先將S32K144 EVB連接到電腦上,并為MATLAB選擇合適的工作空間。前文已經(jīng)提到過(guò),這里不再贅述。
**2. **創(chuàng)建Model工程。Model工程比較簡(jiǎn)單,可按以下步驟進(jìn)行創(chuàng)建:
- 添加MBD_S32K1xx_Config_Information模塊,并配置參數(shù);
- 添加GFLIB_Sin_FLT、輸入和輸出模塊;
- 配置工程步長(zhǎng)為0.001 s。
創(chuàng)建的Model工程如下圖所示:
*PIL測(cè)試的Model工程 * - From autoMBD
**3. **創(chuàng)建Top工程。可按以下步驟創(chuàng)建:
- 添加Model模塊,并關(guān)聯(lián)到需要測(cè)試的model工程;
- 添加對(duì)照模塊,斜坡輸入(斜率π,初始值-2π)作為輸入信號(hào);
- 配置工程步長(zhǎng)為0.001 s。
值得注意的是,PIL的輸入信號(hào)要轉(zhuǎn)換為單精度數(shù),因?yàn)镸CU處理的是單精度數(shù)據(jù)。創(chuàng)建的Top工程如下:
*PIL測(cè)試的Top工程 * - From autoMBD
**4. **至此PIL測(cè)試的模型搭建已經(jīng)完成了。將仿真總時(shí)長(zhǎng)設(shè)為6 s,點(diǎn)擊Run即可開始PIL測(cè)試。測(cè)試過(guò)程中的現(xiàn)象可查看上面的視頻,這里給出一個(gè)測(cè)試結(jié)果的圖:
*PIL測(cè)試的結(jié)果 * - From autoMBD
由于斜坡輸入的斜率為π,初始值-2π,總仿真時(shí)長(zhǎng)為6π,那么測(cè)試的輸入信號(hào)范圍是-2π到4π。從上圖可以看到,-2π到2π之間的曲線是吻合得較好的,當(dāng)輸入信號(hào)大于2π時(shí),MCU的Sin函數(shù)計(jì)算結(jié)果開始出現(xiàn)失真。
查看AMMCLIB的手冊(cè)說(shuō)明,找到GFLIB_Sin_FLT的說(shuō)明
*GFLIB_Sin_FLT的說(shuō)明 * - From AMMCLIB手冊(cè)
可以看到這里要求的輸入范圍是-π到π。一般對(duì)于MCU來(lái)說(shuō),算力非常緊張,所以這種非線性的數(shù)學(xué)函數(shù)會(huì)有特殊的要求,如果不滿足就會(huì)出現(xiàn)失真,結(jié)果不正確。所以我們?cè)谑褂眠@類函數(shù)的時(shí)候一定要注意使用要求,從而保證最佳的性能。
-
led燈
+關(guān)注
關(guān)注
22文章
1592瀏覽量
108225 -
simulink仿真
+關(guān)注
關(guān)注
0文章
75瀏覽量
8588 -
按鍵中斷
+關(guān)注
關(guān)注
0文章
15瀏覽量
6459 -
MCU芯片
+關(guān)注
關(guān)注
3文章
253瀏覽量
11583 -
S32DS
+關(guān)注
關(guān)注
0文章
9瀏覽量
841
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論