李 勛 ,劉文怡
(1.中北大學(xué) 電子測(cè)試技術(shù)國(guó)家重點(diǎn)實(shí)驗(yàn)室,太原 030051;2.中北大學(xué) 儀器科學(xué)與動(dòng)態(tài)測(cè)試教育部重點(diǎn)實(shí)驗(yàn)室,太原 030051)
USB接口傳輸速率快并且性能優(yōu)良,它支持3種信道速率:低速為1.5 Mb/s、全速為12 Mb/s以及高速為480 Mb/s[1]。但是USB傳輸距離也不能超過(guò)30 m,這就使USB在工業(yè)應(yīng)用領(lǐng)域中受到傳輸距離的限制。RS485總線采用平衡驅(qū)動(dòng)、差分接收結(jié)構(gòu),具有抗共模干擾能力強(qiáng),靈敏度高,驅(qū)動(dòng)能力強(qiáng)等特點(diǎn)[2],同時(shí)其顯著優(yōu)勢(shì)是傳輸距離可達(dá)1200 m以上,但是RS485傳輸速度低,可靠性差。
將RS485、USB兩者結(jié)合起來(lái),優(yōu)勢(shì)互補(bǔ),就能夠產(chǎn)生一種快速、可靠、低成本的遠(yuǎn)程數(shù)據(jù)通信轉(zhuǎn)換接口。目前,F(xiàn)PGA集成度高和工作頻率、穩(wěn)定性良好,抗干擾能力強(qiáng),編寫程序易于模塊化控制,易于配置等優(yōu)點(diǎn),逐步成為各領(lǐng)域數(shù)字電路的首選。設(shè)計(jì)一種基于FPGA的RS485-USB轉(zhuǎn)換器就可以有效應(yīng)用到各種速率的數(shù)據(jù)處理、采集、在線檢測(cè)場(chǎng)合。本文主要從系統(tǒng)總體設(shè)計(jì)方案、硬件設(shè)計(jì)和軟件設(shè)計(jì)方面介紹一種基于FPGA的RS485-USB的轉(zhuǎn)換器的設(shè)計(jì)與實(shí)現(xiàn)。
本文介紹的RS485-USB轉(zhuǎn)換器主要是通過(guò)靈活配置FPGA實(shí)現(xiàn)RS485接口和USB接口實(shí)現(xiàn)通信速率可調(diào)的遠(yuǎn)距離數(shù)據(jù)通信,同時(shí)通過(guò)更改USB主控芯片的固件程序可以切換轉(zhuǎn)換器數(shù)據(jù)立即串行傳輸通信和數(shù)據(jù)內(nèi)部FIFO緩存并行傳輸通信兩種模式,本文設(shè)計(jì)的固件程序選擇第二種并行傳輸通信模式。系統(tǒng)的總體設(shè)計(jì)方案如圖1所示。
該RS485-USB轉(zhuǎn)換器主要包括RS485收發(fā)器、FPGA控制單元、USB控制單元3部分。系統(tǒng)工作原理如下:底層設(shè)備信號(hào)經(jīng)485接口芯片轉(zhuǎn)換為485電平,通過(guò)485總線傳輸至FPGA控制單元;FPGA單元主要負(fù)責(zé)接收485總線傳輸過(guò)來(lái)的信號(hào),通過(guò)改變程序調(diào)節(jié)信號(hào)傳輸速率,對(duì)信號(hào)進(jìn)行FPGA內(nèi)部FIFO緩存,F(xiàn)PGA通過(guò)USB主控芯片對(duì)FIFO內(nèi)部空、半滿、滿輸出的3種存儲(chǔ)狀態(tài)進(jìn)行判定。該設(shè)計(jì)中固件程序主要是對(duì)CY7C68013A接收到FIFO半滿信號(hào)上升沿進(jìn)行判定。若為上升沿,則FPGA將數(shù)據(jù)并行上傳;反之監(jiān)測(cè)等待。USB控制器就是上位機(jī)與FPGA控制單元的通信接口,用于雙向傳輸信號(hào);上位機(jī)設(shè)備主要負(fù)責(zé)數(shù)據(jù)存儲(chǔ)、采集和在線檢測(cè)并進(jìn)行數(shù)據(jù)通道、波形顯示。
圖1 系統(tǒng)總體設(shè)計(jì)框圖Fig.1 System block diagram of the overall design
圖2 硬件設(shè)計(jì)原理示意圖Fig.2 Schematic diagram of the hardware design
本文硬件部分主要負(fù)責(zé)完成RS485與USB總線轉(zhuǎn)換中的各控制模塊的硬件電路設(shè)計(jì),其滿足了RS485與USB雙向通信,保證了數(shù)據(jù)的準(zhǔn)確性和抗干擾能力。硬件設(shè)計(jì)主要的原理示意圖如圖2所示。
本文設(shè)計(jì)的RS485-USB轉(zhuǎn)換器中的硬件部分主要包括以下4個(gè)模塊:
電源轉(zhuǎn)換模塊所選的FPGA芯片需要1.8 V供電,USB主控芯片和RS485協(xié)議芯片需要3.3 V供電,故設(shè)計(jì)選用具有高準(zhǔn)確度、快速瞬態(tài)響應(yīng)等優(yōu)點(diǎn)的TPS70351芯片實(shí)現(xiàn)電平轉(zhuǎn)換,滿足設(shè)計(jì)中供電要求。
RS485總線接口模塊RS485采用平衡發(fā)送和差分接收方式來(lái)實(shí)現(xiàn)通信,設(shè)計(jì)選用ADM3076E作為485接口芯片。在某些工業(yè)控制領(lǐng)域中,工作現(xiàn)場(chǎng)情況復(fù)雜,各節(jié)點(diǎn)之間存在很大的共模電壓,雖然RS485接口采用的是差分傳輸方式,但當(dāng)共模電壓超過(guò)RS485接收器的極限電壓,接收器就無(wú)法正常工作,嚴(yán)重時(shí)會(huì)燒毀芯片和儀器設(shè)備。為解決這一問(wèn)題,該轉(zhuǎn)換器設(shè)計(jì)中通過(guò)加入RS485將電源和RS485收發(fā)器的電源隔離,在信號(hào)輸人和輸出中均采用了光電耦合器HCPL-2631,其開關(guān)頻率高達(dá) 10 MHz,完全滿足數(shù)據(jù)傳輸要求,實(shí)現(xiàn)數(shù)據(jù)的長(zhǎng)線傳輸。
FPGA控制模塊主要負(fù)責(zé)整個(gè)電路中邏輯控制,其工作模式主要有系統(tǒng)復(fù)位模式、數(shù)據(jù)存儲(chǔ)模式和數(shù)據(jù)轉(zhuǎn)換模式。本設(shè)計(jì)選用的FPGA芯片是Xilinx公司生產(chǎn)的Spartan-2E系列XC2S50E,該芯片具有很高的邏輯資源,易于配置等綜合性能;其程序下載PROM模塊選用的是與FPGA相對(duì)應(yīng)的XCF01SV020芯片,該芯片使用方便,能夠?yàn)镕PGA提供快速的再編程位流[3]。
USB總線控制模塊主要負(fù)責(zé)控制連接FPGA與上位機(jī)的通信,本設(shè)計(jì)選用賽普拉斯研發(fā)出的芯片CY7C68013A作為USB接口電路核心芯片。CY7C68013A支持12 Mb/s的全速以及480 Mb/s高速傳輸,除集成了超強(qiáng)的USB2.0引擎SIE外,還集成了改進(jìn)的增強(qiáng)型8051內(nèi)核[4]。USB主控芯片CY7C68013A選用ATMEL公司的24C64芯片下載固件程序,該芯片具有很快的讀寫速度、低功耗,是現(xiàn)在使用的非易失性存儲(chǔ)芯片中靈活性高的類型之一。
本文設(shè)計(jì)的RS485-USB轉(zhuǎn)換器中的軟件設(shè)計(jì)部分主要包括FPGA控制模塊、CY7C68013A固件程序控制模塊、設(shè)備驅(qū)動(dòng)程序控制模塊。
FPGA的功能控制程序是通過(guò)Xilinx ISE12.1軟件平臺(tái)實(shí)現(xiàn),控制程序選用硬件描述語(yǔ)言VHDL語(yǔ)言進(jìn)行功能模塊化編寫的。為了匹配FPGA和CY7C68013A之間的數(shù)據(jù)傳輸速率,提高數(shù)據(jù)的傳輸效率和準(zhǔn)確性,在FPGA內(nèi)部開辟了1 KB的FIFO緩存器。FPGA接收到RS485串口數(shù)據(jù)后,對(duì)其進(jìn)行消抖、數(shù)據(jù)傳輸速率調(diào)整及波特率檢測(cè)、串并轉(zhuǎn)化處理,進(jìn)行內(nèi)部FIFO緩存時(shí)將寫信號(hào)電平拉高,數(shù)據(jù)在寫信號(hào)上升沿被寫入到FIFO,同時(shí)寫地址加1;當(dāng)FIFO內(nèi)部數(shù)據(jù)達(dá)到半滿時(shí),半滿標(biāo)志(half_flag)變?yōu)?,半滿信號(hào)上升沿的跳變觸發(fā)USB主控芯片CY7C68013A中的CTL控制信號(hào)將FPGA讀信號(hào)拉高,同時(shí)在讀信號(hào)上升沿將數(shù)據(jù)讀出,通過(guò)USB接口傳輸給上位機(jī),讀地址加1。半滿標(biāo)志位通過(guò)讀地址和寫地址在FPGA內(nèi)存中的相對(duì)位置進(jìn)行計(jì)算,部分程序代碼如下:
FPGA配置程序主要通過(guò)倍頻、分頻晶振基準(zhǔn)頻率和控制讀寫數(shù)據(jù)狀態(tài)機(jī)來(lái)實(shí)現(xiàn)傳輸速率的可調(diào),程序中按功能需求將各模塊進(jìn)行連接、通信。為了便于應(yīng)用和檢測(cè),F(xiàn)PGA通過(guò)主程序控制MEN(2:0)信號(hào)選擇底層設(shè)備,指示燈 LED(2:0)信號(hào)實(shí)時(shí)顯示轉(zhuǎn)換器與上位機(jī)在線檢測(cè)時(shí)復(fù)位、設(shè)備連接、讀數(shù)指示。
USB通信數(shù)據(jù)、指令是通過(guò)CY7C68013A端點(diǎn)連接上位機(jī)與外部邏輯處理器FPGA。CY7C68013A的固件程序下載方式有兩種:一種是固件程序下載存儲(chǔ)到片外E2PROM中,上電后自動(dòng)將固件程序加載到CY7C68013芯片RAM中;另一種是在線加載方式,計(jì)算機(jī)需要編寫、存儲(chǔ)固件下載驅(qū)動(dòng)程序,當(dāng)CY7C68013A連接到計(jì)算機(jī)后,由驅(qū)動(dòng)程序下載固件[5]。由于第一種固件程序加載方式便于擴(kuò)展、操作簡(jiǎn)單,本文選用第一種方式。CY7C68013A固件功能的實(shí)現(xiàn)主要集中在三個(gè)模塊:調(diào)用TD_Init()函數(shù)完成CY7C68013A的初始化模塊;設(shè)備請(qǐng)求模塊,對(duì)應(yīng)固件編程框圖中的設(shè)備請(qǐng)求部分;重復(fù)調(diào)用函數(shù)TD_Poll()實(shí)現(xiàn)用戶所需的功能模塊,完成底層串口設(shè)備與USB通信數(shù)據(jù)之間的轉(zhuǎn)化。在本設(shè)計(jì)轉(zhuǎn)換器應(yīng)用的固件程序流程框圖如圖3所示。
圖3 CY7C68013A固件編寫流程框圖Fig.3 Flow diagram of CY7C68013A firmware preparation
設(shè)備驅(qū)動(dòng)程序主要實(shí)現(xiàn)主機(jī)與底層設(shè)備端口之間連接的功能,本文采用CYPRESS公司EZ-USB開發(fā)系統(tǒng)提供的全新驅(qū)動(dòng)程序CYUSB.SYS。安裝驅(qū)動(dòng)時(shí),需找到與用戶編寫的PID/VID代碼、設(shè)備描述相匹配的CYUSB.INF文件,驅(qū)動(dòng)即可被正確安裝,此時(shí)設(shè)備才可以正常使用[6]。
功能測(cè)試模塊主要包括底層信號(hào)源設(shè)備、RS485-USB轉(zhuǎn)換器、上位機(jī)3部分,其關(guān)系框圖如圖4所示。上位機(jī)軟件主要采用VB進(jìn)行編程,實(shí)現(xiàn)對(duì)底層信號(hào)源設(shè)備上傳數(shù)據(jù)檢測(cè)、實(shí)時(shí)顯示的可視化界面操作。
圖4 功能測(cè)試系統(tǒng)連接框圖Fig.4 Connection diagram of functional test system
通過(guò)程序下載盒將FPGA各功能模塊程序下載到該轉(zhuǎn)換器XCF01SV020芯片中。轉(zhuǎn)換器利用RS485接口接收信號(hào)源產(chǎn)生的遞減數(shù)據(jù),經(jīng)過(guò)接口芯片轉(zhuǎn)化,將差分信號(hào)轉(zhuǎn)換成串行數(shù)據(jù)輸入,圖5為利用示波器測(cè)出的轉(zhuǎn)換器RS485接口電路轉(zhuǎn)換后RX端的信號(hào)波形。圖5中截取了三組串行信號(hào)的波形,信號(hào)源設(shè)定串行信號(hào)第一位為起始位“0”,后八位為串行數(shù)據(jù),最后三位為空閑信號(hào)“1”組成的十二位串行數(shù)據(jù),并且先發(fā)低位再發(fā)高位。
從圖中可讀出三組信號(hào)為“000010110111”、“011100110111”、“001100110111”, 去掉起始位和空閑位,調(diào)整高低位順序分析得出轉(zhuǎn)換器接收到的信號(hào)源發(fā)出的三組遞減數(shù)據(jù)位“01101000”、“01100111”、“01100110”。
本設(shè)計(jì)中遞減數(shù)據(jù)實(shí)時(shí)采集圖如圖6所示。上位機(jī)界面顯示遞減數(shù)據(jù)結(jié)果與示波器測(cè)試轉(zhuǎn)換器RS485接收底層信號(hào)源遞減數(shù)據(jù)波形圖結(jié)果一致,轉(zhuǎn)換器實(shí)現(xiàn)了RS485總線轉(zhuǎn)換到USB2.0總線接口的數(shù)據(jù)通信功能。
圖6 上位機(jī)數(shù)據(jù)采集圖Fig.6 PC data acquisition diagram
本文介紹了一種基于FPGA的RS485-USB轉(zhuǎn)換器設(shè)計(jì)方案,并進(jìn)行了實(shí)驗(yàn)驗(yàn)證,其特點(diǎn)在于充分利用了FPGA易于編程和配置,以實(shí)現(xiàn)特定模塊化功能,數(shù)據(jù)傳輸速率可調(diào);同時(shí)結(jié)合了RS485接口具有長(zhǎng)線遠(yuǎn)程傳輸特性,USB接口高速率傳輸、熱插熱拔優(yōu)良特性,實(shí)現(xiàn)了快速、可靠、低成本的RS485-USB轉(zhuǎn)換器轉(zhuǎn)換功能。該設(shè)計(jì)轉(zhuǎn)換器具有硬件電路簡(jiǎn)單、軟件設(shè)計(jì)靈活、體積小、功耗低、可在線更新等特點(diǎn),可以應(yīng)用到工業(yè)數(shù)據(jù)采集、檢測(cè)等領(lǐng)域,其傳輸速率范圍可控制在9.6 kb/s~72 Mb/s,具有很高的實(shí)用性。
[1] 王寶珠,楊永,林永峰,等.基于USB接口的數(shù)據(jù)采集系統(tǒng)設(shè)計(jì)[J].電子技術(shù)應(yīng)用,2010,36(1):67-70.
[2] 孫東,韓紹坤,邢懷飛.自制RS-232/RS-485轉(zhuǎn)換器應(yīng)用[J].電子測(cè)量技術(shù),2005,48(3):17-18.
[3] 劉福奇.FPGA嵌入式項(xiàng)目開發(fā)實(shí)戰(zhàn)[M].北京:電子工業(yè)出版社,2009.
[4] 馬俊濤,李振字.S1aveFIF0模式下CY7C68013和FPGA的數(shù)據(jù)通信[J].中國(guó)傳媒大學(xué)學(xué)報(bào):自然科學(xué)版,2009,16(2):38-44.
[5] 呼媛,李白田,胡炳檬,等.EZ-USBFX2固件與設(shè)備驅(qū)動(dòng)開發(fā)[J].微計(jì)算機(jī)信息,2010,26(7):162-164.
[6] CypressSemiconductorCorporation.EZ-USB FX2 Technical Reference Manual Version 2.2[Z],2003. ■