單片機外圍模塊漫談之三,CAN總線

2020-10-30 TopSemic

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.2 EMC防護

CAN常常工作在強幹擾的工業環境中,採用屏蔽雙絞線會極大的提升EMC防護性能。同時如果數字電路部分和CAN收發器之間用高速光耦隔離開,並且對兩部分採用完全隔離的電源供電,那麼可以把總線上的幹擾最大限度地隔離在外部。

需要注意的是屏蔽層只能在一點接入大地。如果在多個點接地,那麼通過大地會形成電流環路,反而會引入噪聲。


3.3 時鐘容差(Oscillator Tolerance)

總線的速度越高,需要的時鐘精度越高。一般在低於125kpbs時可以用低成本的陶瓷震蕩器(ceramic resonators),更高的速度下建議使用晶體振蕩器(Quartz,or Crystal Oscilators)。


3.4 CAN模塊死機現象

CAN模塊內部有監控電路,總線上的異常,如短路等,會引起錯誤計數器增長。TEC(Transmit Error Counter), REC(Receive Error Counter)。當發送錯誤TEC計數超過255後,CAN模塊進入BUS-OFF模式,此節點不能發送也不能接收。這樣做的好處是可以避免由個別模塊的問題引起整個總線不能工作。

晶片一般會提供兩種恢復機制:自動和手動模式。比如在STM32單片機中,如果ABOM位設置為1,CAN模塊將不斷嘗試自動恢復。如果ABOM=0,則需要程序進入CAN初始化模式,重新配置後,再退出初始化進入正常工作模式。

由於CAN總線非常可靠,不易出錯,所以在測試階段建議人為製造一些總線錯誤,比如短路,斷路,強幹擾之類,看程序是否能從異常狀態下恢復。

