王珊珊,黨向婷,李 晨
(西安工業大學 北方信息工程學院 電子信息系,陜西 西安 710025)
CAN-bus(Controller Area Network)即控制器局域網,是國際上應用最廣泛的現場總線之一。CAN-bus是一種多主方式的串行通訊總線,基本設計規范要求有高的位速率,高抗電磁干擾性,而且能夠檢測出產生的任何錯誤。當信號傳輸距離達到10 km時,CAN-bus仍可提供高達5 kbps的數據傳輸速率。由于CAN串行通訊總線具有這些特性,它很自然地在汽車、制造業以及航空工業中受到廣泛應用。
主控制器是井下通訊控制系統的核心部分。它首先是一個集中控制臺,通過人工操作和自動控制命令輸出,對連接到本系統的被控設備下達控制命令,確保被控設備按指定的工作方式安全運行。主控制器的設計中采用32位嵌入式處理器 LPC2292[1]為控制器的CPU,它具有高達 60 MHz的主頻、極低的功耗和豐富的內部功能(兩路CAN2.0B控制器),成為控制器的首選處理器。主控制器和CAN總線智能節點的硬件電路圖如圖1所示。

圖1 CAN總線智能節點硬件電路圖Fig.1 Hardware circuit of intelligent node of CAN-bus
從圖1中可以看出,LPC2292的RD2,即CAN總線接收器輸入端通過JP200控制,當JP200打到1檔位,RD2經過100 kΩ的電阻和Rs端口相連,100K控制其斜率;LPC2292的TD2,即CAN發送器輸出和SN65HVD230的CAN控制器發送數據輸入端相連,進行數據交換。LPC2292的D21管腳,即外部存儲器數據線21和SN65HVD230的CAN總線接收數據輸出端相連,進行數據交換。
CAN總線收發器采用德州儀器公司生產的SN65HVD230。該芯片可用于較高干擾環境下,在不同的速率下均有良好的差分收發能力,最高速率可達1 Mb/s。SN65HVD230的引腳功能如表1所示。

表1 SN65HVD230的引腳功能表Tab.1 Pin-function table of SN65HVD23
CAN總線收發器[2]SN65HVD230具有高速、斜率和等待3種不同的工作模式。它的工作模式通過8引腳Rs來實現。從圖1中可以看出,Rs管腳通過JP201選擇不同的工作模式。當JP201打倒1檔位時,Rs管腳通過100 kΩ的電阻接地,該器件進入斜率控制模式,這種模式是為了降低因為電平的快速上升而引起的射頻干擾。當JP201打倒2檔位時,Rs管腳接3.3 V的邏輯高電平,該器件進入等待模式,處于待機狀態,系統只接收由主控制器發送過來的消息,收發器的發送功能處于關斷狀態。
CAN的底層驅動文件[3]主要是定義了用戶可以直接使用或修改的初始化CAN控制器函數InitCAN、發送數據函數CANSendData和CAN中斷服務程序。
CAN控制器初始化函數主要用來實現CAN工作時的參數設置,如果CAN控制器不經過初始化是不能夠進行工作。這些初始化的內容包括,硬件使能CAN、設置CAN報警界限、設置總線波特率、設置中斷工作方式、設置CAN驗收過濾器工作方式、設置CAN控制器的工作模式等。下列程序清單和圖2描述了初始化CAN控制器的全過程。



