在上期中介紹了在Simulink仿真中用S函數構建控制器,方便代碼從仿真到嵌入式設備的遷移,本期則直接進入正題,通過兩電平逆變器模型來介紹S函數在電力電子仿真中的應用。
01S函數的簡單介紹
官方對S函數是這樣介紹的:S-Function 可以使用 MATLAB?, C, C++, Ada,或 Fortran 語言來編寫。 使用 MEX實用工具,將 C, C++, Ada,和 Fortran 語言的 S-Function 編譯成MEX-文件,在需要的時候,它們可與其它的MEX-文件一起動態地連接到 MATLAB 中。
S-Function 使用一種特殊的調用格式讓你可以與 Simulink 方程求解器相互作用,這與發生在求解器和內置 Simulink塊之間的相互作用非常相似。 S-Function 的形式是非常通用的,且適用于連續、離散和混合系統。
這段話包含以下幾層意思:
1. S函數可以用m語言,c語言等多種語言編寫,Simulink庫中的User-Defined Functions中的S-Function Example包含了多種語言的多種模板, S-Function Builder 是一個 Simulink 模塊,可以通過設定自動生成c語言的S函數;
圖1 Simulink庫中S函數相關模塊
2. S函數與Simulink的運行原理相似,要了解S函數是如何工作的,就要了解Simulink 是如何進行模型仿真的, Simulink模型的執行分幾個階段進行。 首先進行的是初始化階段,在此階段, Simulink將庫塊合并到模型中來,確定傳送寬度、數據類型和采樣時間,計算塊參數,確定塊的執行順序,以及分配內存。 然后, Simulink進入到“仿真循環”,每次循環可認為是一個“仿真步”。 在每個仿真步期間,Simulink 按照初始化階段確定的塊執行順序依次執行模型中的每個塊。 對于每個塊而言,Simulink 調用函數來計算塊在當前采樣時間下的狀態,導數和輸出。 如此反復,一直持續到仿真結束。
下圖所示為一個仿真的步驟:
圖2 Simulink 執行仿真的步驟
3. S函數使用一種特殊的調用格式使其在 Simulink方程求解器相互作用,S函數主要通過多種特殊格式的回調函數,用來表示仿真執行的初始化、輸出、計算導數、結束等多個階段。
02兩電平逆變器調制的S函數示例
文章結尾的下載鏈接提供了兩電平逆變器調制的S函數的示例程序,該示例主體程序部分如下:
圖3 兩電平逆變器調制的S函數主體部分
該S函數主要包含以下回調函數:
a. mdlInitializeSizes回調函數
對參數進行初始化設置,比如離散狀態個數、連續狀態個數、模塊輸入和輸出的路數、模塊的采樣周期個數、狀態變量初始數值等;
b. mdlInitializeSampleTimes回調函數
該函數設置S-Function模塊的采樣時間,決定了mdlOutputs多久執行一次;
c. mdlInitializeConditions回調函數
初始化時調用,對輸入輸出數組指針地址進行定義;
d. mdlOutputs回調函數
可以用來執行我們定義的函數,本例中執行了三個任務:
來自S函數的外部數據的輸入;
執行100us的定時中斷(計算輸出電壓相位,輸出電壓指令)、741us的定時中斷(模擬PWM中斷,調用兩電平SVPWM調制算法)。
S函數輸出(輸出內部監視變量和PWM波占空比)
e. mdlUpdate回調函數
如果該塊具有離散的狀態變量,則在處理完所有塊的輸出函數之后的主要時間步中,將調用一次更新函數,本例未使用;
f. mdlTerminate回調函數
S函數終止時執行的函數,本例未使用。
多個回調函數的執行順序如下:
圖4 兩電平逆變器調制的S函數回調函數執行順序
完成S函數的c文件的編寫后,需要在Matlab中調用編譯器對S函數的c文件進行編譯。 由于Matlab存在32位和64位,調用的編譯器也不一樣。 32位直接使用自帶的lcc-win32即可,64位則需要額外安裝的VS的C++編譯器。 matlab通過mex-setup命令選擇編譯器。
本示例模型在Simulink的File->Model Properties->Model Properties->Callbacks->InitFcn中通過以下命令對S函數編譯,使模式在每次運行時執行該編譯命令生成格式mexw64的文件給Simulink模型調用:
-g -v InveterController.c Func_SVPWM_2L.c...
03仿真結果
運行仿真模型:INV_2L3Ph_SPWM.slx,在S函數的mdlOutputs回調函數中,調用Func_SVPWM_2L()調制函數之后,數組y_Scope輸出ABC三相PWM波的占空比為:
圖5 ABC三相PWM波的占空比
在S函數的mdlOutputs回調函數中采集了逆變器的模擬量,通過數組y_Scope輸出,其波形為:
圖6 S函數的輸出波形
-
調制
+關注
關注
0文章
157瀏覽量
29664 -
逆變器
+關注
關注
283文章
4715瀏覽量
206690 -
仿真
+關注
關注
50文章
4070瀏覽量
133552 -
Simulink
+關注
關注
22文章
533瀏覽量
62378 -
S函數
+關注
關注
0文章
6瀏覽量
6647
發布評論請先 登錄
相關推薦
評論