盧小錦 廣東理工職業學院,廣東廣州 510091
基于Matlab的DSP控制系統系統級開發方法
盧小錦 廣東理工職業學院,廣東廣州 510091
傳統的DSP控制系統開發思路,由于系統設計與模型仿真分離,實際系統與模型仿真誤差大,代碼編寫任務繁重,開發周期長。本文基于系統級的設計思路,在Matlab環境下,利用C2000lib工具箱和Matlab Link for CCS Development、ToToarlsget for TI C2000工具包,結合DSP集成開發環境Code Composer Stadiu 3.3(CCS3.3),實現DSP控制系統從概念設計、建模仿真到代碼的直接生成。本文根據該設計思路,以永磁同步電機(PMSM)的DSP矢量控制系統為工程實例,給出了控制系統從建模仿真到DSP程序代碼自動生成的設計流程。
Matlab;DSP;代碼自動生成;永磁同步電機;矢量控制
Matlab; DSP; Code generating; Permanent Magnet Synchronous Motor; Vector control
Matlab因其強大的分析、計算和可視化功能被廣泛用于控制系統的數學建模仿真、方案驗證。開發一個控制系統,一般先用Matlab對系統的控制算法進行數學建模仿真,方案通過驗證后才進行DSP系統的硬件設計及代碼開發,并通過對比實際系統和仿真模型的輸出,完善系統的設計。基于該思路的DSP控制系統開發,難度大、周期長,且系統設計與仿真模型分離,結果偏差大。本文基于系統級的設計思路,將系統設計和模型仿真在統一的開發環境中實現,實現系統和仿真模型的高度一致,提高系統的開發效率。
Math Works公司和TI公司聯合開發的工具包——Matlab Link for CCS Development Tools把Matlab和DSP集成開發環境CCS及DSP連接起來。利用此工具可以像操作Matlab變量一樣來操作TI DSP的存儲器或寄存器,開發人員在 Matlab環境下就可以完成對CCS的操作。Matlab Link for CCS Development Tools 可以支持CCS能夠識別的任何目標板,包括TI公司的DSK、EVM開發板和用戶自行開發的DSP板。把Matlab Link for CCS Development Tools工具包與Target for TI C 2000工具包配合使用,則可以直接由Matlab的仿真模型生成DSP的可執行代碼,即在Matlab環境下完成DSP控制系統開發的整個過程[1]。
基于Matlab的DSP控制系統開發流程如圖2。開發人員根據概念設計在Matlab平臺下利用Simulink、SimPowerSystems及C2000lib工具箱中的模型搭建系統仿真模型(.mdl),仿真驗證后通過Matlab的Real Time Workshop(RTW)生成面向TI編譯器的工程文件(.prj),并進一步完成代碼的編譯,鏈接生成DSP可執行機器碼(. out)并下載到目標DSP板,完成系統的開發[2]。

圖2 基于Matlab的DSP控制系統開發流程圖
控制系統采用電流反饋跟蹤實現Id=0的PMSM轉子磁場定向控制策略(PMSM磁場定向空間矢量控制框圖見圖1)。Id=0控制方式輸出力矩與定子電流成正比,電流調節器的輸出為實際定子電流幅值。它們在永磁同步電機生成的合成電流矢量超前且垂直于轉子d軸。故采用轉子磁場定向的方式控制永磁同步電機,只需準確地檢測出轉子空間位置(d軸),通過控制逆變器使三相定子的合成電流位于q軸上,定子電流在d軸上的分量為零,在q軸上產生轉矩勵磁電流,通過控制定子電流的大小,就可以控制轉矩[3]。
PMSM磁場定向控制算法包括:矢量控制算法、調節器控制算法及電壓空間矢量控制算法。矢量控制算法完成三相坐標系到兩相同步旋轉坐標系的變換及其逆變換,實現永磁同步電動機的解耦控制;速度調節器設計為帶飽和輸出的PID調節器,其飽和輸出值設定為電動機額定力矩電流的兩倍,穩態時實現對速度的誤差控制。動態調節時,限制電動機的最大電流,保證系統安全;PWM算法采用電壓空間矢量控制(SVPWM)算法,具有諧波小和電壓利用率高的特點。
3.1 基于Matlab/Simulink的系統級仿真模型建模及仿真


