近期琢磨著這樣一件事,怎樣帶著真實的C代碼去Simulink仿真。 多番嘗試之后,使用Simulink自帶的Sfunction模塊和PLECS嵌入版中的C-Script模塊兩者均可快速實現(xiàn)。 其中C-Script更易上手,本期就對該方法簡短介紹。
01Simulink仿真的一點思考
作者作為一名電力電子控制工程師,常常需要將Simulink仿真的算法轉(zhuǎn)化為可燒錄到嵌入式芯片的代碼,于是仿真完后還需要費(fèi)一番心思,將積木式的模型或者m語言翻譯為可用的代碼,而且還不確定代碼是否有bug。 是否能這樣,仿真用的就是真實的C代碼,既節(jié)省了翻譯代碼的時間,又讓你的代碼經(jīng)受了Simulink仿真的檢驗,何樂而不為!
解決方案是這樣的:
1. 建立個人的函數(shù)庫,將常見的如PID,SVPWM,PLL,濾波器等寫成函數(shù),定義其對應(yīng)的c文件和頭文件。
2. Simulink仿真的控制不再積木式搭建,使用C-Script(或者S function)包含個人函數(shù)庫,另外在cscript中只需要加入部分代碼即可。
02PLECS C script工具的簡單介紹
作者采用plecs 3.6.1,該軟件可以作為一個工具包嵌入到Simulink中使用。 里面的C-Script是專門用來在simulink仿真中運(yùn)行c代碼的。 幫助菜單如下介紹C-Script模塊:
打開C script模塊,將代碼分為六層,Code declarations,Start function code,output function code,Updata function code,Derivative function code和Terminate function code。
Code declarations:此代碼部分用于全局聲明和定義,這是包含標(biāo)準(zhǔn)庫標(biāo)頭的位置(例如math.h 或 stdio.h),可以定義要在C-Script 函數(shù)中使用的宏、靜態(tài)變量和外部源文件。 包含Simulink模型文件的目錄將自動添加到包含的搜索路徑。
Start function code:開始函數(shù)代碼在仿真開始時調(diào)用。 一般用于初始化代碼。
Output function code:在主要和次要時間步長期間調(diào)用輸出函數(shù),以更新該部分的輸出信號。 可以使用宏Input(i),Output(i)和CurrentTime來訪問塊的輸入和輸出以及當(dāng)前時間。
Updata function code:如果該塊具有離散的狀態(tài)變量,則在處理完輸出函數(shù)之后的主要時間步中,將調(diào)用一次更新函數(shù)。 一般使用較少。
Derivative function code:如果塊具有連續(xù)的狀態(tài)變量,則在求解器的積分循環(huán)期間將調(diào)用導(dǎo)數(shù)函數(shù)。 一般使用較少。
Terminate function code:在仿真結(jié)束時調(diào)用終止函數(shù)。
03示例:三相三電平逆變器的模型搭建
a.將個人的PID函數(shù)庫,SPWM函數(shù)庫,ADC函數(shù)庫以及數(shù)據(jù)類型定義頭文件放在Simulink文件同路徑下。 用于Simulink模型中C-Script調(diào)用。
圖1 C函數(shù)庫與simulink模型置于同一路徑
b. 搭建電路模型,模型分為電路部分,C代碼部分,模擬芯片底層的脈沖生成模塊。
圖2 三電平simulink仿真模型結(jié)構(gòu)
c. C-Script 中編輯代碼
首先在C-Script 的設(shè)置界面輸入該模塊的輸入個數(shù),輸出格式,運(yùn)算步長等。
在Code declartions部分包含PID函數(shù)庫,SPWM函數(shù)庫,ADC函數(shù)庫以及數(shù)據(jù)類型定義頭文件,以及一些宏定義,如下圖示例所示:
圖3 C-Script 中Code declartions的定義
在Start function code中完成系統(tǒng)的初始化,本仿真中只對adc采樣函數(shù)初始化。
圖4 C-Script 中Start function code的定義
Output function code執(zhí)行主要部分,如下截圖所示,Output function code先后分別執(zhí)行C-Script模塊的輸入,包含三電平逆變器的輸出線電壓和輸出電壓幅度指令。 接著對輸出電壓平均值的計算,輸出電壓平均值與指令值的PID計算,相位的計算以及三電平的SVPWM調(diào)制。 最后為C-Script的對外輸出三電平逆變器的脈沖周期,翻轉(zhuǎn)時間,生成脈沖。
圖5 C-Script 中Output function code的定義
運(yùn)行模型,三電平模塊輸出電壓波形如下:
濾波后輸出電壓和電流波形如下所示:
模塊輸出電壓波形驗證了三電平SVPWM調(diào)制函數(shù)的正確性。 濾波后輸出電壓和電流波形可以得到該逆變器從0到目標(biāo)電壓建立需要0.35s左右,可根據(jù)項目實際需要調(diào)整PID參數(shù)。
-
嵌入式
+關(guān)注
關(guān)注
5068文章
19021瀏覽量
303321 -
逆變器
+關(guān)注
關(guān)注
283文章
4690瀏覽量
206302 -
仿真
+關(guān)注
關(guān)注
50文章
4044瀏覽量
133420 -
Simulink
+關(guān)注
關(guān)注
22文章
522瀏覽量
62307 -
C代碼
+關(guān)注
關(guān)注
1文章
89瀏覽量
14287
發(fā)布評論請先 登錄
相關(guān)推薦
評論