0 引言
隨著數字信號處理理論及微電子技術的高速發展,數字信號處理器(DSP)已廣泛應用于各個控制領域。而在控制系統中,通常會利用PC機與DSP之間的通信來對系統各個狀態/參數進行監控。這種方法既利用了DSP功耗低、價格相對便宜、功能強大、抗干擾能力強、適宜于分布現場等優點,同時又結合了PC機的軟硬件資源豐富、管理功能強大、人機界面友好、操控平臺穩定可靠、數據通信方便快捷等系統功能優勢。為此,本文擬通過使用比較廣泛的RS-232-C接口標準來研究PC與TMS320F2812 DSP之間的異步串行通信。
1 硬件設計
這里采用最簡單的三線連接方法,即PC機與DSP的發送、接收端彼此交叉連接,地線對應連接的方法。另外,由于DSP的串行通信接口SCI的兩個外部引腳SCITXD和SCIRXD的信號為TTL電平,與RS-232-C標準邏輯電平不一致,因此,要進行信號電平轉換后才能連接到PC機的串口接頭DB9,圖1所示是其硬件連接電路,其中電平轉換選用MAX3232芯片和若干電容來實現,使用時只用其中的一對收/發單元。
2 軟件設計
2.1 通信協議
本設計將通信的幀格式設置為1個起始位,8個數據位,無奇偶校驗位,1個停止位。圖2所示為其數據幀格式,其傳輸波特率為9600 bps,采用全雙工通信方法。
PC機發送數據包的格式是:包頭+功能碼+參數碼+數據內容+校驗和,本設計分別設置它們占1、2、2、4、4個字節。其中包頭是一個數據包開始的標志,這里設置為字符’~’;功能碼表示本次通信要完成的操作,其中”01”表示向DSP發送參數,”02”表示讓DSP回傳數據;參數碼表示通信傳送的數據類別,”01”表示要傳送P參數,”02”表示要傳送I參數,”03”表示要傳送D參數。假如通過PC機來設置DSP中數字PID控制程序的參數P為15.20,可以設定數據的量綱為1:100,那么就應當發送15.20×100=1520=05F0H,即依次發送字符’0’=30H、’5’=35H、’F’=46H、’0’=30H;且在前面發送的字符串為”~010105F0”。校驗和的計算是把從功能碼到數據內容己經轉換為ASCII碼的全部字節連續累加,其值為7EH+30H+31H+30H+31H+30H+35H+46H+30H=021BH,所以,PC向DSP發送完整的數據包為字符串”~010105F0021B”,其格式如圖3所示。
DSP上傳電流、電壓、頻率等實時數據的數據包格式與圖3類似,但它可以不使用功能碼或參數碼。如頻率數據包的包頭采用字符’*’,電流數據包的包頭采用字符’#’,以示區別即可。
2.2 上位機PC端程序
PC機主要完成三部分工作:一是對從機進行控制(比如修改參數),二是對從機采集的數據進行處理和數值計算,三是向用戶提供友好、美觀的儀器界面。以上功能均可依靠軟件實現。上位機軟件既可以使用Visual C++、VisualBasic等通用的開發工具,也可以使用LabWin-dows/CVI、LabView等專用于計算機測控領域的虛擬儀器軟件開發平臺。LabWindows/CVI是NI公司開發的32位、以ANSI C為核心的交互式虛擬儀器開發環境,它將功能強大的C語言與測試技術相結合,具有靈活的交互式編程方法和豐富的庫函數,可為開發人員建立監測、自動測試、數據采集、過程監控等系統提供理想的軟件開發環境,是實現虛擬儀器及網絡化儀器的快速途徑。由于其簡單易學,故可大大縮短開發周期。LabWindows/CVI具有專門用于RS-232串行通信的函數庫,主要包括:串行口打開/關閉函數(OpenCom/OpenComConfig和CloseCom)、串行口輸入/輸出函數(ComRd、ComRdByte、ComWrt、ComWrtByte)、串行口控制函數(FlushInQ、FlushOutQ)、串行口狀態查詢函數(GetInQLen、GetOutQLen)、串行口事件處理函數(InstallCom-Callback)等5大類。以下是程序部分代碼:
主函數:
PC機發送程序:
PC機要能向DSP發送控制命令,比如開機,關機,修改參數等,下面以修改PID控制參數P為例。
2.3 下位機DSP程序
DSP的軟件開發可利用集成開發環境CCS3.1(Code Composer Studio),并采用C語言進行編程。利用DSP的SCI模塊實現串行通信的主程序流程圖如圖4所示。DSP的串行通信程序設計可采用查詢法或中斷法來進行數據的收發,這里采用中斷方式接收數據,而用查詢方式發送數據。DSP收到PC機發送來的數據時,便轉入相應的中斷子程序,其中斷服務子程序流程如圖5所示。其串口SCI初始化配置如下:
void SCI_Init(void)
{
SciaRegs.SCICCR.all=0x0007;//字符長度8位
SciaRegs.SCICTL1.all=0x0003;//使能發送和接收
SciaRegs.SCICTL2.all=0x0002; //使能接收中斷,禁止發送中斷
SciaRegs.SCIHBAUD=0x00;//置波特率高8位
SciaRegs.SCIHBAUD=0xF3;//置波特率低8位
SciaRegs.SCICTL1.all=0x23;//使SCI退出復位
}
DSP收到字符串”~010105F0019D”之后,首先進行和校驗。如果正確,則根據功能碼和參數碼判斷PC機發送的是否是修改參數P的命令。然后提取數據”05F0'’,將其轉換為十進制數1520,再除以100即得到要設置的P值15.20;如果和校驗出錯,則要求主機重發。若PC機發送的是上傳數據的命令,則將發送標志變量send_flag置1,這樣,在主循環中,經過判斷后,便可向PC機發送數據。
3 結束語
本文利用LabWindows/CVI開發平臺編寫了上位機PC程序,同時利用CCS3.1開發環境編寫下位機DSP程序,然后通過RS232總線進行串行通信。利用這種方法設計的PC機與DSP的串行通信系統具有硬件結構簡單、成本低、實現容易等特點,并具有良好的可移植性和可擴展性,能夠很好地滿足PC與DSP的通信需求。
-
dsp
+關注
關注
553文章
8011瀏覽量
349132 -
PC
+關注
關注
9文章
2085瀏覽量
154282 -
串行通信
+關注
關注
4文章
574瀏覽量
35424
發布評論請先 登錄
相關推薦
評論