什么是CAN(控制器局域網(wǎng))
控制器局域網(wǎng) (Controller Area Network,簡稱CAN或者CAN bus) 是一種功能豐富的車用總線標(biāo)準(zhǔn)。被設(shè)計用于在不需要主機(Host)的情況下,允許網(wǎng)絡(luò)上的單片機和儀器相互通信。 它基于消息傳遞協(xié)議,設(shè)計之初在車輛上采用復(fù)用通信線纜,以降低銅線使用量,后來也被其他行業(yè)所使用。CAN創(chuàng)建在基于信息導(dǎo)向傳輸協(xié)定的廣播機制(Broadcast Communication Mechanism)上。其根據(jù)信息的內(nèi)容,利用信息標(biāo)志符(Message Identifier,每個標(biāo)志符在整個網(wǎng)絡(luò)中獨一無二)來定義內(nèi)容和消息的優(yōu)先順序進(jìn)行傳遞,而并非指派特定站點地址(Station Address)的方式。因此,CAN擁有了良好的彈性調(diào)整能力,可以在現(xiàn)有網(wǎng)絡(luò)中增加節(jié)點而不用在軟、硬件上做出調(diào)整。除此之外,消息的傳遞不基于特殊種類的節(jié)點,增加了升級網(wǎng)絡(luò)的便利性。
優(yōu)勢及特點
特點:
1.CAN是一個用于連接電子控制單元(ECU)的多主機串行總線標(biāo)準(zhǔn)。電子控制單元有時也被稱作節(jié)點。CAN網(wǎng)絡(luò)上需要至少兩個節(jié)點才可進(jìn)行通信。節(jié)點的復(fù)雜程度可以只是簡單的輸入輸出設(shè)備,也可以是包含有CAN交互器并搭載了軟件的嵌入式組件。所有節(jié)點通過兩根平行的總線連接在一起。兩條電線組成一條雙絞線,并且接有120Ω的特性抗。
2.數(shù)據(jù)通信沒有主從之分,任意一個節(jié)點可以向任何其他(一個或多個)節(jié)點發(fā)起數(shù)據(jù)通信,靠各個節(jié)點信息優(yōu)先級先后順序來決定通信次序。
3.多個節(jié)點同時發(fā)起通信時,優(yōu)先級低的避讓優(yōu)先級高的,不會對通信線路造成擁塞。
4.通信距離最遠(yuǎn)可達(dá)10KM(速率低于5Kbps)速率可達(dá)到1Mbps(通信距離小于40M)。
5.CAN總線傳輸介質(zhì)可以是雙絞線,同軸電纜,CAN總線適用于大數(shù)據(jù)量短距離通信或者長距離小數(shù)據(jù)量,實時性要求比較高,多主多從或者各個節(jié)點平等的現(xiàn)場中使用。
優(yōu)勢:
1.可在各節(jié)點之間實現(xiàn)自由通信:CAN協(xié)議的一個最大特點是廢除了傳統(tǒng)的站地址編碼,而代之以對通信數(shù)據(jù)塊進(jìn)行編碼。采用這種方法的優(yōu)點可使網(wǎng)絡(luò)內(nèi)的節(jié)點個數(shù)在理論上不受限制,數(shù)據(jù)塊的標(biāo)識符可由11位或29位二進(jìn)制數(shù)組成,因此可以定義2或2個以上不同的數(shù)據(jù)塊,這種按數(shù)據(jù)塊編碼的方式,還可使不同的節(jié)點同時接收到相同的數(shù)據(jù),這一點在分布式控制系統(tǒng)中非常有用。
2.結(jié)構(gòu)簡單:只有2根線與外部相連,并且內(nèi)部集成了錯誤探測和管理模塊。
3.數(shù)據(jù)糾錯:采用雙線串行通信方式,檢錯能力強,可在高噪聲干擾環(huán)境中工作,每幀數(shù)據(jù)都有CRC校驗及其他檢錯措施,保證了數(shù)據(jù)傳輸?shù)母呖煽啃?,適于在高干擾環(huán)境下使用。
4.完成對通信數(shù)據(jù)的成幀處理:CAN總線通信接口中集成了CAN協(xié)議的物理層和數(shù)據(jù)鏈路層功能,可完成對通信數(shù)據(jù)的成幀處理,包括位填充、數(shù)據(jù)塊編碼、循環(huán)冗余檢驗、優(yōu)先級判別等項工作。
5.節(jié)點在錯誤嚴(yán)重的情況下,具有自動關(guān)閉總線的功能,切斷它與總線的聯(lián)系,以使總線上其他操作不受影響,可以點對點,一對多及廣播集中方式傳送和接受數(shù)據(jù)。
CAN總線的數(shù)據(jù)格式與基本工作原理
數(shù)據(jù)格式:
1.CAN-bus通信幀共分為數(shù)據(jù)幀、遠(yuǎn)程幀、錯誤幀、過載幀和幀間隔。
2.數(shù)據(jù)幀:結(jié)構(gòu)上由7個段組成,其中根據(jù)仲裁段ID碼長度的不同,分為標(biāo)準(zhǔn)幀(CAN2.0A)和擴(kuò)展幀(CAN2.0B)結(jié)構(gòu)上由7個段組成,其中根據(jù)仲裁段ID碼長度的不同,分為標(biāo)準(zhǔn)幀(CAN2.0A)和擴(kuò)展幀(CAN2.0B)。標(biāo)準(zhǔn)幀為11位,擴(kuò)展幀為29位。這也是我們在使用中接觸最多的格式。
3.遠(yuǎn)程幀:與數(shù)據(jù)幀相比沒有數(shù)據(jù)段,結(jié)構(gòu)上由7個段組成。當(dāng)你需要總線上的一個節(jié)點向你發(fā)送數(shù)據(jù),使用次節(jié)點的ID,發(fā)送一幀遠(yuǎn)程幀。
4.錯誤幀:雖然CAN總線是可靠性很高的總線,但是依然會出錯:CAN總線上會出現(xiàn)5種錯誤。
5.過載幀和幀間隔:過載幀:當(dāng)某個節(jié)點沒有做好接收下幀數(shù)據(jù)將發(fā)送過載幀通知節(jié)點。幀間隔:只存在于數(shù)據(jù)幀與遠(yuǎn)程幀之間,用于幀之間的分離。
基本工作原理:
跟其他總線一樣,CAN總線的通信也是通過一種類似于“會議” 的機制實現(xiàn)的,只不過會議的過程并不是由一方(節(jié)點)主導(dǎo),而 是,每一個會議參加人員都可以自由的提出會議議題(多主通信模式),二者對應(yīng)關(guān)系如下:
仲裁與優(yōu)先級
假設(shè)節(jié)點A、B和C都發(fā)送相同格式相同類型的幀,如標(biāo)準(zhǔn)格式數(shù)據(jù)幀,它們競爭總線的過程是
CAN收發(fā)器:
照BOSCH CAN總線標(biāo)準(zhǔn)將0或1邏輯信號轉(zhuǎn)換為標(biāo)準(zhǔn)中規(guī)定的電平,同時有反饋功能。
CAN總線的硬件抗干擾:
(1)在電路中增加共模電感。
(2)使用更高精度的電阻。
注意:并不是每個節(jié)點都需要增加電阻,只需要在總線相聚最遠(yuǎn)的兩個節(jié)點使用電阻即可。
電阻也不是固定的120歐姆,根據(jù)導(dǎo)線的材質(zhì)有關(guān)。
CAN總線負(fù)載率計算
計算例子:
假設(shè)CAN總線波特率為250Kbit/s,總線報文發(fā)送時間間隔為10ms, 報文為數(shù)據(jù)幀(8個字節(jié)數(shù)據(jù)),那么10ms內(nèi)總線能夠支持的最大報文數(shù)量為多少?
第一步:根據(jù)通信波特率計算10ms總共可以發(fā)送多少bit (250000/1000)*10 = 2500bit
第二步:計算最長的一幀報文有多少個bit
1sof + 29id + 1ide + 1rtr + 1srr + 2r + 4dlc + 8*8data
+ 16crc + 2ack + 7eof = 128bit
第三步:計算10ms內(nèi)可以支持的報文數(shù)目
2500/128 ≈ 19