本文根據系統控制算法,基于Matlab搭建了基于磁場定向的PMSM空間矢量控制系統仿真模型(見圖3),該仿真模型包括仿真模塊和嵌入式系統模塊兩部分。
3.1.1 仿真模塊設計
仿真模塊基于Simulink、SimPowerSystems工具箱搭建,實現對功率電路及電機的建模仿真,包含有永磁同步電機模型、三相逆變器模型及數據轉換1模塊。其中,數據轉換1模塊包括相電流模數轉換子模塊(見圖4)及編碼器子模塊(見圖5)。
(1)相電流模數轉換子模塊將永磁同步電機模型輸出的相電流值轉換成D S P ADC寄存器的數據格式,模擬DSP ADC外設的數據采集工作模式。TMS320F2812的ADC為12位,數據有效范圍為[4905,0]。相電流模數轉換子模塊將電流值限幅為[40.94,-40.94],換算公式見式1.1。

圖4 相電流模數轉換子模塊
(2)編碼器子模塊模擬DSP EVA 事件管理器正交編碼脈沖QEP電路的解碼和計數工作模式。DSP EVA 事件管理器正交編碼脈沖QEP電路使用通用定時器2對編碼器的正交編碼脈沖進行計數,計數器的數據格式為無符號16位整形數,最大計數值為65535。編碼器子模塊將永磁同步電機模型端的角位移值轉換為通用定時器計數值的數據格式,以 [0,65535]為計數范圍循環計數,換算公式見式1.2。
QEP_sim =angle ×(4× encoderResolution/2/pi) (式1.2)
其中,encoderResolution為編碼器線數,值為2000;angle為電機模型的轉子角位移。

圖5 編碼器子模塊
3.1.2 嵌入式系統模塊設計
嵌入式系統模塊基于Simulink、C2000lib工具箱搭建,該模塊實現系統的控制算法,且可通過該模塊直接生成DSP程序代碼。嵌入式系統模塊主要包括速度調節器模塊、Q軸電流調節器模塊、D軸電流調節器模塊、Park模塊、Clark模塊、I_Park模塊、空間矢量發生器、C28x PWM 模塊、F2812eZdsp模塊、、電流采樣模塊、位置及轉速計算模塊及相應的數據轉換模塊。各模塊的功能分析如下:
(1)速度調節器模塊、Q軸電流調節器模塊、D軸電流調節器模塊、Clark模塊、Park模塊、I_Park模塊以及空間矢量發生器是Matlab C28x Digital Motor Control Library的模型,各模塊對應的功能為:實現帶飽和輸出的PID調節器算法;Clark變換運算,實現三相靜止坐標到兩相靜止坐標的轉換;Park變換運算,實現兩相靜止坐標到兩相旋轉坐標的轉換;Park逆變換運算,實現兩相旋轉坐標到兩相靜止坐標的轉換;計算出應用SVPWM產生給定定子參考電壓所需的3個比較值Ta,Tb,Tc。
(2)C28x PWM 模塊是Matlab C28x DSP Chip Support Library 的模型,通過配置該模塊控制DSP PWM的工作模式,包括載波率、有效電平、工作時鐘頻率等。
(3)F2812eZdsp模塊是Matlab Target Preference Library的模型,通過配置該模塊可對DSP目標板的工作參數、存儲器、段及外設硬件資源進行設置。
(4)電流采樣模塊(見圖6)主要實現兩個功能:采集定子端a、b相相電流;采集給定速度的輸入信號。
C28x ADC 模塊是Matlab C28x DSP Chip Support Library 的模型,通過配置該模塊可實現對DSP ADC 采樣通道及工作模式等進行設置。論文使用ADCINA0、ADCINA1通道實現對a、b相相電流信號的采集;使用ADCINA7通道實現對給定速度輸入信號的采集。
圖6中,Environment Controller實現了仿真模塊和嵌入式系統模塊的輸入數據切換。Environment Controller有兩個輸入端Sim及RTW,其輸出決定于模型是在Matlab仿真環境下運行還是在代碼直接生成的情況下運行,當模型是在Matlab仿真環境下運行時輸出Out等于Sim,當在代碼直接生成的情況下輸出Out等于RTW。
(5)位置及轉速計算模塊(見圖7)由C28x QEP 子模塊、CAP3INT子模塊、QEP_latch子模塊、speed_position子模塊、Starup_ramp子模及IIRfilter子模塊組成,其基本工作原理:在系統啟動階段,編碼器index信號被第一次捕獲前,init_latch標志信號為0,電機處于啟動工作模式,由start_ramp子模塊實現電機的啟動;當編碼器index信號被第一次捕獲后,init_latch標志信號置1,系統切換到正常工作狀態。系統通過C28x QEP子模塊對正交編碼脈沖進行計數;通過CAP3INT子模塊捕獲編碼器index信號的跳變及跳變時刻正交編碼脈沖的計數值;通過speed_position子模塊結合正交編碼脈沖計數值(QEP)及CAP3INT的捕獲值(cap_value)估算電機轉速(speed)及計算電角度(position)。




