Controller Area Network (CAN) 通信機制簡介

目錄

1. CAN?概述

2. 物理結構與傳輸機制

3. 消息格式與仲裁機制

4. 錯誤檢測與總線狀態

5. 工業用 CAN 接口

6. 本講總結


1. CAN?概述

CAN(Controller Area Network)是由德國博世(Bosch)公司于 1983 年提出的串行通信協議,最初用于汽車內部多個電子控制單元(ECU)之間的數據通信。CAN 總線有以下特點:

  • 多主結構:任意節點都可以在總線空閑時發起通信,支持分布式控制系統;

  • 實時性高:通過優先級仲裁機制保證高優先級信息的快速響應;

  • 通信可靠性強:內置多重錯誤檢測機制;

  • 抗干擾性強:差分信號傳輸 + 雙絞線結構;

  • 應用廣泛:除汽車外,在工業自動化、電梯、軌道交通、醫療設備等領域被大量采用。

CAN 在工業發展中已經進行過多次的升級和演進。最初的 Classic CAN(標準 CAN)支持最大數據幀為 8 字節。Bosch 在 2012 年推出了?CAN FD(Flexible Data Rate),為標準 CAN 的增強型協議,支持高達 64 字節數據,速率提升到 5Mbps。CANopen SAE?J1939 是基于 CAN 的上層協議,提供數據組織和設備管理規范。

2. 物理結構與傳輸機制

CAN 在物理層采用差分信號傳輸,即 CAN_H(高線)CAN_L(低線)之間的電壓差來表示邏輯狀態,理論上用雙絞線就可以實現,如下圖所示:

差分電壓信號分為顯性與隱性信號兩種,分別代表邏輯 0 和 1,如下表所示:

狀態CAN_HCAN_L差值邏輯
顯性(Dominant)~3.5V~1.5V~2V邏輯 0
隱性(Recessive)~2.5V~2.5V~0V邏輯 1

CAN 將信號轉換成一系列的電壓差來進行傳送。CAN 通常為 總線型結構,兩端會接 120Ω 終端電阻,吸收信號反射,如下圖所示:

CAN 總線的最大傳輸距離是和傳輸速率(波特率)有直接關系的,下表根據經驗給出了一個大概的關系:

波特率最大距離(理論)
1 Mbps40 米
500 kbps100 米
125 kbps500 米

實際應用中,傳輸距離受很多因素影響。但是我們可以看到速率越高,支持的距離會越短。

3. 消息格式與仲裁機制

CAN 采用 幀格式 來組織通信數據。每一幀都是廣播的,所有節點都能接收,根據 ID 來決定是否處理。CAN 常用的幀類型有以下四種:

類型用途
數據幀正常通信的數據負載傳輸
遠程幀請求其他節點發送某類數據
錯誤幀報告幀錯誤(由接收/發送節點主動發送)
過載幀通知總線稍等片刻(如緩存溢出)

這里我們重點介紹一下數據幀。數據幀的結構如下圖所示:

這里進行一下簡單的介紹:

  • 標識符(ID):代表消息類型,也決定優先級(數值越小優先級越高);

  • RTR 位:區分數據幀和遠程幀;

  • CRC(校驗):檢測傳輸錯誤;

  • ACK(響應):確認接收響應位。

  • Data(數據): 傳輸的數據,最高8字節。

CAN(Controller Area Network)總線的仲裁機制是一種非破壞性位仲裁方式。當多個節點幾乎同時開始發送數據時,它們會在發送過程中監視總線電平。CAN 使用“優先級”機制:幀的標識符越小,優先級越高。發送過程中,如果某個節點發送的是顯性位(0)而檢測到的是隱性位(1),說明有更高優先級的消息正在傳輸,該節點會立即停止發送,從而實現無沖突的仲裁和總線訪問控制。

4. 錯誤檢測與總線狀態

CAN 協議對錯誤處理十分嚴格,具備多級檢測與恢復機制。CAN 有五種錯誤檢測機制:

  1. 位錯誤(Bit Error):發送位與檢測到的位不同;

  2. 填充錯誤(Stuff Error):違反“5 個相同位后自動插入反位”規則;

  3. CRC 錯誤:校驗字段不匹配;

  4. 格式錯誤(Form Error):幀結構字段異常;

  5. ACK 錯誤:期望有節點應答卻未收到 ACK。

如果發現錯誤,CAN 還有不同的錯誤處理機制,比如:

  • 主動錯誤幀(Active Error Frame):節點發現錯誤并通知所有節點;

  • 被動錯誤幀(Passive Error Frame):錯誤次數過多后被動報告,不再主動干擾總線;

  • 總線關閉(Bus-Off):連續錯誤嚴重,節點完全斷開,不再參與通信(例如失控 ECU);

CAN 的錯誤檢測與總線狀態是個很重要的話題,我們這里不做過多的介紹,之后會單獨開一篇教程講解不同的錯誤檢測機制。

