陳高輝 張劍鋒 林瀟 付杰霖
(吉利汽車研究院(寧波)有限公司 浙江省寧波市 315336)
DSP(Digital Signal Processing)是一門以數(shù)字方式表示并處理模擬信號的理論和技術(shù),它涉及許多學(xué)科并且廣泛應(yīng)用于許多領(lǐng)域。傳統(tǒng)的DSP 軟件開發(fā)需要開發(fā)者熟悉硬件構(gòu)架、原理和算法,理解DSP 廠商提供的底層各類驅(qū)動的接口,在編譯環(huán)境中逐行編輯代碼,程序開發(fā)周期長,算法難于實現(xiàn)。
本文介紹一種基于MATLAB 的嵌入式軟件開發(fā)方式,利用MATLAB 強大的建模仿真功能和豐富的數(shù)學(xué)函數(shù)庫,在Simulink平臺下搭建控制模型,編程過程采用圖形化編輯,只需要配置不同模塊的參數(shù)即可完成整個系統(tǒng)的建立,MATLAB 利用代碼生成工具可自動生成目標(biāo)代碼?;贛ATLAB 的嵌入式軟件開發(fā)是集概念設(shè)計、目標(biāo)代碼生成、仿真、調(diào)試和運行于一體的快捷高效方式,使開發(fā)者徹底擺脫底層代碼的困擾,專注于應(yīng)用邏輯的實現(xiàn)、算法的研究和技術(shù)的突破。
CCS(Code Composer Studio,代碼調(diào)試器)是TI(Texas Instruments,德州儀器)推出的一套嵌入式軟件集成開發(fā)環(huán)境,可用于開發(fā)和調(diào)試基于TI 芯片的嵌入式軟件。它包含TI 器件系列的項目構(gòu)建環(huán)境、源代碼編輯器、編譯器、調(diào)試器、仿真器和實時操作系統(tǒng)等,支持TI 主流DSP 芯片及各類型軟件仿真器和硬件仿真器。在基于TI 的MCU 和DSP 嵌入式軟件開發(fā)過程中,CCS 是一款應(yīng)用十分廣泛的開發(fā)工具。
MATLAB(MATrixLABoratory)是一款專業(yè)數(shù)學(xué)軟件。開發(fā)環(huán)境、數(shù)學(xué)函數(shù)庫、圖形處理系統(tǒng)、M 語言和應(yīng)用程序接口是MATLAB的五大構(gòu)成部分。MATLAB 是一個非常實用且功能強大的系統(tǒng),它將數(shù)值計算、圖形管理、程序開發(fā)等融為一體,在控制設(shè)計、信號分析與處理等領(lǐng)域有十分廣闊的應(yīng)用。
在嵌入式軟件開發(fā)過程中,使用MATLAB 的Simulink 工具進行應(yīng)用程序開發(fā),能夠使開發(fā)者脫離底層硬件的束縛,專注于邏輯功能的實現(xiàn)。并且,Simulink 的圖形開發(fā)環(huán)境能夠提供更直觀的邏輯實現(xiàn)視圖,在Simulink 中直接調(diào)用對應(yīng)的功能模塊,大幅縮短了開發(fā)時間。
MATLAB 與CCS 的聯(lián)合是基于MATLAB 應(yīng)用程序接口支持CCS 的IDE LINK。MATLAB 的代碼生成工具Embedded Coder在MATLAB 和CCS 的處理器之間提供了一種連接,可以利用MATLAB 強大的數(shù)值計算功能去控制一個信號處理應(yīng)用程序,也可以通過創(chuàng)建MATLAB 腳本文件或者調(diào)用函數(shù)文件驗證需要在目標(biāo)芯片中執(zhí)行的算法。在MATLAB 中設(shè)計需求對象的控制模型,調(diào)用對應(yīng)的功能模塊,將生成的代碼導(dǎo)入CCS 進行集成,具體實現(xiàn)方式如下。
圖1:目標(biāo)芯片參數(shù)配置
圖2:MATLAB 模型設(shè)計
為了讓Embedded Coder 生成的目標(biāo)代碼移植到CCS 中能夠識別目標(biāo)板和仿真器,需要在CCS 中創(chuàng)建一個.ccxml 格式的目標(biāo)配置文件,目標(biāo)芯片和仿真器型號在這個文件中選擇。應(yīng)用程序的編譯順序和鏈接規(guī)則需要在MATLAB 中指定,以保證生成的目標(biāo)代碼在CCS 或MATLAB 環(huán)境下都能夠執(zhí)行。在MATLAB 的命令窗口輸入xmakefilesetup,在XMakefile 用戶配置界面,配置子菜單編譯器、鏈接器、函數(shù)庫及工具路徑,完成上述參數(shù)配置后,即可完成MATLAB 和CCS 的無縫對接。
圖3:電機母線電流曲線
在模型設(shè)計之前,需要根據(jù)硬件原理圖確定嵌入式應(yīng)用程序的處理器。Simulink 平臺中的工具箱Embedded Coder 只支持TI 的C2000,C5000,C6000 三個系列的部分芯片,目標(biāo)芯片須在這個范圍內(nèi)選擇。在Simulink 平臺下創(chuàng)建模型,將Target Preference 添加到模型中,在Target Preference 參數(shù)配置界面,可以選擇目標(biāo)芯片及系統(tǒng)時鐘,同時也可以完成芯片的內(nèi)存管理和外設(shè)配置。確定目標(biāo)芯片后,需要實現(xiàn)芯片的不同功能,TI 芯片的功能在MATLAB中以不同的模塊形式表現(xiàn),在建模過程中,將需要使用的模塊添加到模型中,根據(jù)應(yīng)用程序需要實現(xiàn)的功能配置各個模塊的參數(shù)。通過實線或CPU 內(nèi)部邏輯可以完成模塊間的連接。在建立復(fù)雜模型時,可以嵌套子系統(tǒng),可以靈活實現(xiàn)不同的功能,而且使得系統(tǒng)的層級更清晰。目標(biāo)芯片參數(shù)配置如圖1所示。
在系統(tǒng)模型設(shè)計完成后,直接編譯模型工程,代碼生成工具Embedded Coder 將在工程路徑下自動生成工程的.cmd 文件、.c 文件和.h 文件。工程編譯完成后,可以在工程的當(dāng)前文件下查看已生成的目標(biāo)文件,MATLAB 生成的.c、.h 以及cmd 文件可以被導(dǎo)入到CCS 中集成,以生成最終的可執(zhí)行文件。
Embedded Coder 生成的目標(biāo)代碼有兩種執(zhí)行方式。第一種方式是將這些代碼移植到CCS 中執(zhí)行。先在CCS 開發(fā)環(huán)境建立一個空白的軟件工程,將Simulink 生成的目標(biāo)文件(cmd、.c 及.h)移植到該空白工程中,在CCS 環(huán)境下編譯、調(diào)試和運行。這種方式可以充分利用CCS 的集成開發(fā)環(huán)境進行程序的調(diào)試,可以利用CCS 的變量窗口、反匯編窗口、斷點工具、內(nèi)存管理工具等實時調(diào)試MATLAB 生產(chǎn)的目標(biāo)代碼,非常方便開發(fā)者判斷程序的變量是否符合既定要求以及程序運行結(jié)果的正確性,這種方式充分融合了MATLAB 生成目標(biāo)代碼的快捷性與CCS 調(diào)試程序的高效性。
第二種方式目標(biāo)代碼直接在MATLAB 環(huán)境下執(zhí)行,工程編譯完成后,連接仿真器,Simulink 自動執(zhí)行已生成的目標(biāo)代碼,可以在硬件電路板上看到程序執(zhí)行的結(jié)果。這種方式程序的編輯、鏈接和執(zhí)行都是在MATLAB 環(huán)境下完成。程序開發(fā)過程中不需要啟動CCS,在調(diào)試程序過程需要多次修改參數(shù)時,可以避免每次修改參數(shù)后都需要將MATLAB 生成的目標(biāo)代碼移植到CCS 中的繁瑣過程。
根據(jù)上文闡述,基于TMS320F28035 芯片,在MATLAB 中開發(fā)一個直流有刷電機驅(qū)動程序,采用開環(huán)控制方式,在Simulink平臺下建立模型,采用正弦波激勵信號,通過PWM(Pulse With Module,脈沖寬度調(diào)制)控制電機輸入電壓的幅值,AD 模塊采集電機母線電流,通過CAN(Controller Area Network,控制器局域網(wǎng))將電機母線電流傳輸?shù)缴衔粰C,通過上位機軟件實時監(jiān)測電機的電流曲線,如圖2所示。
通過仿真器連接硬件電路板,選擇在MATLAB 環(huán)境下執(zhí)行已設(shè)計的程序。程序執(zhí)行后,在MATLAB 工程的文件夾下可以看到生成的目標(biāo)代碼,檢測目標(biāo)板輸出的電壓,電壓波形的幅值、頻率及占空比符合設(shè)計目標(biāo)值,通過上位機軟件觀測電機的線電流曲線,如圖3所示,與輸入的正弦函數(shù)趨勢基本一致,幅值符合預(yù)期值。這充分說明了程序的正確性以及在MATLAB 環(huán)境下進行嵌入式程序開發(fā)的可行性與可靠性。
基于MATLAB 的嵌入式應(yīng)用軟件開發(fā),充分體現(xiàn)了在Simulink 平臺下建模和生成代碼的快捷性和高可靠性。在搭建初始化環(huán)境后,建模過程只需配置不同功能模塊的參數(shù)即可完成程序設(shè)計,大幅提高了編程的效率;系統(tǒng)設(shè)計采用圖形化編程,各個模塊、信號流之間的邏輯關(guān)系一目了然,便于理解,不容易出錯;在MATLAB 中建立目標(biāo)模型可以利用其強大的仿真功能幫助檢查系統(tǒng)的正確性,這是CCS 所不具備的優(yōu)點。
總之,在滿足一定的應(yīng)用環(huán)境下,MATLAB 與CCS 聯(lián)合編程進行嵌入式系統(tǒng)開發(fā),是一種不同于傳統(tǒng)嵌入式軟件開發(fā)的高效可靠的編程方法。