基于C8051F040的CAN總線通訊系統(tǒng)設(shè)計(jì)
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ī)勢(shì)在必行。
本文已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用于存儲(chǔ)消息目標(biāo)和每個(gè)目標(biāo)的仲裁掩碼。這種can處理器有32個(gè)隨意配置為發(fā)送和接收的消息目標(biāo),并且每一個(gè)消息目標(biāo)都有他自己的識(shí)別掩碼,所有的數(shù)據(jù)傳輸和接收濾波都是由can控制器完成的,而不是由cip-51來完成。can內(nèi)部寄存器中存儲(chǔ)了所有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控制器中對(duì)應(yīng)的寄存器,而can0dath,can0atl,can0adr三個(gè)寄存器主要用來訪問修改其他不能直接訪問的can內(nèi)部寄存器,其中can0adr用來指出要訪問寄存器的地址,ca0dath,can0datl這時(shí)就相當(dāng)于要訪問的16位寄存器的高低字節(jié)的映射寄存器,而對(duì)他們的讀寫則相當(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)芯片和適當(dāng)?shù)目垢蓴_電路就可方便地建立一個(gè)實(shí)用的can總線智能測控節(jié)點(diǎn)。本文采用philip公司的tja1050t can總線驅(qū)動(dòng)器,硬件原理圖如圖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)能否正常工作,對(duì)于初次接觸can總線系統(tǒng)的設(shè)計(jì)人員來說是一個(gè)難點(diǎn),也是一個(gè)重點(diǎn),在本論文中,系統(tǒng)軟件采用結(jié)構(gòu)化程序設(shè)計(jì)方案,使其具有較好的模塊性和可移植性,對(duì)于不同的系統(tǒng)功能或不同的應(yīng)用環(huán)境,可以方便地進(jìn)行編程重組。
4.1 系統(tǒng)的初始化
初始化程序主要完成對(duì)所有的消息對(duì)象進(jìn)行初始化(一般將所有值置零),對(duì)can控制寄存器(can0cn)、位定時(shí)寄存器(bitreg)進(jìn)行設(shè)置,還要對(duì)發(fā)送消息對(duì)象和接收消息對(duì)象分別進(jìn)行初始化。其中,位定時(shí)寄存器的設(shè)置較為復(fù)雜,這里使用外部晶振為11.0592mhz,can通信速率為1mb/s,得到bitreg的出初始值為0x2640。主程序中規(guī)定對(duì)象初始化、發(fā)送和接收初始化,最后才啟動(dòng)can處理機(jī)制(對(duì)bitreg和can0cn初始化),下面為can啟動(dòng)程序:
4.2 發(fā)送和接收程序
發(fā)送程序主要負(fù)責(zé)把接口寄存器里邊要發(fā)送內(nèi)容寫入到具體的消息對(duì)象中,而接收程序所要實(shí)現(xiàn)的功能與發(fā)送程序正好相反,接收程序負(fù)責(zé)把接收到的內(nèi)容從消息對(duì)象中讀入接口寄存器中,由于兩者的程序相似,下面給出發(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ì)的正確性與可靠性。
評(píng)論