前言
前面已經(jīng)介紹了幾種總線協(xié)議,那現(xiàn)在如果在汽車上實(shí)際應(yīng)用一種總線協(xié)議來(lái)通訊的話,你會(huì)選擇哪一種呢?
答案是 都不行
因?yàn)樵谄囍性S多系統(tǒng)都需要實(shí)時(shí)控制,而且數(shù)據(jù)必須可靠,即使面對(duì)面對(duì)惡劣環(huán)境也要正常運(yùn)行
如何解決這個(gè)問(wèn)題呢?就要看CAN總線了
ECU
如何傳輸數(shù)據(jù)?
現(xiàn)在將車上的每個(gè)設(shè)備用一條總線連接起來(lái)
要想CAN通訊,就必須要專門(mén)的CAN收發(fā)器,經(jīng)過(guò)CAN收發(fā)器,普通信號(hào)就會(huì)轉(zhuǎn)化成差分信號(hào)(差分信號(hào)由兩根線表示)
如果輸入0,CAN收發(fā)器的兩根線分別輸出3.5V和1.5V(壓差為2V)
如果輸入1,CAN收發(fā)器的兩根線都輸出2.5V(壓差為0V)
為什么要這樣表示數(shù)據(jù)?
想象一下,如果這條線是0V,受到了干擾,電壓就會(huì)波動(dòng)
如果是兩條線纏繞在一起,用差分信號(hào)來(lái)表示數(shù)據(jù)的話,即使受到了干擾,也是兩條線一起受到干擾,依舊存在壓差
CAN數(shù)據(jù)格式
這是一幀完整的數(shù)據(jù)
最開(kāi)始是起始位(始終為0)
然后是11位的識(shí)別碼
每一個(gè)設(shè)備都有唯一的11位識(shí)別碼
緊接著是RTR位用來(lái)區(qū)分?jǐn)?shù)據(jù)幀(0)或遠(yuǎn)程請(qǐng)求幀(1)
接下來(lái)是6位控制碼
其中第一位的IDE位是用來(lái)區(qū)分是標(biāo)準(zhǔn)幀還是拓展幀(標(biāo)準(zhǔn)幀有11位的識(shí)別碼,IDE位為0;而拓展碼有29位的識(shí)別碼,IDE位為1)
下面是預(yù)留位,它是邏輯0
剩下的4位為DLC位,表示數(shù)據(jù)長(zhǎng)度
每一個(gè)數(shù)值對(duì)應(yīng)每一個(gè)字節(jié)(比如如圖數(shù)值為8,對(duì)應(yīng)數(shù)據(jù)長(zhǎng)度為8個(gè)字節(jié))
接下來(lái)是16位的CRC循環(huán)冗余校驗(yàn)位,它是為了確保收到的數(shù)據(jù)的準(zhǔn)確性
首先是15位CRC校驗(yàn)位,如果和接收到的CRC校驗(yàn)位不一致,就會(huì)重新再重發(fā)一次
最后是CRC界定位,目的是為了與后面的數(shù)據(jù)區(qū)分開(kāi)來(lái)
然后是2位ACK碼
第一位是ACK確認(rèn)槽(發(fā)送端是1,接收端就是0)用來(lái)表示應(yīng)答
第2位是ACK界定位(始終為1),目的也是為了和后面的數(shù)據(jù)區(qū)分開(kāi)來(lái),
最后是7位結(jié)束位(時(shí)鐘為1)
如果用用差分信號(hào)表示,電平是這樣的,如圖所示
如果此時(shí)總線上同時(shí)有2個(gè)設(shè)備發(fā)出控制信號(hào),究竟優(yōu)先執(zhí)行哪一個(gè)設(shè)備的信號(hào)呢?
這就得看11位的識(shí)別碼了,它不僅指定了哪個(gè)設(shè)備,還表示了優(yōu)先級(jí)
當(dāng)總線同時(shí)為1或0,總線會(huì)被置為0(即優(yōu)先執(zhí)行電平0)
總結(jié)
了解完了CAN總線,或許會(huì)有一個(gè)疑惑點(diǎn)?
CAN總線和RS485是不是有點(diǎn)相似,對(duì)吧?
雖然的確有些相似之處,但CAN總線是專門(mén)用于汽車領(lǐng)域的,就比如數(shù)據(jù)可靠性,CAN總線檢測(cè)到數(shù)據(jù)不一致,就會(huì)重新發(fā)送,而485就發(fā)一次,不管是不是正確的數(shù)據(jù)
-
收發(fā)器
+關(guān)注
關(guān)注
10文章
3424瀏覽量
105959 -
CAN總線
+關(guān)注
關(guān)注
145文章
1946瀏覽量
130726
原文標(biāo)題:秒懂CAN總線
文章出處:【微信號(hào):mcu168,微信公眾號(hào):硬件攻城獅】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論