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