劉素華,沈三民,黃仁杰
(1.中北大學電子測試技術國家重點實驗室,山西 太原 030051;2.中北大學材料科學與工程學院,山西 太原 030051)
CAN總線是國際上應用廣泛的現場總線之一,是一種多主方式的串行通信總線,已被廣泛應用于汽車電子和航空等領域。C8051F040內部集成有博世CAN控制器的混合信號系統級芯片(SoC),能夠實現國際上標準的CAN傳輸協議本[1]。本系統通過C8051F040單片機和FPGA來實現模擬量數據和數字量數據的接收,并通過USB接口傳到上位機實時分析數據的準確性。
數據接收系統的主要作用是通過CAN總線接口接收來自其他設備的數字量和模擬量,并可以通過USB接口傳到上位機中,實時分析數據的可靠性。系統涉及到的主要模塊包括CAN總線接口模塊、C8051F040單片機控制模塊、FPGA主控模塊以及USB接口模塊。系統的總體設計框架如圖1所示。

圖1 系統的總體框圖
上位機通過FT245BM和底層硬件設備進行通信。FPGA中控單元主要是和FT245BM及單片機進行通信,并對有關數據接收、緩存、發送等操作進行控制。單片機內部集成了CAN控制器,通過CAN接口接收數字量數據和模擬量數據并傳送到FPGA控制單元。CAN總線收發器選用的是飛利浦公司生產的TJA1040。CAN總線控制器和CAN總線接口之間要通過高速光電耦合器6N137進行隔離,提高系統的抗干擾能力。信號傳輸易產生輻射和信號衰減,本文采用雙絞線外加金屬屏蔽層,可減少信號輻射,防止重要信息外泄,也可阻止外部電磁信號干擾的進入,同時使用屏蔽雙絞線比使用非屏蔽雙絞線具有更高的信號傳輸速率。
系統數據接收主要是通過C8051F040系列單片機內部集成的CAN模塊進行,其硬件電路接口如圖2所示。

圖2 C8051F040單片機接口電路
單片機C8051F040的CAN核控制器原理如圖3所示。

圖3 CAN控制器的原理框圖
在圖3中,接口單元是CPU接口;消息處理單元主要是通過狀態機控制數據從CAN核的輸入輸出移位寄存器和消息RAM之間傳輸;所有寄存器都用來控制和配置CAN模塊;CAN核控制器及輸入、輸出移位寄存器用于消息的串/并轉換及其他和協議相關的任務。CAN控制器的幀格式是系統自動生成的,不需要自己去設計幀格式,只需要往相關的寄存器中寫入相應的內容即可。
系統接收的數據采用的是標準幀,接收數據時,當接收到的消息仲裁和控制領域已經完全移到CAN核的Rx/Tx移位寄存器時,消息處理的優先狀態機便開始掃描消息RAM來匹配一個有效的消息對象。接收過濾的單元裝入CAN核移位寄存器中的仲裁位,然后消息對象的仲裁和屏蔽信息域裝入接收過濾單元并且和CAN核移位寄存器中的仲裁信息域相比較,直到找到匹配的消息對象。這種匹配會在所有的消息對象中重復。一旦匹配出現則停止掃描,進行消息處理。接收消息控制的流程如圖4所示。

圖4 接收消息控制流程圖
模擬量和數字量數據的接收以FPGA作為中央控制器。主要完成的功能有接收上位機命令、向單片機發送命令、接收單片機發送來的模擬量數據和數字量數據,并通過緩存模塊進行讀寫控制,將讀取到的數據混合編幀通過USB接口傳到上位機。FPGA主控模塊的原理如圖5所示。

