CAN的實現原理是什么?說一下CAN總線的特點有哪些?

2023-08-14 15:10:01 來源:那個混子

先簡單的說一下概念定義

CAN總線:CAN 是Controller Area Network的縮寫(以下稱為 CAN),是 ISO1 國際標準化的串行通信協議。 在當前的汽車產業中,出于對安全性、舒適性、方便性、低公害、低成本的要求,各種各樣的電子控制系統被開發了出來。為適應 “減少線束的數量”、“通過多個 LAN,進行大量數據的高速通信”的需要,1986 年德國電氣商博世公司開發出面向汽車的 CAN 通信協議。此后,CAN 通過 ISO11898 及 ISO11519進行了標準化,現在在歐洲已是汽車網絡的標準協議。


(相關資料圖)

應用:

現在,CAN 的高性能和可靠性已被認同,并被廣泛地應用于工業自動化、船舶、醫療設備、工業設備等方面。

CAN的實現原理

CAN 控制器根據兩根線上的電位差來判斷總線電平。總線電平分為顯性電平和隱性電平,二者必居其一。發送方通過使總線電平發生變化,將消息發送給接收方。 這個可能要引入一個概念 差分信號,至于顯性隱形這里大家可能暫時不要關心,但是如果你玩過單片機你應該要猜到高低電平的概念,這個類似但不是,可以對比理解。

差分信號:

差分傳輸是一種信號傳輸的技術,區別于傳統的一根信號線一根地線的做法,差分傳輸在這兩根線上都傳輸信號,這兩個信號的振幅相等,相位相差180度,極性相反。在這兩根線上傳輸的信號就是差分信號。(類比雙絞線理解吧)

通俗易懂的說就說:這種信號不是來自一條線,而是兩條線的差值才是我們需要的信號!

那么他的優點就很好理解了,在一個環境中,如果受外界干擾,兩條線上的電平是同時發生變化的嘛,然后這種干擾絲毫是不影響兩個線的差值的,類似與等號的同加同減性。類似于3-1=2,我們干擾了比如說就相當于削弱了0.5的信號,那結果(3-0.5)-(1-0.5)=2,結果也是一樣的。

接下來說一下CAN總線的特點:

1) 多主控制。在總線空閑時,所有單元都可以發送消息(多主控制),而兩個以上的單元同時開始發送消息時,根據標識符(Identifier 以下稱為 ID)決定優先級。ID 并不是表示發送的目的地址,而是表示訪問總線的消息的優先級。兩個以上的單元同時開始發送消息時,對各消息ID 的每個位進行逐個仲裁比較。仲裁獲勝(被判定為優先級最高)的單元可繼續發送消息,仲裁失利的單元則立刻停止發送而進行接收工作。 2) 系統的柔軟性。與總線相連的單元沒有類似于“地址”的信息。因此在總線上增加單元時,連接在總線上的其它單元的軟硬件及應用層都不需要改變。 3) 通信速度較快,通信距離遠。最高1Mbps(距離小于40M),最遠可達10KM(速率低于5Kbps)。 4) 具有錯誤檢測、錯誤通知和錯誤恢復功能。所有單元都可以檢測錯誤(錯誤檢測功能),檢測出錯誤的單元會立即同時通知其他所有單元(錯誤通知功能),正在發送消息的單元一旦檢測出錯誤,會強制結束當前的發送。強制結束發送的單元會不斷反復地重新發送此消息直到成功發送為止(錯誤恢復功能)。 5) 故障封閉功能。CAN 可以判斷出錯誤的類型是總線上暫時的數據錯誤(如外部噪聲等)還是持續的數據錯誤(如單元內部故障、驅動器故障、斷線等)。由此功能,當總線上發生持續數據錯誤時,可將引起此故障的單元從總線上隔離出去。 6) 連接節點多。CAN 總線是可同時連接多個單元的總線。可連接的單元總數理論上是沒有限制的。但實際上可連接的單元數受總線上的時間延遲及電氣負載的限制。降低通信速度,可連接的單元數增加;提高通信速度,則可連接的單元數減少。

CAN物理層

I2C、SPI等具有時鐘信號的同步通訊方式不同,CAN通訊并不是以時鐘信號來進行同步的,它是一種異步通訊,只具有CAN_High和CAN_Low兩條信號線,共同構成一組差分信號線,以差分信號的形式進行通訊。

