Kunkune

如何使用MCP2515 CAN Bus模組與Arduino

如何使用MCP2515 CAN Bus模組與Arduino

By Kunkune | Published: 2026-10-17

Category: 操作指南

學習如何將 MCP2515 CAN 匯流排模組與 Arduino 接線及編程,用於車輛或工業通訊。逐步指南,並涵蓋常見錯誤。

快速解答

要將 MCP2515 CAN 匯流排模組與 Arduino 搭配使用,請將其 SPI 接腳(CS、SCK、MOSI、MISO)接線,並以 5V 供電,然後安裝 MCP_CAN 程式庫,並透過簡單的草稿碼傳送或接收 CAN 訊框。模組上的 TJA1050 收發器負責處理實體 CAN 訊號,因此您只需將 CANH 和 CANL 連接到您的匯流排。本指南將逐步說明接線、程式庫設定,以及基本的傳送/接收範例。

將 MCP2515 接線至 Arduino

MCP2515 模組使用 SPI 通訊,因此請將其連接到 Arduino 的 SPI 接腳:CS 接至 10 腳位(預設)、SCK 接至 13、MOSI 接至 11、MISO 接至 12(在 Uno 上)。以 5V 和接地為模組供電。在 CAN 匯流排側,將 CANH 和 CANL 連接到您的匯流排線路;如果您使用兩個模組進行測試,請將 CANH 連接到 CANH,CANL 連接到 CANL。在匯流排的每一端各添加一個 120 歐姆終端電阻,以防止訊號反射。

安裝 CAN 程式庫

最常見的程式庫是 coryj Fowler 開發的 MCP_CAN,可從 Arduino 程式庫管理員取得。搜尋「MCP_CAN」並安裝。安裝完成後,在您的草稿碼中包含該程式庫,並使用正確的 SPI CS 接腳和鮑率(通常汽車 OBD-II 為 500kbps)初始化 CAN 控制器。

傳送和接收 CAN 訊框

若要傳送訊框,請使用 sendMsgBuf(id, ext, len, buf)。若要接收,請使用 checkReceive() 檢查 CAN_MSGAVAIL,並使用 readMsgBuf() 讀取。MCP2515 負責處理低階 CAN 協定,因此您的程式碼只需處理訊息 ID 和資料位元組。請記住,CAN 是廣播式的:每個節點都會看到所有訊息,您可以在軟體中依 ID 進行過濾。

逐步設定

  1. 連接硬體: 將 MCP2515 模組接線至 Arduino:VCC 接至 5V、GND 接至 GND、CS 接至 10 腳位、SCK 接至 13、MOSI 接至 11、MISO 接至 12。將 CANH 和 CANL 連接到您的匯流排。 再次確認您沒有接反 MOSI 和 MISO——這是常見的錯誤。
  2. 安裝 MCP_CAN 程式庫: 開啟 Arduino 程式庫管理員,搜尋「MCP_CAN」,並安裝最新版本。在您的草稿碼中使用 #include 將其包含。 如果找不到程式庫,請檢查您的拼寫和網路連線。
  3. 初始化 CAN 控制器: 使用 CS 接腳建立 MCP_CAN 物件(例如 MCP_CAN CAN0(10))。在 setup() 中,呼叫 CAN0.begin(CAN_500KBPS) 並驗證回傳值。 begin() 呼叫成功時會回傳 CAN_OK (0);如果沒有,請檢查接線和鮑率。
  4. 傳送 CAN 訊息: 準備一個資料緩衝區,並呼叫 CAN0.sendMsgBuf(0x123, 0, 8, data); 其中 0x123 是訊息 ID,8 是資料長度。 確保 ID 不會與匯流排上的其他節點衝突。
  5. 接收 CAN 訊息: 在 loop() 中,使用 CAN0.checkReceive() == CAN_MSGAVAIL 檢查是否有訊息可用,然後使用 CAN0.readMsgBuf(&len, buf) 讀取。 如果您沒有看到訊息,請確認匯流排有正確的終端電阻,且所有節點使用相同的鮑率。

產品資訊

Shop Related Products

MCP2515 CAN Bus 模組 TJA1050 接收器 SPI 模組

MCP2515 CAN Bus 模組 TJA1050 接收器 SPI 模組

$2.70 $3.85

Shop Now