2022年11月13日 星期日

【Arduino】 CAN Bus 測試/應用 MCP2515

 本篇選用Arduino UNO 、CAN Bus Shield 做示範

Arduino UNOCAN bus


使用CAN Bus Shield 方便與Arduino 進行連接。

CAN Bus Shield 接腳          對應      Arduino

               INT                      ——>        2

               MISO                   ——>      12

               MOSI                   ——>      11

               SCK                      ——>     10

               CS                         ——>       9

在IDE上安裝MCP2515的Library

方法1.

草稿碼→匯入程式庫→管理程式庫
Arduino IDE 教學

搜尋MCP2515的library → 安裝

Arduino IDE 教學
   

方法2.

下載Arduino-Can library

解壓縮 → 放到IDE的libraries資料夾


安裝完後

開啟IDE 範例

Arduino IDE 教學

Arduino IDE 教學

介紹一下CAN封包

CAN bus 教學 Arduino IDE 教學

Aduino將資料(data field)以及對象(id)傳至 CAN Controller(MCP2515)
CAN Controller(MCP2515)將收到的訊息轉成CAN Bus的格式
Transceiver(TJA1050)負責電壓準位轉換
終端電阻120歐姆防止信號反射影響接收

CAN Bus格式分為標準類(ID 11 bit)型及擴展型(ID 29 bit)
依據你所要連接的單元做選擇
CAN Bus Arduino IDE 教學
     CAN.sendMsgBuf(0x001, 0, 8, stmp);  //短ID

CAN Bus Arduino IDE 教學
CAN.sendMsgBuf(0x19FFF500, 1, 8, stmp); //長ID

實際傳輸

用2塊UNO互傳資料...
第一塊ID = 0x10
第二塊ID = 0x11
第一塊發送出去

 byte Mdata0[8] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02};  //Data

CAN0.sendMsgBuf(0x010, 0, 8, Mdata0); //Send

 第二塊接收

 while (CAN_MSGAVAIL == CAN0.checkReceive()) 
  {
    CAN0.readMsgBufID(&id, &len, buf);
    if((id) != 16){            // 判斷接收的ID是否正確
      Serial.println("WRONG REQUEST");
    }
    else {
      Serial.print(id, HEX);
      Serial.print(" [ ");
      for(int i=0; i<8; i++) 
      {
        char buffer1[3];
        sprintf (buffer1, "%02x", buf[i]);
        Serial.print(buffer1);
        Serial.print(" ");
      }
      Serial.println("]");
  }
用序列埠監控視窗印出收到的封包


緩慢更新中...

















沒有留言:

張貼留言

【Arduino】 RS485 實現Modbus Slave

 這次使用Arduino UNO + RS485 的模組,來實現Modbus Slave 的通訊 Pin Name Pin Description VCC 5V A Non-inverting Receiver Input Non-Inverting Driver Output ...