MCP2515 เป็นโมดูลบัส CAN (เครือข่ายพื้นที่คอนโทรลเลอร์) ที่ใช้กันอย่างแพร่หลายสำหรับการสื่อสารยานยนต์และอุตสาหกรรม ช่วยให้ Arduino สามารถเชื่อมต่อกับระบบที่ใช้ CAN เพื่อส่งและรับข้อมูลได้อย่างมีประสิทธิภาพ บทช่วยสอนนี้จะแนะนำคุณผ่านการตั้งค่าและใช้โมดูล MCP2515 กับ Arduino
สิ่งที่คุณต้องการ
- MCP2515 CAN BUS MODULE
- คณะกรรมการ Arduino (เช่น Uno, Mega, Nano)
- อุปกรณ์ที่ใช้งานร่วมกันได้หรือโมดูล MCP2515 อื่น ๆ
- สายจัมเปอร์
- กระดานข่าว (ไม่บังคับ)
- คอมพิวเตอร์ที่ติดตั้ง 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:
- เปิด Arduino IDE
- ไป ร่าง > รวมห้องสมุด > จัดการห้องสมุด.
- ค้นหา "MCP_CAN" ใน Library Manager
- คลิก ติดตั้ง.
ขั้นตอนที่ 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: ทดสอบการตั้งค่า
- เชื่อมต่อโมดูล MCP2515 กับ Arduino ของคุณตามที่อธิบายไว้ในขั้นตอนที่ 2
- อัปโหลดรหัสตัวส่งสัญญาณไปยังหนึ่ง Arduino และรหัสตัวรับสัญญาณไปยัง Arduino อื่น
- เชื่อมต่อพิน CAN_H และ CAN_L ของโมดูล MCP2515 ทั้งสองเพื่อสร้างบัส CAN
- เปิดมอนิเตอร์อนุกรมทั้ง Arduinos และกำหนดอัตราการรับส่งข้อมูลเป็น
115200
. - บนเครื่องรับ Arduino คุณควรเห็นข้อความที่ส่งโดยเครื่องส่งสัญญาณ Arduino
การแก้ไขปัญหา
- ไม่ได้รับข้อมูล: ตรวจสอบการเชื่อมต่อ CAN_H และ CAN_L ระหว่างโมดูล
- การเริ่มต้นล้มเหลว: ตรวจสอบให้แน่ใจว่าการเชื่อมต่อ SPI และ CS PIN ตรงกับการตั้งค่าของคุณ
- การสื่อสารที่ผิดปกติ: ตรวจสอบว่าโมดูลทั้งสองใช้อัตราการรับส่งข้อมูลเดียวกัน (500 kbps ในตัวอย่างนี้)
แอปพลิเคชันของโมดูลบัส MCP2515 CAN
- การวินิจฉัยยานพาหนะ (OBD-II)
- ระบบอัตโนมัติอุตสาหกรรม
- การสื่อสารของหุ่นยนต์
- อุปกรณ์ IoT ที่มีเครือข่ายรถบัส Can
บทสรุป
คุณตั้งค่าโมดูลบัส MCP2515 CAN ได้สำเร็จด้วย Arduino สำหรับการส่งและรับข้อมูล โมดูลนี้มีความหลากหลายอย่างไม่น่าเชื่อสำหรับแอปพลิเคชันที่ต้องมีการสื่อสารที่เชื่อถือได้ผ่านรถบัส CAN ทดลองกับรหัสข้อความที่แตกต่างกันและข้อมูล payloads เพื่อสำรวจศักยภาพอย่างเต็มที่!