CAN(“Controller Area Network”,
控制器局域網(wǎng))
作用:將整車中各種不同的控制器連接起來,實現(xiàn)信息的可靠共享,并減少整車線束數(shù)量??梢栽O(shè)想一種極端情況,如下圖所示:
如:果整車上所有的用電設(shè)備都是一個獨立的
CAN總線節(jié)點,并且每一個節(jié)點都向外發(fā)送自己當(dāng)前的狀態(tài),并接受來自外部的信息, 那么整車的控制只需要一條CAN總線控制線和電源線就可以了!
CAN總線的基本工作原理
CAN總線的通信通過一種類似于“會議” 的機(jī)制實現(xiàn)的,只不過會議的過程并不是由一方(
節(jié)點)主導(dǎo),而 是,每一個會議參加人員都可以自由的提出會議議題(
多主通信模式),二者對應(yīng)關(guān)系如下:
CAN總線工作流程
CAN總線的優(yōu)勢
-
數(shù)據(jù)傳輸速度高1Mbit/s,距離遠(yuǎn)
-
抗干擾能力強(qiáng)(差分?jǐn)?shù)據(jù)線)
-
具有自我診斷能力(錯誤偵測)
CAN總線網(wǎng)絡(luò)結(jié)構(gòu)
01 CAN總線網(wǎng)絡(luò)節(jié)點結(jié)構(gòu)
02 為何CAN收發(fā)器
照BOSCH CAN總線標(biāo)準(zhǔn)將0或1邏輯信號轉(zhuǎn)換為標(biāo)準(zhǔn)中規(guī)定的電平,同時有反饋功能
CAN總線上的電平
CAN2.0A/B標(biāo)準(zhǔn)規(guī)定:總線空閑時,CAN_H和CAN_L上的電壓為2.5V
在數(shù)據(jù)傳輸時,顯性電平(邏輯 0):CAN_H 3.5V CAN_L 1.5V
隱性電平(邏輯 1):CAN_H 2.5V CAN_L 2.5V
03總線長度的思考
影響總線長度的主要因素:
(1)CAN總線通信的應(yīng)答機(jī)制,即成功接收到一幀報文的節(jié)點必須在 應(yīng)答場的”應(yīng)答間隙“期間發(fā)送一位“顯性位”表示成功接收到一幀數(shù)據(jù)
如:通信速率為250Kbit/s,傳送一個bit所需時間為:1/250×1000 = 4μ 那么,該信號在總線上的延時時間必須小于(2μ?)才能保證發(fā)送節(jié)點成功的在應(yīng)答間隙期間接收到該“顯性電平”。
任何一根導(dǎo)線都可以簡化為左圖所示的電路模型,可以看到,其中既有電感又有電容,因此,電流在其中傳輸并不是光速,而是需要一定的時間。
對于雙絞線而言,信號在其中的傳播延時時間約為,5ns/m(典型值)。當(dāng)通信速率達(dá)到1Mbit/s時,40m的總線長度, 延時時間就達(dá)到200ns,而允許延時時間為600ns左右,還是不能不考慮的!
由上面的分析可知:
總線通信速率越高,通信距離越短,對物理傳輸線的要求就越高,在雙絞線、屏蔽線還是其他的傳輸線選擇上,通信速率是一個很關(guān)鍵的參數(shù)。
影響總線長度的其他因素:
-
信號在節(jié)點ECU內(nèi)部的延時時間
-
振蕩器的容差(各個節(jié)點ECU內(nèi)部晶振頻率的差別) 這些因素加起來就形成了CAN總線通信中總的信號延時。
CAN總線的硬件抗干擾
共模電感作用:共模電壓有較大的感 抗,差模電壓感抗為零,相當(dāng)于電感濾波。對共模電流有較大的阻礙作用。
終 端 電阻 120 歐姆并非固定不變,這跟使用的導(dǎo)線有關(guān)!
總線長度的限制——位定時、同步
CAN總線控制器按照時間片的概念將每一個bit的時間劃分成了n個時間片。這樣做的目的就是為了實現(xiàn)CAN總線的同步、保證不同節(jié)點間時間的一致性。
如:晶振和CAN CLOCK,頻率均為4MHz,那么每一個時間片最小時間就為0.25μs,通信波特率為250Kbit/s,那么每一個bit的時間就為4μs, 因此,每一個bit的總的時間片數(shù)目就為16。當(dāng)然可以進(jìn)一步提高晶振頻率,使得每一個bit被劃分的更加細(xì)致。
CAN2.0A/B將每一個bit的時間劃分成了4段,同步段、傳輸段、相位段1和相位段2,每一段占用一定的時間片
Can總線報文幀結(jié)構(gòu)
CAN總線共有四種報文:
1 數(shù)據(jù)幀
2 遠(yuǎn)程幀
3 錯誤幀
4 過載幀
數(shù)據(jù)幀定義
幀起始:1bit。從圖中看出,在幀間隙后由邏輯1(至少兩個bit)向邏輯 0 的跳變就被認(rèn)為是幀起始,它的作用就是為了硬同步。
仲裁場:由29bit的ID標(biāo)示符和IDE、SRR、RTR位構(gòu)成。IDE位用于標(biāo)示該幀是擴(kuò)展幀(29bit ID)還是標(biāo)準(zhǔn)幀(11bit ID);SRR在擴(kuò)展幀 中 為 一 隱 性 位 ;R T R 位 為 遠(yuǎn) 程 幀 標(biāo) 志 位 。
由上圖可以看出,11bit的基本ID首先被發(fā)送(ID28~ID18),然后在發(fā)送18bit的擴(kuò)展ID(ID17~ID0)
CAN總線的仲裁機(jī)制
要點
(1)首先發(fā)送ID的29位,優(yōu)先級問題
(2)總線電平由誰決定
CAN總線總裁機(jī)制的實現(xiàn)也就實現(xiàn)了CAN總線的多主機(jī)模式,總線節(jié)點不存在誰主誰從的概念
注意:我們可以人為的給29位的ID賦予一定的意義從而區(qū)分不同的報文類型!
報文濾波
報文濾波可以通過軟件編程的方式實現(xiàn),也可以通過硬件(芯片內(nèi)部的報文濾波寄存器)實現(xiàn),但二者實現(xiàn)的原理是相同的,如下圖所示:
數(shù)據(jù)幀中的其他場作用
控制場:包括兩位保留位(必須為0),和數(shù)據(jù)長度位(DLC0~DLC3) 數(shù)據(jù)場:包括最多8個字節(jié)的數(shù)據(jù)
CRC場:是一種算法,對數(shù)據(jù)進(jìn)行CRC校驗,共15bit,其后跟了一位CRC界定符——為1(隱性電平)
應(yīng)答場:為兩個1(總線電平為低電平),其中一位為應(yīng)答間隙,另一位為應(yīng)答界定符。成功接收到數(shù)據(jù)的節(jié)點必須發(fā)送一位顯性位(總線電平為高電平)
來應(yīng)答該發(fā)送節(jié)點,必須注意:該顯性位必須在應(yīng)答間隙期間, 即1bit的時間內(nèi)將總線電平拉高。幀結(jié)尾:7個連續(xù)的1組成(隱性電平)
CAN總線的偵聽機(jī)制—支持仲裁及錯誤檢查
幀聽就是發(fā)出去的數(shù)據(jù)再采樣回來,比較采樣回來的數(shù)據(jù)是否和發(fā)出的數(shù)據(jù)一致!
CAN總線錯誤檢測
CAN總線通過如下幾個方面進(jìn)行
錯誤檢測
當(dāng)節(jié)點贏得總線發(fā)送權(quán)后,會對總線電平進(jìn)行檢測,當(dāng)發(fā)送的電平和檢測到的總線電平不一致時,認(rèn)為錯誤;
出現(xiàn)6個連續(xù)相同的電平時,認(rèn)為是填充錯誤;
CRC錯誤,接收數(shù)據(jù)的節(jié)點按照與發(fā)送數(shù)據(jù)的節(jié)點相同的方法計算數(shù)據(jù)的CRC校驗值,如果接收節(jié)點的計算結(jié)果與數(shù)據(jù)包中CRC場的數(shù)據(jù)不一致, 認(rèn)為是CRC錯誤;
應(yīng)答錯誤,在應(yīng)答場如果沒有監(jiān)控到一個顯性電平,那么就認(rèn)定一個應(yīng)答錯誤;
固定位錯誤,例如:CRC界定符等,其電平是固定的,當(dāng)監(jiān)控到該電平不相符時,認(rèn)定一個錯誤;
另:總線同步機(jī)制也是CAN總線容錯的一種方式;
注意:通過上面5種錯誤檢測機(jī)制,發(fā)送節(jié)點和接收節(jié)點均可以檢測到總線上的錯誤,并通過錯誤的累加來實現(xiàn)總線節(jié)點的關(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
由上面的計算可知,當(dāng)10ms間隔的報文數(shù)量超過19條時,就會出現(xiàn)丟幀,總線飽和。
計算報文數(shù)量也是設(shè)計CAN網(wǎng)絡(luò)所要考慮的,可以查閱相關(guān)文獻(xiàn)看負(fù)載率在多少時合適
來源:頭條 億佰特物聯(lián)網(wǎng)實驗室
—— The End ——