圖5 FPGA主控模塊
如何在異步時鐘方式下實現同步是FPGA和單片機進行實時通信的關鍵點。對于異步接口,可以采用以下兩種方式避免亞穩態的發生:1)速率不匹配,需要緩存。可以選擇使用FIFO或者雙RAM口進行緩存。2)需要握手信號。可以使用雙握手信號,例如REQ和ACK等[2]。
在本文中,考慮到系統的使用性,FPGA向單片機發送數據主要為命令信號,需要進行握手協議。首先FPGA需要將命令信號放在數據線上,同時向單片機發送請求信號,當單片機接收到請求信號后,接收FPGA發送的命令,接收完畢后,向FPGA回傳應答信號。這樣完成一次命令的發送,以此類推,保證了數據發送的可靠性。
當單片機將收到的模擬量數據和數字量數據向FPGA進行傳送時,由于數據量較大,再使用握手信號來解決亞穩態狀態就已經不實用了。這時需要通過緩存RAM來解決亞穩態現象。在單片機和FPGA傳送數據時,每次發送一個數據,則需要編寫一個控制信號,本文是在wr信號的上升沿處向FPGA發送1 byte數據。
經過CAN總線傳過來的數字量和模擬量數據首先需要通過FPGA內部的RAM模塊進行緩存,FPGA通過監測緩存模塊的半滿信號進行讀取。在一般的電路設計中,只需要邏輯控制電路產生空信號和滿信號,考慮到實際情況,需要邏輯控制模塊產生半滿信號和滿信號。由于本文有兩種類型的數據,分別是模擬量數據和數字量數據。兩種類型的數據需要分別通過內部FIFO進行緩存。滿信號和半滿信號都是通過內部邏輯控制模塊產生的。當FULL=“1”時,停止向 RAM 中寫數;當 FULL=“0”時,同時檢測寫使能信號和寫控制信號的上升沿,當條件同時滿足時,則向RAM中寫數據,寫RAM控制流程圖見圖6所示。讀取RAM數據時,在復位的情況下,系統不做任何事情,當不復位的情況下,系統優先判斷模擬量數據緩存模塊的半滿信號,當moni_HF=“1”時,讀取一定容量的數據,并按著圖7的幀格式向上位機發送數據,當模擬量RAM沒有出現半滿時再判斷數字量RAM塊。從RAM塊讀取數據的流程圖見圖8,當都沒有出現半滿時則系統默認為復位狀態。

圖6 寫RAM塊控制流程

圖7 模擬量和數字量幀結構

圖8 讀RAM塊控制流程圖
在上位機實時監測時,傳到上位機中的數據既有模擬量也有數字量,為了能夠將所有數據均能夠實時地在上位機中顯示,通過幀頭幀尾來拆分。每一幀數據的幀頭均為CA AC,一旦出現E3 3E或者9D D9,說明一幀數據的結束。如果為E3 3E,則實時表示數字量數據,若為D9 D9,則實時表示模擬量數據。
本文是通過FT245BM和上位機進行通信的。硬件電路和上位機進行通信時的時序圖見圖9和圖10。


在圖9中,當FPGA檢測到TXE為低時,FT245BM允許接收數據緩沖區發送數據到USB端口,可以通過數據總線將數據發送到緩存區中,發出寫控制命令,即可發送數據;當TXE信號被硬件置高時,不能發送數據。圖10中,當FPGA檢測到RXF為低時,FT245BM內部發送緩沖區有來自USB接口的數據,發出讀控制命令,即可以從數據總線讀出數據。數據讀取結束,RXF信號硬件置高時,不能接收數據[3-4]。
為了保證接收數據和發送數據正確性,一定要將關鍵性信號進行濾波。比如TXE和RXF都必須進行濾波,否則的話,由于TXE和RXF這些信號的抖動,造成接收數據和發送數據的錯誤。
整套系統調試中連接其他設備,啟動整個系統進行工作,并通過上位機軟件讀取到的硬件電路發送過來的模擬量數據和數字量數據,原始數據見圖11。
本文主要是通過C8051F040單片機的CAN接口接收來自其他設備的模擬量數據和數字量數據,主要以單片機和FPGA為中心,實現了單片機和FPGA之間的通信,適當的采用了內部緩存和握手的方法大大減小了亞穩態造成的影響,并通過內部邏輯控制讀寫緩存中的數據,將模擬量和數字數據混合編幀,按著一定幀結構通過USB接口傳到上位機中。

圖11 上位機監測到的混合編幀數據
[1]饒運濤,鄒繼軍,鄭勇蕓.現場總線CAN原理和應用系統設計[M].北京:北京航空航天大學出版社,2003.
[2]吳曉蕻.跨時鐘若干問題的研究——同步與亞穩態[D].合肥:中國科學技術大學,2008.
[3]安榮,任勇峰,李圣昆.基于FPGA和USB2.0的數據采集系統[J].儀表技術與傳感器,2009(3):49-51.
[4]徐峰.基于FT245BM的多USB接口的實現[J].無錫職業技術學院學報,2008,7(2):41-43.