《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 其他 > 設(shè)計(jì)應(yīng)用 > 基于飛利浦P8XC591的CAN總線節(jié)點(diǎn)擴(kuò)展
基于飛利浦P8XC591的CAN總線節(jié)點(diǎn)擴(kuò)展
摘要: 由于CAN總線具有通訊速率高、可靠性高,、連接方便和性能價(jià)格比高等諸多特點(diǎn),,CAN的應(yīng)用范圍遍及從高速網(wǎng)絡(luò)到低成本的多線路網(wǎng)絡(luò)。在自動(dòng)化電子領(lǐng)域的汽車發(fā)動(dòng)機(jī)控制部件,、傳感器、抗滑系統(tǒng)、工業(yè)自動(dòng)化,、建筑物環(huán)境控制、機(jī)床或電梯控制,、醫(yī)療設(shè)備等領(lǐng)域得到了較為廣泛的應(yīng)用,。
Abstract:
Key words :

引言

   由于CAN總線具有通訊速率高、可靠性高,、連接方便和性能價(jià)格比高等諸多特點(diǎn),,CAN的應(yīng)用范圍遍及從高速網(wǎng)絡(luò)到低成本的多線路網(wǎng)絡(luò)。在自動(dòng)化電子領(lǐng)域的汽車發(fā)動(dòng)機(jī)控制部件,、傳感器,、抗滑系統(tǒng)、工業(yè)自動(dòng)化,、建筑物環(huán)境控制,、機(jī)床或電梯控制、醫(yī)療設(shè)備等領(lǐng)域得到了較為廣泛的應(yīng)用,。

   CAN 的信號(hào)傳輸采用短幀結(jié)構(gòu),,每一幀的有效字節(jié)數(shù)為 8個(gè),因而傳輸時(shí)間短,、受干擾的概率低,。當(dāng)節(jié)點(diǎn)嚴(yán)重錯(cuò)誤時(shí),,具有自動(dòng)關(guān)閉的功能以切斷該節(jié)點(diǎn)與總線的聯(lián)系,使總線上的其它節(jié)點(diǎn)極其通信不受影響,,具有較強(qiáng)的抗干擾能力和檢錯(cuò)能力,。CAN控制器支持四種不同的CAN協(xié)議類型:數(shù)據(jù)幀、遠(yuǎn)程幀,、出錯(cuò)幀和超載幀,。

    CAN支持多主方式工作,網(wǎng)絡(luò)上任何節(jié)點(diǎn)均可在任意時(shí)刻主動(dòng)向其它節(jié)點(diǎn)發(fā)送信息,,支持點(diǎn)對(duì)點(diǎn),、一點(diǎn)對(duì)多點(diǎn)和全局廣播方式接收/發(fā)送數(shù)據(jù)。它采用總線仲裁技術(shù),,當(dāng)出現(xiàn)幾個(gè)節(jié)點(diǎn)同時(shí)在網(wǎng)絡(luò)上傳輸信息時(shí),,優(yōu)先級(jí)高的節(jié)點(diǎn)可繼續(xù)傳輸數(shù)據(jù),而優(yōu)先級(jí)低的節(jié)點(diǎn)則主動(dòng)停止發(fā)送,,從而避免了總線沖突,。

    CAN總線信號(hào)傳輸介質(zhì)使用特性阻抗為120歐姆的雙絞線,信號(hào)傳輸方式和RS485一樣,,也采用差動(dòng)發(fā)送和差動(dòng)接收的方式,。理論上使用CAN2.0A總線的節(jié)點(diǎn)可達(dá)到2032個(gè),CAN2.0B則可以達(dá)到5億多個(gè),。使用PCA82C250作為CAN總線的收發(fā)器時(shí),,CAN直接通信距離最遠(yuǎn)可達(dá)到10km(傳輸率為5kbps),通訊速率最高可達(dá)1Mbps(傳輸距離為40m),;由于收發(fā)器的限制,, CAN總線上節(jié)點(diǎn)數(shù)實(shí)際上最多可達(dá)110個(gè)。對(duì)于節(jié)點(diǎn)超過110個(gè)的CAN網(wǎng)絡(luò),,可以使用CAN網(wǎng)關(guān)對(duì)CAN總線進(jìn)行擴(kuò)展,,以達(dá)到用戶的要求。

   網(wǎng)關(guān)可以采用特定的控制邏輯去控制一對(duì)背-背相接的收發(fā)器PCA82C250,,連接兩個(gè)物理上完全獨(dú)立的CAN網(wǎng),,雙向傳輸數(shù)據(jù),從物理層上來看,,它實(shí)現(xiàn)了CAN總線信號(hào)的中繼,,也可以采用P8XC591+SJA1000的結(jié)構(gòu)去實(shí)現(xiàn)。下面將著重介紹后者的硬件及軟件實(shí)現(xiàn),。

