文章目錄
前言
基于嵌入式處理器仿真
使用方式
????????第一步,硬件連接
????????第二步,配置硬件資源
????????第三步,配置XCP協議
????????第四步,加載Contrl Model
????????第五步,運行仿真
????????第六步,仿真報告
分析和應用
總結
參考資料
前言
??????? 見《【研發日記】Matlab/Simulink技能解鎖(四)——在Simulink Debugger窗口調試》
????????見《【研發日記】Matlab/Simulink技能解鎖(五)——七個Simulink布線技巧》
????????見《【研發日記】Matlab/Simulink技能解鎖(六)——六種Simulink模型架構》
????????見《【研發日記】Matlab/Simulink技能解鎖(七)——兩種復數移相算法》
????????見《【研發日記】Matlab/Simulink技能解鎖(八)——分布式仿真》
基于嵌入式處理器仿真
????????基于外部ECU嵌入式處理器仿真,也稱在線調試,Mathworks官方的說法是External Mode Simulation,顧名思義就是仿真模型的運行不在Computer上,而是在外部的ECU板子上。外部ECU板子通過物理連接,直接控制真實世界中的物理實體。Contrl Model作為一個整體被編譯生成嵌入式代碼,在外部ECU板子上執行。僅留下Dashboard、Dispiay、Data lable和Data Inspect等這些交互類的Block仍在Computer上運行。Computer和外部ECU之間通過XCP協議進行實時的數據交換。基于外部ECU仿真的整體框架示例如下:
使用方式
????????第一步,硬件連接
????????將CAN接口卡的兩頭,分別連接在ECU板子和Computer之間。在Computer上安裝CAN卡的驅動程序,確保Computer的設備管理器中能出現對應的CAN卡硬件資源,示例如下:
????????Tips:在Simulink中可以調用的CAN卡,官方說法是有很多家。但是目前僅有Vector一家適配的比較完善,常見的型號是CANcaseXL、VN1610、VN1630、VN1640等。
????????第二步,配置硬件資源
????????在Vector Hardware Config窗口中,添加一個Matlab應用,示例如下:
????????打開Simulink Configuration Parameters窗口,在Hardware Implementation一欄的Target hardware resources中找到eCAN分組,配置CAN通信資源,示例如下:
????????Tips:建立連接后,ECU板子上的這個CAN module將會被占用,所以不能跟其他功能的應用沖突。
????????第三步,配置XCP協議
????????打開Simulink Configuration Parameters窗口,在Hardware Implementation一欄的Target hardware resources中找到External mode分組,配置XCP通信協議,示例如下:
????????Tip1:上述基于外部ECU仿真,依賴于Simulink和ECU之間的XCP協議和傳輸接口,以及ECU嵌入式處理器的數據交換引擎,所以需要Simulink和MCU嵌入式處理器兩邊廠家的共同支持,不是每款嵌入式處理器都支持這項功能。
????????Tip2:XCP協議,實際上上汽車行業標定領域的一種協議棧,除了可以基于CAN網絡之外,還可以基于其他的Serial通信網絡,比如LIN、Ethernet等。
????????第四步,加載Contrl Model
????????Contrl Model按照正常的方式搭建后,對于將要作為標定參數用的變量,還需要做一些特殊處理。因為標定參數是存儲在全局內存中的一個可調的全局變量,是要在算法執行的過程中更改存儲值的。示例如下:
1、在Simulink的建模選項卡上,點擊模型數據編輯器,然后點擊檢查參數選項卡。2、在模型中,點擊 Gain 模塊 G1,模型數據編輯器突出顯示與模塊的增益參數對應的行。3、在模型數據編輯器的值列,將增益值從 2 更改為 myGainParam。4、在 myGainParam 旁邊,點擊操作按鈕(含三個縱點),然后選擇創建。5、在“創建新數據”模塊對話框中,將值設置為 Simulink.Parameter(2)。點擊創建,Simulink.Parameter 對象 myGainParam 在模型工作區中存儲參數值 2。6、在 myGainParam 對話框的代碼生成選項卡上,點擊在 Coder App 中配置。7、在代碼映射編輯器中,將 myGainParam 的存儲類設置為 ExportedGlobal。此存儲類使參數對象在生成的代碼中顯示為可調全局變量。
????????如果是新建的模型,可以直接設置好標定參數的屬性,示例如下:
stepSize = Simulink.Parameter;stepSize.DataType = 'uint8';stepSize.CoderInfo.StorageClass = 'ExportedGlobal';stepSize.Value = 1;
????????第五步,運行仿真
????????在Simulink的Hardware工具頁中,點擊Monitor & Tune按鈕,即可利用Dashboard、Dispiay、Data lable和Data Inspect等工具查看信號,在ECU板子(例如電機控制器)上用探針檢查信號,或者直接在被控實物(例如電機)上觀察現象。示例如下:
????????也可以在Contrl Model執行過程中調整標定參數的值,以確定最佳參數值。示例如下:
????????Tips:這種基于外部ECU仿真的模式,不光可以在Simulink上查看信號和調整標定參數,也可以使用第三方的標定工具,例如CANape。
????????第六步,仿真報告
????????基于外部ECU仿真,還可以查看程序執行的報告。首先在Simulink Configuration Parameters窗口中配置好驗證項,示例如下:
????????仿真運行之后,就會出一個程序執行報告,示例如下:
分析和應用
????????1、由于Contrl Model是生成嵌入式代碼后直接在ECU板子上運行的,所以Real Time性能非常好。
????????2、對于高速響應的硬件性能也不再受到限制,可以支持中斷功能。
????????3、Computer和外部ECU之間的數據交換,信號的個數和交換的周期有限,官方提示理想性能下,數據獲取頻率不要超過10kHz。
????????Tips:不同的Serial通信網絡,數據交換的性能也同,主要取決于他們的通信波特率。示例:如果我們需要以10kHz的速率傳輸20 bytes的數據,那么20 bytes * 10,000Hz = 200,000 bytes/s,200,000 bytes/s * 10 bits/byte = 2,000,000 bits/s,那么波特率至少就得是2 Mbps。
????????4、Computer和外部ECU之間的數據交換,信號數據類型最大支持single型,不支持double型。
總結
????????以上就是本人在研發中使用Simulink仿真時,一些個人理解和分析的總結,主要介紹了基于嵌入式處理器仿真的工作原理,展示了仿真運行的效果,并分析了這種仿真方式的特點和適用場景。
????????后續還會分享另外幾個最近解鎖的Matlab/Simulink新技能,歡迎評論區留言、點贊、收藏和關注,這些鼓勵和支持都將成文本人持續分享的動力。
????????另外,上述例程使用的Demo工程,可以到筆者的主頁查找和下載。
參考資料
Mathworks Help - Signal Monitoring and Parameter Tuning
????????版權聲明,原創文章,轉載和引用請注明出處和鏈接,侵權必究!