في عالم التطبيقات للسيارات والصناعية ، يكون التواصل الموثوق به بين أجهزة تحكم متعددة أمرًا بالغ الأهمية. ظهر بروتوكول BUS Network Area Network (CAN) كحل قوي لمثل هذه الاحتياجات. يبحث منشور المدونة هذا في أساسيات بروتوكول CAN BUS ويوضح كيفية دمج MCP2515 CAN CAN مع Arduino ، مما يتيح التواصل السلس في مشاريعك.
ما هو بروتوكول الحافلة؟
Bus Network Area Network (CAN) هي معيار حافلة مركبة قوي مصمم للسماح لموكنتات وأجهزة بالتواصل مع بعضها البعض بدون كمبيوتر مضيف. تم تطويره بواسطة Bosch في الثمانينيات ، أصبح Can Bus معيارًا في أنظمة السيارات ولكنه يستخدم أيضًا على نطاق واسع في الأتمتة الصناعية والأنظمة المضمنة الأخرى.
تتضمن الميزات الرئيسية لبروتوكول CAN Bus:
- التكوين متعدد المجرى: يمكن للعقد المتعددة التواصل على نفس الحافلة بدون وحدة تحكم مركزية.
- تحديد أولويات الرسالة: يتم إعطاء الأولوية للرسائل بناءً على معرفها ، مما يضمن إرسال البيانات الهامة أولاً.
- اكتشاف الخطأ: آليات الكشف عن الأخطاء القوية ، بما في ذلك عمليات فحص CRC وبتات الاعتراف ، تعزز الموثوقية.
- الاتصالات عالية السرعة: يدعم معدلات البيانات حتى 1 ميغابت في الثانية ، مناسبة للتطبيقات في الوقت الفعلي.
هذه الميزات تجعل الحافلة مثالية للسيناريوهات حيث تحتاج أجهزة متعددة إلى التواصل بكفاءة وموثوقية ، كما هو الحال في أنظمة إدارة محركات المركبات والأتمتة الصناعية والروبوتات.
تقديم وحدة تحكم MCP2515
MCP2515 عبارة عن وحدة تحكم (CAN) في منطقة تحكم مستقلة (CAN) التي تتعامل مع متحكمها عبر الواجهة المحيطية التسلسلية (SPI). إنه يتعامل مع بروتوكول CAN المعقد ، مما يسمح للمطورين بالتركيز على منطق التطبيق ذي المستوى الأعلى. تتضمن الميزات الرئيسية لـ MCP2515:
- دعم الإطارات القياسية والممتدة.
- آليات معالجة الأخطاء وتصفيتها المدمجة.
- التوافق مع مختلف المتحكم ، بما في ذلك Arduino.
- انخفاض استهلاك الطاقة ، مما يجعلها مناسبة للأنظمة المضمنة.
من خلال دمج MCP2515 مع Arduino ، يمكنك إضافة إمكانيات Can Bus إلى مشاريعك ، مما يتيح التواصل مع الأجهزة أو الشبكات الأخرى التي تدعم العلبة.
إعداد MCP2515 مع Arduino
للبدء ، ستحتاج إلى المكونات التالية:
- لوحة Arduino (على سبيل المثال ، Arduino Uno)
- MCP2515 CAN MODULE (غالبًا ما يأتي مع TJA1050 CAN STRINSIVER)
- الأسلاك الطائر
- لوح (اختياري)
إليك دليل خطوة بخطوة لإعداد MCP2515 مع Arduino الخاص بك:
1. الأسلاك MCP2515 إلى Arduino
قم بتوصيل وحدة MCP2515 بأردوينو على النحو التالي:
- VCC ل 5V على أردوينو
- GND ل GND على أردوينو
- CS ل دبوس 10 على أردوينو
- SCK ل دبوس 13 على أردوينو
- سي (Mosi) إلى دبوس 11 على أردوينو
- لذا (ميسو) ل دبوس 12 على أردوينو
- int ل دبوس 2 على أردوينو
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:
- افتح Arduino IDE.
- انتقل إلى رسم> تضمين مكتبة> إدارة المكتبات ...
- بحث عن MCP_CAN وتثبيت MCP_CAN مكتبة كوري ج. فاولر.
3. تحميل رمز المثال
فيما يلي مثال أساسي لإرسال الرسائل والاستقبال باستخدام MCP2515 و Arduino:
إرسال رسالة علبة
// 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);
}
تلقي رسالة علبة
// 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
كل ثانية. يستمع رسم الاستقبال للرسائل الواردة وطباعة المعرف والبيانات على الشاشة التسلسلية.
تطبيقات Can Bus مع Arduino
دمج Can Bus مع Arduino يفتح العديد من التطبيقات خارج أنظمة السيارات. تشمل بعض حالات الاستخدام الشائعة:
- الروبوتات: تمكين التواصل بين وحدات تحكم المحرك المتعددة وأجهزة الاستشعار.
- الأتمتة الصناعية: تسهيل تبادل البيانات بين مختلف الآلات ووحدات التحكم.
- أتمتة المنزل: قم بتوصيل مختلف الأجهزة الذكية داخل شبكة موحدة.
- أنظمة الحصول على البيانات: جمع ومعالجة البيانات من أجهزة استشعار متعددة بكفاءة.
خاتمة
يعد بروتوكول CAN BUS ، بموثوقيته وكفاءته ، بمثابة العمود الفقري للاتصال في العديد من الأنظمة المضمنة. من خلال استخدام وحدة التحكم في MCP2515 مع Arduino ، يمكن للمطورين دمج إمكانات الحافلات دون عناء في مشاريعهم. سواء كنت تعمل على أنظمة السيارات أو الأتمتة الصناعية أو الروبوتات المعقدة ، فإن الفهم والاستفادة من الحافلة يمكن أن يعزز بشكل كبير إطار اتصال نظامك.
من خلال الأدلة الشاملة والأمثلة المقدمة ، فأنت مجهزة جيدًا للشروع في دمج الحافلة في مشروع Arduino التالي. ترميز سعيد!