李逸飛,王秀蓮
(沈陽理工大學自動化與電氣工程學院,沈陽110000)
隨著電力電子信息技術、微電子技術、新材料技術的迅猛發(fā)展,具有高速運算能力和強控制能力的DSP芯片在電機控制、逆變器等控制領域也得到了廣泛的應用。DSP 同其他MCU 類似,其傳統(tǒng)的開發(fā)方式一般可以分為兩種:第一種方式是利用自身的匯編指令集編寫源程序,再經(jīng)過匯編器和連接器,然后進行匯編鏈接后生成目標可執(zhí)行的代碼;另一種方式是利用標準C/C++語言進行代碼編寫,然后再經(jīng)過C/C++編譯器、匯編器和鏈接器分別進行編譯鏈接,最后同樣生成目標可執(zhí)行代碼。這兩種開發(fā)方式在較大的項目中,會使得開發(fā)人員必須要花費大量的時間進行代碼的設計和編寫,從而加大了產(chǎn)品開發(fā)難度和耗費了開發(fā)人員的精力,進而延長了產(chǎn)品的開發(fā)周期,最終影響了產(chǎn)品的開發(fā)效率。
為了降低代碼編寫難度,提高產(chǎn)品開發(fā)效率,Math Works 公司和TI 公司聯(lián)合開發(fā)了一種C2000 系列的DSP 硬件支持包——Embedded Coder Support Package for Texas Instruments C2000 Processors。利用這個工具包,用戶可以在Simulink 環(huán)境下搭建好控制系統(tǒng)的模型,然后自動生成DSP 的C 代碼。
Simulink 是MATLAB 軟件的擴展,它提供了一個動態(tài)系統(tǒng)建模、仿真和綜合分析的集成環(huán)境,是MAT?LAB 最重要的組成部分之一。Simulink 是實現(xiàn)動態(tài)系統(tǒng)建模和仿真的一個軟件包,MATLAB 語言與Simu?link 的區(qū)別主要在于,Simulink 是以模塊為功能單位,通過信號線進行相互連接,它與用戶交互接口是基于Windows 的模型化圖形輸入,其重點是使得開發(fā)者可以把更多的精力投入到構建系統(tǒng)模型劃上,而不是語言編程上。
Simulink 是一個模塊圖形化環(huán)境,它提供了大量的系統(tǒng)模塊,廣泛應用在圖像、航天航空、電力電子和嵌入式設計等方面,其中包括了信號、運算、顯示和系統(tǒng)等方面的功能,可以創(chuàng)建各種類型的仿真系統(tǒng),實現(xiàn)豐富的仿真功能。用戶也可以定義自己的模塊,進一步擴展模型的范圍和功能,以滿足不同的需求。這些模塊懂得運行依托于Simulink 的結算期,包含了各種經(jīng)典的數(shù)值分析思想和算法。為了創(chuàng)建大型系統(tǒng),Simulink 提供了系統(tǒng)分層排列的功能,類似于系統(tǒng)的總體設計,在Simulink 中可以將系統(tǒng)分為從高級到低級的幾個層次,每層又可以分為幾個部分,各層子系統(tǒng)構建完成之后,將各層連接起來,然后構成一個完整的系統(tǒng)。模型創(chuàng)建完之后,啟動系統(tǒng)的仿真功能來分析系統(tǒng)的動態(tài)特性,Simulink 內(nèi)置的分析工具包括有各種系統(tǒng)線性化、仿真算法、尋求平衡點等,更令人滿意的是,Simulink 完全無縫地融合到MATLAB 大環(huán)境中,使用M 語言就可以直接進行模型的建立、仿真、屬性設置、在不同工作空間之間傳遞數(shù)據(jù),還可以繪圖與分析,仿真結果可以以圖形的方式顯示在示波器窗口,方便用戶更加直觀地觀察系統(tǒng)的輸出結果;Simulink 也可以將輸出結果以變量的形式保存起來,隨后輸出到MATLAB 工作空間中以完成進一步的分析。
Simulink 支持多采樣頻率的系統(tǒng),可以仿真龐大且復雜的系統(tǒng)。
本文中使用的MATLAB R2018a,該版本的進行自動代碼生成前的配置更加人機友好,簡化了很多低版本的繁瑣配置。
DSP 也稱數(shù)字信號處理器(Digital Signal Proces?sor),是一種具有特殊結構的微處理器。DSP 芯片采用的是哈佛結構,它的數(shù)據(jù)空間和存儲空間是分開的。而MCU 采用的是馮·諾依曼結構。很顯然,在運算處理能力上,MCU 不如DSP。DSP 具有專門的硬件乘法器,廣泛的采用流水線操作方法,提供特殊的DSP 指令集,可以快速地實現(xiàn)各種數(shù)字信號處理算法。根據(jù)數(shù)字信號處理的要求,DSP 芯片一般具有如下特點:
(1)在一個指令周期內(nèi)可完成一次乘法和一次加法。
(2)程序和數(shù)據(jù)空間分開,CPU 可以同時訪問指令和數(shù)據(jù)。
(3)片內(nèi)具有快速RAM,通??赏ㄟ^獨立的數(shù)據(jù)總線在程序空間和數(shù)據(jù)空間同()時訪問。
(4)具有低開銷或無開銷循環(huán)及跳轉(zhuǎn)的硬件支持。
(5)具有快速地中斷處理功能和硬件I/O 的支持。
(6)可以并行執(zhí)行多個操作。
(7)支持流水線操作,使取址、譯碼和執(zhí)行等操作可以重疊執(zhí)行。
DSP 芯片誕生以來,DSP 芯片得到了飛速的發(fā)展。DSP 芯片的高速發(fā)展離不開工藝的發(fā)展和產(chǎn)業(yè)化進程的不斷加快。一方面得益于集成電路技術得到發(fā)展,另一方面也得益于巨大的市場。在近30 年的時間里,DSP 芯片已經(jīng)在通信、信號處理、電機控制、電力電子逆變、雷達等許多領域得到了廣泛的應用。
TI 公司生產(chǎn)DSP 芯片種類繁多,但依照面向領域的不同可以分成三大類:TMS320C2000 系列(實時控制)、TMS320C5000 系列(低功耗)和TMS320C6000 系列(高性能)。
(1)TMS320C2000 系列,稱為DSP 控制器(DSP)。繼承了FLASH 存儲器、高速A/D 轉(zhuǎn)換器、完備的通信接口及數(shù)字電動機控制的外圍電路,適用于電動機、變頻器、UPS、風能及光伏等需數(shù)字化控制的高速實時領域。
(2)TMS320C5000 系列,該系列是業(yè)界功耗最低的16 位DSO,主要應用于通信領域。
(3)TMS320C6000 系列,采用新的超長指令字結構設計的芯片,是TI 公司的高端系列產(chǎn)品,主要應用于數(shù)字通信、音頻和視頻技術領域。
本文采用具有浮點計算功能的TMS320F28335芯片。
F28335 的內(nèi)部結構由4 部分組成:中央處理器CPU(即C28x+FPU)、存儲器、系統(tǒng)控制邏輯及片上外設。F28335 的各部分通過內(nèi)部系統(tǒng)總線有機統(tǒng)一起來,它的組成結構決定了該款DSP 在CPU 數(shù)據(jù)處理能力、使用靈活性和存儲器容量、片上外設的種類和功能等方面都具有優(yōu)秀品質(zhì)。
(1)For Iterator Subsystem 模塊是一個預先配置的Subsystem 模塊,可以作為一個起點,用于創(chuàng)建在仿真時間步期間重復執(zhí)行指定的迭代次數(shù)的子系統(tǒng)。
(2)Terminator,使用Terminator 模塊終止輸出端口未連接其他模塊的模塊。
(3)Constant 模塊生成實數(shù)或復數(shù)常量值。
(4)Logical Operator 模塊對其輸入執(zhí)行指定的邏輯運算。
(5)Unit Delay 模塊按指定的采樣期間保持和延遲輸入。
(6)Lamp 模塊顯示指示輸入信號值的顏色。
(7)Scope 模塊顯示信號波形。
首先,新建一個空的Simulink 模型,命名為28335_led 并保存,在模塊瀏覽器中找到Constant、Logi?cal Operator、Unit Delay、For Iterator Subsystem、Out1 模塊。其中,Constant 模塊中的參數(shù)可以設置為任意整數(shù),在這里取50;將Logical Operator 中的AND 改為XOR;雙擊進入For Iterator Subsystem 中,將In1 和Out1 刪除,在加入一個Terminator 并與For Iterator 連接,如圖1 所示。For Iterator 中的Iteration limit 參數(shù)控制LED 閃爍的頻率,這里取3000000。

