摘要:獨立的CAN控制器芯片需要外接一個微處理器,接受外部CPU的控制才能運行。如果微處理器內部帶有CAN控制器,無疑會大大簡化應用系統的硬件設計,系統的可靠性也有很大提高 ,同時還可以大幅度降低生成成本。Philips的新產品P87C591內部集成了CAN控制器。本文主要介紹如何利用P87C591進行CAN節點的設計和應用。
關鍵詞:P87C591 CAN 節點 PeliCAN 應用設計
引言
CAN屬于總線式串行通信網絡。由于其獨特的設計,與一般的通信總線相比,CAN總線的數據通信具有突出的可靠性、實時性和靈活性。CAN總線早已成為國際標準,其應用范圍也從最初的汽車電控逐步擴展到工業控制的各個領域,成為最有前途的現場總線之一。CAN總線上的節點一般采用單片機外加CAN控制器的設計方法,不利于產品的集成和成本的降低。現在Philips公司推出的P87C591集成了CAN控制器SJA1000。本文將詳細介紹基于P87C591的CAN智能節點軟硬件設計及其應用。
1 P87C591簡介
P87C591有44個引腳,是一個單片8位高性能微控制器,具有片內CAN控制器。它從MCS-51微控制器家族派生而來,采用了強大的80C51指令集并包括了Philips半導體SJA1000 CAN控制器的PeliCAN功能。全靜態內核提供了擴展的節點方式。振蕩器可停止和恢復而不丟失數據。改進的1:1內部時鐘分頻器,在12MHz外部時鐘速率是實現500ns指令周期。中央處理器CPU使用的操作數來自3個存儲空間:16KB內部程序存儲器,可擴展到64KB;512B內部數據存儲器;最大64KB外部數據存儲器。圖1為P87C591的功能框圖。
有關芯片的引腳定義和更多的擴展功能可參閱P87C591芯片資料,在此不多講。芯片引腳P3.0和P3.1作為復用腳使用,除了具有普通C1單片機功能外,還可分別復用為CAN的RxD和TxD輸入輸出腳。
P87C591包括Philips半導體公司的獨立CAN控制器SJA1000具有的所有功能,并在此基礎上擴展了以下功能:①增強的CAN接收中斷,有接收緩沖區級的接收中斷;用于接收中斷的高優先級驗收濾波器。②擴展的驗收濾波器,8個濾波器用于標準幀格式,4個濾波器用于擴展幀格式;驗收濾波器的“運行中改變”特性。
圖1
2 PeliCAN控制器的CPU之間的通信
CPU與CAN之間的接口功能框圖如圖2所示。80C51CPU接口將PeliCAN與P87C591微控制器內部總線相連,通過5個特殊功能寄存器CANADR、CANDAT、CANMOD、CANSTA和CANCON對PeliCAN寄存器和RAM區進行快捷的訪問。由于支持大范圍的地址,基于尋址的間接指針允許使用自動增加模式對寄存器進行快速訪問,這樣就將所需的SFR的數目減少到5個。需要注意的是,CANCON和CANSTA根據訪問方向的不同而具有不同的寄存器結構。PeliCAN寄存器可以通過兩種不同的訪問訪問。那些控制CAN主要功能最重要的幾個寄存器,支持軟件輪詢,可以像單獨的SFRs一樣直接訪問;而PeliCAN模塊中的其它部分通過一個間接的指針機制進行訪問。為了達到高數據吞吐量,在使用間接尋址時也包含了地址增加的特性。
3 特殊功能寄存器
下面簡要介紹5個特殊功能寄存器。
①CANDAR。該讀/寫寄存器定義通過CANDAT訪問的PeliCAN內部寄存器的地址,可以將其解釋為對PeliCAN的一個指針。對PeliCAN塊寄存器的讀/寫訪問通過CANDAT寄存器執行。通過地址自動增加模式,為CAN控制寄存器提供了快速的類似棧的讀/寫。如果CANADR內當前定義的地址大于或等于32(十進制),CANADR的內容在任意對CANDAT讀/寫操作后自動增加。例如,將一個信息裝入發送緩沖區可通過將發送緩沖區的首地址(112)寫入CANADR,然后將信息字節一個接一個寫入CANDAT。CANADR超過FFH后復位為00H。如果CANADR小于32,不會執行自動地址增加。即使CANDAT執行讀或寫,CANADR的值仍保持不變。這允許在PeliCAN控制器的低地址空間進行寄存器輪詢。
②CANDAT CANDAT作為一個讀/寫寄存器。特殊功能寄存器CANDAT看上去是對CANADR所選的CAN控制器內部寄存器的一個端口。對CANDAT寄存器的讀寫等效于對該內部寄存器的訪問。需要注意的是,如果CANADR中當前的地址大于等于32,那么任何對CANDAT的訪問將使LANADR自動增加。
③CANMOD對PeliCAN模塊寄存器CANMOD是直接進行讀寫訪問的,模式寄存器位于PeliCAN模塊中的地址00H。
④CANSTA根據訪問方向的不同,CANSTA提供對PeliCAN的狀態寄存器和中斷使能寄存器的直接訪問。對CANSTA的讀操作是對PeliCAN的狀態寄存器(地址2)進行訪問。對CANSTA的寫操作是對中斷使能寄存器(地址4)進行訪問。
⑤CANCON。根據訪問方向的不同,CANCON提供對PeliCAN的狀態寄存器中斷使能寄存器的直接訪問。對CANSTA的CANSTA的讀操作是對PeliCAN的狀態寄存器(地址2)進行訪問。對CANSTA的寫操作是對中斷使能寄存器(地址4)進行訪問。
4 基于P87C591的CAN節點接口應用電路
基于87C591的CAN節點接口應用電路十分簡單,只需要附加一些CAN收發電路就可以進行CAN總線數據傳輸。CAN收發芯片采用philips公司的TJA1050收發器。為了增強CAN總線節點的抗干擾能力 ,SJA1000的TX0和RX0并不是直接與TJA1050的TXD和RXF相連,而是通過高速光電耦合器6N167與TJA1050相連。這樣,就可以很好地實現總線上的總CAN節點間的電器隔離。不過,應該特別說明的一點是,光電耦合器采用的是兩個獨立的電源供電,電源Vcc和CAN_V必須完全隔離,否則光耦也就失去了意義。電源的完全隔離可采用小功率的電源隔離模塊或通過帶多路5V隔離輸出的開關電源模塊實現。這樣雖然電路復雜些,但卻提高了節瞇的穩定性和安全性,具體節點電路如圖3所示。