圖2 初始化CAN控制器的流程圖Fig.2 Flow chart of initialization of the CAN controller
1)HwEnCAN()函數用于硬件使能CAN控制器。它的入口參數是CAN通道號,其值應小于微處理器所含有的最大CAN模塊的數目CAN_MAX_NUM,設置為2,沒有出口函數,該函數用于將掉電的CAN控制器模塊重新上電。
2)SoftRstCAN()函數用于軟件復位CAN控制器。它的入口參數是CAN通道號,其值應小于微處理器所含有的最大CAN模塊的數目CAN_MAX_NUM,設置為2。如果出口函數等于0,成功進入工作模式;如果出口函數不等于0,進入工作模式失敗。該函數通過清零CAN模式寄存器的RM位(第0位)來使CAN進入工作狀態。
3)regCANEWL為CAN出錯警告界限寄存器。CANEWL寄存器設定一個Tx或Rx出錯閾值,可用于產生中斷。該寄存器可隨時讀取,但只能在CANMOD的RM位為1時寫入。
CANSendData()函數用于將數據發送到CAN總線。在用戶將數據經過打包后變成符合CAN發送幀格式[4]的數據后,可以調用本函數進行數據的發送。這個過程比較復雜,具體的流程圖見圖3所示。
首先,通過CAN狀態寄存器(CANSR)的TBS位來判斷數據緩存區是否空閑。如果緩存區沒有空閑,則返回“失敗”。如果空閑,繼續通過CANSR的TS位判斷CAN有沒有在發送狀態,并且通過CANSR的TBS位判斷CAN發送緩沖區是否鎖定。如果滿足條件,則發送幀信息。接下來,選擇發送到Tx緩沖區的內容,向CAN發送緩沖區Tx寫入發送數據。然后通過status判斷是否寫入成功。如果寫入失敗,返回 “失敗”。如果寫入成功,繼續判斷CAN是否屬于睡眠模式。如CAN屬于睡眠模式,則退出睡眠模式;如不屬于睡眠模式,繼續下一步。緊接著CAN控制器正常工作,啟動發送命令。判斷發送數據屬于哪一種模式。最后成功發送數據到CAN總線。

圖3 CAN發送數據流程圖Fig.3 Flow chart of the CAN sending data
在使用發送函數時有一點必須要注意,因為在啟動發送數據的命令后,CAN控制器[5]要將緩沖區內的數據發送完畢后,才會將該幀數據是否發送成功的狀態返回。如果在函數里一直等待數據發送完畢,會使整個微處理器的性能下降,所以為了避免這種情況,該函數在啟動發送后會立即返回。如果要得到成功發送的事件,需要配合發送中斷或利用查詢TCS(根據CAN通道的不同,分別為狀態寄存器CANSR的第3、11和19位)狀態位的方法來處理。
每個CAN控制器可產生3種中斷請求:接收、發送和“其他狀態”。發送中斷是3個Tx緩沖區發送中斷“或”的結果。每個控制器的各個接收和發送中斷請求在向量中斷控制器(VIC)中分配有不同的通路并擁有各自的中斷服務程序,這里就不加以詳細的說明了。
由于一個主控制器要控制多個智能設備的工作,當多個智能設備同時向主控制器發送數據時,容易產生總線沖突。因此在急停系統與主控制器的通信方面,將CAN總線應用層的全雙工方式改為半雙工方式。
主動式體現為在全雙工模式下[6],采用主控制器請求數據為主,智能設備主動送上傳輸數據為輔(要求主控制器確認)的方式。開始設想為這樣主控制器既可以控制信息的傳輸,又不必不斷地請求智能設備的變化數據,但卻忽視了全雙工方式使得通信雙方能在同一時刻進行發送和接收的操作,會降低數據傳輸的可靠性。雖然半雙工方式不能使主控制器和智能設備雙方同時收發數據,并且傳輸數據的處理速度比較低,但是卻可以大大提高數據傳輸的可靠性 。
[1]周立功等.ARM微控制器基礎與實戰[M].北京:北京航空航天大學出版社,2003.
[2]CAN-bus現場總線基礎方案-通訊片[R].廣州:廣州周立功單片機發展有限公司,2004.
[3]鄔寬明.CAN總線原理和應用系統設計[M].北京:北京航空航天大學出版,2002.
[4]徐釗,鄭紅黨,劉玉東.基于CAN總線的煤礦監測監控系統研究[J].中國礦業大學學報,2004,33(4):421-423.
XU Xiang,DAI Ben-qi.Research of coal-mine monitoring and measurement system base on CAN field bus[J].Journal of China University of Mining&Technology,2004,33(4):421-423.
[5]詹林.煤礦井下隔爆開關CAN總線接入的設計及實現[J].煤礦機械,2006,27(1):100-102.
ZHAN Ling.The design and realization of application of CAN bus in comprehensive protector switch of underground mine[J].Coal Mine Machinery,2006,27(1):100-102.
[6]吳彤峰,吳志強,李壯.基于CAN總線的挖掘機數據采集系統設計[J].廣西工學院學報,2010,21(2):60-64.
WU Tong-feng,WU Zhi-qiang,LI Zhuang.The design of CAN-bus of excvavtor in data acquisition system[J].Journal of Guangxi University of Technology,2010,21(2):60-64.