圖1 For Iterator Subsystem配置
將所有模塊連接,如圖2 所示。至此,LED 閃爍的控制模塊搭建完成。

圖2 各模塊的連接
在搭建完閃爍模型之后,現(xiàn)在Simulink 中仿真一下模型是否可以正常工作。加入Lamp 和Scope 模塊。雙擊進入Lamp 模塊,設置如圖3 所示。

圖3 Lamp設置
連接各模塊如圖4 所示。運行之后,Lamp 模塊會進行紅綠色的交替閃爍。

圖4 連接方式
驗證完模型功能之后,將Lamp 和Scope 模塊刪掉,加入Digital Output(C2833x)模塊,與Logical Opera?tor 模塊連接,如圖5 所示。

圖5 代碼模型
打 開Model Configuration Parameters,選 擇Hard?ware Implementation,在Hardware board 中選擇TI Del?fino F28335。雙擊打開Digital Output 模塊配置輸出引腳,因為開發(fā)板的布線原因,這里使用GPIO23 引腳。
按照上述步驟設置完成之后,將開發(fā)板連接到主機上,然后點擊編譯按鈕,生成代碼的報告如圖6所示。
代碼生成完成之后,再用CCS 對其建立工程并編譯,如圖7 所示。

圖8 測試結果

圖7 CCS6.0編譯界面

