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