《STM32從零開始學習歷程》@EnzoReventon
CAN通訊協議物理層
相關鏈接:
《STM32從零開始學習歷程》——CAN通訊協議協議層
CAN-bus規范 V2.0版本
CAN總線入門
周立功-CAN協議中文版
參考資料:
[野火EmbedFire]《STM32庫開發實戰指南——基于野火霸天虎開發板》
[正點原子]STM32F4開發指南-庫函式版本_V1.2
[ST]《STM32F4xx中文參考手冊》
CAN-bus規范 V2.0版本
CAN總線入門
周立功-CAN協議中文版
CAN協議簡介
CAN是控制器局域網路(Controller Area Network)的簡稱,它是由研發和生產汽車電子產品著稱的德國BOSCH公司開發的,并最終成為國際標準(ISO11519),是國際上應用最廣泛的現場總線之一,
CAN總線協議已經成為汽車計算機控制系統和嵌入式工業控制局域網的標準總線,并且擁有以CAN為底層協議專為大型貨車和重工機械車輛設計的J1939協議,近年來,它具有的高可靠性和良好的錯誤檢測能力受到重視,被廣泛應用于汽車計算機控制系統和環境溫度惡劣、電磁輻射強及振動大的工業環境,
RS485,Modbus為CAN協議的變種,
CAN物理層
與I2C、SPI等具有時鐘信號的同步通訊方式不同,CAN通訊并不是以時鐘信號來進行同步的,它是一種異步通訊,只具有CAN_High和CAN_Low兩條信號線,共同構成一組差分信號線,以差分信號的形式進行通訊,
CAN物理層的形式主要分為倍訓總線及開環總線網路兩種,一個適合于高速通訊,一個適合于遠距離通訊,
倍訓總線網路
CAN倍訓通訊網路是一種遵循ISO11898標準的高速、短距離網路,它的總線最大長度為40m,通信速度最高為1Mbps,總線的兩端各要求有一個 “120歐” 的電阻,實踐證明,倍訓總線網路也可以超越40m的通訊長度,不過將隨之犧牲其通訊速率,

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

通訊節點
CAN總線上可以掛載多個通訊節點,節點之間的信號經過總線傳輸,實作節點間通訊,由于CAN通訊協議不對節點進行地址編碼,而是對資料內容進行編碼,所以網路中的節點個數理論上不受限制,只要總線的負載足夠即可,可以通過中繼器增強負載,
CAN通訊節點由一個CAN控制器及CAN收發器組成,控制器與收發器之間通過CAN_Tx及CAN_Rx信號線相連,收發器與CAN總線之間使用CAN_High及CAN_Low信號線相連,其中CAN_Tx及CAN_Rx使用普通的類似TTL邏輯信號,而CAN_High及CAN_Low(同一個時刻只能表達同一個內容)是一對差分信號線,使用比較特別的差分信號,
當CAN節點需要發送資料時,控制器把要發送的二進制編碼通過CAN_Tx線發送到收發器,然后由收發器把這個普通的邏輯電平信號轉化成差分信號,通過差分線CAN_High和CAN_Low線輸出到CAN總線網路,而通過收發器接收總線上的資料到控制器時,則是相反的程序,收發器把總線上收到的CAN_High及CAN_Low信號轉化成普通的邏輯電平信號,通過CAN_Rx輸出到控制器中,
差分信號
差分信號又稱差模信號,與傳統使用單根信號線電壓表示邏輯的方式有區別,使用差分信號傳輸時,需要兩根信號線,這兩個信號線的振幅相等,相位相反,通過兩根信號線的電壓差值來表示邏輯0和邏輯1,

- 使用了V+與V-信號的差值表達出了圖下方的信號,
相對于單信號線傳輸的方式,使用差分信號傳輸具有如下優點:
- 抗干擾能力強,當外界存在噪聲干擾時,幾憾訓同時耦合到兩條信號線上,而接收端只關心兩個信號的差值,所以外界的共模噪聲可以被完全抵消,例如,CAN_HIGH正常通訊時為10V,CAN_LOW正常通訊時為5V,他們的電壓差為5V,我們規定電壓差大于1V時,表示邏輯1,小于1V表示邏輯0;某一時刻外界對信號線產生了-3V的強干擾,CAN_HIGH電壓為7V,CAN_LOW為2V,而他們的差值仍為5V,還是輸出邏輯1,其表示結果不受干擾影響,
- 能有效抑制它對外部的電磁干擾,同樣的道理,由于兩根信號的極性相反,他們對外輻射的電磁場可以相互抵消,耦合的越緊密,泄放到外界的電磁能量越少,
- 時序定位精確,由于差分信號的開關變化是位于兩個信號的交點,而不像普通單端信號依靠高低兩個閾值電壓判斷,因而受工藝,溫度的影響小,能降低時序上的誤差,同時也更適合于低幅度信號的電路,
- 由于差分信號線具有這些優點,所以在USB協議、485協議、以太網協議及CAN協議的物理層中,都使用了差分信號傳輸,
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總線中,必須使它處于隱性電平(邏輯1)或顯性電平(邏輯0)中的其中一個狀態,假如有兩個CAN通訊節點,在同一時間,一個輸出隱性電平,另一個輸出顯性電平,類似I2C總線的 “線與” 特性將使它處于顯性電平狀態,顯性電平的名字就是這樣來的,即可以認為顯性具有優先的意味,
-
由于CAN總線協議的物理層只有1對差分線,在一個時刻只能表示一個信號,所以對通訊節點來說,CAN通訊是半雙工的,收發資料需要分時進行,
-
在CAN的通訊網路中,因為共用總線,在整個網路中同一時刻只能有一個通訊節點發送信號,其余的節點在該時刻都只能接收,,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/279659.html
標籤:其他
