ได้รับส่งมอบฟรีในคําสั่งทั้งหมดมากกว่า 20 ปอนด์!

ความเข้าใจสามารถใช้โปรโตคอลบัสและใช้ MCP2515 กับ Arduino

Understanding CAN Bus Protocol and Using the MCP2515 with Arduino

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

CAN Bus Protocol คืออะไร?

Controller Area Network (CAN) Bus เป็นมาตรฐานบัสสำหรับยานพาหนะที่มีความทนทาน ออกแบบมาเพื่อให้ไมโครคอนโทรลเลอร์และอุปกรณ์สามารถสื่อสารกันได้โดยไม่ต้องมีคอมพิวเตอร์โฮสต์ พัฒนาโดย Bosch ในทศวรรษ 1980 CAN Bus ได้กลายเป็นมาตรฐานในระบบยานยนต์ และยังถูกใช้งานอย่างแพร่หลายในระบบอัตโนมัติอุตสาหกรรมและระบบฝังตัวอื่น ๆ

คุณสมบัติหลักของโปรโตคอล CAN Bus ได้แก่:

  • การกำหนดค่าแบบมัลติมาสเตอร์: หลายโหนดสามารถสื่อสารบนบัสเดียวกันได้โดยไม่ต้องมีตัวควบคุมส่วนกลาง
  • การจัดลำดับความสำคัญของข้อความ: ข้อความจะถูกกำหนดลำดับความสำคัญตามตัวระบุ เพื่อให้มั่นใจว่าข้อมูลสำคัญจะถูกส่งก่อน
  • การตรวจจับข้อผิดพลาด: กลไกการตรวจจับข้อผิดพลาดที่มีความทนทาน รวมถึงการตรวจสอบ CRC และบิตยืนยันการรับ ช่วยเพิ่มความเชื่อถือได้
  • การสื่อสารความเร็วสูง: รองรับอัตราการรับส่งข้อมูลได้สูงสุดถึง 1 Mbps เหมาะสำหรับแอปพลิเคชันแบบเรียลไทม์

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

ขอแนะนำ MCP2515 ตัวควบคุม CAN

เดอะ MCP2515 เป็นคอนโทรลเลอร์ Controller Area Network (CAN) แบบสแตนด์อโลนที่เชื่อมต่อกับไมโครคอนโทรลเลอร์ผ่านทาง Serial Peripheral Interface (SPI). มันจัดการโปรโตคอล CAN ที่ซับซ้อน ช่วยให้นักพัฒนาสามารถมุ่งเน้นไปที่ลอจิกของแอปพลิเคชันระดับสูงได้ คุณสมบัติสำคัญของ MCP2515 รวมถึง:

  • รองรับเฟรม CAN มาตรฐานและแบบขยาย
  • กลไกการจัดการข้อผิดพลาดและการกรองที่มีในตัว
  • ความเข้ากันได้กับไมโครคอนโทรลเลอร์หลากหลายรุ่น รวมถึง Arduino
  • การใช้พลังงานต่ำ ทำให้เหมาะสำหรับระบบฝังตัว

โดยการผสานรวม MCP2515 ด้วย Arduino คุณสามารถเพิ่มความสามารถของ CAN Bus ให้กับโปรเจ็กต์ของคุณ ทำให้สามารถสื่อสารกับอุปกรณ์หรือเครือข่ายที่รองรับ CAN อื่นๆ ได้

การตั้งค่า MCP2515 กับ Arduino

ในการเริ่มต้น คุณจะต้องมีส่วนประกอบต่อไปนี้:

  • บอร์ด Arduino (เช่น Arduino Uno)
  • MCP2515 โมดูล CAN (มักมาพร้อมกับทรานซีฟเวอร์ CAN รุ่น TJA1050)
  • สายจัมเปอร์
  • เบรดบอร์ด (ไม่บังคับ)

นี่คือคู่มือแบบทีละขั้นตอนในการตั้งค่า MCP2515 กับ Arduino ของคุณ:

1. การเดินสายไฟ MCP2515 ไปยัง Arduino

เชื่อมต่อ MCP2515 เชื่อมต่อโมดูลเข้ากับ Arduino ดังนี้:

  • VCC to 5V บน Arduino
  • GND to GND บน Arduino
  • CS to ขา 10 บน Arduino
  • SCK to ขา 13 บน Arduino
  • SI (MOSI) ไปยัง พิน 11 บน Arduino
  • SO (MISO) ถึง พิน 12 บน Arduino
  • INT to ขา 2 บน Arduino

     Arduino          MCP2515
     -------          -------
     5V       ------>  VCC
     GND      ------>  GND
     Pin 10   ------>  CS
     Pin 13   ------>  SCK
     Pin 11   ------>  SI (MOSI)
     Pin 12   ------>  SO (MISO)
     Pin 2    ------>  INT

