朱文亮 廖洪波 杜卯春 范大鵬
摘要:在光電伺服控制軟件調(diào)試過程中為了開發(fā)一種連續(xù)、實時、直觀的調(diào)試工具,需要將DSP環(huán)境中的數(shù)據(jù)實時傳輸?shù)絇C環(huán)境,利用PC豐富的圖形環(huán)境進行數(shù)據(jù)顯示和圖形繪制。如何實現(xiàn)DSP環(huán)境與PC環(huán)境之間的實時數(shù)據(jù)交換成為該調(diào)試工具開發(fā)中的一個關(guān)鍵問題。針對該問題,利用T1公司實時數(shù)據(jù)交換(RTDX)技術(shù),實現(xiàn)了MATLAB和CCS集成開發(fā)環(huán)境之間的實時數(shù)據(jù)交換。
關(guān)鍵詞:光電伺服控制;調(diào)試工具;RTDX;MATLAB
中圖分類號:TP273 文獻標識碼:A 文章編號:1673-5048(2014)02-0012-04
0、引言
目前,在光電伺服控制軟件調(diào)試過程中,為了實現(xiàn)程序中各種寄存器、控制參數(shù)等變量的觀察,需要在目標程序中設置斷點,中斷目標程序運行。然而對實時性要求較高的光電伺服控制程序,這種插入斷點的調(diào)試方法不能實時反映所關(guān)心數(shù)據(jù)的變化,同時還有可能造成數(shù)據(jù)錯誤,影響控制算法設計和錯誤分析,給程序調(diào)試帶來不便。同樣,在其調(diào)試階段,需要在線修改程序中的控制參數(shù),實現(xiàn)外部數(shù)據(jù)實時導人目標程序,而用傳統(tǒng)調(diào)試手段難以實現(xiàn)。針對以上問題,需要設計一個連續(xù)、實時、直觀的調(diào)試工具來進行光電伺服軟件調(diào)試,用以提高調(diào)試效率和縮短開發(fā)周期。本文針對該調(diào)試工具設計過程中PC環(huán)境與DSP環(huán)境數(shù)據(jù)實時交換的關(guān)鍵問題,通過應用實例說明了采用RTDX技術(shù)實現(xiàn)MATLAB和CCS的編程環(huán)境之間數(shù)據(jù)交換的方法。
1、實時數(shù)據(jù)交換技術(shù)RTDX
TI公司的Real Time Data Exchange(RTDX)技術(shù)利用DSP的內(nèi)部仿真邏輯和JTAG接口實現(xiàn)主機與目標機之間的數(shù)據(jù)交換。它幾乎不占用DSP的系統(tǒng)資源,數(shù)據(jù)傳送可以在目標程序后臺運行,對目標程序影響很小。它可以在不中斷目標程序運行的前提下向主機實時發(fā)送目標DSP上各個寄存器或內(nèi)存變量的值。而Pc主機也可通過TI公司提供的RTDX相關(guān)API函數(shù)獲取這些數(shù)據(jù),并可對這些數(shù)據(jù)進行實時分析和可視化顯示。RTDX數(shù)據(jù)交換原理如圖1所示。
目標DSP為了向主機發(fā)送數(shù)據(jù)必須設定一個輸出通道,通過用戶接口可將數(shù)據(jù)送到輸出通道以使這些數(shù)據(jù)立即保存到RTDX目標機的緩存(由RTDX目標函數(shù)庫定義)中,然后再將這些數(shù)據(jù)通過JTAG接口發(fā)送到主機。目標機要從主機中獲得數(shù)據(jù),首先必須設定輸入通道接收主機發(fā)出的命令,從而實現(xiàn)數(shù)據(jù)傳輸?shù)耐健M瑫r可利用輸出通道完成目標程序向RTDX主機函數(shù)庫發(fā)送數(shù)據(jù),向RTDX主機函數(shù)庫發(fā)送數(shù)據(jù)請求及在目標機上提供數(shù)據(jù)緩存等功能。
2、RTDX應用過程
使用RTDX進行DSP環(huán)境和PC環(huán)境之間的數(shù)據(jù)交換時,需要在DSP目標程序和PC主機程序中分別實現(xiàn)。它們之間的數(shù)據(jù)傳輸格式和傳輸頻率要結(jié)合應用需求來定義。
2.1 DSP目標程序RTDX實現(xiàn)
在DSP目標程序中使用RTDX進行數(shù)據(jù)傳輸,只需在原有的DSP目標程序中加入關(guān)于RTDX通道初始化、數(shù)據(jù)緩存區(qū)定義和數(shù)據(jù)收發(fā)的代碼即可。以下是RTDX在DSP程序中的實現(xiàn)過程。
(1)RTDX初始化
首先使用以下宏完成RTDX輸入、輸出通道的創(chuàng)建:
RTDX_CreatelnputChannel(d_jchan);
RTDX_CreateOutputChannel(a_ochan)。其中:d_ichan為輸入通道名:a_ochan為輸出通道名。后面有關(guān)RTDX通道的操作函數(shù)都要使用它們來指定通道。完成通道創(chuàng)建以后使用以下宏來使能輸入、輸出通道:
RTDX_enableInput(&d_ichan);
RTDX_enableOutput(&a_ochan)。
(2)創(chuàng)建接收和發(fā)送數(shù)據(jù)緩存區(qū)
進行數(shù)據(jù)發(fā)送之前需要定義好接收和發(fā)送緩沖區(qū),緩沖區(qū)的大小可根據(jù)實際應用情況定義,但不可超過RTDX通道最大容量值。定義Readdata[counterl]為接收緩沖區(qū),counterl為緩沖區(qū)容量大小,定義Seaddata[counter2]為發(fā)送緩沖區(qū)。
(3)向RTDX通道讀寫數(shù)據(jù)
函數(shù)RTDX_readNB(&d_ichan,(void*)&Readdata,sizeof(short))可實現(xiàn)RTDX輸入通道數(shù)據(jù)非阻塞讀取。使用RTDX_write(&a_ochan,&Seaddata,500*sizeof(short))可以向RTDX通道發(fā)送數(shù)據(jù),這里向通道中寫入了500個short類型數(shù)據(jù),發(fā)送數(shù)據(jù)個數(shù)不應超過RTDX通道容量大小,否則會發(fā)送失敗。
在實際應用過程中RTDX只提供了一個數(shù)據(jù)的傳輸通道,而如何有效地使用這個通道還需要DSP目標程序和PC主機程序定義好數(shù)據(jù)的傳輸協(xié)議來實現(xiàn)。
2.2 MATLAB主機程序?qū)崿F(xiàn)
PC主機程序是在MATLAB/GUI編程環(huán)境實現(xiàn)的。主要實現(xiàn)定時獲取DSP目標程序通過RTDX通道發(fā)送上來的數(shù)據(jù):實時顯示接收到的數(shù)據(jù)信息;通過人機交互界面向DSP目標程序發(fā)送數(shù)據(jù)。設計流程如圖2所示。
主機程序首先通過MATLAB Link for CodeComposer Studio的相關(guān)API函數(shù)與CCS集成開發(fā)環(huán)境建立雙向和實時數(shù)據(jù)鏈接,成功建立鏈接后可以通過MATLAB/GUI程序控制執(zhí)行CCS的命令來進行批處理調(diào)試和顯示,然后再進行DSP類型及數(shù)量的探測。待探測到目標DSP類型和數(shù)量后,程序?qū)⑦M行RTDX通道緩沖區(qū)配置、通道初始化等操作。完成這些操作后MATLAB/GUI程序控制CCS運行目標程序,同時啟動數(shù)據(jù)接收和發(fā)送定時器,此時DSP和PC可進行數(shù)據(jù)的實時交換。以下為MATLAB環(huán)境下RTDX的實現(xiàn)過程。
(1)RTDX初始化過程
首先使用configure(cc.rtdx,8192,4)對通道進行配置,配置參數(shù)需要根據(jù)DSP目標程序通道創(chuàng)建的個數(shù)來確定,這里配置緩沖區(qū)大小為8192字節(jié),同時配置了4個通道,其中cc.rtdx為MATLAB和CCS建立連接成功后返回的句柄,后面有關(guān)RT-DX通道的操作函數(shù)都需要把它作為參數(shù)來使用。完成配置后,可使用open(cc.rtdx,a_ochan,r)來打開RTDX讀通道,使用open(cc.rtdx,d_ichan,w)來打開寫通道,其中a_ochan,d_jchan為DSP目標程序中創(chuàng)建通道時定義的通道名。最后使用以下函數(shù)完成RTDX輸入、輸出通道的使能:
enable(cc.rtdx,d_ichan);
enable(cc.rtdx,a_ochan)。
(2)接收定時器服務函數(shù)
TimeUpdateChannelATl( )
在定時服務程序中主要完成實時接收RTDX通道中的數(shù)據(jù),并把接收到的數(shù)據(jù)存人數(shù)據(jù)緩存區(qū),然后根據(jù)數(shù)據(jù)傳輸協(xié)議解析數(shù)據(jù)并對數(shù)據(jù)進行處理或圖形繪制。
(3)發(fā)送定時器服務函數(shù)
TimeUpdateChannelDTl( )
發(fā)送定時器服務函數(shù)主要實現(xiàn)數(shù)據(jù)的發(fā)送和協(xié)議的封包。當PC主機程序需要向DSP發(fā)送連續(xù)數(shù)據(jù)時,例如,正弦、方波和鋸齒波等類型的激勵信號時,需要將上述激勵信號離散化處理后再進行發(fā)送,發(fā)送控制命令時,只需發(fā)送按照傳輸協(xié)議封包好的數(shù)據(jù)即可。
3、RTDX應用實例
以某型光電穩(wěn)定平臺的光電伺服控制軟件調(diào)試為背景,結(jié)合上文RTDX在DSP目標程序和MATLAB/GUI的實現(xiàn)過程,對光電伺服控制軟件和MATLAB/GUI程序進行修改,對DSP目標程序增加RTDX初始化、配置、收發(fā)等相關(guān)代碼,對MATLAB/GUI修改有關(guān)數(shù)據(jù)處理和圖形顯示代碼,并根據(jù)實際應用需求,實現(xiàn)平臺中各種參數(shù)的顯示、狀態(tài)控制等功能。
某型光電穩(wěn)定平臺調(diào)試系統(tǒng)構(gòu)成如圖3所示。軟件構(gòu)成:MATLAB2011b、CCS3.3;硬件構(gòu)成:兩軸光電穩(wěn)定平臺、驅(qū)動控制硬件電路、調(diào)試PC主機、仿真器和直流穩(wěn)壓電源等。RTDX應用實現(xiàn)如下:
步驟一,在光電伺服控制軟件中加入RTDX初始化相關(guān)函數(shù)并定義接收、發(fā)送緩沖區(qū)數(shù)組,數(shù)組大小按照RTDX最大容量500定義,同時還需實現(xiàn)平臺數(shù)據(jù)的傳輸協(xié)議,其中上傳數(shù)據(jù)包括陀螺、編碼器、測速機、跟蹤器數(shù)據(jù)類型及格式的定義。在伺服控制周期里采集到500個數(shù)據(jù)后進行數(shù)據(jù)上傳,因此數(shù)據(jù)上傳周期為500 ms;Pc機下傳數(shù)據(jù)包括控制指令和正弦、方波、階躍信號的離散化數(shù)據(jù),數(shù)據(jù)下傳周期由MATLAB/GUI發(fā)送定時器設定,根據(jù)伺服控制的響應特性,設定下傳周期為10 ms,每個周期發(fā)送500個數(shù)據(jù)。
步驟二,在MATLAB/GUI程序中設計人機交互界面,如圖4所示。需對MATLAB/GUI程序中的接收定時服務函數(shù)和發(fā)送定時服務函數(shù)進行修改,設置接收定時器定時周期為5 ms,并且要小于光電伺服控制程序數(shù)據(jù)上傳周期,以防止數(shù)據(jù)丟失。按照傳輸協(xié)議,對接收定時服務函數(shù)增加數(shù)據(jù)傳輸協(xié)議解析函數(shù),波形繪制函數(shù)等。對發(fā)送定時服務函數(shù)需增加激勵信號波形離散化函數(shù)和傳輸協(xié)議封包函數(shù)。
步驟三,利用MATLAB/GUI程序觀察光電穩(wěn)定平臺各個傳感器的數(shù)據(jù)值,并可發(fā)送指令實現(xiàn)對光電穩(wěn)定平臺各種功能的控制,實現(xiàn)對光電伺服控制軟件在線監(jiān)控與調(diào)試,如圖4所示。
在MATLAB/GUI界面上單擊電機上電控制按鈕,運動軸選擇為俯仰軸,運動模式選擇穩(wěn)定模式,激勵信號選擇為正弦,幅值為60(°)/s,頻率為4 Hz,點擊陀螺數(shù)據(jù)顯示按鈕,此時可在主機程序界面上觀察激勵信號(虛線)和響應信號(實線)的曲線??梢赃x擇不同類型的激勵信號和運動模式來實現(xiàn)對光電穩(wěn)定平臺位置、速度和跟蹤閉環(huán)狀態(tài)性能的測試。在電機不上電的情況下還可以單獨觀察某個傳感器的數(shù)據(jù),判斷它是否正常工作。
4、結(jié)論
本文以光電伺服控制軟件的調(diào)試為應用背景,針對DSP環(huán)境與PC環(huán)境實時數(shù)據(jù)交換的技術(shù)問題展開研究。利用RTDX技術(shù)實現(xiàn)了CCS3.3與MAT,LAB2011b編程環(huán)境之間的實時數(shù)據(jù)交換,并在MATLAB/GUI環(huán)境下開發(fā)了基于RTDX的光電伺服控制軟件調(diào)試工具。該調(diào)試工具為開發(fā)人員提供了連續(xù)、實時、直觀的調(diào)試環(huán)境,提高了調(diào)試效率。