引 言
CAN總線" title="CAN總線">CAN總線是一種串行多主站局域網(wǎng)總線,被廣泛應(yīng)用于汽車控制系統(tǒng),、自動(dòng)控制,、樓宇自動(dòng)化、醫(yī)學(xué)設(shè)備等各個(gè)領(lǐng)域,。其傳輸距離遠(yuǎn),,最遠(yuǎn)可達(dá)10 km,傳輸速率高,,最高可達(dá)1 Mb/s,,容錯(cuò)性能好,可靠性能高,。但是由于CAN驅(qū)動(dòng)器的驅(qū)動(dòng)能力有限,,CAN總線能夠驅(qū)動(dòng)的節(jié)點(diǎn)數(shù)有限,一般在100個(gè)左右,,同時(shí)會(huì)隨著傳輸距離的增加,,最高傳輸速率會(huì)下降,如果距離過(guò)長(zhǎng)會(huì)引起信號(hào)丟失,、反射等故障,。在實(shí)驗(yàn)室條件下測(cè)得在5 Kb/s的通信速率下最遠(yuǎn)通信距離能達(dá)到10 km;在18 Kb/s的通信速率下最遠(yuǎn)通信距離只能達(dá)到2 km,;而在42 b/s的通信速率下,,最遠(yuǎn)通信距離只能達(dá)到1 km。測(cè)試條件:線纜采用線徑為0.75 mm2的屏蔽雙絞線,,線纜為盤裝,,室內(nèi)測(cè)試。在實(shí)驗(yàn)中,,發(fā)現(xiàn)隨著隨著通信距離的增加,,通信速率迅速下降,而CAN總線的驅(qū)動(dòng)節(jié)點(diǎn)數(shù)量也次第下降,。而在通信距離遠(yuǎn),,通信節(jié)點(diǎn)多的大空間場(chǎng)所,比如礦井,、電力監(jiān)控等系統(tǒng)需要CAN總線來(lái)傳輸數(shù)據(jù)和監(jiān)控信息的場(chǎng)所,,CAN總線不能滿足要求。
如果要實(shí)現(xiàn)通信距離遠(yuǎn),、通信速率高,、總線節(jié)點(diǎn)數(shù)量多CAN總線系統(tǒng),實(shí)現(xiàn)CAN總線的擴(kuò)展,,就需要一個(gè)CAN網(wǎng)關(guān)進(jìn)行橋接,,把CAN總線劃分為幾個(gè)子網(wǎng),增加CAN總線通信節(jié)點(diǎn),,延長(zhǎng)CAN總線的傳輸距離,,提高CAN總線的傳輸速率。在研究基于PIC單片機(jī)" title="PIC單片機(jī)">PIC單片機(jī)的CAN網(wǎng)關(guān)設(shè)計(jì)和擴(kuò)展的CAN總線網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu),。
1 CAN網(wǎng)關(guān)總體設(shè)計(jì)及總線拓?fù)浣Y(jié)構(gòu)
1.1 CAN網(wǎng)關(guān)總體設(shè)計(jì)
CAN網(wǎng)關(guān)作為一種轉(zhuǎn)發(fā)設(shè)備,,連接在兩個(gè)不同的CAN網(wǎng)絡(luò)中,能夠?qū)崟r(shí)接收來(lái)自兩個(gè)子網(wǎng)中的信息,,根據(jù)需要篩選或者無(wú)條件地把接收到的信息轉(zhuǎn)發(fā)到另外一個(gè)網(wǎng)絡(luò)中,。CAN總線層次結(jié)構(gòu)分為物理層、數(shù)據(jù)鏈路層和應(yīng)用層,,工作于ISO/OSI參考模式下,。CAN網(wǎng)關(guān)在物理層和數(shù)據(jù)鏈路層完成兩個(gè)CAN網(wǎng)的連接。CAN網(wǎng)關(guān)結(jié)構(gòu)圖如圖1所示。
CAN網(wǎng)關(guān)可以作為透明網(wǎng)關(guān)和源路由網(wǎng)關(guān),。透明網(wǎng)關(guān)完全按照接收到的幀格式轉(zhuǎn)發(fā),,不改變幀結(jié)構(gòu),對(duì)于用戶,,網(wǎng)關(guān)相當(dāng)于透明的。而源路由網(wǎng)關(guān)由用戶提供路由信息,,網(wǎng)關(guān)按照路由信息對(duì)消息進(jìn)行過(guò)濾和有選擇性的轉(zhuǎn)發(fā),。
1.2 CAN總線網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)
帶有網(wǎng)關(guān)的CAN網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)如圖2所示。在這個(gè)網(wǎng)路中,,PC機(jī)為主節(jié)點(diǎn),,而CAN節(jié)點(diǎn)作為從節(jié)點(diǎn)。在網(wǎng)絡(luò)的頂層,,由PC機(jī)和網(wǎng)關(guān)構(gòu)成一個(gè)主網(wǎng),,在這個(gè)主網(wǎng)中PC機(jī)和CAN網(wǎng)關(guān)作為CAN節(jié)點(diǎn),,總線驅(qū)動(dòng)器驅(qū)動(dòng)能力可以帶100個(gè)cAN節(jié)點(diǎn)左右。主網(wǎng)中的CAN網(wǎng)關(guān)再作為下一個(gè)子網(wǎng)中的主節(jié)點(diǎn),,而其他CAN網(wǎng)關(guān)或是CAN節(jié)點(diǎn)作為從節(jié)點(diǎn),,構(gòu)成一個(gè)子網(wǎng)。這樣通過(guò)CAN網(wǎng)關(guān)可以逐環(huán)把網(wǎng)絡(luò)擴(kuò)展下去,,直到最底層的CAN節(jié)點(diǎn),。而在應(yīng)用層上,用戶可以把網(wǎng)關(guān)配置成透明網(wǎng)關(guān)或是源路由網(wǎng)光,。透明網(wǎng)關(guān)不影響網(wǎng)絡(luò)結(jié)構(gòu),,CAN拓展網(wǎng)絡(luò)形成一個(gè)多節(jié)點(diǎn),遠(yuǎn)距離的網(wǎng)絡(luò),。源路由網(wǎng)關(guān)對(duì)消息具有過(guò)濾性,,根據(jù)用戶的配置信息把CAN網(wǎng)絡(luò)在應(yīng)用層上劃分為幾個(gè)小網(wǎng)。
這樣,,解決了節(jié)點(diǎn)容量,、通信距離、通信速率的問(wèn)題,。
2 網(wǎng)關(guān)的硬件設(shè)計(jì)
硬件電路開發(fā)采用集成電路,,開發(fā)周期短,成本低,。CPU采用Microchip公司的16位單片機(jī)DSPIC30F6011作為核心部件,,其內(nèi)部集成了兩個(gè)CAN控制器,支持CAN 2.0A/B協(xié)議,,CPU的速度可以達(dá)到30 MIPS,,程序存儲(chǔ)器空間有132 KB,內(nèi)部RAM有6 144 B,,數(shù)據(jù)程序存儲(chǔ)器有2 048 B,,集成的功能強(qiáng)大,體積小,,性價(jià)比比較高,。物理層采用兩個(gè)CAN驅(qū)動(dòng)器PCA82C250。其中一組的PCA82C250的RXD,,TXD引腳不是和CPUdsPIC30F6011直接連接,,而在中間用光速光藕6N137隔離。
單片機(jī)dsPIC30F6011有兩個(gè)通用的UART口,,可以作為和PC機(jī)或其他上位機(jī)通信的接口來(lái)用,。另外,dsPIC30F6011采用TQPF封裝64引腳,,利用通用I/O驅(qū)動(dòng)LED燈作為指示燈,,預(yù)留并行液晶顯示器和 4×4行列式鍵盤的接口,。
CAN控制器和驅(qū)動(dòng)器部分采用了光電隔離器,因此電源設(shè)計(jì)部分要求有兩個(gè)隔離的5 V電源,??紤]到可以會(huì)用到液晶顯示器,因此一路電源設(shè)計(jì)采用輸出容量1 A的開關(guān)電源LM9076,,而另外一路采用隔離DC/DC模塊電源,。這樣CAN子網(wǎng)之間實(shí)現(xiàn)了電氣隔離,,如果一個(gè)網(wǎng)絡(luò)出了問(wèn)題并不影響另外一個(gè)網(wǎng)絡(luò)的正常工作,,提高了CAN網(wǎng)絡(luò)的抗干擾性能。硬件電路設(shè)計(jì)外圍電路少,、設(shè)計(jì)簡(jiǎn)單,、成本低。設(shè)計(jì)的CAN網(wǎng)關(guān)硬件設(shè)計(jì)系統(tǒng)框圖如圖3所示,。
3 網(wǎng)關(guān)的軟件設(shè)計(jì)
CAN網(wǎng)關(guān)作為消息的轉(zhuǎn)發(fā)器,,要準(zhǔn)確、實(shí)時(shí)地接收兩個(gè)CAN發(fā)送的信息,,并且要實(shí)時(shí)發(fā)出去,。對(duì)于不斷發(fā)出信息的問(wèn)題節(jié)點(diǎn)要及時(shí)屏蔽,避免錯(cuò)誤信息蔓延到另一個(gè)CAN網(wǎng)絡(luò),。如果CAN網(wǎng)關(guān)被設(shè)置成透明網(wǎng)關(guān)則直接把一個(gè)CAN網(wǎng)絡(luò)的信息轉(zhuǎn)發(fā)到另外一個(gè)網(wǎng)絡(luò)中即可,,如果CAN網(wǎng)關(guān)被設(shè)置成和某個(gè)區(qū)間ID相關(guān),則要做一些信息過(guò)濾和屏蔽處理,。當(dāng)CAN網(wǎng)關(guān)檢測(cè)到總線有錯(cuò)誤時(shí),,要通過(guò)備用的UART口將錯(cuò)誤信息上發(fā)到上位機(jī)或其他信息處理主機(jī)。
CAN網(wǎng)關(guān)的信息接收通過(guò)硬件中斷來(lái)完成,。當(dāng)總線上有消息時(shí),,引起硬件中斷,進(jìn)入中斷程序后根據(jù)中斷標(biāo)志位的區(qū)別把接收到的信息存放到相應(yīng)的緩沖區(qū)中,。緩沖區(qū)是一個(gè)FIFO的存儲(chǔ)區(qū),。而主程序則一直檢測(cè)兩個(gè)CAN控制器對(duì)應(yīng)的兩個(gè)接收緩沖區(qū),當(dāng)檢測(cè)到緩沖區(qū)不為空時(shí)則把緩沖區(qū)內(nèi)的信息順序發(fā)送到另一個(gè)網(wǎng)絡(luò)中,。從而形成一個(gè)具有一定的錯(cuò)誤檢測(cè)能力的雙向通道,,完成了兩個(gè)CAN網(wǎng)絡(luò)的信息轉(zhuǎn)發(fā)。CAN網(wǎng)關(guān)的主程序框圖如圖4所示,,中斷程序框圖如圖5所示,。
4 結(jié) 語(yǔ)
詳細(xì)介紹了CAN總線擴(kuò)展技術(shù)的網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)和系統(tǒng)構(gòu)成,給出了CAN網(wǎng)關(guān)的硬件設(shè)計(jì)原理及軟件設(shè)計(jì)框圖,。這樣的CAN總線擴(kuò)展網(wǎng)絡(luò),,因?yàn)橐隒AN網(wǎng)關(guān)而增加了消息的傳遞時(shí)間,,但是這個(gè)增加的時(shí)間很小,是微秒級(jí)的,,可以忽略不計(jì),。而帶來(lái)的優(yōu)勢(shì)明顯,因?yàn)榘袰AN網(wǎng)絡(luò)在物理層上劃分為幾個(gè)網(wǎng)絡(luò),,彼此之間不相互影響,,因而增加了CAN網(wǎng)絡(luò)的抗干擾性,同時(shí),,擴(kuò)展靈活,,只需要增加一個(gè)CAN網(wǎng)關(guān)來(lái)增加子網(wǎng)即可;通信速率可通過(guò)增加網(wǎng)關(guān)來(lái)提高,,通信距離可以擴(kuò)展到很遠(yuǎn),。通過(guò)CAN網(wǎng)關(guān)增加了CAN總線的容量、提高了CAN總線的通信速率,、擴(kuò)展了CAN總線的傳輸距離,。