一、CAN物理層特征
CAN收發器的作用是負責邏輯電平和信號電平之間的轉換。即從CAN控制芯片輸出邏輯電平到CAN收發器,然后經過CAN收發器內部轉換將邏輯電平轉換為差分信號輸出到CAN總線上,CAN總線上的節點都可以決定自己是否需要總線上的數據。
市場上常用的收發器(例如: VP230、TJA1040、TCAN337等)多為ISO 11898標准。在此標准中,對於CAN的信號邏輯1和0的產生:當CAN_H為3.5V,CAN_L為1.5V,差值為2V左右時為顯性(dominant)電平表示,而兩者相等為2.5V左右時為隱性(recessive)電平表示1。
可以看到上圖中的當第一段為隱性,CAN_H和CAN_L電平幾乎一樣,也就是說CAN_H和CAN_L電平很接近甚至相等的時候,總線表現隱性的,而兩線電位差較大時表現為顯性的,按照定義的:
- CAN_H - CAN_L < 0.5V 時候為隱性的,邏輯信號表現為"邏輯1"- 高電平。
- CAN_H - CAN_L > 0.9V 時候為顯性的,邏輯信號表現為"邏輯0"- 低電平。
CAN總線采用的"線與"的規則進行總線沖裁。即1&0=0;所以0為顯性。這句話隱含的意思是,如果總線上只要有一個節點將總線拉到低電平(邏輯0),即顯性狀態,總線就為低電平(邏輯0),即顯性狀態,而不管總線上有多少節點處於傳輸隱性狀態(高電平或是邏輯1),只有所有節點都為高(隱性),總線才為高,即隱性。
CAN總線終端的兩個120Ω的終端電阻的作用是使阻抗連續,消除反射。
二、CAN總線三節點通訊異常現象
測試工具:
1.PC端:利用USB轉CAN模塊將PC機作為一個節點掛載到CAN總線,收發器型號采用TI公司的VP230;
2.ECU:此處使用TI公司的MSP432單片機,由於其電路板沒有CAN收發器,所以此處外接收發器VP230;
3.ARM開發板:開發板上已經內嵌了兩個CAN通道,收發器采用的是恩智浦的TJA1040。
問題1:ARM用戶板(節點1,收發器:tcan337)與ECU(節點2,收發器:vp230)兩節點可以正常進行CAN通信,但是當總線上加入第3個節點PC端(節點3,USB轉CAN模塊,收發器:vp230)后,通信出現異常,節點1和節點3均可以正常發送和接收總線數據,但是節點2可以收到總線數據,卻無法發送數據。
針對問題1,使用ARM開發板、ECU、PC分別進行了兩節點測試和三節點測試,測試結果證明,PC與ARM、ECU之間的兩節點通信均無任何問題;使用兩個PC端與ARM、ECU之間分別構成3節點通信也均正常;使用ARM開發板上的兩個CAN通道與PC端構成3節點通信也正常;使用兩個ECU與PC構成3節點通信也正常。但是,當ARM開發板與ECU同時掛載到CAN總線上時,就會出現通信異常。
問題2:ARM開發板(節點1,收發器:TJA1040)與MCU(節點2,收發器:vp230)兩節點進行CAN通信時,節點1發送一次數據后,總線將一直處於占用狀態,此后節點1無法發送和接收總線數據,而節點2將一直讀取總線數據。
問題3:當PC與ECU兩節點通信時,通信正常,但是當總線接入關機狀態下的ARM開發板時,總線通信出現異常,ECU將無法收到來自PC端的數據;而當總線接入工作狀態下的ARM開發板時,總線異常情況與問題1相同。
三、CAN總線三節點通信異常問題成因分析與解決措施
通過了解CAN物理層特征可知,CAN_H、CAN_L在隱性狀態時的對地電壓均為2.5V左右,經實際測量, ARM端CAN總線隱性對地電壓約為2.3V,PC端CAN總線隱性對地電壓約為2.2V,而ECU端CAN總線的隱性對地電壓約為1.5V,由於總線電壓的差異,CAN總線的對地電壓被強制拉低,導致CAN控制器無法正常識別總線數據。
當ECU端的收發器VP230的供電由3.3V更改為5V后,其總線隱性對地電壓約等於2.3V,此時ARM、ECU、PC間的任意兩節點、三節點通信均正常。
四、CAN總線4、5節點通信測試
為了進一步了解多節點CAN總線通信,將總線上的節點數增加至4節點和5節點,在實際測試中,利用ARM開發板上的2個CAN通道(NXP公司的TJA1040收發器)、2個 USB轉CAN模塊(TI公司的VP230)、1個ECU(TI公司的VP230)分別進行了各式組合,構成4節點CAN通訊均正常,但是任意5節點通信均出現異常情況,分別由各個節點發送數據,總存在一些節點無法接收到數據。
通過對CAN總線的物理層分析,認為造成這種現象可能有兩個原因,一是不同型號的CAN收發器之間通信匹配的問題,二是CAN總線的驅動能力不足造成的。
為了進一步驗證上述問題,利用兩塊ARM開發板上4個CAN通道(NXP公司的TJA1040收發器)進行測試,測試結果發現3個CAN通道可正常通信,但是4節點出現通信異常,異常現象和5節點通信時的問題相同。
由此分析可知,不同收發器的驅動能力會有一些差異,但是這並不是造成此現象的原因。而對CAN總線物理層結構特性進一步了解,總線需要在終端連接兩個120歐電阻,但是通過對所有測試點的電路檢測可知,每個節點收發器的CAN_H與CAN_L之間均連接了1個120歐電阻,而CAN通信時僅需在總線終端各加1個電阻即可。
將總線中多余的120歐電阻去掉,而只保留兩個節點的電阻,通過測試發現,此時的4節點、5節點通信均正常。
那為什么只在物理上最遠的兩個節點加這個匹配電阻,而不是在所有的節點都加上匹配電阻?
高頻信號傳輸時,信號波長相對傳輸線較短,信號在傳輸線終端會形成反射波,干擾原信號,所以需要在傳輸線末端加終端電阻,使信號到達傳輸線末端后不反射。對於低頻信號則不用。
CAN總線兩端必須連接終端電阻才可以正常工作,終端電阻應該與通訊電纜的阻抗相同,典型值為120歐姆。終端電阻的作用,一方面就是吸收信號反射及回波,而產生信號反射的最大來源便是阻抗不連續以及不匹配。另一方面,如果是加在單獨的兩根線上,相當於一個開環的狀態,根據產生信號反射的來源,也就是說這種連接方式會導致單線上阻抗更加不連續,在末端突然變為0,會導致反射成倍增加。高速CAN所加的兩個120歐的電阻實際上模擬的是線束連接無窮遠的時候在傳輸線上產生的特性阻抗(而不是實際阻抗),這是個典型經驗值,具體值取決於所采用的線束類型。CAN低速之所以不加終端電阻,是因為不同的頻率時,同樣的連接方式所產生的信號反射和回波差異很大,頻率越高,反射和回波就會越強烈。另外不同的頻率下,傳輸線的特性阻抗是不同的。第三方面,當一個顯性位發送到至少包含一個CAN驅動處於開啟狀態的網絡上時,意味着有電流經過終端電阻,因此,CAN_H和CAN_L具有了不同的電壓值。也就是說,在顯性狀態時,終端電阻會穩定並增強差分電壓,當去掉一個或兩個終端,通過示波器可以明顯看到一是信號不穩,二是差分電壓會有變化,缺少終端或沒有終端電阻時所測到的電壓是單純由CAN驅動器所產生的,離發送端越遠,電壓差異越大。