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