P8XC591片上自帶CAN的微控制器

    P8XC591是一個(gè)高性能的微控制器,,它的硬件接構(gòu)及增強(qiáng)型飛利浦“RX+內(nèi)核”使得其可以廣泛用于工業(yè)控制和汽車領(lǐng)域。片上自帶的CAN控制器為CAN的應(yīng)用提供了許多專用的硬件功能。P8XC591完全履行CAN2.0B規(guī)范,,并提供一個(gè)直接從SJA1000獨(dú)立CAN控制器的軟件移植路徑,。P8XC591具有CAN的擴(kuò)展特性,其中包括增強(qiáng)型接收濾波器,、支持系統(tǒng)維護(hù),、診斷、系統(tǒng)優(yōu)化以及接收FIFO特性等,。   

     P8XC591除了標(biāo)準(zhǔn)的外圍功能以外,,還有一個(gè)強(qiáng)大的CAN控制器模塊,。該嵌入式CAN控制器還包括了下列功能模塊:CAN內(nèi)核模塊,,根據(jù)CAN2.0B規(guī)范控制CAN幀的發(fā)送和接收;CAN接口模塊,,包含5個(gè)實(shí)現(xiàn)CPU與CAN控制器連接的特殊功能寄存器,,對(duì)重要CAN寄存器的訪問通過快速自動(dòng)增加的尋址特性和對(duì)特殊功能寄存器的位尋址來實(shí)現(xiàn);CAN控制器的發(fā)送緩沖區(qū)模塊,,能夠保存一個(gè)完整的CAN信息擴(kuò)展或標(biāo)準(zhǔn)幀格式,。只要通過CPU啟動(dòng)發(fā)送信息,字節(jié)就從發(fā)送緩沖區(qū)傳輸?shù)紺AN內(nèi)核模塊,。當(dāng)接收一個(gè)信息時(shí),,CAN內(nèi)核模塊將串行位流轉(zhuǎn)換成并行數(shù)據(jù)輸入到接收濾波器,通過該可編程濾波器,,P8XC591確定實(shí)際收到的信息,,所有由接收濾波器接收的數(shù)據(jù)都保存在接收FIFO(64字節(jié))中,由于操作模式和數(shù)據(jù)長度的不同,,該接收緩沖區(qū)最多可保存21個(gè)CAN信息,。這使用戶在指定系統(tǒng)的中斷服務(wù)和中斷優(yōu)先級(jí)時(shí)有更多的靈活性,因?yàn)閿?shù)據(jù)溢出的可能性大大降低,。

   除了普通的CAN特性以外,,P8XC591還提供增強(qiáng)型PeliCAN。PeliCAN具有4個(gè)獨(dú)立可配置的接收濾波器組,,每個(gè)組都有4個(gè)可選的接收濾波器配置,;每個(gè)接收濾波器都有32位區(qū)分符、32位代碼和32位屏蔽,;所有濾波器配置都可在運(yùn)行中改變,;支持更高層的協(xié)議的接收濾波器;接收FIFO特性,;只聽模式及自檢測模式,;只有達(dá)到FIFO接收中斷級(jí)才產(chǎn)生接收中斷;在接收到高優(yōu)先級(jí)數(shù)據(jù)幀時(shí)立即產(chǎn)生接收中斷,;系統(tǒng)維護(hù)診斷和優(yōu)化特性,。

    硬件電路設(shè)計(jì)

    硬件電路的設(shè)計(jì)采用了飛利浦片上自帶CAN控制器的單片機(jī)P8XC591和獨(dú)立的CAN控制器SJA1000,。兩者都支持CAN 2.0B協(xié)議。P87C591片上自帶的CAN控制器在軟件上是向上兼容SJA1000的,。

    P8XC591所連接的CAN節(jié)點(diǎn)電路所需要的外部元件僅僅是一個(gè)晶振加兩個(gè)電容驅(qū)動(dòng)片內(nèi)振蕩器,、一個(gè)連接到復(fù)位腳的電阻、電容,。使用片內(nèi)上電復(fù)位電路以及一個(gè)收發(fā)器用于將P8XC591連接到CAN總線,。

    P8XC591通過對(duì)CAN的特殊功能寄存器,如地址寄存器(CANADR),、數(shù)據(jù)寄存器(CANDAT),、模式寄存器(CANMOD)、控制寄存器(CANCON),、狀態(tài)寄存器(CANSTA),、總線定時(shí)寄存器(BTR0,BTR1)等的設(shè)置,以及對(duì)收發(fā)緩沖區(qū)的讀寫(接收緩沖區(qū)為64字節(jié)的FIFO緩沖區(qū),,最多儲(chǔ)存21幀CAN信息),,從而完成和其它CAN節(jié)點(diǎn)的數(shù)據(jù)交換。

   CAN的控制器分別采用了PXC591和SJA1000,,可完成物理層和數(shù)據(jù)鏈路層的所有功能,。CAN收發(fā)器使用飛利浦公司的PCA82C250,它是連接CAN控制器和物理總線之間的接口,,提供了對(duì)總線的差動(dòng)發(fā)動(dòng)和接收能力,。它與ISO11898標(biāo)準(zhǔn)完全兼容,有三種不同的工作方式即高速,、斜率控制和待機(jī),,可根據(jù)實(shí)際情況選擇。為了進(jìn)一步提高系統(tǒng)的抗干擾能力,,在控制器SJA1000和收發(fā)器PCA82C250之間,,P87C591和收發(fā)器PCA82C250之間均增加了由高速隔離器件6N137 構(gòu)成的隔離電路。硬件電路中使用PCA82C250是為了增加通信距離,,提高系統(tǒng)的瞬間抗干擾能力,,保護(hù)總線、降低干擾等,。

   微處理器P87C591和SJA1000均使用12MHz的石英晶體,,以獲得相同的時(shí)鐘信號(hào)。由于 P87C591含有片上的CAN控制器,,通過TXDC,RXDC兩個(gè)管腳,,P87C591就可和外部的CAN節(jié)點(diǎn)交換數(shù)據(jù)。另一方面,P87C591直接控制SJA1000的AD0~AD7, RD, WR, ALE, RST和INT管腳,,SJA1000的MODE管腳接高電平,,工作在Intel模式下;片選CS管腳接地,,使SJA1000始終處于選通狀態(tài),。P87C591對(duì)SJA1000的操作主要是對(duì)寄存器中的模式寄存器(MOD)、命令寄存器(CMR),、狀態(tài)寄存器(SR),、中斷寄存器(IR)、中斷允許寄存器(IEP),、總線定時(shí)寄存器(BTR0, BTR1),、輸出控制寄存器(OCR)、時(shí)鐘分頻計(jì)數(shù)器(CDR)進(jìn)行設(shè)置和檢測,,以及對(duì)收發(fā)緩沖區(qū)進(jìn)行讀寫,,從而完成和其它CAN節(jié)點(diǎn)的數(shù)據(jù)交換,。

   為了能使CAN網(wǎng)絡(luò)1(最多110個(gè)節(jié)點(diǎn))的信息和CAN網(wǎng)絡(luò)2(最多110個(gè)節(jié)點(diǎn))的信息共享,,P87C591在軟件上必須使得任何格式的數(shù)據(jù)能實(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í)現(xiàn)了互聯(lián),CAN網(wǎng)絡(luò)的節(jié)點(diǎn)得到了擴(kuò)展,。

    軟件設(shè)計(jì)

  *在初始化SJA1000時(shí),,必須設(shè)置接收代碼寄存器ACRn,接收代碼屏蔽寄存器AMRn的值為FF,,以能收發(fā)所有的數(shù)據(jù),。由于P87C591片上自帶的CAN控制器在軟件上是向上兼容SJA1000的,所以對(duì)SJA1000的初始化,,讀,、寫的流程與P87C591基本類似。

  初始化部分的原程序如下:

