王敬華,劉 武,丁國清
(上海交通大學 儀器科學與工程系,上海 200240)
設計以上汽集團采埃孚轉向系統有限公司的SKII生產線(下稱“目標生產線”)為數據采集對象,目標生產線采用BOSCH公司的擰緊器系統,擰緊器系統由擰緊主軸、電源及伺服放大模塊、控制器、通訊單元、接口模塊和扭矩顯示模塊。擰緊器系統通過控制器(MCU)采集擰緊器的扭矩并顯示在LCD模塊上,是一個完整的加工系統。目標生產線由BOSCH公司提供,其擰緊器控制器無法實現更改。隨著電子技術的不斷發展,在電子設計領域,采用FPGA技術往往能使設計系統簡便,在此背景下,為了實現目標生產線扭矩值到服務器數據庫的傳輸,設計了以FPGA為核心的采集系統。
數據采集系統框架如圖1所示。
系統以現場可編程門陣列FPGA(Field Programmable Gate Array)為核心,利用FPGA可以方便實現數字器件的邏輯功能,可根據需要,現場改變硬件電路邏輯,大大縮短開發周期,降低成本減少PCB面積,提高系統的可靠性和可維護性。

圖1 數據采集系統總體框圖Fig.1 Structure diagram of the data acquisition system
MCU為所要采集的目標對象,以總線方式進行數據采集;系統的設計采用硬件編程語言VHDL,分模塊進行設計,包括MCU與FPGA接口邏輯電路設計、雙端口RAM數據緩存模塊、頂層狀態機控制模塊、UART數據發送模塊和時鐘分頻等模塊。整個系統由頂層狀態機進行邏輯控制,系統上電后,總線上的數據通過接口邏輯電路解析,把數據緩存到雙端口RAM中,再通過UART發送模塊實現數據的串行發送。
下面分別介紹系統主要模塊的設計,分為MCU與FPGA的邏輯接口模塊、雙端口RAM模塊,UART發送模塊、和狀態機控制模塊等。
已知P0口為數據為扭矩值,P0口作為地址/數據總線分時復用,通過設置寄存器來鎖存地址,通過控制總線設計電路邏輯,接口邏輯電路主要有3個輸出,分別是雙口RAM的寫允許信號RAM_WR、RAM的寫地址 RAM_ADDR和輸出數據RAM_DATA。圖2(a)為程序編譯得到接口邏輯框圖。

圖2 VHDL程序實現的接口和雙端口RAM邏輯框圖Fig.2 Interface and dual port RAM logic diagram based on VHDL
clk為系統時鐘,datain[7.0]實現對單片機 P0口總線數據的采集,in3為地址鎖存信號,in5、in7為其他控制信號。P0口數據位為目標數據,故設置8位寬地址鎖存單元Signal bus_addr:std_logic_vector(7 downto 0),用 in3 下降沿來鎖存數據地址;ram_wr為后端RAM的寫允許信號,地址鎖存后則把相應的數據則通過 ram_data[7.0]緩存到 RAM的ram_addr[5.0]指定地址中。
采用FPGA的M4K單元,雙端口RAM形式緩存數據,如圖 2(b)所示,輸入端口 data[7.0]和輸出端口 q[7.0]位寬均為8,端口的讀和寫采用一個同步時鐘clock,并且設置讀允許rden和寫允許wren信號,實現對雙端口RAM的讀寫。RAM 大小設為 64個 words,故寫地址 wraddress[5.0]和讀地址 rdaddress[5.0]寬度為 6。
通過語句 ram_wr=> ram_wren,,wren=> ram_wren,實現RAM的寫控制信號傳遞,滿足條件 in3_not_rise=‘1’and wr=‘0’時,令 ram_wr<= ‘1’,對 RAM 進行寫操作,通過語句 ram_addr=> wraddress,wraddress=> wraddress; 確定數據寫的地址,把數據寫到RAM相應的地址中,實現P0口數據的鎖存。
UART(Universal Asynchronous Receive Transmitter)即通用異步收發器,數據通過串口一位一位的傳輸。UART信號線上共有2種狀態,邏輯1(高電平)和邏輯0(低電平)。在發送器空閑時,數據線保持高電平,當有低電平出現時并保持一定的時間就認為是起始位,一般為1位,對應邏輯0。接著數據位一般為8位,低位在前高位在后。而后為校驗位,用來判斷數據是否有誤,在使用中該位常取消。停止位在最后,一般為1位,其對應邏輯為1。
由于要采集的總線數據為連續的多個字節,采用FIFO來緩存數據,通過語句data=>tx_fifo_din,wrreq=>tx_fifo_wr,來實現串口數據的緩存。FIFO邏輯框圖如圖3(b)所示。

