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

Understanding CAN Bus Protocol and Using the MCP2515 with Arduino

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

โปรโตคอลรถบัสคืออะไร?

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

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

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

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

การแนะนำ MCP2515 CAN CONTROLLER

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

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

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

การตั้งค่า MCP2515 ด้วย Arduino

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

  • Arduino Board (เช่น Arduino Uno)
  • MCP2515 สามารถโมดูล (มักจะมาพร้อมกับตัวรับส่งสัญญาณ CAN TJA1050)
  • สายจัมเปอร์
  • กระดานข่าว (ไม่บังคับ)

นี่คือคำแนะนำทีละขั้นตอนในการตั้งค่า MCP2515 ด้วย Arduino ของคุณ:

1. การเดินสาย MCP2515 ถึง Arduino

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

  • VCC ถึง 5V บน Arduino
  • gnd ถึง gnd บน Arduino
  • CS ถึง พิน 10 บน Arduino
  • SCK ถึง PIN 13 บน Arduino
  • ศรี (mosi) ถึง พิน 11 บน Arduino
  • ดังนั้น (มิโซะ) ถึง PIN 12 บน Arduino
  • int ถึง พิน 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. การอัปโหลดรหัสตัวอย่าง

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

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


// Include the necessary libraries
#include 
#include "mcp_can.h"

// Define the CS pin
#define CAN0_CS 10

// Initialize the CAN controller
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 init fail");
        Serial.println(" Init CAN BUS Shield again");
        delay(100);
    }
    Serial.println("CAN BUS Shield init ok!");
    CAN0.setMode(MCP_NORMAL);
}

void loop() {
    byte data[] = {0x00, 0xFF, 0xAA, 0x55, 0x33, 0x66, 0x99, 0xCC};
    // Send data: CAN ID = 0x100, data length = 8
    if (CAN0.sendMsgBuf(0x100, 0, 8, data) == CAN_OK) {
        Serial.println("Message Sent Successfully!");
    } else {
        Serial.println("Error Sending Message...");
    }
    delay(1000);
}

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


// Include the necessary libraries
#include 
#include "mcp_can.h"

// Define the CS pin
#define CAN0_CS 10

// Initialize the CAN controller
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 init fail");
        Serial.println(" Init CAN BUS Shield again");
        delay(100);
    }
    Serial.println("CAN BUS Shield init ok!");
    CAN0.setMode(MCP_NORMAL);
}

void loop() {
    unsigned long canId;
    byte len = 0;
    byte buf[8];
    
    // Check if data has been received
    if (CAN0.checkReceive() == CAN_MSGAVAIL) {
        CAN0.readMsgBuf(&canId, &len, buf);
        Serial.print("CAN ID: 0x");
        Serial.println(canId, HEX);
        Serial.print("Data: ");
        for (int i = 0; i < len; i++) {
            Serial.print(buf[i], HEX);
            Serial.print(" ");
        }
        Serial.println();
    }
}

ในภาพร่างการส่ง Arduino ส่งข้อความ CAN ด้วย ID 0x100 ทุกวินาที ร่างที่ได้รับฟังสำหรับการเข้ามาสามารถส่งข้อความและพิมพ์ ID และข้อมูลไปยังจอภาพอนุกรม

แอปพลิเคชันของรถบัส CAN กับ Arduino

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

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

บทสรุป

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

ด้วยคำแนะนำและตัวอย่างที่ครอบคลุมคุณมีความพร้อมที่จะเริ่มต้นการรวมตัวกันสามารถบัสเข้าสู่โครงการ 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.