#include

viod ini_can_controller (void)

{

CANMOD=0x01,; /*進(jìn)入復(fù)位模式,,啟動(dòng)CAN初始化*/

P1M2=P1M2 I 0x02; /*管腳TXDC設(shè)置為推挽模式*/

CANSTA=0x03,; /*使能接收和發(fā)送中斷*/

CANADR=BTR0,; /*BTR0和BTR1編程為125kbit/s@12MHz*/

CANDAT=0x45;

CANADR=BTR1,; /*TSEG1=12, TSEG2=3, SJW=2*/

CANDAT=0x2B,; /*用戶可根據(jù)具體的CAN網(wǎng)絡(luò)來調(diào)整BTR0, BRT1的參數(shù)*/

CANADR=AMR10; /*設(shè)定接收屏蔽寄存器的地址*/

CANDAT=0xFF; /*Bank1: 與接收屏蔽寄存器1無關(guān),,允許任何數(shù)據(jù)通過濾波器*/

CANDAT=0xFF,; /*Bank1: 與接收屏蔽寄存器2無關(guān),允許任何數(shù)據(jù)通過濾波器*/

CANDAT=0xFF,; /*Bank1: 與接收屏蔽寄存器3無關(guān),,允許任何數(shù)據(jù)通過濾波器*/

CANDAT=0xFF; /*Bank1: 與接收屏蔽寄存器4無關(guān),,允許任何數(shù)據(jù)通過濾波器*/

CANADR=ACFMODE,; /*設(shè)定接收濾波器模式寄存器的地址*/

CANDAT=0x01; /*設(shè)定BANK1為單濾波模式,,標(biāo)準(zhǔn)幀*/

CANADR=ACFENA,; /*設(shè)定接收濾波器使能寄存器的地址*/

CANDAT=0x01; /*使能BANK1的濾波器1*/

CANMOD=0x00,; /*請(qǐng)求進(jìn)入CAN的激活模式*/

while (CANSTA & 0x80),; /*等待總線激活*/

}

類似以上的設(shè)置可以使得所有的CAN信息都通過CAN的連接濾波器而到達(dá)接收緩沖區(qū),從而為不同CAN網(wǎng)絡(luò)信息的交換奠定了基礎(chǔ),。

此內(nèi)容為AET網(wǎng)站原創(chuàng),,未經(jīng)授權(quán)禁止轉(zhuǎn)載。