C28x QEP子模塊(見圖7)是Matlab C28x DSP Chip Support Library 的模型,通過配置該模塊對DSP 正交編碼脈沖QEP電路進行設置。本論文使用事件管理器A的QEP1、QEP2管腳作為編碼器正交編碼脈沖的輸入端,捕獲單元3(CAP3)管腳作為編碼器index信號的輸入端,其輸出為基于通用定時器2的正交編碼脈沖計數值。
CAP3INT子模塊(見圖8)實現捕獲單元3對編碼器index信號及正交編碼脈沖計數值的捕獲。
系統初始化階段,配置CAPCONA(To Memory)、CAPFIFOA(To Memory)對捕獲單元3及其捕獲FIFO狀態寄存器進行初始化,使能捕獲單元3并設置檢測捕獲單元3的上升沿;向捕獲單元3的FIFO堆棧狀態位CAP3FIFO 寫入“01”,隨后每當FIFO獲得一個新的捕獲值,都將產生一個捕獲中斷。
系統工作時,將CAPFIFOA1(From Memory)捕獲FIFO狀態寄存器的值與“0x2000”進行位與運算,判斷捕獲單元3是否發生新的捕獲。當發生新的捕獲,if子模觸發系統從捕獲FIFO堆棧1的底層寄存器CAP1BOT讀取捕獲值(CAP_value)。
int_latch信號用于切換電機運行的工作狀態。系統啟動階段,int_latch默認值為0,電機處于啟動狀態;當捕獲單元3第一次捕獲編碼器index信號,int_latch信號置1,電機完成啟動,切換到正常工作狀態。
系統在仿真環境運行時,由QEP_latch子模塊(見圖9)仿真實現CAP3INT子模塊捕獲正交編碼計數值的功能;int_latch信號置1,電機無啟動階段。
speed_position子模塊(見圖10)實現電機轉速及電角度的計算。系統在20k的頻率下運行,通過計算相鄰兩個機器周期的QEP計數值的差值便可估算出電機的轉速speed;通過編碼器偏移量offset、正交編碼脈沖捕獲值QEP_index、編碼器線數Encoder Resolution等參數可計算出電角度position。系統中speed及position的值都被轉換為歸一化的Q17數據。
IIRfilter子模塊(圖11)是IIR數字濾波器模塊,有兩個作用:濾波作用,濾除速度給定信號的干擾;實現速度給定信號的緩升緩降,使速度給定信號緩慢變化至設定值,防止給定速度信號的突變給電機造成沖擊。電機啟動階段,int_latch為0,IIRfilter子模塊將給定速度設為0.1(歸一化Q 17數據);當發生第一次捕獲后,int_latch置為1,系統切換到正常工作狀態,IIRfilter子模塊輸出為實際速度給定信號。
Starup_ramp子模塊(見圖12)實現電機的啟動。電機啟動階段,由于無法判定轉子位置,Starup_ramp子模塊向系統輸出提供電角度信號,使電機起轉。R a m p Control模塊用于設置電角度信號的頻率,Ramp Generator根據設定頻率輸出幅值為[0,1]的電角度信號波。
數據轉換子模塊實現空間矢量發生模塊和C28x PWM 之間的數據轉換。由于空間矢量發生模塊輸出是一個歸一化的Q24數據,而C28x PWM 是16位整數,因此需要通過在兩者之間進行數據轉換匹配。轉換公式為:

