摘 要: 一種采用獨(dú)立總線控制器SJA1000和8位單片機(jī)89C51" title="89C51">89C51組成的CAN總線智能節(jié)點(diǎn)" title="智能節(jié)點(diǎn)">智能節(jié)點(diǎn)的實(shí)現(xiàn)方法,,詳細(xì)介紹了智能節(jié)點(diǎn)的硬件電路" title="硬件電路">硬件電路組成及抗干擾設(shè)計(jì),,給出的初始化程序以及接收和發(fā)送程序流程適用于89C51和其他8位或16位計(jì)算機(jī),。
關(guān)鍵詞: SJA1000 CAN總線 智能節(jié)點(diǎn) 89C51 單片機(jī)
控制器局域網(wǎng)絡(luò)CAN(Controller Area Network)是一種具有國際標(biāo)準(zhǔn)" title="國際標(biāo)準(zhǔn)">國際標(biāo)準(zhǔn)、性價(jià)比較高的現(xiàn)場總線,。CAN是1986年由Bosch公司領(lǐng)先推出的一種最初應(yīng)用于現(xiàn)代汽車微控制器通信的多主機(jī)局部網(wǎng),,實(shí)現(xiàn)車載各類電子控制裝置之間的信息交換。由于其獨(dú)特靈活的設(shè)計(jì),、高的位速率,、高抗電磁干擾性、極高的可靠性和低廉的價(jià)格等卓越的性能,,現(xiàn)已在工業(yè)控制,、智能大廈、小區(qū)安防,、交通工具,、醫(yī)療儀器、環(huán)境監(jiān)控等眾多領(lǐng)域推廣應(yīng)用,。國際標(biāo)準(zhǔn)組織ISO為其制訂了規(guī)范CAN總線的國際標(biāo)準(zhǔn),,CAN已被公認(rèn)為幾種最有前途的現(xiàn)場總線之一。它在當(dāng)今自動(dòng)控制領(lǐng)域的發(fā)展中將發(fā)揮出越來越重要的作用,。
CAN協(xié)議建立在國際標(biāo)準(zhǔn)組織ISO的開放系統(tǒng)互連參考模型OSI基礎(chǔ)上,,主要工作在物理層、數(shù)據(jù)鏈路層和應(yīng)用層,。用戶可在其基礎(chǔ)上開發(fā)適合實(shí)際系統(tǒng)需要的應(yīng)用層通信協(xié)議,。信號的傳輸一般采用雙絞線、同軸電纜或光纖,。CAN總線系統(tǒng)通信距離遠(yuǎn),,通信速率高,最高通信速率可達(dá)1Mbps,;當(dāng)信號傳輸距離達(dá)到10km時(shí),,仍可提供高達(dá)5kbps的數(shù)據(jù)傳輸速率。CAN總線的這一特點(diǎn),,使其更利于構(gòu)成大系統(tǒng),。
CAN系統(tǒng)由CAN網(wǎng)絡(luò)節(jié)點(diǎn)、轉(zhuǎn)發(fā)器節(jié)點(diǎn)和上位機(jī)構(gòu)成,。節(jié)點(diǎn)是網(wǎng)絡(luò)上信息的接收和發(fā)送站,,CAN總線上的網(wǎng)絡(luò)節(jié)點(diǎn)可多達(dá)110個(gè),。所謂智能節(jié)點(diǎn)是由微控制器與可編程的CAN控制器組成,目前市面上有兩類CAN總線器件可供選擇:一類是兼有微控制器和CAN功能的器件,,如P8XC591/2,、87C196CA/CB、MC68376,、PowerPC555等,,使用這種集成器件電路更緊湊,方便用戶制作印制板,;另一類是獨(dú)立的CAN控制器,,如Philips公司的SJA1000、Intel公司82526以及MCP2510等,。使用獨(dú)立的CAN控制器便于系統(tǒng)開發(fā)人員根據(jù)需要選擇合適的單片機(jī),,構(gòu)成更靈活、更理想的系統(tǒng)設(shè)計(jì)方案,。本文介紹采用CAN通信控制芯片SJA1000與單片機(jī)接口構(gòu)成的CAN總線系統(tǒng)智能節(jié)點(diǎn),。
1 CAN總線系統(tǒng)智能節(jié)點(diǎn)硬件組成
CAN總線上的節(jié)點(diǎn)一方面擔(dān)負(fù)著與總線上其他智能設(shè)備的通信聯(lián)絡(luò),同時(shí)還要完成連接到本節(jié)點(diǎn)上儀器設(shè)備的數(shù)據(jù)采集與控制,,所以該節(jié)點(diǎn)應(yīng)是帶有微處理器的智能節(jié)點(diǎn),。CAN總線智能節(jié)點(diǎn)的硬件組成如圖1所示。圖中,,虛線框內(nèi)的部分是智能節(jié)點(diǎn)硬件結(jié)構(gòu),,點(diǎn)劃線以左部分是節(jié)點(diǎn)為擔(dān)負(fù)監(jiān)控任務(wù)而設(shè)的接口。本文只討論圖1虛線框內(nèi)點(diǎn)劃線以右部分,,即由微處理器,、CAN通信控制器" title="通信控制器">通信控制器、光電隔離器以及總線收發(fā)器等組成的智能節(jié)點(diǎn)的通信部分,。
1.1 SJA1000功能簡介
SJA1000是Philips公司推出的獨(dú)立CAN通信控制器,,主要由CAN核心模塊、接口管理邏輯,、發(fā)送緩沖區(qū),、接收FIFO、驗(yàn)收濾波器等幾部分組成,。其硬件結(jié)構(gòu)框圖如圖2所示。
SJA1000的CAN核心模塊負(fù)責(zé)CAN信息幀的收發(fā)和CAN協(xié)議的實(shí)現(xiàn),;接口管理邏輯負(fù)責(zé)與微處理器的接口,,該單元中的每個(gè)寄存器都可由微處理器通過SJA1000 的地址/數(shù)據(jù)總線訪問;發(fā)送緩沖區(qū)可存儲(chǔ)一個(gè)長度為13B的信息幀,。微處理器可將待發(fā)送的標(biāo)識(shí)符和數(shù)據(jù)直接送入發(fā)送緩沖區(qū),,然后通過對命令寄存器CMR中的發(fā)送請求位TR置位,啟動(dòng)CAN核心模塊自行將發(fā)送緩沖區(qū)中的數(shù)據(jù)讀出,并按CAN協(xié)議裝配成完整的CAN信息幀,,通過收發(fā)器發(fā)往總線,。由總線接收的信息經(jīng)驗(yàn)收濾波器過濾,無差錯(cuò)的信息幀被送入接收FIFO緩沖區(qū),。同時(shí)將狀態(tài)標(biāo)志SR.0置位,,表明接收緩沖區(qū)中已有成功接收的信息幀。微處理器可依據(jù)SR.0的狀態(tài),,判斷是否將FIFO中的數(shù)據(jù)讀入微處理器進(jìn)行相應(yīng)處理,。
?
1.2 CAN總線智能節(jié)點(diǎn)硬件電路及工作原理
本文介紹的智能節(jié)點(diǎn)由微處理器89C51、CAN通信控制器SJA1000,、高速光電耦合器TLP113,、CAN總線收發(fā)器82C251以及監(jiān)控接口電路等部分組成。硬件電路如圖3所示(不含與監(jiān)控有關(guān)的接口電路),。
由于SJA1000只需8位數(shù)據(jù)/地址線,,所以若節(jié)點(diǎn)的監(jiān)控部分無特殊要求,則系統(tǒng)可采用8位微處理器,。本設(shè)計(jì)采用89C51作為智能節(jié)點(diǎn)的微處理器,,負(fù)責(zé)CAN通信控制器SJA1000的初始化、通信數(shù)據(jù)處理以及其他監(jiān)控任務(wù)的執(zhí)行,。89C51采用外部時(shí)鐘方式,,將SJA1000的CLKOUT端與89C51的XTAL1端相連,利用SJA1000的時(shí)鐘輸出作為89C51的時(shí)鐘信號,,使二者在同一時(shí)鐘控制下工作,。
系統(tǒng)共用一個(gè)復(fù)位電路,由于89C51是高電平復(fù)位,,而SJA1000是低電平復(fù)位,,單片機(jī)的復(fù)位信號經(jīng)反相后才可滿足SJA1000復(fù)位信號的要求。SJA1000的選通采用線選方式,,當(dāng)89C51的P2.7為“0”時(shí)選通該控制器,,配合ALE和讀寫信號便可實(shí)現(xiàn)MPU對SJA1000的訪問。為對其他節(jié)點(diǎn)傳來的數(shù)據(jù)及時(shí)作出響應(yīng),,智能節(jié)點(diǎn)工作在中斷方式下,,當(dāng)通信控制器接收到其他節(jié)點(diǎn)傳來的數(shù)據(jù)時(shí),SJA1000的中斷輸出就會(huì)被激活,,在引腳上出現(xiàn)一個(gè)由高到低的電平躍變,,從而引發(fā)微處理器89C51產(chǎn)生中斷,通過中斷服務(wù)程序接收一幀信息并進(jìn)行分析處理,,以及進(jìn)行CAN總線錯(cuò)誤中斷類型判斷和誤碼糾正,。
本電路采用高性能的PCA82C251 CAN總線收發(fā)器作為SJA1000和物理傳輸線路之間的接口,,PCA82C251可以工作在額定電壓是24V的CAN總線系統(tǒng)中,對總線提供差動(dòng)發(fā)送能力,,對CAN控制器提供差動(dòng)接收能力,。該器件符合ISO11898標(biāo)準(zhǔn),可以用高達(dá)1Mbps的位速率在一對總線電纜上以差動(dòng)方式傳輸數(shù)據(jù),。82C251第8腳與地之間應(yīng)接一個(gè)斜率電阻RS,,其大小由總線通信速率決定。當(dāng)RS=0,,即把該引腳直接與地相連,,系統(tǒng)將處于高速工作方式。在這種方式下,,為避免射頻干擾,,建議使用屏蔽電纜作總線。與高速方式相對應(yīng)的另一種工作方式是斜率控制方式,。斜率控制方式適用于波特率較低,、總線較短的情況,傳送信號上升和下降的斜率取決于RS的阻值,。通常RS的取值范圍在16k~200kΩ,,電阻大小可根據(jù)需要調(diào)整。在斜率控制方式下,,總線可以使用平行線或雙絞線,。
1.3 智能節(jié)點(diǎn)的抗干擾措施
為增強(qiáng)CAN總線節(jié)點(diǎn)的抗干擾能力,SJA1000的TX0和RX0并不直接與82C251的TXD和RXD相連,,而是通過高速光耦TLP113與82C251相連,,這樣就很好地實(shí)現(xiàn)了收發(fā)器與控制器之間的電氣隔離,保護(hù)智能節(jié)點(diǎn)核心電路安全工作,,并實(shí)現(xiàn)了總線上各CAN節(jié)點(diǎn)間的電氣隔離,。需要強(qiáng)調(diào)的是,為實(shí)現(xiàn)這種電氣隔離,,光耦器件兩側(cè)的直流電源VCC和VDD必須是兩個(gè)無直接電氣聯(lián)系,、相互隔離的直流電源,否則就失去了采用光耦的意義,。這可采用多5V隔離輸出的DC-DC變換隔離電源實(shí)現(xiàn),。同理,為保證這一目的的實(shí)現(xiàn),,在智能節(jié)點(diǎn)的監(jiān)控部分也要采取同樣的隔離措施,。
為進(jìn)一步加強(qiáng)智能節(jié)點(diǎn)的安全性和抗干擾能力,可在總線收發(fā)器82C51與CAN總線的聯(lián)接之間串入阻值為5~10Ω的2個(gè)小電阻R8,、R9,,以起到一定的限流作用,避免82C250受過流沖擊,。此外,,也可在總線入口處并接雙向穩(wěn)壓管,限制線路上可能出現(xiàn)的短時(shí)尖峰過電壓,。同時(shí),,在CANH和CANL與地之間并聯(lián)了2個(gè)30pF的小電容C4和C5,可以起到濾除總線上的高頻干擾,,并具備一定的防電磁輻射能力,。此外,通信信號在線路上傳輸時(shí),,信號傳輸?shù)綄?dǎo)線的端點(diǎn)時(shí)會(huì)發(fā)生反射,,反射信號會(huì)干擾正常信號的傳輸。為消除這種影響,,可在CAN總線兩端并接2個(gè)120Ω的電阻R10,、R11,起到匹配總線阻抗和消除反射的雙重作用,。若忽略這些措施,,會(huì)使數(shù)據(jù)通信的抗干擾性和可靠性大大降低,甚至無法通信,。此外,,為防止干擾出現(xiàn)死機(jī)現(xiàn)象,還可采用看門狗電路等監(jiān)控措施,,增加系統(tǒng)的可靠性,。
2 CAN總線智能節(jié)點(diǎn)軟件設(shè)計(jì)
CAN總線智能節(jié)點(diǎn)的軟件設(shè)計(jì)主要包括:節(jié)點(diǎn)初始化、報(bào)文發(fā)送和報(bào)文接收三部分,。
2.1 CAN總線節(jié)點(diǎn)初始化程序
節(jié)點(diǎn)的初始化主要是指系統(tǒng)上電后對微處理器89C51和CAN控制器SJA1000進(jìn)行的初始化,,以確定工作主頻、波特率和輸出特性等,。對89C51的初始化可結(jié)合其監(jiān)控任務(wù)進(jìn)行,,主要是對中斷允許與屏蔽、中斷優(yōu)先級,、定時(shí)器的使用與設(shè)置等,,這與單片機(jī)的一般應(yīng)用相同,這里不作介紹,。此處主要介紹SJA1000的初始化,。由于SJA1000內(nèi)部無微處理器,故其初始化仍要通過89C51對其進(jìn)行編程實(shí)現(xiàn),。初始化程序流程如圖4所示,。SJA1000的初始化應(yīng)在復(fù)位模式下進(jìn)行,,所以在SJA1000初始化程序中首先要將工作方式置為復(fù)位模式,之后要設(shè)置驗(yàn)收濾波方式,、驗(yàn)收屏蔽寄存器(AMR)和驗(yàn)收代碼寄存器(ACR),、波特率參數(shù)和中斷允許寄存器(IER)等。CAN協(xié)議物理層中的同步跳轉(zhuǎn)寬度和通信波特率的大小由定時(shí)寄存器BTR0,、BTR1的內(nèi)容決定,。需要指出的是:對于一個(gè)系統(tǒng)中的所有節(jié)點(diǎn),這兩個(gè)寄存器的內(nèi)容必須相同,,否則將無法進(jìn)行通信,。初始化設(shè)置完成后,將復(fù)位請求位置“0”,,SJA1000就可以進(jìn)入工作狀態(tài),,執(zhí)行正常的通信任務(wù)。
2.2 報(bào)文發(fā)送程序
發(fā)送程序負(fù)責(zé)節(jié)點(diǎn)報(bào)文的發(fā)送,。發(fā)送時(shí)用戶只需將待發(fā)送的數(shù)據(jù)按特定格式組合成一幀報(bào)文,,送入SJA1000發(fā)送緩存區(qū)中,并將SJA1000的命令寄存器發(fā)送請求標(biāo)志位(TR)置位,。SJA1000會(huì)自動(dòng)啟動(dòng)發(fā)送過程,。但是,在往SJA1000發(fā)送緩存區(qū)送報(bào)文之前,,必須先對發(fā)送緩沖器是否釋放進(jìn)行判斷,,只有當(dāng)發(fā)送緩沖器標(biāo)志(TBS)為“1”時(shí),發(fā)送緩沖器才被釋放,,可將新報(bào)文寫入發(fā)送緩存,,否則,在發(fā)送緩沖器被鎖定時(shí),,新報(bào)文是不能被寫入發(fā)送緩沖器的,。發(fā)送程序分?jǐn)?shù)據(jù)幀和發(fā)送遠(yuǎn)程幀兩種。遠(yuǎn)程幀無數(shù)據(jù)場,。發(fā)送程序一般編寫成子程序的形式,。數(shù)據(jù)幀發(fā)送子程序流程圖如圖5所示。
?
?
2.3 報(bào)文接收程序
SJA1000的報(bào)文接收是由其自身獨(dú)立完成的,,其接收的報(bào)文經(jīng)濾波驗(yàn)收后,,暫存在接收緩沖器FIFO中。當(dāng)報(bào)文進(jìn)入接收緩沖器后,,狀態(tài)寄存器SR的接收緩沖器狀態(tài)位RBS被置“1”,,同時(shí)若中斷使能寄存器IER的接收中斷使能位RIE被設(shè)為“1”時(shí),中斷寄存器的RI位也被置“1”,SJA1000向CPU提出中斷請求,。SJA1000的報(bào)文接收可采用中斷接收方式或查詢接收方式,。若對通信的實(shí)時(shí)性要求不是很強(qiáng)則可采用查詢接收方式。兩種接收方式編程的思路基本相同,。圖6給出了工作在中斷方式下的報(bào)文接收中斷服務(wù)程序流程,。接收程序較發(fā)送程序的設(shè)計(jì)稍復(fù)雜些,。一方面,,在報(bào)文接收過程中,智能節(jié)點(diǎn)的微處理器負(fù)責(zé)將FIFO中的報(bào)文讀入CPU的內(nèi)存并進(jìn)行處理,;另一方面還要在處理接收報(bào)文的過程中同時(shí)對諸如總線脫離,、錯(cuò)誤報(bào)警、接收溢出等情況進(jìn)行判斷與處理,。
本文介紹了基于SJA1000的CAN總線智能節(jié)點(diǎn)硬件電路的組成及與通信相關(guān)的程序流程,。限于篇幅,略去了具體的程序,,讀者可結(jié)合SJA1000的結(jié)構(gòu)與功能,,根據(jù)流程圖寫出適合自己要求的程序。
參考文獻(xiàn)
1 鄔寬明.CAN總線原理和應(yīng)用系統(tǒng)設(shè)計(jì).北京:北京航空航天大學(xué)出版社,,1996
2 史久根,,張培仁,陳真勇.CAN現(xiàn)場總線系統(tǒng)設(shè)計(jì)技術(shù).北京:國防工業(yè)出版社,,2004
3 PHILIPS Corporation.SJA1000 stand-alone CAN controller product specification.2000