王敬華,劉 武,丁國清
(上海交通大學(xué) 儀器科學(xué)與工程系,上海 200240)
設(shè)計(jì)以上汽集團(tuán)采埃孚轉(zhuǎn)向系統(tǒng)有限公司的SKII生產(chǎn)線(下稱“目標(biāo)生產(chǎn)線”)為數(shù)據(jù)采集對象,目標(biāo)生產(chǎn)線采用BOSCH公司的擰緊器系統(tǒng),擰緊器系統(tǒng)由擰緊主軸、電源及伺服放大模塊、控制器、通訊單元、接口模塊和扭矩顯示模塊。擰緊器系統(tǒng)通過控制器(MCU)采集擰緊器的扭矩并顯示在LCD模塊上,是一個完整的加工系統(tǒng)。目標(biāo)生產(chǎn)線由BOSCH公司提供,其擰緊器控制器無法實(shí)現(xiàn)更改。隨著電子技術(shù)的不斷發(fā)展,在電子設(shè)計(jì)領(lǐng)域,采用FPGA技術(shù)往往能使設(shè)計(jì)系統(tǒng)簡便,在此背景下,為了實(shí)現(xiàn)目標(biāo)生產(chǎn)線扭矩值到服務(wù)器數(shù)據(jù)庫的傳輸,設(shè)計(jì)了以FPGA為核心的采集系統(tǒng)。
數(shù)據(jù)采集系統(tǒng)框架如圖1所示。
系統(tǒng)以現(xiàn)場可編程門陣列FPGA(Field Programmable Gate Array)為核心,利用FPGA可以方便實(shí)現(xiàn)數(shù)字器件的邏輯功能,可根據(jù)需要,現(xiàn)場改變硬件電路邏輯,大大縮短開發(fā)周期,降低成本減少PCB面積,提高系統(tǒng)的可靠性和可維護(hù)性。
圖1 數(shù)據(jù)采集系統(tǒng)總體框圖Fig.1 Structure diagram of the data acquisition system
MCU為所要采集的目標(biāo)對象,以總線方式進(jìn)行數(shù)據(jù)采集;系統(tǒng)的設(shè)計(jì)采用硬件編程語言VHDL,分模塊進(jìn)行設(shè)計(jì),包括MCU與FPGA接口邏輯電路設(shè)計(jì)、雙端口RAM數(shù)據(jù)緩存模塊、頂層狀態(tài)機(jī)控制模塊、UART數(shù)據(jù)發(fā)送模塊和時鐘分頻等模塊。整個系統(tǒng)由頂層狀態(tài)機(jī)進(jìn)行邏輯控制,系統(tǒng)上電后,總線上的數(shù)據(jù)通過接口邏輯電路解析,把數(shù)據(jù)緩存到雙端口RAM中,再通過UART發(fā)送模塊實(shí)現(xiàn)數(shù)據(jù)的串行發(fā)送。
下面分別介紹系統(tǒng)主要模塊的設(shè)計(jì),分為MCU與FPGA的邏輯接口模塊、雙端口RAM模塊,UART發(fā)送模塊、和狀態(tài)機(jī)控制模塊等。
已知P0口為數(shù)據(jù)為扭矩值,P0口作為地址/數(shù)據(jù)總線分時復(fù)用,通過設(shè)置寄存器來鎖存地址,通過控制總線設(shè)計(jì)電路邏輯,接口邏輯電路主要有3個輸出,分別是雙口RAM的寫允許信號RAM_WR、RAM的寫地址 RAM_ADDR和輸出數(shù)據(jù)RAM_DATA。圖2(a)為程序編譯得到接口邏輯框圖。
圖2 VHDL程序?qū)崿F(xiàn)的接口和雙端口RAM邏輯框圖Fig.2 Interface and dual port RAM logic diagram based on VHDL
clk為系統(tǒng)時鐘,datain[7.0]實(shí)現(xiàn)對單片機(jī) P0口總線數(shù)據(jù)的采集,in3為地址鎖存信號,in5、in7為其他控制信號。P0口數(shù)據(jù)位為目標(biāo)數(shù)據(jù),故設(shè)置8位寬地址鎖存單元Signal bus_addr:std_logic_vector(7 downto 0),用 in3 下降沿來鎖存數(shù)據(jù)地址;ram_wr為后端RAM的寫允許信號,地址鎖存后則把相應(yīng)的數(shù)據(jù)則通過 ram_data[7.0]緩存到 RAM的ram_addr[5.0]指定地址中。
采用FPGA的M4K單元,雙端口RAM形式緩存數(shù)據(jù),如圖 2(b)所示,輸入端口 data[7.0]和輸出端口 q[7.0]位寬均為8,端口的讀和寫采用一個同步時鐘clock,并且設(shè)置讀允許rden和寫允許wren信號,實(shí)現(xiàn)對雙端口RAM的讀寫。RAM 大小設(shè)為 64個 words,故寫地址 wraddress[5.0]和讀地址 rdaddress[5.0]寬度為 6。
通過語句 ram_wr=> ram_wren,,wren=> ram_wren,實(shí)現(xiàn)RAM的寫控制信號傳遞,滿足條件 in3_not_rise=‘1’and wr=‘0’時,令 ram_wr<= ‘1’,對 RAM 進(jìn)行寫操作,通過語句 ram_addr=> wraddress,wraddress=> wraddress; 確定數(shù)據(jù)寫的地址,把數(shù)據(jù)寫到RAM相應(yīng)的地址中,實(shí)現(xiàn)P0口數(shù)據(jù)的鎖存。
UART(Universal Asynchronous Receive Transmitter)即通用異步收發(fā)器,數(shù)據(jù)通過串口一位一位的傳輸。UART信號線上共有2種狀態(tài),邏輯1(高電平)和邏輯0(低電平)。在發(fā)送器空閑時,數(shù)據(jù)線保持高電平,當(dāng)有低電平出現(xiàn)時并保持一定的時間就認(rèn)為是起始位,一般為1位,對應(yīng)邏輯0。接著數(shù)據(jù)位一般為8位,低位在前高位在后。而后為校驗(yàn)位,用來判斷數(shù)據(jù)是否有誤,在使用中該位常取消。停止位在最后,一般為1位,其對應(yīng)邏輯為1。
由于要采集的總線數(shù)據(jù)為連續(xù)的多個字節(jié),采用FIFO來緩存數(shù)據(jù),通過語句data=>tx_fifo_din,wrreq=>tx_fifo_wr,來實(shí)現(xiàn)串口數(shù)據(jù)的緩存。FIFO邏輯框圖如圖3(b)所示。
圖3 VHDL編譯的串口發(fā)送模塊和FIFO模塊框圖Fig.3 Serial send and FIFOmodule logic diagram based on VHDL
圖3(a)為串行發(fā)送模塊程序編譯圖,并行數(shù)據(jù)通過tx_fifo_din[7.0]傳送到發(fā)送模塊,當(dāng) tx_fifo_wr <= '1, 即wrreq有效時把數(shù)據(jù)寫到FIFO中,通過串口發(fā)送模塊狀態(tài)機(jī)使rdreq有效讀取FIFO中的數(shù)據(jù),實(shí)現(xiàn)串行發(fā)送,系統(tǒng)波特率為9 600。
圖4 UART發(fā)送模塊仿真Fig.4 Simulation of the serial send module
圖 4(a)中 tx_fifo_din 輸入十進(jìn)制數(shù) 170,37 和 170,只有前2個數(shù)輸入時tx_fifo_wr有效從圖4(b)仿真結(jié)果可以清楚的看到UART發(fā)送器的輸出端sci_tx串行的輸出二進(jìn)制數(shù)10101010和00100101,轉(zhuǎn)換成十進(jìn)制即170和37,仿真結(jié)果正確。
設(shè)計(jì)系統(tǒng)的狀態(tài)機(jī)如圖5所示。
圖5 設(shè)計(jì)系統(tǒng)頂層狀態(tài)機(jī)Fig.5 Top statemachine of the design system
定義狀態(tài)機(jī)m_st,共有7個狀態(tài),t0至t6,系統(tǒng)首先復(fù)位然后進(jìn)入狀態(tài)t0,在此處對雙口RAM讀地址進(jìn)行初始化,確定RAM中第一個傳輸數(shù)據(jù)的地址,然后根據(jù)自定義的分頻上升沿clk_10ms_rise='1',當(dāng)此條件滿足時,跳轉(zhuǎn)到t1,并且對串行發(fā)送器的FIFO初始化即頭標(biāo)志字節(jié)十六進(jìn)制AA;t1狀態(tài)時發(fā)送FIFO頭標(biāo)志字節(jié)的寫入脈沖,然后跳轉(zhuǎn)到t2;t2狀態(tài)復(fù)位FIFO頭字節(jié)寫入脈沖,根據(jù)雙口RAM地址條件發(fā)送RAM讀脈沖,并跳轉(zhuǎn)到t3;t3狀態(tài)復(fù)位RAM讀脈沖,并跳轉(zhuǎn)到 t4;t4為延時狀態(tài),然后跳轉(zhuǎn)到t5;t5狀態(tài)再次發(fā)送FIFO寫脈沖并且把雙口RAM中相應(yīng)地址的數(shù)據(jù)寫到FIFO中,跳轉(zhuǎn)到t6狀態(tài);t6狀態(tài)復(fù)位FIFO寫脈沖,改變RAM的讀地址并循環(huán)跳轉(zhuǎn)到t2狀態(tài)。MCU總線上的數(shù)據(jù)按照相應(yīng)的地址緩存到RAM中,然后寫到串行發(fā)送器的FIFO中,而發(fā)送器只要FIFO中有數(shù)據(jù)就會按照順序串行的發(fā)送出去。
編寫 test程序,仿真結(jié)果為圖 6(a)所示,數(shù)據(jù)以十進(jìn)制顯示216為地址單元,9為相應(yīng)地址單元的數(shù)據(jù);217為地址,10為其相應(yīng)數(shù)據(jù),依次類推。通過總線端口dataout[7.0]把地址和數(shù)據(jù)發(fā)送到設(shè)計(jì)的采集系統(tǒng)中,系統(tǒng)輸出仿真結(jié)果為圖6(b),sci_tx為串行發(fā)送模塊的數(shù)據(jù)發(fā)送端口,高電平為1,低電平為0,幀格式采用1位低電平起始位,8位數(shù)據(jù),1位高電平停止位。數(shù)據(jù)以二進(jìn)制的形式讀出發(fā)送,00001001,0001010,00001011, 等依次對應(yīng)十進(jìn)制9,10,11 等。
圖6 VHDL程序仿真結(jié)果Fig.6 Result of the simulation based on VHDL
系統(tǒng)以FPGA為核心對MCU總線進(jìn)行數(shù)據(jù)采集,已經(jīng)應(yīng)用到上汽集團(tuán)采埃孚轉(zhuǎn)向系統(tǒng)有限公司的SKII生產(chǎn)線,實(shí)現(xiàn)了數(shù)據(jù)的采集,具有一定的穩(wěn)定性和準(zhǔn)確性。設(shè)計(jì)實(shí)現(xiàn)了MCS-51單片機(jī)總線數(shù)據(jù)采集的一種方法,在科研和實(shí)際工
業(yè)生產(chǎn)中具有一定的通用性和擴(kuò)展性,為數(shù)據(jù)采集提供了一個新思路。
[1]Cyclone IIDevice Handbook[S].Altera Corporation,2010.
[2]蘇航,張寧.FPGA實(shí)現(xiàn)UART和MCU一體化設(shè)計(jì)[J].現(xiàn)代電子技術(shù),2011,34(2):22-28.
SU Hang,ZHANG Ning.Integrated design of MCU and MCU based on FPGA[J].Modern Electronics and Technique,2011,34(2):22-28.
[3]李莉,路而紅.電子設(shè)計(jì)自動化(EDA)[M].北京:中國電力出版社,2009.
[4]胡漢才.單片機(jī)原理及其接口技術(shù)[M].2版.北京:清華大學(xué)出版社,2004.
[5]游至宇,董秀成,杜揚(yáng),等.單片機(jī)與FPGA/CPLD總線接口邏輯設(shè)計(jì)[J].單片機(jī)與嵌入式系統(tǒng)應(yīng)用,2008(1):121-123.
YOUZhi-yu,DONGXiu-cheng,DUYang,etal.Thebusinterface design between FPGA and single-chip microcomputer[J].Microcontrollers & Embedded System,2008(1):121-123 .
[6]劉鳳新,趙堅(jiān)固.基于FPGA的多路并行獨(dú)立串口的實(shí)現(xiàn)[J].儀表技術(shù)與傳感器,2010(11):44-46.
LIU Feng-xin,ZHAO Jian-gu.Implementation of independent multi-chanel parallel serial portbased on FPGA[J].Instrument Technical and Sensor,2010(11):44-46.