5. 工業用 CAN 接口

雖然 CAN 總線只需要兩根信號線(CAN_H 和 CAN_L) 進行通信,但在實際設備或開發板上的CAN 接口會出現多個“插頭”或“針腳”,額外的“頭”不僅用于信號線,還包括供電、接地、終端電阻控制、備用信號或診斷功能等,見下表:

接口引腳用途說明
CAN_H差分信號:高線
CAN_L差分信號:低線
GND(接地)電源地線,用于參考和抗干擾
V+ / Vbat電源供電(如 12V/24V)
STB / EN芯片工作/待機控制信號(控制 CAN 芯片開關)
RS可調終端電阻設置(如 SN65HVD230 有此功能)
NC預留 / 未接

在使用的時候,要根據具體情況具體分析,并仔細閱讀使用手冊和文檔。

6. 本講總結

在這篇博文中,我們簡單的介紹了 CAN 的基本原理,網絡結構,數據傳輸和仲裁機制,我們在之后的博文中,針對部分內容,進行更深入的解析。

參考文獻:

1. can口9針定義_can口定義-CSDN博客

2. 常用通信接口電氣特征(六):CAN_can接口-CSDN博客

3.?詳解CAN總線:常用CAN連接器的使用方法_dsub9 can-CSDN博客

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/87319.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/87319.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/87319.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

我有一個想法

我有一個想法 我想為家鄉做點事情,但是又不知道從哪里開始。 也許為家鄉的教育做點事情是比較靠譜的。 于是,我就想到了,是不是可以在高中學校,設立一個“鴻鵠”獎學金? 這個獎學金怎么使用呢? 在每年9月份…

【Pandas】pandas DataFrame stack

Pandas2.2 DataFrame Reshaping sorting transposing 方法描述DataFrame.droplevel(level[, axis])用于**從 DataFrame 的索引(行或列)中刪除指定層級(level)**的方法DataFrame.pivot(*, columns[, index, values])用于重塑 Dat…

Java 自動關閉資源語法糖 - try-with-resources

