วิธีใช้โมดูลบัส MCP2515 ด้วย Arduino

How to Use the MCP2515 CAN Bus Module with Arduino

MCP2515 เป็นโมดูลบัส CAN (เครือข่ายพื้นที่คอนโทรลเลอร์) ที่ใช้กันอย่างแพร่หลายสำหรับการสื่อสารยานยนต์และอุตสาหกรรม ช่วยให้ Arduino สามารถเชื่อมต่อกับระบบที่ใช้ CAN เพื่อส่งและรับข้อมูลได้อย่างมีประสิทธิภาพ บทช่วยสอนนี้จะแนะนำคุณผ่านการตั้งค่าและใช้โมดูล MCP2515 กับ Arduino

สิ่งที่คุณต้องการ

  1. MCP2515 CAN BUS MODULE
  2. คณะกรรมการ Arduino (เช่น Uno, Mega, Nano)
  3. อุปกรณ์ที่ใช้งานร่วมกันได้หรือโมดูล MCP2515 อื่น ๆ
  4. สายจัมเปอร์
  5. กระดานข่าว (ไม่บังคับ)
  6. คอมพิวเตอร์ที่ติดตั้ง Arduino IDE

ขั้นตอนที่ 1: ทำความเข้าใจโมดูล MCP2515

โมดูล MCP2515 ใช้ MCP2515 CAN CONTROLLER IC และ TJA1050 CAN CAN TRANSICIVER โมดูลสื่อสารกับ Arduino ผ่านอินเตอร์เฟส SPI

mcp2515 pinout

เข็มหมุด การทำงาน
VCC แหล่งจ่ายไฟ (5V)
gnd พื้น
CS เลือกชิป
ดังนั้น เอาต์พุตข้อมูล SPI
ศรี อินพุตข้อมูล SPI
SCK นาฬิกา SPI
int เอาต์พุตขัดจังหวะ

ขั้นตอนที่ 2: เดินสาย MCP2515 ถึง Arduino

ด้านล่างนี้เป็นคู่มือการเดินสายสำหรับการเชื่อมต่อโมดูล MCP2515 กับ Arduino UNO:

MCP2515 PIN พิน Arduino
VCC 5V
gnd gnd
CS พิน 10
ดังนั้น PIN 12
ศรี พิน 11
SCK PIN 13
int พิน 2

บันทึก: สำหรับบอร์ด Arduino อื่น ๆ ให้แน่ใจว่าพิน SPI นั้นสอดคล้องกับ pinout ของบอร์ดเฉพาะของคุณ

ขั้นตอนที่ 3: ติดตั้งไลบรารีที่ต้องการ

ที่ MCP_CAN ห้องสมุดช่วยให้การโต้ตอบกับโมดูล MCP2515 ง่ายขึ้น

ขั้นตอนในการติดตั้งไลบรารี MCP_CAN:

  1. เปิด Arduino IDE
  2. ไป ร่าง > รวมห้องสมุด > จัดการห้องสมุด.
  3. ค้นหา "MCP_CAN" ใน Library Manager
  4. คลิก ติดตั้ง.

ขั้นตอนที่ 4: อัปโหลดรหัส

รหัสตัวส่งสัญญาณ (ส่งข้อมูลบนรถบัส CAN):

#include <SPI.h>
#include <mcp_can.h>

#define CAN_CS 10
MCP_CAN CAN(CAN_CS); // Set CS pin for MCP2515

void setup() {
  Serial.begin(115200);

  if (CAN.begin(MCP_ANY, 500000, MCP_8MHZ) == CAN_OK) {
    Serial.println("CAN Bus Initialized Successfully");
  } else {
    Serial.println("CAN Bus Initialization Failed");
    while (1);
  }

  CAN.setMode(MCP_NORMAL);
  Serial.println("CAN Bus set to Normal Mode");
}

