<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 如何設計基于A(yíng)T89C51型單片機的CAN總線(xiàn)智能節點(diǎn)?

如何設計基于A(yíng)T89C51型單片機的CAN總線(xiàn)智能節點(diǎn)?

作者: 時(shí)間:2018-08-02 來(lái)源:網(wǎng)絡(luò ) 收藏

1 引言

本文引用地址:http://dyxdggzs.com/article/201808/385074.htm

CAN(Controller Area Network)是控制器局域網(wǎng),主要用于各種設備檢測及控制的現場(chǎng)總線(xiàn)。是德國B(niǎo)OSCH公司20世紀80年代初為解決汽車(chē)中眾多控制與測試儀器間的數據交換而開(kāi)發(fā)的串行數據通信協(xié)議。這是一種多主總線(xiàn),無(wú)論是在高速網(wǎng)絡(luò )還是在低成本的節點(diǎn)系統,應用都很廣泛。由于采用了許多新技術(shù)及獨特的設計,與一般的通信總線(xiàn)相比,的數據通信具有突出的可靠性、實(shí)時(shí)性和靈活性,其主要特點(diǎn)如下:

●通信方式靈活,可以多主方式工作,網(wǎng)絡(luò )上任意一個(gè)節點(diǎn)均可以在任意時(shí)刻主動(dòng)向網(wǎng)絡(luò )上的其他節點(diǎn)發(fā)送信息,不分主從。

●CAN節點(diǎn)只需對報文的標識符濾波即可實(shí)現點(diǎn)對點(diǎn)、點(diǎn)對多點(diǎn)及全局廣播方式發(fā)送和接收數據,其節點(diǎn)可分成不同的優(yōu)先級,節點(diǎn)的優(yōu)先級可通過(guò)報文標識符進(jìn)行設置,優(yōu)先級高的數據最多可在134μs內傳輸,可以滿(mǎn)足不同的實(shí)時(shí)要求。

通信格式采用短幀格式,每幀字節數量多為8個(gè)字節,可滿(mǎn)足一般工業(yè)領(lǐng)域中控制命令、工作狀態(tài)及測試數據的要求,同時(shí),8個(gè)字節不會(huì )占用總線(xiàn)時(shí)間過(guò)長(cháng),保證了通信的實(shí)時(shí)性。

●采用非破壞性總線(xiàn)仲裁技術(shù),當多個(gè)節點(diǎn)同時(shí)向總線(xiàn)發(fā)送信息出現沖突時(shí),優(yōu)先級低的節點(diǎn)會(huì )主動(dòng)退出數據發(fā)送,而優(yōu)先級高的節點(diǎn)可不受影響地繼續傳輸數據,大大節省了總線(xiàn)沖突仲裁時(shí)間,在網(wǎng)絡(luò )重載的情況下也不會(huì )出現網(wǎng)絡(luò )癱瘓。

●直接通信距離最大可達10 km (速率在5 kb/s以下),最高通信速率可達1 Mb/s (此時(shí)距離最長(cháng)為40 m);節點(diǎn)數可達110個(gè),通信介質(zhì)可以是雙絞線(xiàn)、同軸電纜或光導纖維。

●CAN總線(xiàn)采用CRC檢驗并可提供相應的錯誤處理功能,保證數據通信的可靠性,其節點(diǎn)在錯誤嚴重的情況下具有自動(dòng)關(guān)閉輸出功能,使總線(xiàn)上其他節點(diǎn)的操作不受影響。

2 CAN總線(xiàn)系統結構

由于CAN總線(xiàn)采用多主方式工作,所以具有與DCS(分布式控制系統)不一樣的拓撲結構。其控制系統由計算機和組成,如圖1所示。該系統最大的特點(diǎn)是所有的節點(diǎn)都能以平等的地位掛接在總線(xiàn)上。1個(gè)總線(xiàn)節點(diǎn)通常至少包括3部分:控制節點(diǎn)任務(wù)的單片機、總線(xiàn)控制器及總線(xiàn)驅動(dòng)器。本文主要介紹CAN總線(xiàn)的簡(jiǎn)單設計。由89C5l型單片機、SJA1000型總線(xiàn)控制器、82C250型總線(xiàn)驅動(dòng)器及PC構成。在實(shí)際應用中可以連接不同的傳感器件,完成數據的采集和傳輸。

3 硬件電路設計

筆者設計的CAN總線(xiàn)系統智能節點(diǎn)采用Intel公司的型單片機作為節點(diǎn)的微處理器。具有64KB的尋址空間。本身不帶CAN控制器,所以要實(shí)現與CAN總線(xiàn)之間的通信需外加CAN控制器和CAN驅動(dòng)器。在本設計中采用SJAl000型CAN總線(xiàn)通信控制器和AT82C250型總線(xiàn)驅動(dòng)器。

CAN總線(xiàn)系統智能節點(diǎn)硬件電路如圖2所示。從圖2可以看出,硬件電路主要由、SJAl000、AT82C250、6N137型高速光電耦合器和MAX202型電平轉換器件組成。AT89C51負責SJAl000的初始化,控制SJAl000實(shí)現數據的接收和發(fā)送等通信任務(wù)。MAX202用于TTL電平與RS232電平的相互轉換,可以將接收的數據顯示在PC上。SJAl000的ADO-AD7連接到AT89C51的P0口,CS連接到AT89C51的P2.7。P2.7為0時(shí),CPU片外存儲器地址可選中SJA1000,CPU通過(guò)這些地址可對SJAl000執行相應的讀/寫(xiě)操作。

