S-Function在TMS320F2812的SVPWM算法仿真
摘要:S-Function有兩種形式,一種是M文件,另一種是C-MEX文件,前者支持功能強(qiáng)大的工具箱,后者支持C、C++等語(yǔ)言,并且在仿真上更快速有效?;赥MS320C2812的SVPWM算法在TI的CCS軟件中實(shí)現(xiàn),并且支持C、C++語(yǔ)言,這給程序通過(guò)S-Function移植到MATLAB中進(jìn)行仿真提供了一種有效途徑。利用在Simulink中搭建的三相全橋逆變器模型與S-Function編寫(xiě)的算法模塊相結(jié)合,并進(jìn)行仿真,簡(jiǎn)單有效地說(shuō)明了S-Funetion的實(shí)際應(yīng)用并驗(yàn)證了SVPWM算法的正確性。
關(guān)鍵詞:S-Function;SVPWM;MATLAB仿真;CCS
引言
利用MATLAB仿真CCS算法的方法在很多文章中都有介紹,歸納起來(lái)主要有兩類:一類是利用MATLAB/Simulink中的S-Function編寫(xiě)所需算法模塊,仿真成功后將算法移植到CCS中建立新的算法工程;另一類是在MATLAB中建立仿真模型,然后通過(guò)CClink的直接代碼生成法建立CCS工程文件。這兩類方法都有各自的缺點(diǎn)。第一類方法只注重對(duì)算法思想的驗(yàn)證,要在CCS中實(shí)現(xiàn)卻要經(jīng)過(guò)很復(fù)雜的算法移植過(guò)程,增加了算法實(shí)現(xiàn)的難度。第二類方法避免了此類問(wèn)題,而將MATLAB仿真模型直接生成CCS代碼,省略了再移植的過(guò)程,然而這種方法形成的代碼具有可讀性差、缺乏優(yōu)化、占用資源大等缺點(diǎn),使得TMS320F2812芯片的內(nèi)存利用率大大降低。結(jié)合這兩種方法的優(yōu)點(diǎn)和弊端,本文利用C-MEXS-Func-tion提出了一種全新的將CCS程序與MATLAB仿真聯(lián)系起來(lái)的方法,實(shí)現(xiàn)了CCS程序到MATLAB仿真的簡(jiǎn)單移植。該方法高效、簡(jiǎn)單并且易于理解和實(shí)現(xiàn),可以通過(guò)S-Function作為接口直接使用CCS編寫(xiě)的SVPWM程序在MATLAB環(huán)境下進(jìn)行仿真,算法驗(yàn)證正確后不用再修改程序可直接在CCS中編譯并下載到目標(biāo)板使用。這就大大降低了仿真與實(shí)際應(yīng)用之間轉(zhuǎn)化的難度,也簡(jiǎn)化了軟件人員在幾種編程環(huán)境中反復(fù)修改程序的過(guò)程。
1 S-Function程序建立方法
S-Function有兩種建立方式,一種是用M文件來(lái)實(shí)現(xiàn),另一種是用C-MEX來(lái)實(shí)現(xiàn)。前者效率低下,但是開(kāi)發(fā)速度快,可以方便調(diào)用MATLAB和工具箱函數(shù);后者支持不同的編程語(yǔ)言,如:C、c++、Fortran等,運(yùn)行速度快,滿足實(shí)時(shí)性要求,可以實(shí)現(xiàn)M文件不能實(shí)現(xiàn)的許多功能,如復(fù)數(shù)的處理等。
考慮到基于TMS320F2812的SVPWM算法仿真對(duì)實(shí)時(shí)性要求比較高,且CCS工程是用C語(yǔ)言編寫(xiě)的,因此本文選用C-MEX形式來(lái)建立S-Function程序。在MATLAB的安裝根目錄matlabroot/simulink/src下有一個(gè)用C語(yǔ)言編寫(xiě)的C-MEX S-Function文件模板:sfuntmpl basic.c。該模板幾乎包含了所有C-MEXS-function文件可執(zhí)行的必需和可選的回調(diào)函數(shù)的基本結(jié)構(gòu),只需要進(jìn)行少許改動(dòng),就可以實(shí)現(xiàn)各種功能的函數(shù)。
建立S-Function可以按以下步驟進(jìn)行:
首先進(jìn)行環(huán)境設(shè)置。初次使用C-MEX S-Function之前,需要在MATLAB中激活,可以在命令窗口鍵入mex-setup,然后根據(jù)提示設(shè)置編譯器。
然后打開(kāi)C-MEX S-Function文件模板,將模板另存為svpwm.c文件,然后再進(jìn)行必要的設(shè)置,這樣不會(huì)破壞模板,當(dāng)需要其中的一些必要函數(shù)時(shí)還可以再查閱。模板中的第一行代碼#define S_FUNCTION_NAME XXX是用來(lái)設(shè)置函數(shù)名的,這是調(diào)用函數(shù)時(shí)的唯一標(biāo)識(shí),這里可以將其改為#define S_FuNCTION_NAME svpwm,那么svpwm就是該函數(shù)的函數(shù)名。
最后編譯動(dòng)態(tài)鏈接庫(kù)。S-Function函數(shù)編寫(xiě)完成后,需要在MTLAB中進(jìn)行編譯生成動(dòng)態(tài)鏈接庫(kù)與Simulink鏈接,這樣才能在模型中調(diào)用S-Function模塊。注意編寫(xiě)的文件與生成的文件以及建立的模型都必須在同一目錄下。在MATLAB的命令窗口輸入mex svpwm.c,這樣就會(huì)在當(dāng)前目錄下創(chuàng)建一個(gè)svpwm.dll文件。在模型中加入S-Function模塊,并雙擊它,在sfunction name一欄填入函數(shù)名svpwm。注意這個(gè)函數(shù)名要與接口程序中設(shè)置的函數(shù)名保持一致。這樣就可以在模型中使用S-Function函數(shù)模塊了。
2 實(shí)現(xiàn)CCS中SVPWM算法移植
2.1 SVPWM算法原理簡(jiǎn)單介紹
空間矢量調(diào)制(SVPWM)技術(shù)即是將3個(gè)互為120°的電壓矢量投影到兩相靜止坐標(biāo)系中,通過(guò)三相逆變器開(kāi)關(guān)組合,合成一個(gè)空間電壓矢量的方法。
三相逆變器電路如圖1所示,用Sa、Sb和Sc分別表示三組開(kāi)關(guān)的通斷狀態(tài)。采用180°導(dǎo)通方式,“1”表示上橋臂導(dǎo)通,“0”表示下橋臂導(dǎo)通。這樣就形成了8種開(kāi)關(guān)組合狀態(tài),分別是100、110、010、011、001、101、111、000。
每個(gè)開(kāi)關(guān)序列對(duì)應(yīng)一個(gè)基準(zhǔn)電壓矢量,按空間位置排列正好形成了一個(gè)六邊形。其中,有6個(gè)有效電壓空間矢量(V1~V6)和2個(gè)零矢量(V7、V8),選用對(duì)稱的空間矢量調(diào)制序列以消除偶次諧波。具體開(kāi)關(guān)狀態(tài)Sa、Sb、Sc與電壓矢量在兩相靜止坐標(biāo)系中的關(guān)系以及各扇區(qū)和開(kāi)關(guān)序列圖如圖2所示。
c++相關(guān)文章:c++教程
評(píng)論