基于C8051F040的CAN總線通訊系統(tǒng)設計
1 引言
can總線,即控制器局域網總線,是一種有效支持分布式控制或實時控制的串行通信網絡。由于其高性能、高可靠性及獨特的設計和適宜的價格,而廣泛應用于工業(yè)現場控制、智能樓宇、醫(yī)療器械、交通工具以及傳感器等領域,并已被公認為幾種最有前途的現場總線之一。
目前can系統(tǒng)使用較多的是獨立can控制器,利用單片機的并口控制can控制器,除了8條數據線外,還需要幾條控制線。采取這樣的設計不但占用了單片機的引腳,而且增加了電路板的面積。同時,由于采用了并行通訊,降低了系統(tǒng)的可靠性,因此,采取系統(tǒng)內部集成can控制器的單片機勢在必行。
本文已cygnal公司的內部集成can控制器的c8051f040單片機為基礎,介紹了can總線的通訊接口的具體設計及其應用。由于采用了集成can控制器的單片機,大大簡化了電路,同時也提高了系統(tǒng)的可靠性。
2 c8051f040集成的can控制器
c8051040內部集成can控制器,他兼容can技術規(guī)范2.0a和2.0b主要由can內核、消息ram(獨立于cip-51的ram)、消息處理單元和控制寄存器組成,圖1所示是c8051f040的內部的can總線結構圖。
圖1中,can內核由can協議控制器和負責消息收發(fā)的串行/并行轉換rx/tx移位寄存器組成,消息ram用于存儲消息目標和每個目標的仲裁掩碼。這種can處理器有32個隨意配置為發(fā)送和接收的消息目標,并且每一個消息目標都有他自己的識別掩碼,所有的數據傳輸和接收濾波都是由can控制器完成的,而不是由cip-51來完成。can內部寄存器中存儲了所有can的控制和配置信息,其中包括控制寄存器、狀態(tài)寄存器、設置波特率的位定時寄存器,測試寄存器、錯誤計數器和消息接口寄存器。通常can內核不能直接訪問消息ram,而必須通過接口寄存器if1或if2來訪問。另外,cip51的sfr并不不能直接訪問can內部寄存器的所有單元,其配置can、消息目標、讀取can狀態(tài)以及獲取接收數據、傳遞發(fā)送數據都由sfr中的6個特殊寄存器來完成,其中can0cn,can0tst和can0sta三個寄存器可直接獲取或修改can控制器中對應的寄存器,而can0dath,can0atl,can0adr三個寄存器主要用來訪問修改其他不能直接訪問的can內部寄存器,其中can0adr用來指出要訪問寄存器的地址,ca0dath,can0datl這時就相當于要訪問的16位寄存器的高低字節(jié)的映射寄存器,而對他們的讀寫則相當于所指向寄存器的讀寫。
圖2給出了cip-51如何訪問can中控制寄存器和每個消息的路徑圖。消息處理單元用于根據寄存器中的消息來控制can內核中移位寄存器和消息ram之間的數據傳遞,同時,他還可用來管理中斷的產生。
3 智能節(jié)點通訊部分的硬件設計
c8051f040中內置can總線協議控制器,只要外接總線驅動芯片和適當的抗干擾電路就可方便地建立一個實用的can總線智能測控節(jié)點。本文采用philip公司的tja1050t can總線驅動器,硬件原理圖如圖3所示。
為了增強can總線節(jié)點的抗干擾能力,可以采取以下措施:
(1)f040的tx0和rx0并不是直接與tja1050t的txd和rxd相連,而是通過高速光耦6n137后與tja1050t相連,這就很好地實現了總線上各can節(jié)點間的電氣隔離,不過應該特別說明的一點是光耦部分電路采用的兩個電源va和vb必須完全隔離,否則采用光耦也就失去了意義。這些部分雖然增加了節(jié)點的復雜性,但是卻提高了節(jié)點的穩(wěn)定性和安全性。
(2)tja1050t的canh和canl引腳各自通過1個5ω的電阻與can總線相連,電阻可起到一定的限流作用,保護tja1050t免受過流的沖擊。
(3)canh和canl與地之間并聯2個30pf的小電容,可以起到濾除總線上的高頻干擾和一定的防電磁輻射的作用。
(4)另外可在2根can總線接入端與地之間分別反接1個保護二極管。當can總線有較高的負電壓時,通過二極管的短路可起到一定的過壓保護作用。
4 智能節(jié)點的通訊軟件設計
節(jié)點的can通信主要包括系統(tǒng)初始化程序、發(fā)送程序、接收程序等,軟件部分設計的好壞將直接決定系統(tǒng)能否正常工作,對于初次接觸can總線系統(tǒng)的設計人員來說是一個難點,也是一個重點,在本論文中,系統(tǒng)軟件采用結構化程序設計方案,使其具有較好的模塊性和可移植性,對于不同的系統(tǒng)功能或不同的應用環(huán)境,可以方便地進行編程重組。
4.1 系統(tǒng)的初始化
初始化程序主要完成對所有的消息對象進行初始化(一般將所有值置零),對can控制寄存器(can0cn)、位定時寄存器(bitreg)進行設置,還要對發(fā)送消息對象和接收消息對象分別進行初始化。其中,位定時寄存器的設置較為復雜,這里使用外部晶振為11.0592mhz,can通信速率為1mb/s,得到bitreg的出初始值為0x2640。主程序中規(guī)定對象初始化、發(fā)送和接收初始化,最后才啟動can處理機制(對bitreg和can0cn初始化),下面為can啟動程序:
4.2 發(fā)送和接收程序
發(fā)送程序主要負責把接口寄存器里邊要發(fā)送內容寫入到具體的消息對象中,而接收程序所要實現的功能與發(fā)送程序正好相反,接收程序負責把接收到的內容從消息對象中讀入接口寄存器中,由于兩者的程序相似,下面給出發(fā)送程序代碼。
5 結語
采用內部集成了can控制器模塊的微控制器設計現場總線智能結點,不但硬件設計上簡單、可靠、編制相應的軟件時也更方便和簡潔。本文正是采用這種設計方案,詳細介紹了用c8051f040進行can總線智能節(jié)點通訊接口設計時的硬件接口及軟件設計方法。系統(tǒng)的實際運行驗證了設計的正確性與可靠性。
評論