tft每日頭條

 > 生活

 > CAN通信的一般速率

CAN通信的一般速率

生活 更新时间:2025-01-08 09:44:41

昨天,一位關系比較好的前公司同事打來電話尋求幫助,他在解讀整車廠(東風汽車)發來的CAN協議時遇到了困擾:完全看不懂——因為他以前接觸的是CAN擴展幀協議。鑒于經常有朋友也遇到相似的問題,現在就這個問題我有針對性的解釋一下。

一、CAN通信的基礎知識

(1)為什麼要采用CAN通信:CAN通信因為其通信速率快,抗幹擾性好,目前廣泛應用于車載電子設備上,比如電動汽車及燃油汽車等。CAN物理接口兼容規範2.0A和2.0B(主動),位速率高達1兆位/秒。它可以接收和發送11位标識符的标準幀,也可以接收和發送29位标識符的擴展幀。

(2)标準幀和擴展幀的區别:其一,擴展幀的仲裁域有29位,可以出現2^29種報文,幀ID的範圍是0000 0000-1FFF FFFF;标準幀的仲裁域是連續的11位,可以出現2^11種報文,幀ID的範圍是000-7FF;其二,控制幀中的DLC(數據長度)完全相同,但保留位不同,标準幀IDE、R0,擴展幀R1、R0,必須以顯性電平發送(由數據鍊路層操作)。因此,CAN标準幀和擴展幀除了在幀ID的長度上不一樣,其它的基本上一模一樣。

(3)Intel格式與Motorola格式的區别:CAN報文中字節和數據位的編碼及擺放是有順序的,分為Intel與Motorola兩種格式。當一個信号的數據長度不超過 1 個字節(8 位)時,Intel 與 Motorola 兩種格式的編碼結果沒有什麼不同,完全一樣;而當信号的數據長度超過 1 個字節(8 位)時,兩者的編碼結果出現了明顯的不同,簡單來說就是:Intel格式高字節在後,低字節在前;而Motorola格式則相反,高字節在前,低字節在後,如圖1所示。

CAN通信的一般速率(CAN通信标準幀之ID标識符)1

圖1 采用Intel格式編碼十六進制數值“0x36A5”示例

CAN通信的一般速率(CAN通信标準幀之ID标識符)2

圖2 采用Motorola格式編碼十六進制數值“0x36A5”示例

(4)關于報文解析中涉及到的分辨率(或稱精度)和偏移量,如何轉換為物理值(或實際值):換算關系為——物理值(實際值)=總線值*分辨率 偏移量。示例如下:

CAN通信的一般速率(CAN通信标準幀之ID标識符)3

圖3 報文解析中分辨率和偏移量的換算關系

(5)CAN報文ID标識符的分配表及說明

(下表可以向左或向右拖拉,以顯示全部信息)

IDENTIFIER 11BITS(标準幀隻有此11位)

SRR

IDE

IDENTIFIER EXTENSION 18BITS(擴展幀另外包含此18位)

R

DP

PDU

FORMAT(PF)

SRR

IDE

PF

PDU

SPECIFIC(PS)

SOURCE

ADDRESS(SA)

3

2

1

1

1

8

7

6

5

4

3

2

1

8

7

6

5

4

3

2

1

8

7

6

5

4

3

2

1

此3位代表優先級,可以有8 個優先級

一般固定為0

固定為0

PF為報文的代碼

(标準幀隻有6位)

PF為報文的代碼

(擴展幀還要包含這2位,共有8位)

PS為發送此報文去的目标地址

SA為發送此報文的源地址

顯而易見,标準幀隻有11位,而擴展幀擴展了18位,共有29位标識符。

二、解疑答惑

學習了解了上面(1)到(5)的基礎知識,我們再來看一下東風汽車公司某一款車型的整車CAN标準幀協議,截取一段如下圖4所示(為了顯示清晰,分為2段截取):

CAN通信的一般速率(CAN通信标準幀之ID标識符)4

圖4 截取報文段1

CAN通信的一般速率(CAN通信标準幀之ID标識符)5

圖4 截取報文段2

整車上通信互聯的控制器有很多,比如VCU、MCU、TBOX、BMS等等,我上面展開的是BMS對OBC的報文幀(BMS_OBC),解析如下:

1、首先,可以看出該幀報文(BMS_OBC)是由BMS發給OBC的,“S”代表英文send,“r”代表英文“receive”,幀ID為0x330,發送周期為100ms,包含8個字節的有效數據,數據編碼格式采用Motorola格式;

CAN通信的一般速率(CAN通信标準幀之ID标識符)6

圖5 CAN報文收發關系

2、該幀報文包含有4個有效物理量,分别是:BMS_最高允許充電端電壓、BMS_最高允許充電電流、BMS_充電機使能控制、BMS_充電樁類型;

3、我先解析“BMS_最高允許充電端電壓”這個物理量,這個物理量信号長度(Bit Length)為16Bit,占用兩個字節,起始字節(Start Byte)是1,即從第1字節到0字節;該字節為無符号數(Unsigned),分辨率(Resolution)為0.1,偏移量(Offset)為0,它的實際取值範圍是從0—750,單位為“V”,總線上發送的十六進制數值範圍為0x0—0x1D47,如果接收到數值為0xFFFF就代表數值無效;

4、ID标識符0x330采用11位二進制可表示為:011 0011 0000,根據上節标準幀ID分配表套用可知其代表含義:優先級為3,報文代碼(報文名)PF為0x30;

5、假如接收到的報文為:

CAN通信的一般速率(CAN通信标準幀之ID标識符)7

圖6 模拟CAN報文

那麼,它代表的物理量“BMS_最高允許充電端電壓”, 其數值=0x1A90 * 0.1 0,轉換為十進制等于680V,即BMS最高允許充電端電壓為680V,其餘物理量以此類推可知,BMS_最高允許充電電流為56.2A,充電機關閉輸出,BMS處于非充電狀态。

現在,我們可以将該幀報文換成另一種格式進行表述:

CAN通信的一般速率(CAN通信标準幀之ID标識符)8

圖7 報文幀ID-0x330另一種通俗表述方式

如上圖這樣表述,相信我那位朋友就一定能夠看懂了,大家看懂了嗎?

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关生活资讯推荐

热门生活资讯推荐

网友关注

Copyright 2023-2025 - www.tftnews.com All Rights Reserved