文章目錄 Java 自動關閉資源語法糖 - try-with-resources前言優勢1、自動資源管理2、處理多重資源3、異常處理更健壯4、適用條件 總結 Java 自動關閉資源語法糖 - try-with-resources 前言 日常開發中,我們經常會看到如下代碼: try (InputStream is …

MyBatis中的動態SQL是什么?

大家好,我是鋒哥。今天分享關于【MyBatis中的動態SQL是什么?】面試題。希望對大家有幫助; MyBatis中的動態SQL是什么? 超硬核AI學習資料,現在永久免費了! MyBatis中的動態SQL指的是根據不同的條件&#x…

【Java反射】如何新增對象中的屬性,與JavaScript中的直接添加屬性有什么區別?

問&#xff1a; Object obj new Object(); //獲取一個類的class對象 Class<?> objClass Object.class; try { //通過newInstance方法創建一個新的屬性 Field newField Field.class.newInstance(); newField.setAccessible(true); newField.set(obj, “index”); }ca…

java spring boot Swagger安裝及使用

https://springdoc.org/ 可能原因分析 &#x1f50d; 原因 1&#xff1a;SpringFox 版本與 Spring Boot 版本不兼容 ? SpringFox 3.0.0 不完全兼容 Spring Boot 2.6 及更高版本&#xff0c;可能導致 NullPointerException。 Spring Boot 3.x 完全不支持 SpringFox&#xff0c…

電商云倉/前置倉的物流高效監控、管理、預警系統,快遞鳥DMS

在電商行業蓬勃發展的當下&#xff0c;電商云倉和前置倉作為物流配送體系的關鍵環節&#xff0c;其高效運作直接影響著消費者體驗與企業競爭力。快遞鳥 DMS 物流交付管理平臺&#xff0c;以其卓越的物流監控、管理及預警功能&#xff0c;成為電商企業優化云倉和前置倉物流管理的…

HarmonyOS Next深度解析:高德定位SDK高效集成與實戰指南

HarmoyOS Next 實現高德定位SDK 注&#xff1a;作者采用版本為 HarmonyOS 5.0.0 Release SDK和DevEco Studio 5.0.0 Release。 1.獲取本地AppID&#xff1a; 在index.pages的abountToAppear( ) 方法中獲取appID、并打印在Log日志&#xff0c;即可在程序運行時獲取本地項目的…

【技術】記一次 Docker 中的 ES 數據遷移,使用 Reindex API

記一次 Docker 中的 ES 數據遷移&#xff0c;使用 Reindex API 環境背景需求背景開始遷移確認老 ES 的訪問地址在新 ES 中創建索引的 Mapping (選配)在新 ES 中配置老 ES 的地址開始遷移數據數據驗證 首先聲明&#xff0c;是因為環境限制&#xff0c;沒有辦法使用同步工具&…

yii2基礎版本安裝記錄,實錄有點亂看標題即可

因為使用php 安裝的是docker環境所有進入到容器安裝ridh_mfe_api 為掛載目錄 Nginx及PHP掛載配置 因為使用php 安裝的是docker環境所有進入到容器安裝 ridh_mfe_api 為掛載目錄 進入容器 % docker exec -it php sh /var/www/html # ls index.html index.php composer crea…

前端跨域解決方案(3):CORS

1 CORS 核心 CORS&#xff08;Cross-Origin Resource Sharing&#xff09;&#xff0c;即跨域資源共享&#xff0c;是目前最主流的跨域方案&#xff0c;它通過服務器返回的特殊 HTTP 頭&#xff0c;允許瀏覽器放行跨域請求。與傳統的 JSONP 相比&#xff0c;CORS 具有明顯的優…

SpringBoot源碼解析(十五):spring-boot-autoconfigure.jar的模塊化設計

前言 SpringBoot的自動配置是其革命性特性的核心&#xff0c;而spring-boot-autoconfigure.jar則是這一機制的物理載體。本文將深入剖析這個JAR包的模塊化設計哲學&#xff0c;從包結構劃分、條件注解體系到自動配置加載機制&#xff0c;全方位解析SpringBoot如何通過精妙的模…

學習筆記九:docker容器日志問題

docker容器日志問題 背景如何處理日志問題主要通過日志輪詢方式處理。修改 Docker 配置日志快速清理 背景 Docker 默認使用的是 json-file 日志驅動。日志會一直寫&#xff0c;一直寫&#xff0c;沒有限制、沒有輪轉、沒有清理&#xff01; 日志默認位置&#xff1a; /var/lib…

低成本同屏方案:電腦 + 路由器實現 50 臺安卓平板實時同屏

引言 在教育機構、小型培訓場景或企業簡易會議中&#xff0c;常面臨以最低成本實現多設備同屏的需求。本文針對 "電腦 路由器 50 臺安卓平板" 的極簡硬件組合&#xff0c;詳細剖析實時同屏的實現路徑&#xff0c;從問題分析到技術落地提供全流程解決方案&#xff0…

Unity ECS DOTS技術實現50000個cube隨機循環移動流程

前言 之前使用過ECS面向組件開發&#xff0c;一直想試一下Unity的ECS DOTS技術&#xff0c;但是苦于入門門檻太高&#xff0c;下載官方的Demo&#xff0c;發現代碼哪哪兒都看不懂&#xff0c;一大堆API聞所未聞&#xff0c;而且沒有一個入門的流程&#xff0c;導致無法進行下去…

設計模式精講 Day 3:抽象工廠模式(Abstract Factory Pattern)

【設計模式精講 Day 3】抽象工廠模式&#xff08;Abstract Factory Pattern&#xff09; 文章簡述 在軟件開發中&#xff0c;隨著業務復雜度的提升&#xff0c;系統需要支持多種產品族的創建。抽象工廠模式正是為了解決這一問題而誕生的設計模式之一。本文作為“設計模式精講”…

Kafka消息零丟失架構設計:從原理到實戰的全方位保障

引言 在構建高可靠分布式系統時&#xff0c;Kafka作為核心消息中間件被廣泛應用于數據管道、實時流處理等關鍵場景。然而&#xff0c;分布式環境下的網絡波動、節點故障等因素可能導致消息丟失&#xff0c;如何確保Kafka實現端到端的消息零丟失成為架構設計的關鍵挑戰。本文將…

Python學習筆記:錯誤和異常處理

1. 什么是錯誤和異常 在Python中&#xff0c;錯誤可以分為兩類&#xff1a; 語法錯誤(Syntax Errors)&#xff1a;代碼不符合Python語法規則異常(Exceptions)&#xff1a;語法正確的代碼在運行時發生的錯誤 # 語法錯誤示例 print("Hello World" # 缺少右括號# 異…

為什么要進行行為驗證,行為驗證方式有哪些?

進行行為驗證的主要目的是提高賬戶安全性、防范自動化攻擊、增強用戶身份確認精準度、優化用戶體驗。其中&#xff0c;提高賬戶安全性最為關鍵。行為驗證能通過分析用戶的行為模式&#xff0c;如操作習慣、設備使用特點等&#xff0c;識別出非正常或惡意活動&#xff0c;迅速采…

主流Java Redis客戶端(Jedis、Lettuce、Redisson)差異對比

主流Java客戶端對比&#xff1a;Jedis采用阻塞I/O&#xff0c;需連接池支持&#xff1b;Lettuce/Redisson基于Netty非阻塞I/O。Jedis輕量但并發能力弱&#xff0c;Lettuce支持10K并發且為SpringBoot默認&#xff0c;Redisson提供分布式功能但性能稍遜。 Redisson Lettuce 在 …