1980年,Bosch的工程師開始研究汽車上高速串行通信的問題,并在1986年發布了CAN(Controller Area Network)總線。CAN以其多主,高速(最高1Mbps),抗干擾的特性被廣泛應用汽車及各種工業環境。在此我們主要介紹一下CAN總線的特點,幀類型,以及應用中的注意事項。
1.CAN總線特點
1.1多主控制
跟我們常用的RS485只有一個主機,從機只能等待主機的輪詢不同,在CAN總線中,當任意一個節點監測到總線空閑時,就可以立即啟動信息的發送,也就是每一個節點都可以當主機。當然,這馬上會引起我們的擔心。如同一個家庭每個人都當家做主,那還不亂了套嗎?不急,我們來看一下。這個問題是如何被巧妙地解決的。
物理層,CAN采用差分總線。單片機引腳的邏輯電平0,被CAN收發器(PHY)轉換為顯性電平(Dominant),邏輯電平1被轉換為隱性電平(Reccesive)。總線上執行的是“線與”邏輯,只要有一個節點輸出顯性電平,那么總線上就是顯性電平。
仲裁(Arbitration),CAN的發送總是以SOF(Start Of Frame)起始,緊跟器后是ID。在發送ID的同時,節點監聽總線上的顯隱狀態,當監聽到的狀態與自己發送的不一致時,此節點將停止發送,進入只收模式。如下圖所示,每一幀消息所具有的ID決定了此消息的優先級,發送最高優先級消息的節點獲得總線最后的控制權,得以最終完整的發送自己的消息。
接收濾波(Filter)。一個掛在總線上的節點可以監聽到所有的消息(Message),但通常我們只對其中某些消息感興趣,這時怎么辦呢?CAN模塊一般會提供接收濾波功能(Filter)。通過設置濾波寄存器,我們可以達到接收消息時,比對ID所有位,也可以只比對ID某些位,從而達到只接收ID與自己完全相同的消息,或接收ID與自己部分相同的消息的目的。利用這種機制可以給節點編組,給組成員群發消息。
1.2速度快,距離遠
CAN總線可以達到1Mbps的速率。總線速度隨著傳輸距離增加而下降,下面是一些典型速率。在一個數據幀內可以傳送8個字節的數據。
1000kbps 40m
500kbps 130m
100kbps 620m
50kbps 1300m
5kbps 10000m
2012年,Bosch又發布了CANFD(CAN with Flexible Data-rate),最高速率可以達到10Mbps,在一個數據幀內可以傳送64字節的數據。2015 年 ,國際標準化組織(ISO)正式發布支持CAN FD的11898-1協議。
2.幀類型
CAN協議很簡潔,只包含4種幀類型。
數據幀(Data Frame),用來把數據從發送節點傳送至接收節點。
遠程幀(Remote Frame),一個節點用來請求其它節點發送數據。一個節點發送遠程幀時會把Arbitration Filed最后一位RTR(置1),具有相同ID的節點會把數據發送到總線上。
錯誤幀(Error Frame),當一個節點檢測到錯誤時會向總線發出錯誤幀,以通知其它節點。
過載幀(Overload Frame),用來在數據幀或遠程幀之間插入延時。
幀間隔(Interframe Space),不是一種幀類型。它是幀之間的間隙,由多個連續的隱性電平構成。
在編程時我們直接用到的就是數據幀和遠程幀。軟件編程比較簡單,需要注意的是一般需要設置寄存器中的初始化請求位(Initialization request),使模塊進入初始化狀態,才能開始進行CAN模塊的各種配置,初始化完成后退出初始化狀態,進入運行狀態。
3.CAN總線應用注意事項
3.1終端匹配電阻
在CAN總線的兩端要用120歐的電阻端接進行阻抗匹配,因為CAN總線長度一般會比較長,傳輸的信號速度快,特別是信號的邊沿跳變部分頻率很高。
傳輸線效應 平常我們總是認為電信號從一個引腳發出,通過導線,瞬間就會到達接收引腳,導線上的電壓處處是相等的。但是當信號的頻率很高,或者導線特別長,總之導線的長度接近傳導信號波長的1/10后,我們就需要轉變一下我們的觀念,此時信號的傳輸主要受電纜特性阻抗的影響。
電纜特性阻抗 = 信號電場強度(伏特/米) / 磁場強度(安培/米)
電纜的特性阻抗與電纜的材質,粗細,線纜之間的距離有關,而與電纜的長度無關。電纜的特性阻抗還和信號的頻率有關,但是當頻率增加到一定數值時,特性阻抗不再變化。常用的帶屏蔽雙絞線的特性阻抗是120歐。
信號在阻抗不連續處會產生反射,所以要保持電纜阻抗的連續性,而且線纜終點需要用等于電纜特性阻抗的電阻進行端接,以消耗掉傳輸至端點的信號,否則信號會反射回去和后續發出的信號產生疊加,引起錯誤。
頻率與波長對應關系
150K 2000m
500K 600m
1M 300m
10M 30m
端接電阻的另一個作用是可以使CAN總線從顯性狀態快速回到隱性狀態。因為在顯性狀態下,兩條線纜CAN_H, CAN_L之間的寄生電容會被充電,如果沒有一個放電回路,總線不能快速回到隱性狀態。
3.2EMC防護
CAN常常工作在強干擾的工業環境中,采用屏蔽雙絞線會極大的提升EMC防護性能。同時如果數字電路部分和CAN收發器之間用高速光耦隔離開,并且對兩部分采用完全隔離的電源供電,那么可以把總線上的干擾最大限度地隔離在外部。
需要注意的是屏蔽層只能在一點接入大地。如果在多個點接地,那么通過大地會形成電流環路,反而會引入噪聲。
3.3時鐘容差(Oscillator Tolerance)
總線的速度越高,需要的時鐘精度越高。一般在低于125kpbs時可以用低成本的陶瓷震蕩器(ceramic resonators),更高的速度下建議使用晶體振蕩器(Quartz,or Crystal Oscilators)。
3.4CAN模塊死機現象
CAN模塊內部有監控電路,總線上的異常,如短路等,會引起錯誤計數器增長。TEC(Transmit Error Counter), REC(Receive Error Counter)。當發送錯誤TEC計數超過255后,CAN模塊進入BUS-OFF模式,此節點不能發送也不能接收。這樣做的好處是可以避免由個別模塊的問題引起整個總線不能工作。
芯片一般會提供兩種恢復機制:自動和手動模式。比如在STM32單片機中,如果ABOM位設置為1,CAN模塊將不斷嘗試自動恢復。如果ABOM=0,則需要程序進入CAN初始化模式,重新配置后,再退出初始化進入正常工作模式。
由于CAN總線非常可靠,不易出錯,所以在測試階段建議人為制造一些總線錯誤,比如短路,斷路,強干擾之類,看程序是否能從異常狀態下恢復。
責任編輯人:CC?
評論
查看更多