基于飛利浦P8XC591的CAN總線節點擴展
引言
由于CAN總線具有通訊速率高,可靠性高,連接方便和性能價格比高等諸多特點,CAN的應用范圍遍及從高速網絡到低成本的多線路網絡。在自動化電子領域的汽車發動機控制部件、傳感器、抗滑系統、工業自動化、建筑物環境控制、機床、電梯控制、醫療設備等領域得到了較為廣泛的應用。
CAN的信號傳輸采用短幀結構,每一幀的有效字節數為8個,因而傳輸時間短,受干擾的概率低。當節點嚴重錯誤時,具有自動關閉的功能以切斷該節點與總線的聯系,使總線上的其它節點及其通信不受影響,具有較強的抗干擾能力和檢錯能力。CAN控制器支持四種不同的CAN協議類型:數據幀、遠程幀、出錯幀和超載幀。
CAN支持多主方式工作,網絡上任何節點均可在任意時刻主動向其它節點發送信息,支持點對點、一點對多點和全局廣播方式接收/發送數據。它采用總線仲裁技術,當出現幾個節點同時在網絡上傳輸信息時,優先級高的節點可繼續傳輸數據,而優先級低的節點則主動停止發送,從而避免了總線沖突。
CAN總線信號傳輸介質使用特性阻抗為120Ω的雙絞線, 信號傳輸方式和RS485一樣,也采用差動發送和差動接收的方式。理論上使用CAN2.0A總線的節點可達到2032個,CAN2.0B則可以達到5億多個。使用PCA82C250 作為CAN總線的收發器時,CAN直接通訊距離最遠可達到10km(傳輸率為5kbps),通迅速率最高可達1Mbps(傳輸距離為40m);由于收發器的限制,CAN總線上節點數實際上最多可達110個。對于節點超過110個的CAN網絡,可以使用CAN網關對CAN總線進行擴展,以達到用戶的要求。
網關可以采用特定的控制邏輯去控制一對背-背相接的收發器PCA82C250,連接兩個物理上完全獨立的CAN網,雙向傳輸數據,從物理層上來看,它實現了CAN總線信號的中繼;也可以采用P8XC591+SJA1000的結構去實現。下面將著重介紹后者的硬件及軟件實現。
P8XC591片上自帶 CAN 的微控制器
P8XC591 是一個高性能的 微控制器, 它的硬件結構及增強型的飛利浦“RX+ 內核”使得其可以廣泛用于工業控制和汽車領域。片上自帶的CAN控制器為CAN的應用提供了許多專用的硬件功能。P8XC591 完全履行CAN2.0B 規范,并提供一個直接從SJA1000 獨立CAN 控制器的軟件移植路徑。P8XC591 具有CAN 的擴充特性,其中包括增強型接收濾波器、支持系統維護、診斷、系統優化以及接收FIFO 特性等。圖1為P83C591 ROM 或P87C591 OTP 的方框圖。
圖1 P83C591 ROM 或P87C591 OTP 的方框圖
圖2 P8XC591與CAN 網絡2的連接
圖3 P8XC591通過SJA1000與CAN 網絡1的連接
圖4 P87C591的初始化流程圖
圖5 CAN網絡1接點N與CAN網絡2接點N信息交換的示意圖
P8XC591 除了標準的外圍功能以外,還有一個強大的CAN 控制器模塊。該嵌入式CAN 控制器還包括了下列功能模塊:CAN 內核模塊,根據CAN2.0B 規范控制CAN 幀的發送和接收;CAN 接口模塊,包含5 個實現CPU 與CAN 控制器連接的特殊功能寄存器,對重要CAN 寄存器的訪問通過快速自動增加的尋址特性和對特殊功能寄存器的位尋址來實現;CAN 控制器的發送緩沖區模塊,能夠保存一個完整的CAN 信息擴展或標準幀格式。只要通過CPU 啟動發送信息,字節就從發送緩沖區傳輸到CAN 內核模塊。當接收一個信息時,CAN 內核模塊將串行位流轉換成并行數據輸入到接收濾波器,通過該可編程濾波器,P8XC591 確定實際接收到的信息,所有由接收濾波器接收的數據都保存在接收FIFO(64字節) 中,由于操作模式和數據長度的不同,該接收緩沖區最多可保存21 個CAN 信息。這使用戶在指定系統的中斷服務和中斷優先級時有更多的靈活性,因為數據溢出的可能性大大降低。
除了普通的CAN 特性以外,P8XC591 還提供增強型PeliCAN。PeliCAN具有 4 個獨立可配置的接收濾波器組; 每個組都有4 個可選的接收濾波器配置; 每個接收濾波器都有32 位區分符、32 位代碼和32 位屏蔽; 所有濾波器配置都可在運行中改變;支持更高層的協議的接收濾波器;接收FIFO 特性; 只聽模式及自檢測模式; 只有達到FIFO 接收中斷級才產生接收中斷; 在接收到高優先級數據幀時立即產生接收中斷;系統維護診斷和優化特性。
硬件電路設計
硬件電路的設計采用了飛利浦片上自帶CAN控制器的單片機P8XC591和獨立的CAN控制器SJA1000。兩者都支持CAN2.0B協議。P87C591片上自帶的CAN控制器在軟件上是向上兼容SJA1000的。相應的硬件電路如圖2和圖3所示。
P8XC591所連接的CAN 節點電路所需要的外部元件僅僅是一個晶振加兩個電容驅動片內振蕩器、一個連接到復位腳的電阻、電容。使用片內上電復位電路以及一個收發器用于將P8XC591 連接到CAN 總線。
P87C591通過對CAN的特殊功能寄存器,如地址寄存器(CANADR)、數據寄存器CANDAT)、模式寄存器(CANMOD)、控制寄存器(CANCON)、狀態寄存器(CANSTA)、總線定時寄存器(BTR0、 BTR1)等的設置,以及對收發緩沖區的讀寫(接收緩沖區為64字節的FIFO緩沖區,最多儲存21幀CAN信息),從而完成和其它CAN節點的數據交換。
CAN的控制器分別采用了P8xC591和SJA1000,可完成物理層和數據鏈路層的所有功能。CAN收發器使用飛利浦公司的PCA82C250,它是連接CAN控制器和物理總線之間的接口,提供了對總線的差動發送和接收能力。它與ISO11898標準完全兼容,有三種不同的工作方式即高速、斜率控制和待機,可根據實際情況選擇。為了進一步提高系統的抗干擾能力,在控制器SJA1000和收發器PCA82C250之間,P87C591和收發器PCA82C250之間均增加了由高速隔離器件6N137構成的隔離電路。硬件電路中使用PCA82C250是為了增加通信距離,提高系統的瞬間抗干擾能力,保護總線,降低干擾等。
微處理器P87C591和SJA1000均使用12MHz的石英晶體,以獲得相同的時鐘信號。由于P87C591含有片上的CAN控制器,通過TXDC,RXDC兩個管腳,P87C591就可和外部的CAN節點交換數據。另一方面,P87C591直接控制SJA1000的AD0~AD7、、、ALE、RST 和管腳,SJA1000的MODE管腳接高電平,工作在Intel模式下;片選管腳接地,使SJA1000始終處于選通狀態。P87C591對 SJA1000的操作主要是對寄存器中的模式寄存器 (MOD)、命令寄存器(CMR)、狀態寄存器(SR)、中斷寄存器( IR)、中斷允許寄存器(IEP)、總線定時寄存器(BTR0、 BTR1)、輸出控制寄存器(OCR)、時鐘分頻計數器(CDR)進行設置和檢測,以及對收發緩沖區進行讀寫,從而完成和其它CAN節點的數據交換。
如圖2和圖3所示,為了能使CAN 網絡1(最多110個節點)的信息和CAN 網絡2(最多110個節點)的信息共享,P87C591在軟件上必須使得任何格式的數據能實時的從CAN網絡1傳送到CAN 網絡2,以及信息從CAN 網絡2傳送到CAN網絡1。這樣,兩個不同的子網就實現了互聯,CAN網絡的節點得到了擴展。
軟件設計
?在初始化SJA1000時,必須設置接收代碼寄存器ACRn,接收代碼屏蔽寄存器AMRn的值為FF,以能收發所有的數據。由于P87C591片上自帶的CAN控制器在軟件上是向上兼容SJA1000的,所以對SJA1000的初始化,讀、寫的流程與P87C591(見圖4)基本類似。
?CAN網絡1接點與CAN網絡2接點信息交換的示意圖如圖5。
·初始化部分的原程序如下:
#include
void init_can_controller ( void )
{
CANMOD = 0x01; /*進入復位模式,啟動CAN初始化 */
P1M2 = P1M2 | 0x02; /* 管腳TXDC 設置為推挽模式*/
CANSTA = 0x03; /* 使能接收和發送中斷*/
CANADR = BTR0; /* BTR0和BTR1編程為125 kbit/s @12 MHz */
CANDAT = 0x45;
CANADR = BTR1; /* TSEG1 = 12, TSEG2 = 3, SJW = 2 */
CANDAT = 0x2B; /*用戶可根據具體的CAN網絡來調整BTR0,BTR1的參數*/
CANADR = AMR10; /*設定接收屏蔽寄存器的地址*/
CANDAT = 0xFF; /*Bank1:與 接收屏蔽寄存器1無關,允許任何數據通過濾波器*/
CANDAT = 0xFF; /*Bank1:與 接收屏蔽寄存器2無關,允許任何數據通過濾波器*/
CANDAT = 0xFF; /*Bank1:與 接收屏蔽寄存器3無關,允許任何數據通過濾波器*/
CANDAT = 0xFF; /*Bank1:與 接收屏蔽寄存器4無關,允許任何數據通過濾波器*/
CANADR = ACFMODE; /*設定接收濾波器模式寄存器的地址*/
CANDAT = 0x01; /*設定BANK1為單濾波模式,標準幀*/
CANADR = ACFENA; /*設定接收濾波器使能寄存器的地址*/
CANDAT = 0x01; /*使能BANK1的濾波器1*/
CANMOD = 0x00; /*請求進入CAN的激活模式*/
while (CANSTA & 0x80); /*等待總線激活*/
}
類似以上的設置可以使得所有的CAN信息都通過CAN的接收濾波器而到達接收緩沖區,從而為不同CAN網絡信息的交換奠定了基礎。■(軟件設計部分的詳細內容見本刊網站www.eaw.com.cn)
參考文獻
1 Philips SJA1000--Stand-alone CAN Controller. DATA SHEET.1999
2 Philips PCA82C250 CAN Controller Interface. DATA SHEET.1997
3 鄔寬明.CAN總線原理和應用系統設計.北京航空航天大學出版社.1996
評論