1. 閉環總線網絡

CAN物理層的形式主要有兩種,圖 中的CAN通訊網絡是一種遵循ISO11898標準的高速、短距離"閉環網絡",它的總線最大長度為40m,通信速度最高為1Mbps,總線的兩端各要求有一個"120歐"的電阻

CAN閉環總線通訊網絡

2. 開環總線網絡

圖中的是遵循ISO11519-2標準的低速、遠距離"開環網絡",它的最大傳輸距離為1km,最高通訊速率為125kbps,兩根總線是獨立的、不形成閉環,要求每根總線上各串聯有一個"2.2千歐"的電阻。

CAN開環總線通訊網絡

兩種標準的電平特性

3. CAN協議中的差分信號

CAN協議中對它使用的CAN_High及CAN_Low表示的差分信號做了規定。 以高速CAN協議為例,當表示邏輯1時(隱性電平),CAN_High和CAN_Low線上的電壓均為2.5v,即它們的電壓差VH-VL=0V;而表示邏輯0時(顯性電平),CAN_High的電平為3.5V,CAN_Low線的電平為1.5V,即它們的電壓差為VH-VL=2V。 例如,當CAN收發器從CAN_Tx線接收到來自CAN控制器的低電平信號時(邏輯0),它會使CAN_High輸出3.5V,同時CAN_Low輸出1.5V,從而輸出顯性電平表示邏輯0。

CAN的差分信號(高速)

在CAN總線中,必須使它處于隱性電平(邏輯1)或顯性電平(邏輯0)中的其中一個狀態。假如有兩個CAN通訊節點,在同一時間,一個輸出隱性電平,另一個輸出顯性電平,類似I2C總線的"線與"特性將使它處于顯性電平狀態,顯性電平的名字就是這樣來的,即可以認為顯性具有優先的意味。

由于CAN總線協議的物理層只有1對差分線,在一個時刻只能表示一個信號,所以對通訊節點來說,CAN通訊是半雙工的,收發數據需要分時進行。在CAN的通訊網絡中,因為共用總線,在整個網絡中同一時刻只能有一個通訊節點發送信號,其余的節點在該時刻都只能接收。

協議層方面的東西

1. CAN的波特率及位同步

由于CAN屬于異步通訊,沒有時鐘信號線,連接在同一個總線網絡中的各個節點會像串口異步通訊那樣,節點間使用約定好的波特率進行通訊,特別地,CAN還會使用"位同步"的方式來抗干擾、吸收誤差,實現對總線電平信號進行正確的采樣,確保通訊正常。

位時序分解

為了實現位同步,CAN協議把每一個數據位的時序分解成如圖 405所示的SS段、PTS段、PBS1段、PBS2段,這四段的長度加起來即為一個CAN數據位的長度。分解后最小的時間單位是Tq,而一個完整的位由8~25個Tq組成。為方便表示,圖中的高低電平直接代表信號邏輯0或邏輯1(不是差分信號)。

CAN位時序分解圖

該圖中表示的CAN通訊信號每一個數據位的長度為19Tq,其中SS段占1Tq,PTS段占6Tq,PBS1段占5Tq,PBS2段占7Tq。信號的采樣點位于PBS1段與PBS2段之間,通過控制各段的長度,可以對采樣點的位置進行偏移,以便準確地采樣。

各段的作用如介紹下:

? SS段(SYNC SEG) SS譯為同步段,若通訊節點檢測到總線上信號的跳變沿被包含在SS段的范圍之內,則表示節點與總線的時序是同步的,當節點與總線同步時,采樣點采集到的總線電平即可被確定為該位的電平。SS段的大小固定為1Tq。

? PTS段(PROP SEG) PTS譯為傳播時間段,這個時間段是用于補償網絡的物理延時時間。是總線上輸入比較器延時和輸出驅動器延時總和的兩倍。PTS段的大小可以為1~8Tq。

? PBS1段(PHASE SEG1), PBS1譯為相位緩沖段,主要用來補償邊沿階段的誤差,它的時間長度在重新同步的時候可以加長。PBS1段的初始大小可以為1~8Tq。

? PBS2段(PHASE SEG2) PBS2這是另一個相位緩沖段,也是用來補償邊沿階段誤差的,它的時間長度在重新同步時可以縮短。PBS2段的初始大小可以為2~8Tq。