圖6 自動生成代碼報告
編譯完成后進入調(diào)試狀態(tài),LED 會不停閃爍,如圖8 所示。與Simulink 中仿真結果一樣,說明自動生成的代碼完全實現(xiàn)了模型中的所有功能。
這是Simulink 自動生成的引腳配置的代碼:

可以看到,在引腳功能配置的時候,與傳統(tǒng)配置方法一致,而且還會考慮到更加細節(jié)性的部分,比傳統(tǒng)的編碼方法的穩(wěn)定性更高。
這部分代碼的功能是控制LED 進行閃爍:

其中,閃爍的條件是判斷LogicalOperator 里面的值,當其為1 時,LED 點亮;反之,LED 熄滅。
這是主函數(shù)部分代碼:


自動生成的代碼與我們一般的編寫習慣相類似。
在使用Simulink 進行自動代碼生成之前,一定要對DSP 已經(jīng)有了一定的理解及對其的傳統(tǒng)編程使用能力,以及各個寄存器的功能。如果在測試的時候用的是TMS320F281x 系列的DSP,一定要注意它的ccxml文件,需要在CCS 里配置好之后,然后導入到Simulink中。直接使用Simulink 自帶的ccxml 文件,編譯器會報錯,無法通過編譯。
對CCS 編譯軟件也一定要熟悉其操作過程,將CCS 和Simulink 兩個軟件結合使用時,對軟件的操作能力也是有一定要求的。但是相對于直接對DSP 編寫程序來說,還是相對要容易一些。
用Simulink 建立DSP 模型并直接生成C 代碼的方法,簡化了DSP 的開發(fā)過程,并且給開發(fā)人員提供了直觀的可視化界面,使開發(fā)人員更容易對開發(fā)細節(jié)的把控,提升了開發(fā)的質(zhì)量及效率。開發(fā)人員不需要寫一行代碼便可實現(xiàn)想要的功能。學習這種方法對廣大DSP 應用開發(fā)人員具有較大的使用意義。