2. การติดตั้งไลบรารีที่จำเป็น

เพื่อสื่อสารกับ MCP2515, คุณจะต้องมี mcp_can ไลบรารี. ติดตั้งผ่าน Arduino Library Manager:

  1. เปิด Arduino IDE
  2. ไปที่ สเก็ตช์ > เพิ่มไลบรารี > จัดการไลบรารี...
  3. ค้นหา mcp_can และติดตั้ง mcp_can ไลบรารีโดย Cory J. Fowler.

3. การอัปโหลดโค้ดตัวอย่าง

นี่คือตัวอย่างพื้นฐานในการส่งและรับข้อความ CAN โดยใช้ MCP2515 และ Arduino:

การส่งข้อความ CAN


// รวมไลบรารีที่จำเป็น
#include 
#include "mcp_can.h"

// กำหนดขา CS
#define CAN0_CS 10

// เริ่มต้นตัวควบคุม CAN
MCP_CAN CAN0(CAN0_CS);

void setup() {
    Serial.begin(115200);
    while (CAN0.begin(MCP_ANY, CAN_500KBPS, MCP_8MHZ) != CAN_OK) {
        Serial.println("เริ่มต้น CAN BUS Shield ล้มเหลว");
        Serial.println(" เริ่มต้น CAN BUS Shield อีกครั้ง");
        delay(100);
    }
    Serial.println("เริ่มต้น CAN BUS Shield สำเร็จ!");
    CAN0.setMode(MCP_NORMAL);
}

void loop() {
    byte data[] = {0x00, 0xFF, 0xAA, 0x55, 0x33, 0x66, 0x99, 0xCC};
    // ส่งข้อมูล: CAN ID = 0x100, ความยาวข้อมูล = 8
    if (CAN0.sendMsgBuf(0x100, 0, 8, data) == CAN_OK) {
        Serial.println("ส่งข้อความสำเร็จ!");
    } else {
        Serial.println("เกิดข้อผิดพลาดในการส่งข้อความ...");
    }
    delay(1000);
}

การรับข้อความ CAN


// รวมไลบรารีที่จำเป็น
#include 
#include "mcp_can.h"

// กำหนดขา CS
#define CAN0_CS 10

// เริ่มต้นตัวควบคุม CAN
MCP_CAN CAN0(CAN0_CS);

void setup() {
    Serial.begin(115200);
    while (CAN0.begin(MCP_ANY, CAN_500KBPS, MCP_8MHZ) != CAN_OK) {
        Serial.println("เริ่มต้น CAN BUS Shield ล้มเหลว");
        Serial.println(" เริ่มต้น CAN BUS Shield อีกครั้ง");
        delay(100);
    }
    Serial.println("เริ่มต้น CAN BUS Shield สำเร็จ!");
    CAN0.setMode(MCP_NORMAL);
}

void loop() {
    unsigned long canId;
    byte len = 0;
    byte buf[8];
    
    // ตรวจสอบว่ามีการรับข้อมูลหรือไม่
    if (CAN0.checkReceive() == CAN_MSGAVAIL) {
        CAN0.readMsgBuf(&canId, &len, buf);
        Serial.print("รหัส CAN: 0x");
        Serial.println(canId, HEX);
        Serial.print("ข้อมูล: ");
        for (int i = 0; i < len; i++) {
            Serial.print(buf[i], HEX);
            Serial.print(" ");
        }
        Serial.println();
    }
}

ในสเก็ตช์สำหรับการส่ง Arduino ส่งข้อความ CAN ที่มี ID 0x100 ทุก ๆ วินาที สเก็ตช์ฝั่งรับจะฟังข้อความ CAN ที่เข้ามาและพิมพ์ ID และข้อมูลไปยัง Serial Monitor.

การประยุกต์ใช้ CAN Bus กับ Arduino

การผสาน CAN Bus เข้ากับ Arduino ช่วยเปิดโอกาสให้เกิดแอปพลิเคชันหลากหลายที่ก้าวไกลเกินกว่าระบบยานยนต์ กรณีใช้งานยอดนิยมบางประการ ได้แก่:

  • โรโบติกส์: เปิดใช้งานการสื่อสารระหว่างตัวควบคุมมอเตอร์หลายตัวและเซ็นเซอร์
  • ระบบอัตโนมัติอุตสาหกรรม: อำนวยความสะดวกในการแลกเปลี่ยนข้อมูลระหว่างเครื่องจักรและหน่วยควบคุมที่แตกต่างกัน.
  • ระบบอัตโนมัติภายในบ้าน: เชื่อมต่ออุปกรณ์สมาร์ทหลากหลายภายในเครือข่ายเดียว
  • ระบบเก็บรวบรวมข้อมูล: รวบรวมและประมวลผลข้อมูลจากเซ็นเซอร์หลายตัวอย่างมีประสิทธิภาพ

สรุป

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

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

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.

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