SJAl000的RD、WR、ALE分別與AT89C51的相應引腳相連,SJAl000的INT接AT89C51的INTl,AT89C51也可通過(guò)中斷方式訪(fǎng)問(wèn)SJA1000。

為了增強總線(xiàn)節點(diǎn)的抗干擾能力,SJAl000的TX0和RX0并不直接與82C250的TXD和RXD相接,而是通過(guò)6N137與AT82C250相接,這樣,很好地實(shí)現了總線(xiàn)上各節點(diǎn)間的電氣隔離。不過(guò),光耦電路用的2個(gè)電源VCC和VDD必須隔離。電源的完全隔離可采用小功率電源隔離模塊實(shí)現。這雖然增加了接口電路的復雜性,但卻提高了節點(diǎn)的穩定性和安全性。

AT82C250與總線(xiàn)的接口也采取了一定的安全和抗干擾措施。

AT82C250的CANH引腳和CANL引腳各自通過(guò)1只5 Ω的電阻器與總線(xiàn)相連,電阻器可起到一定的限流作用,保護AT82C250免受過(guò)電流沖擊。CANH和CANL與地之間并聯(lián)了2只30pF的小電容器,可以濾除總線(xiàn)上的高頻干擾并具有一定的防電磁輻射能力。另外,在2條CAN總線(xiàn)輸入端與地之間分別接了1個(gè)防雷擊管,當2個(gè)輸入端與地之間出現瞬變干擾時(shí),防雷擊管的放電起到一定的保護作用。AT82C250的RS引腳接1只斜率電阻器,其阻值的大小可根據總線(xiàn)通信速度適當調整,一般在16 kΩ~140 kΩ之間。

4 軟件設計

4.1 網(wǎng)絡(luò )通信規則

CAN總線(xiàn)為多主工作方式,網(wǎng)絡(luò )上任一節點(diǎn)均可在任意時(shí)刻主動(dòng)向網(wǎng)絡(luò )上其他節點(diǎn)發(fā)送信息而不分主從,通信方式靈活。為禁止總線(xiàn)沖突,CAN總線(xiàn)采用非破壞性總線(xiàn)仲裁技術(shù),根據需要將各個(gè)節點(diǎn)設定為不同的優(yōu)先級,并以標識符ID標定,其值越小,優(yōu)先級越高??偩€(xiàn)的節點(diǎn)之間可以進(jìn)行實(shí)時(shí)相互通信,當1個(gè)節點(diǎn)需要接收另1個(gè)節點(diǎn)的數據時(shí),只需把其代碼寄存器的內容設置成和另1節點(diǎn)的標識符一致即可。如果對于標識符和其代碼寄存器的內容設置不一致,則節點(diǎn)所發(fā)的數據不予理會(huì )。

4.2 SJAl000的工作模式設置

SJAl000有二種工作模式:復位模式和工作模式。在復位模式下可對接收代碼、接收屏蔽、總線(xiàn)時(shí)序寄存器O和1及輸出控制寄存器進(jìn)行設置。一般在CAN初始化時(shí)完成對以上寄存器的設置,當CAN進(jìn)入工作模式后,它們的值就不再變化。在工作模式下可進(jìn)行數據的發(fā)送和接收。特別要注意的是:當硬件復位或控制器掉線(xiàn)時(shí)會(huì )自動(dòng)進(jìn)入復位模式,這樣就不能進(jìn)行正常的CAN通信,這就要求對復位位進(jìn)行監控。當發(fā)生硬件復位或控制器掉線(xiàn)而進(jìn)入復位模式時(shí),要求把復位位置為0并進(jìn)入工作模式,這樣CAN就能進(jìn)行正常發(fā)送和接收。

4.3 基于C語(yǔ)言的軟件編程

系統軟件的設計思想是系統上電后首先對AT89C51和SJAl000進(jìn)行初始化,以確定工作主頻、波特率、輸出特性等。其中任一智能節點(diǎn)可以利用查詢(xún)方式通過(guò)SJAl000從CAN總線(xiàn)上獲取所需的數據并把該數據傳送到PC上顯示,同時(shí)可以向總線(xiàn)上發(fā)送數據以供其他智能節點(diǎn)接收顯示。以下是具體實(shí)現程序。

以上就是進(jìn)行試驗的程序,其中reg51.h是為AT89C52主控制器專(zhuān)門(mén)編寫(xiě)的庫函數,它在Keil軟件中是現成的,只要用#include語(yǔ)句包括進(jìn)來(lái)即可;intrins.h是為以后調用空函數_nop_()作準備,它里面包括了類(lèi)似于匯編語(yǔ)言的NOP語(yǔ)句;CAN_TOUWENJIAN.h是頭文件,用于對相關(guān)寄存器的定義。Tx_DATA_CAN()函數用于向總線(xiàn)發(fā)送數據,REC_DATA_CAN()函數用于從總線(xiàn)接收數據,SERIAL()用于PC與智能節點(diǎn)間的相互通信。限于篇幅,發(fā)送子程序和接收子程序沒(méi)有具體給出。


上一頁(yè) 1 2 下一頁(yè)

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>