CAN總線以其高速率、遠距離、高可靠性和容錯能力強等優點,可取代RS485等傳統的通信方式,應用于煤礦井下的通信網絡中。本文設計了煤礦井下監測系統中與傳感器通信的CAN智能節點模塊,并給出了硬件電路和軟件設計方案。
1CAN總線簡介
CAN(Controller Area Network控制器局域網)在國外是發展最快的現場總線之一。CAN總線具有如下特點:目前為止惟一有國際標準的現場總線;數據傳輸距離遠(最遠可達10Km);數據傳輸速率高(最大可達到1Mbit/s);可靠的錯誤撿錯和處理機制;發送的信息遭到破壞后,可自動重發;節點在錯誤嚴重的情況下具有自動退出總線的功能;節點只需通過對報文的標識符濾波即可實現點對點、一點對多點及全局廣播等幾種方式發送接受數據;報文采用短幀結構,傳輸時間短,不易受干擾,數據出錯率低;通信介質可為雙絞線、同軸電纜或光纖,選擇靈活,組網方便。
2CAN智能節點模塊結構
CAN總線系統中共有兩種類型的節點:不帶微處理器的非智能節點和帶微處理器的智能節點,本文中設計的CAN節點是由微處理器和可編程的CAN控制芯片組成的智能節點。該CAN智能節點模塊主要由單片機、CAN控制器、CAN總線驅動器組成,該模塊實際上是一個雙向通信接口電路,CAN總線數據的接收、發送由“CAN協議控制器+CAN收發器”完成,RS232數據接收、發送由微處理器完成。微處理器負責根據協議實現數據打包、轉換、控制。
3硬件系統設計
3.1芯片選擇
(1)單片機的選擇。CAN智能節點模塊中單片機的功能主要是負責完成CAN通信協議,接收和發送采集到的數據,在此選擇具有ISP編程功能的STC89C516RD+作為該模塊的核心控制器件。
(2)CAN控制器的選擇。選擇Philips公司生產的獨立的CAN控制器SJA1000,它是PCA82C200 CAN控制器的替代產品,可以與多種類型的單片機、微型計算機的各類標準總線進行接口結合,主要用于移動目標和一般工業環境中的區域網絡控制。
(3)CAN總線驅動器的選擇。選擇CAN網絡中應用比較廣泛的CAN總線驅動器PCA82C250,該器件可以提供對總線信號的差動發送和接收功能。
(4)其它元器件的選擇。為了增強CAN總線節點的抗干擾能力,選擇高速光耦6N137作為SJA1000與PCA82C250之間的隔離模塊;由于光耦部分電路需要采用兩個完全隔離的電源,否則光耦也就失去了意義,在此選擇B0505S-W作為DC/DC電源隔離模塊。
3.2電路設計
SJA1000的AD0~AD7分別與STC89C516RD+的P00~P07相連接;SJA1000作為微控制器的外擴展芯片,其片選引腳CS接在STC89C516RD+的地址線上,從而決定了CAN控制器各寄存器的地址,CPU可通過這些地址對SJA1000執行相應的讀/寫操作;SJA1000的ALE、RD、WR和RESET直接與STC89C516RD+的ALE、RD、WR、RESET引腳相對連接;SJA1000的INT與STC89C516RD+的INT0相連接,使STC89C516RD+可以通過中斷方式對SJA1000進行訪問。
為了增強CAN總線節點的抗干擾能力,SJA1000的TX0和RX0并不是直接與CAN總線驅動器PCA82C250的TXD和RXD相連,而是通過高速光耦6N137后與PCA82C250相連。不過,光耦部分電路所采用的兩個電源VCC和VDD必須完全隔離,否則采用光耦也就失去了意義。電源的完全隔離采用小功率的電源隔離模塊B0505S-1W來實現。
另外,為了匹配總線阻抗,確保正常通信,需要在CAN總線兩端接兩個120Ω的電阻。
4軟件設計
4.1CAN智能節點初始化程序設計
(1)寫控制寄存器,使SJA1000進入復位工作模式。(2)對SJA1000的時鐘分頻寄存器定義,判斷是使用BasicCAN模式還是使用PeliCAN模式;是否使能CLOCKOUT及輸出時鐘頻率;是否使用旁路CAN輸入比較器;TX1輸出是否采用專門的接收中斷。(3)寫驗收代碼寄存器和驗收屏蔽寄存器,對驗收濾波器進行設置,使CAN控制器只允許接收標識碼位和驗收濾波器中預設值相一致的報文進入RXFIFO中。(4)寫總線定時寄存器定義總線的位速率、位周期內的采樣點和一個位周期的采樣數量。(5)通過寫輸出控制寄存器,定義CAN總線輸出管腳TX0、TX1的輸出模式和輸出配置。(6)寫控制寄存器,清除SJA1000的復位請求標志,進入正常工作模式。
4.2CAN通信報文發送程序設計
發送子程序負責節點報文的發送。發送時只需將待發送的數據按照特定格式組合成一幀報文,送入SJA1000發送緩沖區中,然后啟動SJA1000發送即可。當然在往SJA1000發送緩沖區發送報文之前,必須先做一些判斷。發送程序分發送遠程幀和數據幀兩種,遠程幀沒有數據場。
4.3CAN通信報文接收程序設計
接收子程序負責節點報文的接收以及其它情況處理。接收子程序比發送子程序要復雜一些,判斷SJA1000接收緩沖區中是否有有效報文主要有兩種方式:中斷方式和查詢方式,兩種工作方式編程的思路基本相同。在判斷接收緩沖區中有有效報文后采用查詢方式接收報文。