ในขอบเขตของแอพพลิเคชั่นยานยนต์และอุตสาหกรรมการสื่อสารที่เชื่อถือได้ระหว่างไมโครคอนโทรลเลอร์หลายตัวเป็นสิ่งสำคัญยิ่ง โปรโตคอล 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:
- เปิด Arduino IDE
- นำทางไปยัง ร่าง> รวมไลบรารี> จัดการไลบรารี ...
- ค้นหา 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 ต่อไปของคุณ การเข้ารหัสมีความสุข!