隨著測控技術(shù)的發(fā)展,由多單片機構(gòu)成的測量控制網(wǎng)絡(luò)在測控領(lǐng)域的應(yīng)用越來越廣泛。單片機之間的數(shù)據(jù)交換通常采用串行通信方式,連接方式多采用總線拓撲結(jié)構(gòu)[13]。該結(jié)構(gòu)中單片機通過一組數(shù)據(jù)線相連接,所有單片機共用一組數(shù)據(jù)線;通信時要對從單片機進行編址,主單片機通過不同的地址來訪問從單片機。由于只有一組數(shù)據(jù)線,那么在同一時間內(nèi),主單片機只能和一個單片機進行通信。如果要訪問一遍從單片機,那么主單片機要首先發(fā)送某一個從單片機的訪問命令,等其應(yīng)答后才能訪問下一個從單片機。這樣就浪費了大量的時間,降低了測控系統(tǒng)的工作效率。在某些監(jiān)督計算機控制系統(tǒng)(SCC)和集散型控制系統(tǒng)(DCS)中[4],主單片機經(jīng)常需要同時訪問從單片機,要求從單片機能同時響應(yīng)主單片機的訪問命令,此時拓撲型總線結(jié)構(gòu)就不能滿足要求。
隨著電子技術(shù)和EDA技術(shù)的發(fā)展,FPGA技術(shù)以其獨有的優(yōu)勢,在電子設(shè)計領(lǐng)域得到越來越廣泛的應(yīng)用。FPGA具有集成度高、體積小和功耗低等優(yōu)點,而且還具有用戶可編程能力。采用FPGA器件可以大大縮短開發(fā)周期,減少資金投入,實現(xiàn)片上可編程系統(tǒng)(SOPC)的設(shè)計。同時,測控系統(tǒng)中使用串行擴展通信的趨勢越來越突出,但是傳統(tǒng)總線拓撲結(jié)構(gòu)較低的響應(yīng)效率已經(jīng)不能滿足復(fù)雜系統(tǒng)的要求。本文的主要目的是基于FPGA設(shè)計一個集成16個簡單UART(通用異步接收發(fā)送設(shè)備)的模塊,該模塊采用VHDL語言描述。主單片機通過并口與FPGA相連,F(xiàn)PGA通過16個UART分別與16個從單片機相連,實現(xiàn)單片機串行通信網(wǎng)絡(luò)系統(tǒng)。
1 系統(tǒng)硬件總體設(shè)計
系統(tǒng)設(shè)計要求主單片機能同時控制從單片機,并且能同時采集從單片機上傳的信息,進行判斷并傳送給上位機。主單片機功能主要有:
① 與上位機通信,接收上位機命令并解析;
② 根據(jù)上位機命令,向下控制從單片機;
③ 監(jiān)測從單片機中上傳的各種指標是否符合要求;
④ 提供告警顯示。
FPGA完成主單片機命令的解復(fù)接和從單片機上傳信息的復(fù)接。從單片機主要功能為接收主單片機通過FPGA下發(fā)的命令,完成對設(shè)備的控制并上傳設(shè)備狀態(tài),如圖1所示。
圖1 單片機多機通信原理示意圖
本設(shè)計中使用的單片機為Cygnal公司的C8051F系列單片機,F(xiàn)PGA為Xilinx公司的XC3S100E。C8051F系列單片機是Cygnal公司開發(fā)的高端單片機,指令與8051兼容,最高具有25 MIPS的處理能力,同時集成了ADC、DAC、可編程放大器、電壓比較器、傳感器等豐富的外設(shè),非常適合應(yīng)用于測控領(lǐng)域。C8051F系列單片機還具有JTAG接口,方便用戶在線調(diào)試,極大節(jié)省了用戶的開發(fā)時間。
2 系統(tǒng)實現(xiàn)
2.1 主單片機單元設(shè)計
主單片機采用C8051F020單片機,該單片機提供2個串口、1個I2C接口(SMBus),提供P0~P3或P4~P7的并口。本設(shè)計中,設(shè)置特殊功能寄存器EMI0CF=0x27,使外部存儲器接口工作在地址/數(shù)據(jù)復(fù)用方式,選擇高端口P4~P7。設(shè)置特殊功能寄存器XBR0=0x15,將串口UART0和SMBus映射到P0端口。
C8051F020將FPGA視為外部存儲器,通過并口P4~P7進行訪問。C8051F020通過SMBus接口連接串行EEPROM,將系統(tǒng)信息實時寫入EEPROM,在系統(tǒng)突然掉電后上電時讀取EEPROM內(nèi)的數(shù)據(jù),完成系統(tǒng)掉電保護功能。主單片機連續(xù)不停地分析從單片機上傳的指令,判斷設(shè)備的狀態(tài)并給出告警顯示,同時存入內(nèi)部緩沖區(qū)等待上位機查詢。
C8051F020提供串口和網(wǎng)口2種方式與上位機通信,兩個接口不能同時使用。網(wǎng)絡(luò)通信采用網(wǎng)口串口轉(zhuǎn)換模塊實現(xiàn),網(wǎng)口和串口通過組合邏輯電路連接到C8051F020的UART0,如圖2所示,實現(xiàn)系統(tǒng)的本地監(jiān)控和遠程監(jiān)控功能。
圖2 主單片機串口和網(wǎng)口連接示意圖
2.2 FPGA單元設(shè)計
FPGA的設(shè)計是通信網(wǎng)絡(luò)的核心部分。依據(jù)功能要求,F(xiàn)PGA內(nèi)部劃分成四大功能模塊:SRAM控制器、發(fā)送數(shù)據(jù)緩沖模塊、16個UART模塊、接收數(shù)據(jù)緩沖模塊。發(fā)送數(shù)據(jù)緩沖模塊劃分成16個RAM區(qū),每個RAM區(qū)分別連接1個UART,當發(fā)送緩沖模塊接收到主單片機下發(fā)的控制數(shù)據(jù)后,啟動UART將數(shù)據(jù)發(fā)送至從單片機。接收緩沖區(qū)同樣分為16個RAM區(qū),發(fā)送控制數(shù)據(jù)后,UART周期性地向從單片機發(fā)送狀態(tài)查詢命令,從單片機將最新狀態(tài)發(fā)送至UART模塊,UART模塊將數(shù)據(jù)存入接收緩沖模塊相應(yīng)的RAM區(qū)。如圖3所示。
?
圖3 FPGA內(nèi)部功能模塊示意圖
FPGA內(nèi)部共有16對讀/寫和數(shù)據(jù)總線,分別連接UART和相應(yīng)的發(fā)送緩沖區(qū)RAM及接收緩沖區(qū)RAM。
FPGA內(nèi)部模塊采用自頂向下的設(shè)計方法,將復(fù)雜系統(tǒng)劃分為簡單系統(tǒng),然后通過邏輯和接口設(shè)計實現(xiàn)各個模塊功能。SRAM控制器用于FPGA和C8051F020的接口,負責(zé)內(nèi)部RAM的讀寫控制。UART負責(zé)接收從單片機上傳的串行信號,將其并行化后存入接收數(shù)據(jù)緩沖RAM;另外也負責(zé)將發(fā)送緩沖RAM中的數(shù)據(jù)轉(zhuǎn)換成符合RS232協(xié)議規(guī)范的串行信號發(fā)送給從單片機。SRAM控制器和UART模塊同樣采用自頂向下的方式實現(xiàn),關(guān)于SRAM控制器及UART的FPGA實現(xiàn)方案在參考文獻中有詳細的論述[56],本文不再介紹。
FPGA內(nèi)部系統(tǒng)采用同步有限狀態(tài)機(FSM)的設(shè)計方法實現(xiàn),F(xiàn)SM負責(zé)調(diào)配各功能模塊之間的協(xié)作。狀態(tài)機采用獨熱(onehot)編碼,使電路的可靠性和速度有顯著的提高。系統(tǒng)狀態(tài)轉(zhuǎn)移圖如圖4所示。
?
圖4 有限狀態(tài)機狀態(tài)轉(zhuǎn)移圖
2.3 通信協(xié)議設(shè)計
主單片機和上位機的通信速率及FPGA和從單片機的通信速率均設(shè)置為38.4 Kbps,可以更精確的控制主單片機與各個從單片機之間的通信時間。通信指令由報頭、設(shè)備類型、設(shè)備號、命令號、命令數(shù)據(jù)、校驗等字段組成。報頭用于通知單片機開始串行通信,設(shè)備類型和設(shè)備號用于將指令正確傳達到相應(yīng)的設(shè)備,命令號用于通知單片機指令,命令數(shù)據(jù)用于通知單片機具體的功能,校驗則采用CRC校驗以保證通信的準確性。寫入控制命令號為00H,讀取命令號為01H,讀取指令命令數(shù)據(jù)為0字節(jié)。通信指令的幀格式如下:
單片機接收到控制命令后,如果接收正確,返回00H,若錯誤則返回01H.返回幀格式為:
讀取指令沒有命令數(shù)據(jù),幀格式為:
接收后單片機返回幀格式為:
?
結(jié)語
本文介紹了在FPGA上集成多個UART的方法,并以此為基礎(chǔ)搭建了一個多單片機通信網(wǎng)絡(luò)。設(shè)計中采用FPGA作為串行接口擴展器件與傳統(tǒng)器件相比具有功能靈活、擴展性好的特點。通過實驗證明,該通信網(wǎng)絡(luò)相對于傳統(tǒng)的總線拓撲網(wǎng)絡(luò)具有速度快、實時性好的特點,同時該網(wǎng)絡(luò)可以根據(jù)外設(shè)需要隨意擴展,非常適合應(yīng)用于監(jiān)督計算機控制系統(tǒng)和集散控制網(wǎng)絡(luò)。
參考文獻
[1] 董加強.提高單片機多機串行通信的一種新方法[J].電工技術(shù), 2008(6): 5354.
[2] 陳曉英,任國強.單片機多機通信系統(tǒng)穩(wěn)定性的研究[J].單片機與嵌入式系統(tǒng)應(yīng)用, 2001(8): 2022.
[3] 陳壽元.單片機多機通信網(wǎng)絡(luò)改進及數(shù)據(jù)通信容錯技術(shù)[J].山東師范大學(xué)學(xué)報, 2006(2): 3335.
[4] 汪吉鵬.工業(yè)控制技術(shù)的應(yīng)用現(xiàn)狀和發(fā)展方向[J].濰坊學(xué)院學(xué)報, 2002(2): 4752.
[5] 劉耀,梅大成,于珍珠. QDR SRAM控制器的設(shè)計與FPGA的實現(xiàn)[J].現(xiàn)代電子技術(shù), 2007(2): 1113.
[6] 賈子申,李淑清,王冠雅.基于FPGA的UART控制器設(shè)計[J].電子測量技術(shù), 2008(3): 8284.
評論