1. 程式人生 > >CAN總線幾種正常的“異常”波形

CAN總線幾種正常的“異常”波形

itl 信號 html pan 仲裁 所有 ssa mar 並不是

CAN總線幾種正常的“異常”波形

[復制鏈接]
技術分享圖片 樓主 技術分享圖片 hubaba 發表於 2016-3-28 14:00 | 只看該作者 技術分享圖片
摘要

工程師們通常使用示波器觀察CAN總線的信號質量,一般主要關註CAN總線差分信號的幅值、最小位寬、邊沿情況等。相信不少工程師都看到過一條報文數據的波形上高高低低存在多個幅值,心裏可能會變得忐忑不安,幅值不統一是不是波形出現畸變了呢?其實並非如此,今天就把CAN總線上的幅值“異常”歸歸類。

一、CAN-bus信號產生原理
眾所周知,一個標準CAN節點由微處理器、控制器、收發器構成。多個節點成總線型架構掛在一起,兩個端節點上並有終端電阻。其結構簡圖如下圖所示。
技術分享圖片

圖1 CAN-bus節點網絡結構
可以看出,與總線直接相連的是CAN節點的收發器,起內部電路等效如下圖所示,CAN-H、CAN-L直接由三極管驅動,近似可以看成電流型輸出。結合上文所述網絡架構中的終端電阻,節點發出信號時電流流過終端電阻產生電壓信號,當同一時間多個節點同時發出信號時就會使總線上的電流高於單一節點發出的電流,使得我們觀察電壓信號時出現突增的現象。
技術分享圖片
圖2 CAN收發器結構
CAN-bus是總線型結構,通常狀態下一般只有一個節點占有總線。那麽有幾種情況會導致多個節點同時發出,進而導致幅值出現“異常”呢,下文通過致遠電子CANScope分析儀的幾個測試案例總結一下。
二、應答位上的幅值“異常”
最常見的,當CAN網絡上存在3個以上的節點時,應答位上的幅值要明顯高於同一報文的其他位置,如下圖所示。可以看到報文在ID段、數據段、CRC校驗段處的幅值均比較一致,但是到應答位處時幅值出現突增。這是為什麽呢,大家都知道CAN-bus總線擁有自動應答機制,即當某一節點發送完一幀報文時,所有總線中的其余非只聽節點均會在應答位處做出響應,如果報文被成功識別則發出一個顯性位做為應答信號。
結合上文所述,應答位此時CAN總線上的電流是若幹節點電流疊加的綜合,所以應答位的幅值高就很容易講通了。
技術分享圖片

圖3 應答位上的幅值“異常”
三、ID段上的幅值“異常”
CAN-bus總線的一大特點就是多主結構,即網絡中所有節點功能對等,沒有主從機的概念,所有節點均可自由收發數據。保證多主結構得以實現的關鍵在於CAN總線的仲裁機制也稱優先級機制。當網絡中同時有多個節點同時發送數據時會在ID段處產生仲裁,優先級高的節點會最終占有總線。
如下圖所示,可以看到在圖中的標記處波形出現了“臺階”。正是由於在“臺階”出現前有兩個節點同時發出數據,導致幅值增高,在“臺階”處某一節點由於優先級高占有總線,另一個節點暫時退出,使得幅值又回歸平常。
技術分享圖片
圖4 ID段上的幅值異常
四、錯誤幀上的幅值“異常”
再看看這個案例,可以看到在波形的後半部分也出現了臺階式的幅值增高,光標卡住的顯性電平區間可以看到寬度明顯超過了5個標準位寬,按照CAN總線的位填充規則(不能存在連續六個相同的顯性位或隱性位)表明這是一條錯誤幀。但是不要誤會,並不是因為這個幅值“異常”而導致的錯誤幀,我們知道CAN總線有錯誤重發機制,以保證總線傳輸數據的可靠性。這種可靠性正式通過錯誤幀的“一票否決制”實現的。
當網絡中某一節點識別到一條認為是有問題的報文後會發送六個連續的顯性位(即錯誤幀),投出這一否決票通知網絡上所有其他節點,本條報文無效。此後其他節點會以“跟票”的形式全部發出六個顯性位錯誤幀。所以此時多個節點重疊部分的錯誤幀的幅值就會高一些了。
技術分享圖片

圖5 錯誤幀上的幅值異常

CAN總線幾種正常的“異常”波形