1、引言
三坐標測量機做為一種高精度測量儀器,在機械工業、汽車工業、航空航天等領域具有廣泛的應用。本套通訊系統采用FPGA為主要通訊芯片,使用FPGA實現各通訊模塊對數據的收發,配合單片機對數據進行編碼、解碼、重封裝,實現了計算機和控制系統的通訊;由于FPGA程序的并行執行結構和高的執行速度,因此大大保證了數據傳輸的準確性和快速性。
2、通訊模塊的實現
2.1 計算機與橋接卡的通訊
本系統采用RS232總線實現計算機和橋接卡之間的通訊。計算機發送的數據,經過RS232總線傳輸到橋接卡,通過MAX3232芯片實現電平轉換。FPGA檢測到起始位后接收數據,接收完數據后,將其存于UART接收FIFO[2]中;待接收到結束位時,FPGA產生中斷信號,觸發單片機讀取接收FIFO中的數據并對其解碼,判斷數據中的目的地址,根據目的地址決定是否處理或發送到控制板;橋接卡與計算機通訊時,首先將數據進行編碼,然后將數據置于發送FIFO中,啟動發送模塊,發送模塊自動將數據發出,數據經MAX3232發送到總線上等待計算機的接收。
(1)串口發送模塊的FPGA實現
串口發送模塊從發送FIFO讀出數據后,根據串口通信協議,數據在向外發送時,低位在前,高位在后,所以將八位的數據重新進行編輯:前加停止位‘1’,后加起始位‘0’,變為十位數據包,將十位數據按照設置波特率逐位發送即可,使用Modelsim進行仿真,仿真圖見圖1(data位要發送的數據,tx為發送線)
(2)串口接收模塊的FPGA實現
總線空閑時當檢測到由高到低變化時,表明數據開始傳輸,接收模塊準備接收數據,接收數據時低位在前,高位在后,當接收到起始位后,每隔一個數據傳輸周期接收一次數據,待接收到八位數據后將數據置于接收FIFO中,使用Modelsim進行對發送模塊仿真見圖2(rxBuf為接收到的數據,低位在前,高位在后):
2.2 橋接卡與控制卡及控制卡之間的通訊
由于橋接卡需要和多個控制卡進行信息的交換,且不同的控制卡之間也需要數據傳輸,因此在進行總線選擇時,必須保證各個器件都具有主控的權利,可以占用總線,本系統中橋接卡和控制卡及控制卡之間采用I2C[3][4]總線進行通訊。
I2C總線是一種兩線式串行雙向總線,是多主控的總線,由時鐘線和數據線構成,數據傳輸時,時鐘信號由主控器件產生。當SCL為高電平時,SDA出現由高電平到低電平變化,表明開始傳送數據;當SCL為高電平時,SDA出現低電平到高電平變化,表示數據傳送結束;接收方收到數據后,需向發送方發出應答信號;為了防止總線上數據沖突,總線有仲裁機制,當總線同時被多個發送方占用時,首先出現高電平的發送方被仲裁掉,因此,最長低電平周期的器件占用總線,成為主控器件;被仲裁掉的器件,放棄總線,改為接收。
使用FPGA實現I2C總線時,需要建立三個模塊:總線監視模塊,總線發送模塊,總線接收模塊。
①總線監視模塊[5]的實現
總線監視模塊用來為發送和接收模塊提供總線狀態,總線分為空閑、忙、等待三種狀態。當總線上沒有數據傳輸時,保持高電平,稱為空閑態;數據傳輸期間,總線為忙的狀態,如果主控方占用總線后沒有數據發送,則為等待狀態,如果總線等待時間超過設定時間,總線由等待轉為空閑態。發送、接收模塊需要得到的信號為起始信號、結束信號和狀態信號,由總線監視模塊實現這些信號。使用Modelsim進行仿真,得到波形如圖3:
②I2C發送模塊[6]的FPGA實現
發送模塊主要實現對數據的發送;首先發送地址,發送完地址后,等待應答信號,如果沒有響應,則放棄總線;如果出現響應,I2C發送模塊輸出RAM地址,讀取RAM的數據,依次發送數據,每發送完一個字節,等待響應信號,發送模塊根據RAM中的數據長度,將RAM數據讀完。為了防止多個主機同時占用總線,應根據仲裁機制將總線上的非主控方仲裁掉,禁止其繼續占用總線。為了防止總線傳輸中信號延遲,當向總線上發送下一數據時對總線上的狀態進行判斷,如果正確,再發送下一位數據。否則,放棄總線。使用Modelsim對I2C發送模塊進行仿真如圖4。
I2C_outScl:發送時鐘;I2C_inScl:檢測時鐘
I2C_outSda:發送數據;I2C_inSda:檢測數據
desAddr:目的地址;msgData:發送數據
RAM_Addr:RAM的地址信號。
③I2C接收模塊[7]的FPGA實現
接收模塊接收到總線監視模塊發送來的起始位信號后,準備接收總線上的數據,接收到的地址后,判斷接收到的地址和電路板地址是否一致;當兩者一致時,向總線置應答信號ACK,繼續接收下面的數據,收到的數據置于接收FIFO中;如果地址不一致,則放棄總線。使用Modelsim對I2C接收模塊進行仿真如圖4。
I2CbusIsBusy:總線狀態;I2C_start:起始信號
myAddr:電路板的地址; rxBuf:接收寄存器
rxFIFO_wr:接收FIFO的寫信號
3、通訊協議
上位機和橋接板之間采用RS232總線進行數據傳輸,橋接卡和控制卡以及各個控制卡之間采用I2C總線進行數據的傳輸,通訊采用主叫和應答方式,數據傳輸中使用單片機進行解碼[8]。
主叫方發出指令后,等待對方響應,如果主叫方寫指令到被叫方,則被叫方收到指令執行操作后返回確認信號;如果從主叫方讀指令,則被叫方在下一時刻占用總線后發送數據到主叫方,主叫方在0.5s內沒有收到響應包,表明傳輸失敗。若連續3次沒有響應,則與對方通信連接失敗。
為了實現數據的一致性,RS-232和I2C總線采用相同的通信協議。
數據傳輸時以“包”進行封裝,中間加入長度位和奇偶校驗位。封裝格式:起始字符+長度字符 +序列號+源地址+目的地址包類型+傳輸數據+包校驗+結束字符;數據傳輸均采用ASCII碼。
包的定義:起始位定義為‘#’,占用一個字節,接收方接收到‘#’時,表明數據開始傳輸;長度字符定義為除起始字符、結束字符和校驗字符的所有原始字符的長度,占用一個字節;源地址:發送方地址,占用一個字節;目的地址:接收方地址,占用一個字節,當為‘00’時,定義為廣播地址;包類型:占用一個字節,表明數據的類型,接收方根據包類型執行對應操作;傳輸數據:控制量的大小;包校驗:定義為長度字符,源地址,目的地址,包類型和數據之和,占用兩個字節;結束位:定義為‘~’,當接收方接收到結束字符時,表明本包傳輸結束,對數據包進行處理,長度位和校驗位正確時執行指令,否則,放棄改數據包。
4、實驗結果
使用該通訊系統實現和四控制卡之間的通訊控制,使用串口助手進行數據收發,在發送數據間隔為5us的情況下對該通訊系統進行測試,在進行8小時的測試中,系統沒有出現數據丟失、錯誤、死機現象;使用廣播地址進行數據發送,返回信號正確,沒出現死機現象。
使用該通訊系統對四個電機進行控制,電機實際輸出情況如表1:
本實驗數據證明了該通訊系統的可用性及數據傳輸的準確性。
使用該系統采用廣播地址實現四個電機同步聯動,各個軸的運動情況如表2:
本實驗數據證明了各個電機實現了指定的轉動角度;各個軸運動期間,電機的狀態經過I2C總線[9]及RS-232總線通訊系統成功的發送到了上位機,通訊系統沒有出現死機和數據丟失,經過該實驗,證明了數據傳輸的正確性。
4、結論
本系統采用FPGA進行通訊系統的設計,提高了數據的傳輸率和準確性,實現了對控制機構及時、快速的控制,有效防止突發事件的處理,經實驗證明,本系統快速、準確的實現了數據的傳輸,可以有效快速的實現對電機的速度、位置控制、準確的讀取電機的編碼器信號。
-
FPGA
+關注
關注
1630文章
21766瀏覽量
604579 -
計算機
+關注
關注
19文章
7522瀏覽量
88292 -
總線
+關注
關注
10文章
2894瀏覽量
88211
發布評論請先 登錄
相關推薦
評論