用87C196NT單片機實現(xiàn)CAN總線通信
1 CAN總線簡介
CAN(Controller Area Network)即控制器局域網(wǎng),主要用于各種設(shè)備監(jiān)測及控制的一種現(xiàn)場總線。CAN總線最初是由德國Bosch公司為汽車的監(jiān)測、控制系統(tǒng)而設(shè)計的。CAN總線具有獨特的設(shè)計思想,良好的功能特性和極高的可靠性,現(xiàn)場抗干擾能力強。具體來講,CAN總線具有如下特點:
*結(jié)構(gòu)簡單,只有2根線與外部相連,且內(nèi)部含有錯誤探測和管理模塊。
*通信方式靈活??梢远嘀鞣绞焦ぷ?,網(wǎng)絡(luò)上任意一個節(jié)點均可以在任意時刻主動地向網(wǎng)絡(luò)上的其它節(jié)點發(fā)送信息,而不分主從。
*可以點對點、點對多點及全局廣播方式發(fā)送和接收數(shù)據(jù)。
*網(wǎng)絡(luò)上的節(jié)點信息可分成不同的優(yōu)先級,可以滿足不同的實時要求。
*CAN總線通信格式采用短幀格式,每幀字節(jié)數(shù)最多為8個,可滿足通常工業(yè)領(lǐng)域中控制命令、工作狀態(tài)及測試數(shù)據(jù)的一般要求。同時,8個字節(jié)也不會占用總線時間過長,從而保證了通信的實時性。[next]
*采用非破壞性總線仲裁技術(shù)。當(dāng)2個節(jié)點同時向總線上發(fā)送數(shù)據(jù)時,優(yōu)先級低的節(jié)點主動停止數(shù)據(jù)發(fā)送,而優(yōu)先級高的節(jié)點可不受影響地繼續(xù)傳輸數(shù)據(jù)。這大大地節(jié)省了總線仲裁沖突時間,在網(wǎng)絡(luò)負載很重的情況下也不會出現(xiàn)網(wǎng)絡(luò)癱瘓。
*直接通信距離最大可達10km(速率5kb/s以下),最高通信速率可達1Mb/s(此時距離最長為40m);節(jié)點數(shù)可達110個,通信介質(zhì)可以是雙絞線、網(wǎng)軸電纜或光導(dǎo)纖維。
*CAN總線通信接口中集成了CAN協(xié)議的物理層和數(shù)據(jù)鏈路層功能,可完成對通信數(shù)據(jù)的成幀處理,包括位填充、數(shù)據(jù)塊編碼、循環(huán)冗余檢驗、優(yōu)先級判別等多項工作。
*CAN總線采用CRC檢驗并可提供相應(yīng)的錯誤處理功能,保證了數(shù)據(jù)通信的可靠性。
CAN總線的以上特點,為工業(yè)控制系統(tǒng)中高可靠性的數(shù)據(jù)傳送提供了一種新的解決方案。其在國外工業(yè)測控領(lǐng)域已經(jīng)有了廣泛的應(yīng)用,現(xiàn)國內(nèi)的許多工業(yè)控制領(lǐng)域也開始使用基于CAN的現(xiàn)場總線。CAN總線已成為最有發(fā)展前途的4種現(xiàn)場總線之一。
2 單片機控制系統(tǒng)硬件設(shè)計
本設(shè)計采用Intel 196系列中的87C196NT單片機。87C196NT具有1MB的尋址空間,本身不帶CAN控制器,所以要實現(xiàn)與CAN總線之間的通信,需外加CAN控制器和CAN驅(qū)動芯片。在本設(shè)計中我們采用LTL-CAN。LTL-CAN是一種CAN總線控制、驅(qū)動隔離收發(fā)器,由CAN控制器芯片PCA82C200、CAN驅(qū)動芯片PCA82C250、16MHz的晶振及光隔電路用厚膜封裝而成。它只支持標(biāo)準(zhǔn)信息幀格式,其內(nèi)部邏輯功能如圖1所示。LTC-CAN引腳定義如表1所列。
表1 LTL-CAN引腳定義
單片機與CAN總線的接口電路如圖2所示。圖中LTC-CAN是帶光隔的CAN控制器和物理總線間的接口,提供對總線的差動發(fā)送和接收功能。電阻R1作為CAN終端的匹配電阻。LTL-CAN芯片的片選信號CSCAN通過GAL16V8譯碼產(chǎn)生,其地址為08000H-08FFFH.87C196NT的P3口是數(shù)據(jù)/地址復(fù)用口,在圖2中沒有畫出地址鎖存芯片(74HC573);P1.0接CAN芯片的中斷引腳,P1.0為低,表示為CAN中斷產(chǎn)生。
3 單片機控制系統(tǒng)軟件設(shè)計
3.1 CAN信息包格式說明
一個有效的CAN的數(shù)據(jù)幀由幀起始、仲裁域、控制域、數(shù)據(jù)域、校驗域、應(yīng)答域和幀結(jié)束組成。CAN控制器有2種不同的幀格式:標(biāo)準(zhǔn)格式和擴展格式。它們的主要區(qū)別在于仲裁域格式不同:標(biāo)準(zhǔn)幀仲裁域由11位標(biāo)志符和遠程發(fā)送請求位RTR組成;擴展幀仲裁域由29位標(biāo)志符和替代遠程請求SRR位、標(biāo)志位和遠程發(fā)送請求位RTR組成,如圖3所示。
標(biāo)志符作為報文的名稱,在仲裁過程期間,首先被送到總線。在接收器的驗收判斷中和仲裁過程確定訪問優(yōu)先權(quán)中都要用到。
遠程發(fā)送請求位(RTR)用來確定發(fā)送遠程幀還是數(shù)據(jù)幀:當(dāng)RTR為高電平時,CAN控制器發(fā)送遠程幀;為低電平時,發(fā)送數(shù)據(jù)幀。
數(shù)據(jù)長度碼(DLC)用來確定每幀發(fā)送幾字節(jié)的數(shù)據(jù),最多為8字節(jié)。
3.2 CAN控制器PCA82C200介紹
PCA82C200芯片是Philips公司生產(chǎn)的CAN控制器,是一種I/O設(shè)備基于內(nèi)存編址的微控制器。雙設(shè)備的獨立操作是通過像RAM一樣的片內(nèi)寄存器修正來實現(xiàn)的。它只支持標(biāo)準(zhǔn)的信息幀格式。
PCA82C200的地址區(qū)包括控制段和信息緩沖區(qū)控制段。在初始化載入時可被編程來配置通信參數(shù)(例如,位時序)。微控制器也是通過這個段來控制CAN總線上通信的。
PCA82C200有2種工作模式:復(fù)位模式和工作模式。在復(fù)位模式下可以對接收代碼、接收屏蔽、總線時序寄存器0和1以及輸出控制寄存器進行設(shè)置。一般在CAN初始化時完成對以上寄存器的設(shè)置,當(dāng)CAN進入工作模式后,它們的值就不再變化。在工作模式下可以進行數(shù)據(jù)的發(fā)送和接收。特別要注意的是當(dāng)硬件復(fù)位或控制器掉線時會自動進入復(fù)位模式,這樣就不能進行正常的CAN通信,這就要求對復(fù)位進行監(jiān)控。當(dāng)發(fā)生硬件復(fù)位或控制器掉線而進入復(fù)位模式時,就要求把復(fù)位位置為0進入工作模式,這樣CAN就能正常地發(fā)送接收了。
3.3 網(wǎng)絡(luò)通信規(guī)則
CAN總線為多主工作方式,網(wǎng)絡(luò)上任一節(jié)點均可在任意時刻主動向網(wǎng)絡(luò)上其它節(jié)點發(fā)送信息,而不分主從。通信方式靈活,且無需占地址等節(jié)點信息。為禁止總線沖突,CAN總線采用非破壞性總線仲裁技術(shù),根據(jù)需要將各個節(jié)點設(shè)定為不同的優(yōu)先級,并以標(biāo)志符ID標(biāo)定,其值越小,優(yōu)先級越高。
在本系統(tǒng)的實際應(yīng)用中,主站負責(zé)整個網(wǎng)絡(luò)。它向從站發(fā)送各種控制命令,從站按照來自主站的命令進行操作。主站可以選擇任意一個從站交換數(shù)據(jù)信息,任一從站一旦被選中,即可以接收來自主站的信息,也可以依據(jù)從站的命令和凡站回送信息。當(dāng)某一從站發(fā)生故障時,可以主動向從站發(fā)送有關(guān)信息。任一從站與主站交換信息時,必須帶上從站地址信息。
3.4 下位機軟件編程
單片機87C196NT與上位機之間的CAN通信接口程序見本刊網(wǎng)絡(luò)補充版。(http://www.dpj.com.cn)。單片機向上位機一直以500 Kbps的波特率發(fā)送數(shù)據(jù),當(dāng)單片機接收到上位機下傳的數(shù)據(jù)后,又把接收到的數(shù)據(jù)轉(zhuǎn)發(fā)給上位機。用我國臺灣研華公司的CAN卡,調(diào)試時用它自帶的Monitor程序。
結(jié)束語
將CAN現(xiàn)場總線應(yīng)用于電力系統(tǒng)線路分段保護監(jiān)控單元中,有利于實現(xiàn)電力系統(tǒng)中檢測的實時性和可靠性。在現(xiàn)有設(shè)備的基礎(chǔ)上,進一步提高了電網(wǎng)的自動化監(jiān)測和管理水平,對提高供電的可靠性、增加電網(wǎng)的經(jīng)濟效益有著重大的意義。