void loop() {
  unsigned char data[8] = {0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08};

  if (CAN.sendMsgBuf(0x100, 0, 8, data) == CAN_OK) {
    Serial.println("Message Sent Successfully");
  } else {
    Serial.println("Error Sending Message");
  }

  delay(1000); // Send data every second
}

รหัสตัวรับสัญญาณ (การอ่านข้อมูลจาก CAN BUS):

#include <SPI.h>
#include <mcp_can.h>

#define CAN_CS 10
MCP_CAN CAN(CAN_CS); // Set CS pin for MCP2515

void setup() {
  Serial.begin(115200);

  if (CAN.begin(MCP_ANY, 500000, MCP_8MHZ) == CAN_OK) {
    Serial.println("CAN Bus Initialized Successfully");
  } else {
    Serial.println("CAN Bus Initialization Failed");
    while (1);
  }

  CAN.setMode(MCP_NORMAL);
  Serial.println("CAN Bus set to Normal Mode");
}

void loop() {
  unsigned char len = 0;
  unsigned char buf[8];

  if (CAN.checkReceive() == CAN_MSGAVAIL) {
    CAN.readMsgBuf(&len, buf);
    unsigned long id = CAN.getCanId();

    Serial.print("Message ID: 0x");
    Serial.println(id, HEX);

    Serial.print("Data: ");
    for (int i = 0; i < len; i++) {
      Serial.print(buf[i], HEX);
      Serial.print(" ");
    }
    Serial.println();
  }
}

ขั้นตอนที่ 5: ทดสอบการตั้งค่า

  1. เชื่อมต่อโมดูล MCP2515 กับ Arduino ของคุณตามที่อธิบายไว้ในขั้นตอนที่ 2
  2. อัปโหลดรหัสตัวส่งสัญญาณไปยังหนึ่ง Arduino และรหัสตัวรับสัญญาณไปยัง Arduino อื่น
  3. เชื่อมต่อพิน CAN_H และ CAN_L ของโมดูล MCP2515 ทั้งสองเพื่อสร้างบัส CAN
  4. เปิดมอนิเตอร์อนุกรมทั้ง Arduinos และกำหนดอัตราการรับส่งข้อมูลเป็น 115200.
  5. บนเครื่องรับ Arduino คุณควรเห็นข้อความที่ส่งโดยเครื่องส่งสัญญาณ Arduino

การแก้ไขปัญหา

  • ไม่ได้รับข้อมูล: ตรวจสอบการเชื่อมต่อ CAN_H และ CAN_L ระหว่างโมดูล
  • การเริ่มต้นล้มเหลว: ตรวจสอบให้แน่ใจว่าการเชื่อมต่อ SPI และ CS PIN ตรงกับการตั้งค่าของคุณ
  • การสื่อสารที่ผิดปกติ: ตรวจสอบว่าโมดูลทั้งสองใช้อัตราการรับส่งข้อมูลเดียวกัน (500 kbps ในตัวอย่างนี้)

แอปพลิเคชันของโมดูลบัส MCP2515 CAN

  1. การวินิจฉัยยานพาหนะ (OBD-II)
  2. ระบบอัตโนมัติอุตสาหกรรม
  3. การสื่อสารของหุ่นยนต์
  4. อุปกรณ์ IoT ที่มีเครือข่ายรถบัส Can

บทสรุป

คุณตั้งค่าโมดูลบัส MCP2515 CAN ได้สำเร็จด้วย Arduino สำหรับการส่งและรับข้อมูล โมดูลนี้มีความหลากหลายอย่างไม่น่าเชื่อสำหรับแอปพลิเคชันที่ต้องมีการสื่อสารที่เชื่อถือได้ผ่านรถบัส CAN ทดลองกับรหัสข้อความที่แตกต่างกันและข้อมูล payloads เพื่อสำรวจศักยภาพอย่างเต็มที่!

แสดงความคิดเห็น

Notice an Issue? Have a Suggestion?
If you encounter a problem or have an idea for a new feature, let us know! Report a problem or request a feature here.