1 引言
CAN總線,即控制器局域網(wǎng)總線,是一種有效支持分布式控制或?qū)崟r(shí)控制的串行通信網(wǎng)絡(luò)。由于其高性能、高可靠性及獨(dú)特的設(shè)計(jì)和適宜的價(jià)格,而廣泛應(yīng)用于工業(yè)現(xiàn)場控制、智能樓宇、醫(yī)療器械、交通工具以及傳感器等領(lǐng)域,并已被公認(rèn)為幾種有前途的現(xiàn)場總線之一。
目前CAN系統(tǒng)使用較多的是獨(dú)立CAN控制器,利用單片機(jī)的并口控制CAN控制器,除了8條數(shù)據(jù)線外,還需要幾條控制線。采取這樣的設(shè)計(jì)不但占用了單片機(jī)的引腳,而且增加了電路板的面積。同時(shí),由于采用了并行通訊,降低了系統(tǒng)的可靠性,因此,采取系統(tǒng)內(nèi)部集成CAN控制器的單片機(jī)勢在必行。
本文已Cygnal公司的內(nèi)部集成CAN控制器的C8051F040單片機(jī)為基礎(chǔ),介紹了CAN總線的通訊接口的具體設(shè)計(jì)及其應(yīng)用。由于采用了集成CAN控制器的單片機(jī),大大簡化了電路,同時(shí)也提高了系統(tǒng)的可靠性。
2 C8051F040集成的CAN控制器
C8051040內(nèi)部集成CAN控制器,他兼容CAN技術(shù)規(guī)范2.0A和2.0B主要由CAN內(nèi)核、消息RAM(獨(dú)立于CIP-51的RAM)、消息處理單元和控制寄存器組成,圖1所示是C8051F040的內(nèi)部的CAN總線結(jié)構(gòu)圖。
圖1中,CAN內(nèi)核由CAN協(xié)議控制器和負(fù)責(zé)消息收發(fā)的串行/并行轉(zhuǎn)換RX/TX移位寄存器組成,消息RAM用于存儲消息目標(biāo)和每個(gè)目標(biāo)的仲裁掩碼。這種CAN處理器有32個(gè)隨意配置為發(fā)送和接收的消息目標(biāo),并且每一個(gè)消息目標(biāo)都有他自己的識別掩碼,所有的數(shù)據(jù)傳輸和接收濾波都是由CAN控制器完成的,而不是由CIP-51來完成。CAN內(nèi)部寄存器中存儲了所有CAN的控制和配置信息,其中包括控制寄存器、狀態(tài)寄存器、設(shè)置波特率的位定時(shí)寄存器,測試寄存器、錯(cuò)誤計(jì)數(shù)器和消息接口寄存器。通常CAN內(nèi)核不能直接訪問消息RAM,而必須通過接口寄存器IF1或IF2來訪問。另外,CIP51的SFR并不不能直接訪問CAN內(nèi)部寄存器的所有單元,其配置CAN、消息目標(biāo)、讀取CAN狀態(tài)以及獲取接收數(shù)據(jù)、傳遞發(fā)送數(shù)據(jù)都由SFR中的6個(gè)特殊寄存器來完成,其中CAN0CN,CAN0TST和CAN0STA三個(gè)寄存器可直接獲取或修改CAN控制器中對應(yīng)的寄存器,而CAN0DATH,CAN0ATL,CAN0ADR三個(gè)寄存器主要用來訪問修改其他不能直接訪問的CAN內(nèi)部寄存器,其中CAN0ADR用來指出要訪問寄存器的地址,CA0DATH,CAN0DATL這時(shí)就相當(dāng)于要訪問的16位寄存器的高低字節(jié)的映射寄存器,而對他們的讀寫則相當(dāng)于所指向寄存器的讀寫。
圖2給出了CIP-51如何訪問CAN中控制寄存器和每個(gè)消息的路徑圖。消息處理單元用于根據(jù)寄存器中的消息來控制CAN內(nèi)核中移位寄存器和消息RAM之間的數(shù)據(jù)傳遞,同時(shí),他還可用來管理中斷的產(chǎn)生。
3 智能節(jié)點(diǎn)通訊部分的硬件設(shè)計(jì)
C8051F040中內(nèi)置CAN總線協(xié)議控制器,只要外接總線驅(qū)動芯片和適當(dāng)?shù)目垢蓴_電路就可方便地建立一個(gè)實(shí)用的CAN總線智能測控節(jié)點(diǎn)。本文采用PHILIP公司的TJA1050T CAN總線驅(qū)動器,硬件原理圖如圖3所示。
為了增強(qiáng)CAN總線節(jié)點(diǎn)的抗干擾能力,可以采取以下措施:
(1)F040的TX0和RX0并不是直接與TJA1050T的TXD和RXD相連,而是通過高速光耦6N137后與TJA1050T相連,這就很好地實(shí)現(xiàn)了總線上各CAN節(jié)點(diǎn)間的電氣隔離,不過應(yīng)該特別說明的一點(diǎn)是光耦部分電路采用的兩個(gè)電源VA和VB必須完全隔離,否則采用光耦也就失去了意義。這些部分雖然增加了節(jié)點(diǎn)的復(fù)雜性,但是卻提高了節(jié)點(diǎn)的穩(wěn)定性和安全性。
(2)TJA1050T的CANH和CANL引腳各自通過1個(gè)5Ω的電阻與CAN總線相連,電阻可起到一定的限流作用,保護(hù)TJA1050T免受過流的沖擊。
(3)CANH和CANL與地之間并聯(lián)2個(gè)30pF的小電容,可以起到濾除總線上的高頻干擾和一定的防電磁輻射的作用。
(4)另外可在2根CAN總線接入端與地之間分別反接1個(gè)保護(hù)二極管。當(dāng)CAN總線有較高的負(fù)電壓時(shí),通過二極管的短路可起到一定的過壓保護(hù)作用。
4 智能節(jié)點(diǎn)的通訊軟件設(shè)計(jì)
節(jié)點(diǎn)的CAN通信主要包括系統(tǒng)初始化程序、發(fā)送程序、接收程序等,軟件部分設(shè)計(jì)的好壞將直接決定系統(tǒng)能否正常工作,對于初次接觸CAN總線系統(tǒng)的設(shè)計(jì)人員來說是一個(gè)難點(diǎn),也是一個(gè)重點(diǎn),在本論文中,系統(tǒng)軟件采用結(jié)構(gòu)化程序設(shè)計(jì)方案,使其具有較好的模塊性和可移植性,對于不同的系統(tǒng)功能或不同的應(yīng)用環(huán)境,可以方便地進(jìn)行編程重組。
4.1 系統(tǒng)的初始化
初始化程序主要完成對所有的消息對象進(jìn)行初始化(一般將所有值置零),對CAN控制寄存器(CAN0CN)、位定時(shí)寄存器(BITREG)進(jìn)行設(shè)置,還要對發(fā)送消息對象和接收消息對象分別進(jìn)行初始化。其中,位定時(shí)寄存器的設(shè)置較為復(fù)雜,這里使用外部晶振為11.0592MHz,CAN通信速率為1Mb/s,得到BITREG的出初始值為0x2640。主程序中規(guī)定對象初始化、發(fā)送和接收初始化,才啟動CAN處理機(jī)制(對BITREG和CAN0CN初始化),下面為CAN啟動程序:
4.2 發(fā)送和接收程序
發(fā)送程序主要負(fù)責(zé)把接口寄存器里邊要發(fā)送內(nèi)容寫入到具體的消息對象中,而接收程序所要實(shí)現(xiàn)的功能與發(fā)送程序正好相反,接收程序負(fù)責(zé)把接收到的內(nèi)容從消息對象中讀入接口寄存器中,由于兩者的程序相似,下面給出發(fā)送程序代碼。
5 結(jié)語
采用內(nèi)部集成了CAN控制器模塊的微控制器設(shè)計(jì)現(xiàn)場總線智能結(jié)點(diǎn),不但硬件設(shè)計(jì)上簡單、可靠、編制相應(yīng)的軟件時(shí)也更方便和簡潔。本文正是采用這種設(shè)計(jì)方案,詳細(xì)介紹了用C8051F040進(jìn)行CAN總線智能節(jié)點(diǎn)通訊接口設(shè)計(jì)時(shí)的硬件接口及軟件設(shè)計(jì)方法。系統(tǒng)的實(shí)際運(yùn)行驗(yàn)證了設(shè)計(jì)的正確性與可靠性。