通訊的波特率

總線上的各個通訊節點只要約定好1個Tq的時間長度以及每一個數據位占據多少個Tq,就可以確定CAN通訊的波特率。 例如,假設上圖中的1Tq=1us,而每個數據位由19個Tq組成,則傳輸一位數據需要時間T1bit =19us,從而每秒可以傳輸的數據位個數為:

1x10 6/19 = 52631.6 (bps)

這個每秒可傳輸的數據位的個數即為通訊中的波特率。

同步過程分析

波特率只是約定了每個數據位的長度,數據同步還涉及到相位的細節,這個時候就需要用到數據位內的SS、PTS、PBS1及PBS2段了。 根據對段的應用方式差異,CAN的數據同步分為硬同步和重新同步。其中硬同步只是當存在"幀起始信號"時起作用,無法確保后續一連串的位時序都是同步的,而重新同步方式可解決該問題,這兩種方式具體介紹如下:

(1) 硬同步

若某個CAN節點通過總線發送數據時,它會發送一個表示通訊起始的信號(即下一小節介紹的幀起始信號),該信號是一個由高變低的下降沿。而掛載到CAN總線上的通訊節點在不發送數據時,會時刻檢測總線上的信號。 見下圖,可以看到當總線出現幀起始信號時,某節點檢測到總線的幀起始信號不在節點內部時序的SS段范圍,所以判斷它自己的內部時序與總線不同步,因而這個狀態的采樣點采集得的數據是不正確的。所以節點以硬同步的方式調整,把自己的位時序中的SS段平移至總線出現下降沿的部分,獲得同步,同步后采樣點就可以采集得正確數據了。

硬同步過程圖

(2) 重新同步

前面的硬同步只是當存在幀起始信號時才起作用,如果在一幀很長的數據內,節點信號與總線信號相位有偏移時,這種同步方式就無能為力了。因而需要引入重新同步方式,它利用普通數據位的高至低電平的跳變沿來同步(幀起始信號是特殊的跳變沿)。重新同步與硬同步方式相似的地方是它們都使用SS段來進行檢測,同步的目的都是使節點內的SS段把跳變沿包含起來。

重新同步的方式分為超前和滯后兩種情況,以總線跳變沿與SS段的相對位置進行區分。第一種相位超前的情況如圖,節點從總線的邊沿跳變中,檢測到它內部的時序比總線的時序相對超前2Tq,這時控制器在下一個位時序中的PBS1段增加2Tq的時間長度,使得節點與總線時序重新同步。

相位超前時的重新同步

第二種相位滯后的情況如圖 408,節點從總線的邊沿跳變中,檢測到它的時序比總線的時序相對滯后2Tq,這時控制器在前一個位時序中的PBS2段減少2Tq的時間長度,獲得同步。

相位滯后時的重新同步

在重新同步的時候,PBS1和PBS2中增加或減少的這段時間長度被定義為"重新同步補償寬度SJW (reSynchronization Jump Width)"。一般來說CAN控制器會限定SJW的最大值,如限定了最大SJW=3Tq時,單次同步調整的時候不能增加或減少超過3Tq的時間長度,若有需要,控制器會通過多次小幅度調整來實現同步。當控制器設置的SJW極限值較大時,可以吸收的誤差加大,但通訊的速度會下降。

、、、、、、、、、

未完待續!

小結:

由于時間關系,混子明天還上班的,就大概列舉到這里,部分東西也是引用網上的,自己也看過一些,大家也可以去搜了看看,野火的關于這方面的講解還是可以,還有推介文檔《CAN入門》、《CAN基礎》,這些可以去細看。 如果你只是作為一個了解的話,你掌握這個文章的協議層以上的東西就可以,大概能夠說出來點東西,大概知道是怎么個回事就可以,當然如果你要深入了解什么的可以鉆研,如果你只是想用起來它,實際上沒得這種復雜,因為它就是一種總線而已,很多說的那些功能都已經實現的了,我們更多的是在應用層進行開發使用。 嗯,就記錄到這里,后面我有時間再接著寫一下CAN報文、數據幀的格式等相關的東西,就結束了!

標簽:

上一篇:六相永磁同步電機降階模型ECE抽取方法
下一篇:最后一頁