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