استخدم بروتوكول الاتصال التسلسلي القوي هذا لتوصيل لوحتين من Arduino معًا وإرسال البيانات إلى بعضهما البعض.
إن ناقل شبكة منطقة التحكم (CAN) عبارة عن بروتوكول اتصال قوي وموثوق يستخدم على نطاق واسع في العديد من التطبيقات الصناعية والسيارات والفضائية. إنه مصمم لنقل البيانات بين وحدات التحكم الدقيقة والأجهزة عبر شبكة ناقل CAN. قد لا تعرف هذا حتى الآن ، ولكن هذا هو الشيء وراء تلك التعديلات المجنونة على لوحة القيادة في السيارة التي تراها على وسائل التواصل الاجتماعي.
سنرشدك إلى كيفية بناء ناقل CAN باستخدام وحدة MCP2515 CAN باستخدام Arduino ولوح التجارب. سننتقل أيضًا إلى مكتبة Arduino CAN ونوضح كيفية إرسال واستقبال البيانات عبر ناقل CAN.
ما هي CAN Bus؟
CAN bus عبارة عن بروتوكول اتصال تسلسلي تم تطويره بواسطة Bosch في الثمانينيات. يستخدم على نطاق واسع في مختلف التطبيقات بسبب الموثوقية والمتانة العالية. يسمح بنقل البيانات بين الأجهزة بسرعات عالية وبأقل زمن انتقال عبر خطين فقط: CAN High و CAN Low.
في عام 1994 ، أصبح ناقل CAN معيارًا دوليًا (ISO 11898) تم تصميمه خصيصًا للتبادل السريع للبيانات التسلسلية بين وحدات التحكم الإلكترونية في تطبيقات السيارات. تحقق من دليلنا الشامل حول
ما هي حافلة CAN وما هو الدور الذي تلعبه في أنظمة السيارات لمزيد من التفاصيل.أحد أسباب شهرة ناقل CAN هو اكتشاف الأخطاء وتصحيحها. يمكن للبروتوكول اكتشاف وتصحيح الأخطاء في نقل البيانات. وهذا يجعلها مثالية للتطبيقات التي تكون فيها سلامة البيانات أمرًا بالغ الأهمية ، كما هو الحال في الأتمتة الصناعية.
معرفة وحدة MCP2515 CAN
وحدة التحكم في ناقل MCP2515 CAN عبارة عن جهاز يوفر دعمًا استثنائيًا لبروتوكول CAN الإصدار 2.0B المستخدم على نطاق واسع. هذه الوحدة مثالية للاتصال بمعدلات بيانات عالية تصل إلى 1 ميجابت في الثانية.
يعد MCP2515 IC وحدة تحكم مستقلة في CAN بواجهة SPI تتيح الاتصال بمجموعة واسعة من وحدات التحكم الدقيقة. من ناحية أخرى ، يعمل TJA1050 IC كواجهة بين وحدة تحكم MCP2515 CAN IC وناقل CAN المادي.
لمزيد من الراحة ، يوجد وصلة توصيل تمكنك من إرفاق طرف 120 أوم ، مما يجعل توصيل الأسلاك الخاصة بك أسهل. CAN_H & هل يمكنني مسامير للتواصل مع وحدات CAN الأخرى.
ميزة |
تخصيص |
---|---|
جهاز الإرسال والاستقبال |
TJA1050 |
واجهة متحكم |
SPI (يسمح بتكامل ناقل Multi CAN) |
مذبذب كرستالى |
8 ميجا هرتز |
نهاية |
120Ω |
سرعة |
1 ميجابت في الثانية |
استهلاك الطاقة |
عملية الاستعداد للتيار المنخفض |
البعد |
40 × 28 ملم |
قدرة العقدة |
يدعم حتى 112 عقدة |
يمكنك الحصول على معلومات إضافية من ورقة بيانات MCP2515 في حال احتجت إلى هذه الوحدة لمشروع أكثر تقدمًا.
يمكن هيكل الرسالة
يتكون هيكل رسالة CAN من عدة أجزاء ، لكن المقاطع الأكثر أهمية لهذا المشروع هي المعرف والبيانات. المعرف ، المعروف أيضًا باسم معرف CAN أو رقم مجموعة المعلمات (PGN) ، يحدد الأجهزة الموجودة على CAN الشبكة ، ويمكن أن يكون طول المعرف إما 11 أو 29 بتًا ، اعتمادًا على نوع بروتوكول CAN مستخدم.
وفي الوقت نفسه ، تمثل البيانات بيانات الاستشعار / التحكم الفعلية التي يتم إرسالها. يمكن أن تتراوح البيانات في أي مكان من 0 إلى 8 بايت ، ويشير رمز طول البيانات (DLC) إلى عدد وحدات بايت البيانات الموجودة.
مكتبة Arduino MCP2515 CAN Bus
تنفذ هذه المكتبة ملفات بروتوكول CAN V2.0B، والتي يمكن أن تعمل بسرعات تصل إلى 1 ميجابت في الثانية. يوفر واجهة SPI يمكنها العمل بسرعات تصل إلى 10 ميجاهرتز مع دعم البيانات القياسية (11 بت) والبيانات الموسعة (29 بت). علاوة على ذلك ، يأتي مزودًا بمخزنين مؤقتين للاستقبال ، مما يسمح بتخزين الرسائل ذات الأولوية.
تهيئة CAN Bus
إليك رمز الإعداد الذي ستحتاجه لتهيئة ناقل CAN:
#يشمل
#يشملMCP2515 مكب 2515(10); // تعيين CS دبوس
فارغيثبت(){
بينما (!مسلسل);
مسلسل.يبدأ(9600);
SPI.يبدأ(); // يبدأ اتصال SPI
mcp2515.reset () ،
mcp2515.setBitrate (CAN_500KBPS ، MCP_8MHZ) ؛
mcp2515.setNormalMode () ،
}
يؤدي هذا إلى تهيئة MCP2515 بمعدل بت CAN يبلغ 500 كيلو بت في الثانية وتردد مذبذب يبلغ 8 ميجاهرتز.
يمكن MCP2515 أوضاع التشغيل
هناك ثلاثة أوضاع تشغيلية مستخدمة مع وحدة التحكم في ناقل MCP2515 CAN:
- setNormalMode (): يضبط وحدة التحكم لإرسال الرسائل واستلامها.
- setLoopbackMode (): يضبط وحدة التحكم لإرسال الرسائل واستلامها ، ولكن الرسائل التي يرسلها سيتم استلامها أيضًا من تلقاء نفسها.
- setListenOnlyMode (): يضبط وحدة التحكم لتلقي الرسائل فقط.
هذه هي استدعاءات الوظائف المستخدمة لضبط الوضع التشغيلي لوحدة التحكم في ناقل MCP2515 CAN.
mcp2515.setNormalMode () ،
mcp2515.setLoopbackMode () ،
mcp2515.setListenOnlyMode () ،
إرسال البيانات عبر ناقل CAN
لإرسال رسالة عبر ناقل CAN ، استخدم ملف sendMsgBuf () طريقة:
غير موقعةشار البيانات [] = {0x01, 0x02, 0x03, 0x04};
CAN.sendMsgBuf (0x01, 0, 4، بيانات)؛
هذا يرسل رسالة مع المعرف 0x01 وحمولة بيانات {0x01 ، 0x02 ، 0x03 ، 0x04}. المعلمة الأولى هي CAN ID ، والثانية هي أولوية الرسالة ، والثالثة هي طول حمولة البيانات ، والرابعة هي حمولة البيانات نفسها.
ال sendMsgBuf () طريقة إرجاع قيمة تشير إلى ما إذا كانت الرسالة قد تم إرسالها بنجاح أم لا. يمكنك التحقق من هذه القيمة عن طريق استدعاء checkError () خطأ طريقة:
لو (CAN.checkError ()) {
مسلسل.println("خطأ في إرسال الرسالة.");
}
يتحقق هذا من حدوث خطأ أثناء إرسال الرسالة ويطبع رسالة خطأ إذا لزم الأمر.
تلقي البيانات من CAN Bus
لتلقي رسالة عبر ناقل CAN ، يمكنك استخدام ملف readMsgBuf () طريقة:
غير موقعةشار لين = 0;
غير موقعةشار بوف [8];
غير موقعةشار canID = 0;
لو (CAN.checkReceive ()) {
CAN.readMsgBuf (& len، buf) ؛
canID = CAN.getCanId () ،
}
يتحقق هذا مما إذا كانت الرسالة متاحة على ناقل CAN ثم يقرأ الرسالة في ملف بوف مجموعة مصفوفة. يتم تخزين طول الرسالة في ملف لين متغير ، ويتم تخزين معرف الرسالة في ملف canID عامل.
بمجرد استلامك للرسالة ، يمكنك معالجة حمولة البيانات حسب الحاجة. على سبيل المثال ، يمكنك طباعة حمولة البيانات على الشاشة التسلسلية:
مسلسل.مطبعة("تم استلام رسالة بالمعرف");
مسلسل.مطبعة(canID ، HEX) ؛
مسلسل.مطبعة("والبيانات:");ل (int أنا = 0; أنا مسلسل.مطبعة(buf [i]، HEX) ؛
مسلسل.مطبعة(" ");
}
مسلسل.println();
هذا يطبع معرف الرسالة المستلمة وحمولة البيانات إلى الشاشة التسلسلية.
كيفية توصيل جهاز الإرسال والاستقبال CAN Bus بلوحة التوصيل
لإنشاء ناقل CAN لتوصيل جهازين في مثال هذا المشروع ، ستحتاج إلى:
- اثنان من وحدات التحكم الدقيقة (لوحتا Arduino Nano في هذا المثال)
- اثنين من وحدات MCP2515 CAN
- لوح التجارب
- أسلاك العبور
- وحدة شاشة I2C 16x2 LCD
- جهاز استشعار بالموجات فوق الصوتية HC-SR04
في مثال هذا المشروع ، يتم استخدام أربع مكتبات في رسم Arduino. هناك نيوبينج مكتبة ، والتي توفر واجهة سهلة الاستخدام لمستشعر الموجات فوق الصوتية ، وكذلك مكتبة SPI، مما يسهل الاتصال بين لوحة Arduino ووحدة التحكم في ناقل MCP2515 CAN. ال LiquidCrystal_I2C المكتبة تستخدم لوحدة العرض.
أخيرًا ، هناك مكتبة mcp2515 للتفاعل مع شريحة MCP2515 ، مما يسمح لنا بنقل البيانات بسهولة عبر شبكة ناقل CAN.
إعداد الأجهزة (مثال HC-SR04)
في هذا المشروع باستخدام مستشعر HC-SR04 وشاشة LCD ، ستعمل إحدى لوحات Arduino Nano كجهاز استقبال ، بينما تعمل لوحة Arduino الأخرى كمرسل. قم بتوصيل مكونات المرسل وفقًا لمخطط الأسلاك أدناه:
هذا هو الرسم التخطيطي لدائرة الاستقبال:
أخيرًا ، قم بتوصيل العقدتين معًا باستخدام ملف CAN_H و هل يمكنني الخطوط كما هو موضح:
عند توصيل الوحدات ، من المهم التأكد من أن جهد مصدر الطاقة ضمن النطاق المحدد وأن هل يستطيع H. و هل يمكنني الدبابيس متصلة بشكل صحيح بالحافلة.
برمجة وحدة الناقل MCP2515 CAN
لاحظ أنه عند برمجة وحدة MCP2515 ، من المهم استخدام معدل البت الصحيح لضمان الاتصال الناجح بأجهزة CAN الأخرى الموجودة على الشبكة.
كود المرسل:
#يشمل
#يشمل
#يشملMCP2515 مكب 2515(10);
مقدار ثابتبايت trigPin = 3;
مقدار ثابتبايت echoPin = 4;
نيوبينج السونار(trigPin ، echoPin ، 200);هيكلcan_frameيمكن;
فارغيثبت(){
مسلسل.يبدأ(9600);
mcp2515.reset () ،
mcp2515.setBitrate (CAN_500KBPS ، MCP_8MHZ) ؛
mcp2515.setNormalMode () ،
}فارغحلقة(){
غير موقعةint المسافة = sonar.ping_cm () ؛
canMsg.can_id = 0x036; // CAN id كـ 0x036
canMsg.can_dlc = 8; // هل يمكن أن يكون طول البيانات 8
canMsg.data [0] = المسافة ؛ // تحديث قيمة الرطوبة في [0]
canMsg.data [1] = 0x00; // استرح الكل مع 0
canMsg.data [2] = 0x00;
canMsg.data [3] = 0x00;
canMsg.data [4] = 0x00;
canMsg.data [5] = 0x00;
canMsg.data [6] = 0x00;
canMsg.data [7] = 0x00;
mcp2515.sendMessage (& canMsg) ؛// يرسل رسالة CAN
تأخير(100);
}
كود المستقبل:
#يشمل
#يشمل
#يشملMCP2515 مكب 2515(10);
LiquidCrystal_I2C شاشات الكريستال السائل(0x27,16,2);
هيكلcan_frameيمكن;فارغيثبت(){
مسلسل.يبدأ(9600);mcp2515.reset () ،
mcp2515.setBitrate (CAN_500KBPS ، MCP_8MHZ) ؛
mcp2515.setNormalMode () ،
lcd.init () ،
اضاءه خلفيه ال سى دى()؛
شاشات الكريستال السائل.تعيين المؤشر(0, 0);
شاشات الكريستال السائل.مطبعة("MUO CAN TUTORIAL");
تأخير(3000);
شاشات الكريستال السائل.واضح();
}
فارغحلقة(){
لو (mcp2515.اقرأ الرساله(& canMsg) == MCP2515:: ERROR_OK) // لتلقي البيانات
{
int المسافة = canMsg.data [0];
شاشات الكريستال السائل.تعيين المؤشر(0,0);
شاشات الكريستال السائل.مطبعة("مسافة: ");
شاشات الكريستال السائل.مطبعة(مسافة)؛
شاشات الكريستال السائل.مطبعة("سم ");
}
}
ارتقِ بمشروعات Arduino إلى المستوى التالي
يوفر الجمع بين ناقل CAN و Arduino منصة قوية لبناء أو تعلم شبكات الاتصال المتطورة المستخدمة في التطبيقات المختلفة. على الرغم من أنه قد يبدو منحنى تعليميًا حادًا ، إلا أن وجود الإعداد الخاص بك على لوح التجارب يعد طريقة سهلة للغاية لتعلم حبال استخدام شبكة حافلات CAN في مشاريع DIY المعقدة.