相關焦點

  • CAN總線接口模塊工作原理
    1.CAN模塊簡介   控制器區域網(CAN)模塊是用於與其他外圍設備或單片機進行通信的模塊,這種接口協議能在較大的噪聲 環境中進行通信,具有良好的擾幹擾性能。
  • 基於C8051F040單片機的CAN總線和RS-232串口通信設計
    為了實現對CAN總線和RS-232串口雙向通信需求,提出了一種基於C8051F040單片機的數據通信方案,並完成系統設計。分析了CAN總線和RS-232串口的通信特點,介紹了單片機硬體,並對軟體的設計思路與流程做了詳盡描述,完成功能檢測。實驗結果表明,該設計達到了要求。
  • 基於CAN總線的分布式監控系統設計
    監控CAN節點為智能型的監控模塊,以單片機為核心,主要負責對現場的環境參數和設備狀態進行監測,對採集來的數據進行打包處理並將處理過的數位訊號通過CAN通信控制器SJA1000送入CAN總線;對系統中各個承壓鍋爐的壓力與溫度進行測量。一般情況下,智能監控節點會把監控數據進行存儲,定期上傳給上位機,並可接受上位機的輪詢。若超出正常工作範圍,則告警,同時把數據實時向上位機報告。
  • can總線通訊協議
    基於單片機AT89C52的CAN總線分布式測控系統的研製 1 CAN總線網絡的技術特點[1][2] 用通訊數據塊編碼,可實現多主工作方式,數據收發方式靈活,可實現點對點、一點對多點及全局廣播等多種傳輸方式;可將DCS結構中主機的常規測試與控制功能分散到各個智能節點,節點控制器把採集到的數據通過CAN適配器發送到總線,或者向總線申請數據
  • CAN總線錯誤幀長得啥樣?怎麼產生?
    推薦閱讀 採用can總線技術解決電動汽車充電機模塊間的通信問題 ,方案改變、升級容易實現等優點,所以在實現的過程中採用軟體均流的方法,但是實現過程中需要解決的關鍵問題是模塊間的通信問題。
  • 基於C167單片機和CAN總線實現數位化電梯控制系統的設計
    系統工作原理: 各個轎廂控制器及層站控制器將採集到的信號發送到CAN總線, 主控器根據這些信號及相應的群控算法選擇最優的電梯進行響應,結合專用線路上的安全信號、旋轉編碼器脈衝信號等發出選層、定向、變速和平層等指令, 控制轎廂的運行及門機的動作, 並將轎廂的位置信號發送到CAN總線上。顯示模塊則相應地進行LED顯示。
  • 單片機地址總線和數據總線的分離
    推薦閱讀 51單片機學習實踐:用NTC電阻測溫並顯示在TM1637數碼管 STC15單片機實驗名稱:使用NTC電阻測量溫度實驗內容:        使用NTC電阻測量溫度並顯示在數碼管上        讀取DS18B20模塊測量溫度作為參考實驗器材:        STC15W408AS_DIP16
  • 基於LonWorks現場總線技術的智能節點設計
    本節點的最主要部分是主處理器,選用STC89C516RD+,它既要接收現場總線控制模塊並行發出的信息並且將它轉化成非現場總線設備能接收的信息格式,又要將非現場總線設備上的信息轉化傳送到現場總線控制模塊。它是實現LonWorks現場總線系統和非現場總線設備間通信的橋梁。智能控制節點的總體結構如圖2所示,主要分為LonWorks控制模塊與主控制模塊及其外圍設備接口。
  • 基於單片機和CPLD的PLC背板總線協議接口晶片設計(一)
    詳細介紹了通過Verilog HDL語言設計狀態機、協議幀控制器、FIFO控制器的過程,25MHz下背板總線工作穩定的試驗結果驗證了協議晶片設計的可行性。  可編程邏輯控制器(PLC)主機是通過背板總線支持擴展模塊的連接, 背板總線是PLC 主機同I/O擴展模塊之間的高速數據通路,支持主機和擴展模塊之間的I/O 數據刷新。
  • 基於AT89C52的CAN總線分布式測控系統的研製
    智能節點模塊絕大部分是輸入輸出模塊,調節迴路可以跨模塊構成迴路。但考慮到調節迴路的安全性,為了保證在上位機或整個通信線路出現重大故障時迴路調節不受到影響,設計了隔離型、自整定PID、隔離型溫度調節器等帶有調節功能的模塊。
  • 汽車輪速傳感器設計中CAN總線的應用
    輪速信號的檢測  將輪速傳感器輸出的每個正弦波信號調理整形產生一個方波信號,後續電路對方波信號的處理可有以下幾種方法:(1)直接送單片機的T0記數,用T1作定時器。在每個T1定時時間內讀出T0的記數值,經計算得到輪速;(2)將方波信號先進行F/V轉換,再由單片機A/D轉換而得到輪速;(3)方波信號送單片機的外部中斷/INT0引腳,將其設定為邊沿觸發方式,用T1作定時器對方波信號進行周期測量,經計算得到輪速。第一種方法在低速時所測得的輪速誤差較大。
  • 單片機外圍模塊漫談之四,USB總線基本概念
    主機要有對外的供電能力,圖中可以看到作為主機的單片機,一個引腳用來控制三極體或MOSFET,提供5V的電源至USB口。設備供電有兩種方法:一種是通過USB總線,從主機提供的5V獲得,如我們常用的U盤;一種是自己從另外的電源獲得,此時主機至設備的電源線可以不連。
  • 多路UART總線與CAN總線通訊系統設計
    為了實現4路UART總線與CAN總線之間的相互轉換過程,採用微控制器AT89S51來控制通訊數據轉換,通過硬體電路實驗和軟體調試算法,得到了4路串行總線與CAN總線之間的相互透明轉換過程。該電路系統大大方便了具有UART接口的設備進行遠距離、多節點傳輸,增強了系統的通訊可靠性。
  • 採用MSP430單片機及USB總線ch375設計可攜式血壓計
    加之筆者對430單片機比較了解,在本設計中選用了其中的一種MSP430F149,由於該設計中對單片機的外設模塊只要求有A/D轉換模塊,所以可以選用MSP430中較便宜的系列。  CH375是南京沁恆有限公司生產的USB總線的通用接口晶片,支持USB-HOST主 機方式和USB-DEVICE/SLAVE設備方式。
  • 基於控制器局部網CAN總線實現大型電機狀態監測系統的設計
    1 CAN總線應用於電機狀態監控的可行性分析 CAN總線由於採用了許多新技術和獨特的設計,因此與一般的通信總線相比,它的數據通信具有突出的可靠性、實時性和靈活性的優點。可以多主方式工作,從而使系統的各模塊實現多主通信,充分發揮各子模塊智能化功能。
  • can總線故障一般原因及問題解決方法
    3、喚醒線WAKEUP   CAN總線所有模塊都有兩個WAKEUP引腳,模塊內部是連接在一起的,前控模塊為WAKEUP輸出,其它模塊為WAKEUP的輸入,連線時總線各模塊的WAKEUP都必須與前控連接在一起,當前控電源正常、鑰匙1檔(ACC檔)開時,前控正常工作,WAKEUP輸出(輸出電壓值約等於當前電源電壓),總線其它模塊收到WAKEUP信號,
  • 什麼是CAN總線,CAN總線的優勢和特點
    CAN總線插卡可以任意插在PC AT XT兼容機上,方便地構成分布式監控系統。結構簡單  只有2根線與外部相連,並且內部集成了錯誤探測和管理模塊。CAN總線技術介紹:位仲裁  要對數據進行實時處理,就必須將數據快速傳送,這就要求數據的物理傳輸通路有較高的速度。在幾個站同時需要發送數據時,要求快速地進行總線分配。
  • 本田豐田奔馳保時捷豪華品牌車型CAN總線DBC數據破解
    CAN(Controller Area Network 控制器區域網)是一種高性能、高可靠性、易開發且低成本的現場總線,在全球得到廣泛應用,也是最早在我國應用的現場總線之一。是為解決眾多測量控制部件之間的數據交換問題而開發的一種串行數據通訊總線。最初,CAN作為汽車的監測、控制系統而設計在車載電子控制裝置ECU之間交換信息,形成汽車電子控制網絡。
  • CAN總線協議詳解
    下圖1左邊陰影部分是某個節點的內部電路模塊,包含CPU、CAN控制器(CAN Controller,一般單片機都集成了CAN控制器模塊)以及CAN收發器(CAN transceiver)。由於總線錯誤幀沒有CANID,所以當檢測到錯誤幀時,只知道有錯誤,但無法定位該錯誤幀是哪個模塊發送的;過載幀:過載幀用於在先行的和後續的數據幀之間提供附加的延時。
  • CAN總線的特點/幀類型/應用中的注意事項
    物理層,CAN採用差分總線。單片機引腳的邏輯電平0,被CAN收發器(PHY)轉換為顯性電平(Dominant),邏輯電平1被轉換為隱性電平(Reccesive)。總線上執行的是「線與」邏輯,只要有一個節點輸出顯性電平,那麼總線上就是顯性電平。