【摘" 要】CAN總線之所以能成為當下商用車和乘用車中最普遍的整車通信方式,主要憑借其優良的可靠性和實時性等優勢,而CAN總線網絡中各節點信號保持同步是可靠性和實時性的重要保證。文章主要介紹CAN總線信號同步原因、同步機制及實現同步的配置參數,最后結合工作中的實際案例分析CAN通信失敗的原因,可為分析解決其他CAN通信失敗問題提供參考。
【關鍵詞】CAN;同步;總線;位時間;SJW
中圖分類號:U463.6" " 文獻標識碼:A" " 文章編號:1003-8639( 2024 )03-0045-04
Research and Application of the CAN Bus Signal Synchronization*
TIAN Dongming,ZHANG Xiaoyu,ZHANG Guangqing,WU Suchao,XU Yongxin
(Weichai Power Co.,Ltd.,Weifang 261061,China)
【Abstract】The reason why CAN network is the most common way of vehicle communication in commercial vehicles and passenger cars is that it has excellent reliability and real-time performance including other acceptable advantages. Meanwhile,each node of the CAN communication network in sync is the important guarantee of reliability and instantaneity. In this paper,reasons and principles of CAN bus signal synchronization as well as the way to configure CAN controller registers for synchronization are introduced and analyzed. Combining with the practical cases in the work,the paper analyses the causes of CAN communication failures,which can provide references for CAN communication failure problems.
【Key words】CAN;synchronization;CAN bus;bit time;SJW
作者簡介
田東明(1990—),男,工程師,碩士;張曉宇(1995—),女,工程師,碩士;張廣清(1987—),男,工程師,碩士;吳速超(1983—),男,高級工程師;徐永新(1986—),女,高級工程師,碩士;研究方向均為電控系統測試。
CAN總線通信憑借優良的可靠性和高實時性,成為目前整車及其他工業現場中應用最普遍的通信方式。CAN總線屬于異步半雙工通信范疇,不像IIC及SPI通信方式一樣有單獨的時鐘線,CAN總線沒有時鐘線,且同一時刻只允許總線上一個節點發送信號。此外,CAN總線信號屬于NRZ(Non Return to Zero,不歸零)編碼方式,信號電平在整個位時間內保持恒定。鑒于這些特點,只有總線上各節點信號保持高度同步,才能確保接收節點按照預定的“位時間”依次正確解析總線電平,從而保證通信的可靠性和實時性。CAN總線信號的位時間決定了通信波特率,相關的寄存器配置參數有5個(Tseg1、Tseg2、Brp、SJW、Smp),而同一波特率往往有多種配置方式,不同的配置對信號同步的影響是不同的。
1" CAN總線信號同步原因分析
1.1" 總線電平特征
CAN總線使用雙絞線進行信號傳輸,采用差分電平,CAN收發器根據CAN_H和CAN_L之間的電壓差來判斷總線電平。ISO 11898規定,顯性位要求CAN_H與CAN_L壓差大于0.9V(CAN_H-CAN_Lgt;0.9V),隱性位要求CAN_H與CAN_L壓差小于0.5V(CAN_H-CAN_Llt;0.5V),且顯性電平代表邏輯0,隱性電平代表邏輯1。CAN信號電平及解析如圖1所示。以顯性電平為例,顯性電平的電壓一直為2V,不會歸零,即在一個顯性位的傳輸周期內,電壓一直保持一種電平。
1.2" 信號同步的具體原因
由于CAN信號屬于NRZ編碼,在某隱性位或者顯性位時,電壓一直保持一種電平,僅僅通過波形無法判斷一個Bit位的傳輸時間,比如,接收方接收到一段時間的高電平,無法直接通過波形判斷其表示“幾位”邏輯0,因為從形式上看,1位邏輯0、連續2位邏輯0及連續N位邏輯0呈現出來的波形都是一段時間的高電平。因此,為了使接收方能夠正確解析數據,通信雙方需要提前約定好傳輸一位數據所花費的時間:位時間。例如,約定傳輸一位的時間為2μs(波特率為500kBd),那么發送方就可以每隔2μs時間向總線發送數據,接收方則以每隔2μs對總線數據進行采樣。
為了保證發送節點發出的數據等于接收節點采樣的數據,需要確保收發節點的“計時基準”一致,即需要將發送數據的開始時刻通知到接收方,以便接收方以發送方的開始時刻為基準進行計時,進而對數據進行正確采樣。協議規定總線空閑時總線差分電平保持隱性位(邏輯“1”),當有節點發送數據時,該節點首先會向總線發一個起始位(顯性電平,邏輯“0”),從而形成一個下降沿,而后接收節點以該下降沿為基準開始計時,在信號起始處的同步稱為“硬同步”,它標定了收發雙方進行位時間計時的開始時刻,然后接收節點以設置的時刻(如位時間的一半)進行采樣,而后以約定的位時間為間隔依次采樣數據,如圖2所示。
如果發送器和接收器的時鐘系統沒有偏差,那么只要發送方和接收方各自嚴格按照約定的位時間發送數據和采樣數據就可以得到正確的結果。但實際中,受到環境溫度、濕度等影響,發送器和接收器的時鐘系統或多或少存在一定的偏差(比如收發節點使用不同的時鐘源),此時發送方和接收方的位時間并不完全相同。當然,對于一個bit位來講,該誤差很小,但隨著傳輸數據位的增加,誤差會不斷累積,從而使接收節點出現信號解析錯誤問題。例如當發送節點以恒定的位時間發送數據,而接收節點以略小于位時間的間隔依次采樣,如圖3所示,可以看出,此時接收節點采樣序列為0110 0100 1101 0,而發送節點實際發送的數據為0110 0101 1010,即收發節點的數據不一致。
由于收發雙方的時鐘誤差是必然存在的,而導致接收節點數據解析錯誤的原因是誤差累積,為了避免誤差累積,應該每隔一段時間就重新同步一次,即“重同步”。通常情況下,在傳輸數據過程中會有很多邊沿(數據的變化,由顯性位變為隱性位,或者由隱性位變為顯性位),而邊沿的出現必定表示一位數據的開始,因此可以在邊沿處重新同步。為了降低CAN控制器硬件系統設計的復雜性,協議規定僅在隱性位跳變至顯性位邊沿(下降沿)時進行同步,即重同步邊沿類型與硬同步的邊沿類型一致,如圖4所示。
此外,為了避免發送節點一直發送一種電平(例如發送節點一直發邏輯“0”或者邏輯“1”)導致總線上長時間不出現下降邊沿,CAN協議規定了“位填充”規則,即數據鏈路層規定了連續相同位的最大個數為5,若發送節點發送的數據中連續相同位個數超過了5,數據鏈路層會在后邊添加一個相反的位,強行使連續5個相同位后信號電平發生翻轉,以便產生邊沿用于重新同步。基于此,隱性位跳變至顯性位(出現下降沿)這一條件,最長會間隔10個位周期,如圖5所示。
2" 同步機制的具體實現
2.1" 位時間劃分
如上所述,CAN通信正是通過硬同步和重同步兩種方式,才保持總線上各個節點始終處于同步狀態。為了實現硬同步和重同步,在CAN協議中,把位時間劃分為4個段:SS段、PTS段、PBS1段和PBS2段,這4個段的時間長度加起來即為一個bit位的時間長度,且信號的采樣點(讀取信號電平的時機)在PBS1段結束處,如圖6所示。各段含義及作用見表1。
此外,各個段的時間標定單位以一個固定的輸入時鐘為基準,使用該時鐘的周期作為各個段的基準時間單元Tq(Time Quantum)。為了使基準時間單元Tq可以調整,在實際輸入的時鐘信號頻率fin和最終使用的時鐘信號頻率fout之間,通常具有一個分頻器,可以通過調整該分頻器的值Brp來調整基準時間單元,如圖7所示。例如,實際輸入時鐘信號的頻率fin為20MHz(該頻率由外接晶振或CAN控制器輸入時鐘決定),若分頻器值Brp為2,則分頻后時鐘頻率fout為10MHz,基準時間單元Tq即為0.1μs。
2.2" 硬同步
硬同步發生在每個數據幀的起始位??偩€處于空閑狀態時,總線處在隱性位狀態(邏輯1),當某節點搶占總線后開始發送數據幀,會首先向總線發一個起始位(顯性位,邏輯0),并將總線電平拉低以形成下降沿(下降沿處在SS段),此時,總線上所有接收節點都會監測到該下降沿,并以該下降沿為基準開始計時,然后以約定好的位時間讀取總線電平,如圖8所示。
2.3" 重同步
重同步發生在硬同步外的其他段,當總線出現下降沿時,接收節點均會進行重新同步,以消除各節點時鐘誤差累積造成的計時錯誤。根據接收節點的采樣點和發送節點的SS段(下降沿)之間的誤差大小,分為相位緩沖段PBS1延長和PBS2縮短,這部分操作在CAN控制器內自動實現。
2.3.1" 位緩沖段PBS1延長
當接收節點的時鐘比發送節點的時鐘快時,即發得晚,收得早,會導致PBS1延長。比如正常情況下發送節點的SS段與接收節點采樣點之間的間隔為8個Tq,若接收節點檢測到該時間差小于8個Tq(如重同步前接收節點檢測到該時間差為7個Tq),則接收節點會把PBS1段延長一個Tq,以保證當前位的采樣點時機正確,并保證下個位時間的收發節點計時基準一致。相位緩沖段PBS1延長如圖9所示。
2.3.2" 位緩沖段PBS2縮短
當接收節點的時鐘比發送節點的時鐘慢時,即發送得早,接收得晚,會導致PBS2縮短。比如正常情況下,發送節點的SS段與接收節點采樣點之間的間隔為8個Tq,若接收節點檢測到該時間差大于8個Tq(如重同步前接收節點檢測到該時間差為9個Tq),則接收節點會把PBS2段縮短一個Tq,以保證下個位時間的收發節點計時基準一致,但無法保證當前位采樣點準確,如圖10所示。
3" 實現同步的參數配置
影響同步的CAN寄存器配置參數主要有5個:Tseg1、Tseg2、Brp、SJW、Smp,詳見表2。由于一個位時間由SS、PTS、PBS1、PBS2這4個段組成,其中,SS段的長度固定為1,由CAN控制器自動配置,因此用戶僅需配置如5個參數即可。
3.1" Tseg1、Tseg2、Brp參數解析
Tseg1和Tseg2是影響采樣點和位時間的2個重要參數,并決定了位時間的長度(1+Tseg1+Tseg2),一個位時間的Tq個數通常在8~25之間(包含8和25),實踐證明,該值為16時效果較好。分頻系數Brp則根據具體輸入CAN控制器的實際時鐘頻率fin而定。
一個CAN網絡中只有位時間(或波特率)一致時,才能正常通信,若各節點的位時間不一致或者偏差過大(超過了重同步時的最大調整寬度SJW),則無法正常通信。若輸入CAN控制器時鐘頻率為fin,分頻系數為Brp,則時間單元Tq=Brp /fin,相應的位時間Tbit和波特率Baudrate計算公式如下:
此外,參數Tseg1、Tseg2還決定了采樣點位置(采樣點即讀取總線信號電平的時機),采樣點處在位時間的PBS1結束處,一般使用百分比表示采樣點的位置,例如:若位時間為1μs,采樣點75%,則表示采樣點的位置在0.75μs處,因此采樣點計算公式表示如下:
重同步時,接收節點會延長PBS1或者縮短PBS2,因此位時間長度(1+Tseg1+Tseg2)設置越小,對應一個時間單元Tq就越大,重同步時波形波動就越大,因此(1+Tseg1+Tseg2)的長度不宜過小,盡量配置成16。
Tseg2為采樣點之后的一段時間,這段時間稱為信號處理時間(CAN控制器對信號采樣后需要時間處理,以決定該電平是顯性電平還是隱性電平),信號處理時間與CAN控制器本身相關,通常需要1~2個時間單元,信號處理應在當前位時間內完成,即Tseg2不能小于信號處理時間。因此Tseg2一般設置在2~6之間,若Tseg2設置過小,CAN控制器本身性能又較低時,則容易采樣錯誤。
3.2" SJW、Smp參數解析
SJW(Synchronization Jump Width)決定了重同步時的最大調整寬度(PBS1延長或者PBS2縮短的最大Tq個數),SJW的值通常限制在1~4之間(包含1和4),且不超過Tseg1和Tseg2。若SJW設置為最小值1,即重同步時,PBS1和PBS2最多調整1個時鐘單元,如果此時收發雙方的時鐘頻率誤差較大,則容易同步失敗。因此當通信雙方的時鐘頻率誤差較大時,應適當增加SJW的值,即SJW的值一般設置在3~4之間。
Smp表示采樣次數,其表示采樣幾次作為最終的位采樣值,分為單次采樣和3次采樣。3次采樣可以過濾掉總線上的毛刺,但采用3次采樣會影響SJW的跳轉,僅在部分低速應用中使用到3次采樣,因此,實際應用中,通常都使用單次采樣。
4" 案例分析
某純電新能源公交車在驗證整車通信功能時,反饋車輛上電后總線上偶爾出現錯誤幀問題。經過分析,該整車通信CAN波特率為250kBd,CAN總線長度不超過20m,兩端終端電阻均為120Ω,CAN網絡簡圖如圖11所示。
將CanAlyzer和示波器設備接入網絡中,CanAlyzer可以監測到偶爾報出錯誤幀,示波器顯示出現錯誤幀時CAN信號波形的下降沿出現臺階現象;將網絡中節點逐個拔下,發現當僅拔下報警器節點時總線上不再出現錯誤幀。經過進一步確認,報警器節點的同步參數為:最大調整寬度SJW=1,Tseg1=6,Tseg2=1,fin=8M,Brp=4,顯然,報警器節點CAN參數配置不利于同步,分析如下。
1)位時間(1+Tseg1+Tseg2)的長度為8,該值設置過小,對應時鐘單元Tq=1/250/8=0.5μs,重同步時波形波動大。
2)重同步最大調整寬度SJW為1,即重同步時,PBS1最大延長Tq數和PBS2最大縮短Tq數為1,若重同步調整寬度達到2及以上時,則重同步失敗。
3)該節點采樣點SamplePoint=(1+Tseg1)/(1+Tseg1+Tseg2)=87.5%,而其余節點的采樣點均為75%,采樣點不一致容易導致采樣失敗。
4)Tseg2設置為1,即節點采樣后可用的信號處理時間為一個Tq,當網絡不穩定或者干擾較大時,容易采樣錯誤。
現場將報警器節點CAN模塊參數改為如下:SJW=4,Tseg1=11,Tseg2=4,Brp=2,編譯并升級報警器程序。重新監控總線數據及波形,結果總線不再出現錯誤幀且波形品質良好,故障消失。
5" 結語
本文首先從CAN總線電平特征和信號解析角度分析了CAN總線信號需要同步的原因,然后詳細介紹了信號同步的具體實現過程,包括位時間、硬同步和重同步,其次分析并總結了實現同步的具體配置參數:Tseg1、Tseg2、Brp、SJW、Smp。最后,結合工作中遇到的常見問題,分析了CAN總線出現錯誤幀的原因,并解決了現場問題,可為解決其他CAN通信失敗問題及同步參數配置問題提供參考。
參考文獻:
[1] 孫堯,閆保中,孔祥力,等. C8051F040單片機CAN控制器的波特率設置研究[J]. 應用科技,2007,34(1):51-54.
[2] 李春艷,陳敬軒. CAN通訊中的一種動態自同步方法設計[J]. 新型工業化,2015(4):55-60.
[3] 溫小南,朱春雷. CAN總線通訊速率設定[J]. 機械制造與自動化,2006,35(2):113-114.
[4] 張彥軍,劉靖宇. CAN總線系統位定時參數的選擇[J]. 青島科技大學學報(自然科學版),2006,27(1):58-61.
[5] 劉濤. CAN總線協議控制器的研究與設計[D]. 武漢:武漢科技大學,2007.
[6] 李冬. CAN總線遠距離通訊的研究及TTCAN的分析[D]. 合肥:合肥工業大學,2010.
[7] 周硯. 基于同步CAN總線的網絡化運動控制研究[D]. 武漢:華中科技大學,2005.
[8] 曲鴻祥. 嵌入式系統中有限個節點實現CAN總線通訊的穩定通訊協議分析[J]. 科技展望,2014(23):99.
[9] 高達輝. CAN總線通信延時與丟幀的補償研究及其在混合動力挖掘機中的應用[D]. 杭州:浙江大學,2016.
(編輯" 凌" 波)