CAN總線在硬件系統中占有一席之地,國際上應用最廣泛的現場總線之一,與我們講過的SPI、UART不同,屬于"高端高效"系列。很多小夥伴希望我們講講CAN總線,今天就來了。
一句話總結:CAN總線是将離散獨立的數據線整理到統一節點上。接下來認真看,一文教會你CAN總線——
01 CAN總線由來CAN總線最早是由Bosch和Intel在80年代末開發的,雖然最早是用在汽車級的通信系統中的,但是随着技術的發展,CAN總線應用範圍已經不在局限于汽車中,像機器人、工業、自動控制系統中,都有廣泛的應用。
02 CAN總線為什麼這麼好用
以CAN總線應用最廣的汽車給大家舉例,汽車電子控制系統之間的數據通信基本上都是通過CAN總線實現。
在下圖中,Motronic控制單元和變速箱控制單元之間的數據通信包含5根數據線。這還僅僅是兩個控制器之間的傳輸線。如果我們再加上轉向控制、雨刷控制、車窗控制等等,就需要大量的信号數據線,這個時候會導緻整車的電子控制系統線路複雜,維修起來也非常困難。
而如果使用CAN總線,各個控制單元之間的信息通過兩根數據線就可以進行交換了:
使用CAN總線之後的通信網絡對比:
03 CAN總線技術原理
CAN總線使用串行數據傳輸方式,可以1Mb/s的速率在40m的雙絞線上運行,也可以使用光纜連接,而且支持多主控制器。
當CAN總線上的一個節點(站)發送數據時,它以報文形式廣播給網絡中所有節點。對每個節點來說,無論數據是否是發給自己的,都對其進行接收。
CAN總線的軟件報文在上面這組報文中:仲裁域,每組報文開頭内容,前11位字符為标識符,定義了報文的優先級,這種報文格式稱為面向内容的編址方案。在同一系統中标識符是唯一的,不可能有兩個站發送具有相同标識符的報文。當幾個站同時競争總線讀取時,這種配置十分重要。
在仲裁域的最後一位是遠程傳輸請求位(RTR),代表信息幀是數據幀還是不包含任何數據的遠地請求幀
控制域,前兩位是保留位,作為擴展位,DLC表示一幀中數據字節的數目。
數據域,包含0~8字節的數據。
校驗域,檢驗位錯用的循環冗餘校驗域,共15位。
結束域,由七位隐性電平組成。
CAN總線是可靠性很高的總線,共有五種錯誤:
CRC錯誤:發送與接收的CRC值不同發生該錯誤;
格式錯誤:幀格式不合法發生該錯誤;
應答錯誤:發送節點在ACK階段沒有收到應答信息發生該錯誤;
位發送錯誤:發送節點在發送信息時發現總線電平與發送電平不符發生該錯誤;
位填充錯誤:通信線纜上違反通信規則時發生該錯誤。
當發生這五種錯誤之一時,發送節點或接受節點将發送錯誤幀。
04 CAN總線物理層
在節點終端的接口器件有三種形式,如下圖:
CAN總線的終端電阻的接法如下:
增加終端電阻的目的是為了增強CAN通訊的可靠性,消除CAN總線終端信号反射幹擾。CAN總線網絡最遠的兩個端點通常要加入終端匹配電阻,如上圖。一般如果CAN總線使用的是在雙絞線上運行,這時我們會增加120Ω的電阻,這是因為匹配電阻是由傳輸電纜的特性阻抗決定的。
05 常用CAN控制器與收發器
在開發闆上CAN總線需要控制器和收發器,下圖是常用的CAN總線接口電路:
SJA1000是用的較多的獨立CAN控制器,價格又很便宜,幾十塊錢。SJA1000可以和51單片機、STM32等組合快速搭建CAN總線網絡。SJA1000通過并行總線與MCU連接,需要通過地址、數據、讀寫控制等多個線進行連接。PCA82C250收發器是CAN控制器的物理接口,可以給總線提供差動發送和接受信号。和SJA1000一樣,都是采用5V供電。
沒玩過CAN總線的小夥伴,可以自制或者淘寶購買2個帶有單片機 控制器和收發器的開發闆,兩者之間一對一點對點通信,一塊作為主控發送控制數據,另一塊接受數據并執行操作,比如點個燈。如此簡單,就試試吧!
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!