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