圖3 VHDL編譯的串口發送模塊和FIFO模塊框圖Fig.3 Serial send and FIFOmodule logic diagram based on VHDL
圖3(a)為串行發送模塊程序編譯圖,并行數據通過tx_fifo_din[7.0]傳送到發送模塊,當 tx_fifo_wr <= '1, 即wrreq有效時把數據寫到FIFO中,通過串口發送模塊狀態機使rdreq有效讀取FIFO中的數據,實現串行發送,系統波特率為9 600。

圖4 UART發送模塊仿真Fig.4 Simulation of the serial send module
圖 4(a)中 tx_fifo_din 輸入十進制數 170,37 和 170,只有前2個數輸入時tx_fifo_wr有效從圖4(b)仿真結果可以清楚的看到UART發送器的輸出端sci_tx串行的輸出二進制數10101010和00100101,轉換成十進制即170和37,仿真結果正確。
設計系統的狀態機如圖5所示。

圖5 設計系統頂層狀態機Fig.5 Top statemachine of the design system
定義狀態機m_st,共有7個狀態,t0至t6,系統首先復位然后進入狀態t0,在此處對雙口RAM讀地址進行初始化,確定RAM中第一個傳輸數據的地址,然后根據自定義的分頻上升沿clk_10ms_rise='1',當此條件滿足時,跳轉到t1,并且對串行發送器的FIFO初始化即頭標志字節十六進制AA;t1狀態時發送FIFO頭標志字節的寫入脈沖,然后跳轉到t2;t2狀態復位FIFO頭字節寫入脈沖,根據雙口RAM地址條件發送RAM讀脈沖,并跳轉到t3;t3狀態復位RAM讀脈沖,并跳轉到 t4;t4為延時狀態,然后跳轉到t5;t5狀態再次發送FIFO寫脈沖并且把雙口RAM中相應地址的數據寫到FIFO中,跳轉到t6狀態;t6狀態復位FIFO寫脈沖,改變RAM的讀地址并循環跳轉到t2狀態。MCU總線上的數據按照相應的地址緩存到RAM中,然后寫到串行發送器的FIFO中,而發送器只要FIFO中有數據就會按照順序串行的發送出去。
編寫 test程序,仿真結果為圖 6(a)所示,數據以十進制顯示216為地址單元,9為相應地址單元的數據;217為地址,10為其相應數據,依次類推。通過總線端口dataout[7.0]把地址和數據發送到設計的采集系統中,系統輸出仿真結果為圖6(b),sci_tx為串行發送模塊的數據發送端口,高電平為1,低電平為0,幀格式采用1位低電平起始位,8位數據,1位高電平停止位。數據以二進制的形式讀出發送,00001001,0001010,00001011, 等依次對應十進制9,10,11 等。

圖6 VHDL程序仿真結果Fig.6 Result of the simulation based on VHDL
系統以FPGA為核心對MCU總線進行數據采集,已經應用到上汽集團采埃孚轉向系統有限公司的SKII生產線,實現了數據的采集,具有一定的穩定性和準確性。設計實現了MCS-51單片機總線數據采集的一種方法,在科研和實際工
業生產中具有一定的通用性和擴展性,為數據采集提供了一個新思路。
[1]Cyclone IIDevice Handbook[S].Altera Corporation,2010.
[2]蘇航,張寧.FPGA實現UART和MCU一體化設計[J].現代電子技術,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]李莉,路而紅.電子設計自動化(EDA)[M].北京:中國電力出版社,2009.
[4]胡漢才.單片機原理及其接口技術[M].2版.北京:清華大學出版社,2004.
[5]游至宇,董秀成,杜揚,等.單片機與FPGA/CPLD總線接口邏輯設計[J].單片機與嵌入式系統應用,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]劉鳳新,趙堅固.基于FPGA的多路并行獨立串口的實現[J].儀表技術與傳感器,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.