3.1.3 模型仿真
電機參數為:額定工作電壓600DCV,額定電流為4A,額定轉速為3000prm,額定轉矩為3Nm,電機帶載啟動。模型仿真輸出占空比Ta、占空比Tb、電角度、A相相電流、速度給定值及速度估算值的波形如圖13、圖14、圖15。通過觀測仿真波形可知系統控制算法設計的正確性,系統具有良好的動態特性且穩態誤差小。
3.2 基于MATLAB 的DSP代碼直接生成
下面實現MATLAB仿真模型的DSP目標代碼直接生成。
通過MATLAB直接生成代碼時,首先把仿真模型的仿真模塊去掉,執行Ctrl+B組合鍵命令,或在Real-Time Workshop界面點擊generate code按鈕。Matlab根據設置自動生成名為“C2812pmsmsim.pjt”的工程文件(包括源文件、庫文件、鏈接文件),并自動連接打開CCS集成開發環境(見圖16),并將生成的C代碼編譯、鏈接、下載到目標板。

系統硬件采用德州儀器公司的eZdsp F2812平臺作為控制單元。實驗電機參數為:額定工作電壓220ACV,額定電流為5A,額定轉速為2500prm,額定轉矩為5Nm,極對數為4,電機帶載啟動。通過CCS集成開發環境的圖形窗口觀察到的占空比Ta、占空比Tb、電角度、A相相電流、速度給定值及速度估算值波形如圖17、圖18、圖19。通過與模型的仿真輸出波形對比,系統輸出與模型仿真結果一致,系統設計與仿真模型設計相符,驗證了本文基于Matlab的DSP系統級開發開發思路的正確性。
本文基于系統級的設計思路,基于Matlab平臺完成了永磁同步電機矢量控制系統的建模仿真及實現了由Matlab仿真模型直接生成DSP代碼。通過該工程實例,展現了一種全新的DSP控制系統開發思路,實現了系統設計與模型仿真的統一,使得控制系統從算法設計、建模仿真到系統實現的整個過程更加緊湊一致,大大減輕了代碼開發的難度,提高了開發效率與質量。
[1]盧小錦,曾岳南.基于Matlab/Simuli的nk TMS320F2812代碼開發[J]. 單片機與嵌入式系統應用.2009,2:79-81
[2]張詳,楊志剛,張彥生.Matlab/Simuli模nk型到C/C++代碼的自動實現[J].中國測試技術.2005,31(1): 111-113
[3]馮繼營,李向超,李家武.基于SVPWM的永磁同步電機矢量控制系統設計[J].電子元器件應用.2010,12(9):51-54
System Level Development Method Of DSP Control System Based On Mtalab
Lu Xiaojin Guangdong Polytechnic Institute, Guangzhou Guangdong, 510091
Based on the traditional development approach, design of the DSP control system and the model simulation is separate. As a result, it is time-consuming and there is great error between the real system and the simulation model. This paper develops the DSP control system on the System Level Development. In the Matlab environment, carry out the DSP control system , including concept design, modeling, and code generating, by using Simulink, SimPowerSystems, C2000lib toolbox , Matlab Link for CCS Development Tools, Target for TI C2000tools and DSP integrated development environment Code Composer Stadiu3.3(CCS3.3). This paper developed the Permanent Magnet Synchronous Motor DSP Control System based on this approach, and shows the procedure of the system modeling, DSP code generating.
10.3969/j.issn.1001-8972.2011.11.057
盧小錦,碩士研究生,助教;研究方向:運動控制與電力電子技術。