جدول المحتويات:
- الخطوة 1: الموارد المستخدمة
- الخطوة 2: CAN (شبكة منطقة التحكم)
- الخطوة 3: هل - الميزات
- الخطوة 4: الدائرة المستخدمة
- الخطوة 5: جهد خط النقل (الكشف التفاضلي)
- الخطوة 6: هل المعايير وتنسيق الإطارات
- الخطوة 7: معايير CAN وتنسيق الإطارات
- الخطوة 8: هل المعايير وتنسيق الإطارات
- الخطوة 9: أربعة أنواع من الإطارات (الإطارات)
- الخطوة 10: الدائرة - تفاصيل التوصيلات
- الخطوة 11: الدائرة - التقاط البيانات
- الخطوة 12: الدائرة - التقاط البيانات
- الخطوة 13: الدائرة - التقاط البيانات
- الخطوة 14: مكتبة Arduino - CAN
- الخطوة 15: جيثب
- الخطوة 16: كود مصدر جهاز الإرسال
- الخطوة 17: كود المصدر: Loop () ، إرسال حزمة CAN 2.0 قياسية
- الخطوة 18: كود المصدر: Loop () ، إرسال حزمة Extended CAN 2.0
- الخطوة 19: رمز مصدر جهاز الاستقبال
- الخطوة 20: كود المصدر: Loop () ، الحصول على الحزمة والتحقق من التنسيق
- الخطوة 21: المصدر: Loop () ، يتحقق لمعرفة ما إذا كانت حزمة بعيدة
- الخطوة 22: كود المصدر: Loop () ، طول البيانات المطلوبة أو المستلمة
- الخطوة 23: كود المصدر: Loop () ، إذا تم استلام البيانات ، فسيتم طباعتها بعد ذلك
- الخطوة 24: قم بتنزيل الملفات
فيديو: هل البروتوكول - نعم ، نستطيع !: 24 خطوة
2024 مؤلف: John Day | [email protected]. آخر تعديل: 2024-01-30 07:40
موضوع آخر اقترحه مؤخرًا متابعو قناتي على YouTube هو بروتوكول CAN (شبكة منطقة التحكم) ، وهو ما سنركز عليه اليوم. من المهم توضيح أن CAN هو بروتوكول اتصال تسلسلي متزامن. هذا يعني أن التزامن بين الوحدات المتصلة بالشبكة يتم تنفيذه بالنسبة لبداية كل رسالة يتم إرسالها إلى الناقل. سنبدأ بتقديم المفاهيم الأساسية لبروتوكول CAN وإجراء تجميع بسيط باستخدام جهازي ESP32.
في دائرتنا ، يمكن للمرسبات الكهروستاتيكية أن تكون بمثابة السيد والعبد. يمكن أن يكون لديك عدة متحكمات دقيقة ترسل في وقت واحد ، لأن CAN تتعامل مع تصادم كل شيء تلقائيًا. الكود المصدري لهذا المشروع بسيط للغاية. تحقق من ذلك!
الخطوة 1: الموارد المستخدمة
- وحدتان من ESP WROOM 32 NodeMcu
- يمكن اثنين من أجهزة الإرسال والاستقبال من WaveShare
- صداري للوصلات
- محلل منطقي للقبض
- ثلاثة كبلات USB لمحلل ESPs والمحلل
- 10 أمتار من الزوج الملتوي ليكون بمثابة حافلة
الخطوة 2: CAN (شبكة منطقة التحكم)
- تم تطويره بواسطة Robert Bosch GmbH في الثمانينيات لخدمة صناعة السيارات.
- لقد أصبح منتشرًا على مر السنين بسبب متانته ومرونته في التنفيذ. يتم استخدامه مع المعدات العسكرية والآلات الزراعية والأتمتة الصناعية والمباني والروبوتات والمعدات الطبية.
الخطوة 3: هل - الميزات
- اتصال تسلسلي ثنائي الأسلاك
- 8 بايت كحد أقصى من المعلومات المفيدة لكل إطار ، مع إمكانية التجزئة
- العنوان الموجه إلى الرسالة وليس إلى العقدة
- تحديد الأولوية للرسائل وترحيل الرسائل "المعلقة"
- القدرة الفعالة على الكشف عن الأخطاء والإشارة إليها
- القدرة متعددة الماجستير (يمكن لجميع العقد طلب الوصول إلى الناقل)
- إمكانية الإرسال المتعدد (رسالة واحدة لأجهزة استقبال متعددة في نفس الوقت)
- معدلات نقل تصل إلى 1 ميجابت / ثانية في حافلة طولها 40 مترًا (تقليل المعدل مع زيادة طول القضبان)
- مرونة تكوين وإدخال عقد جديدة (حتى 120 عقدة لكل ناقل)
- الأجهزة القياسية ، والتكلفة المنخفضة ، والتوافر الجيد
- البروتوكول المنظم: ISO 11898
الخطوة 4: الدائرة المستخدمة
هنا ، لدي أجهزة الإرسال والاستقبال. يوجد واحد على كل جانب ، وهما متصلان بواسطة زوج من الأسلاك. أحدهما مسؤول عن الإرسال والآخر عن استقبال البيانات.
الخطوة 5: جهد خط النقل (الكشف التفاضلي)
في CAN ، البتة السائدة هي الصفر.
الكشف التفاضلي للخط يقلل من حساسية الضوضاء (EFI)
الخطوة 6: هل المعايير وتنسيق الإطارات
تنسيق قياسي مع معرف 11 بت
الخطوة 7: معايير CAN وتنسيق الإطارات
تنسيق موسع مع معرف 29 بت
الخطوة 8: هل المعايير وتنسيق الإطارات
من المهم ملاحظة أن البروتوكول يحسب بالفعل CRC ويرسل إشارات ACK و EOF ، وهي أشياء تم تنفيذها بالفعل بواسطة بروتوكول CAN. هذا يضمن أن الرسالة المرسلة لن تصل بالطريقة الخاطئة. هذا لأنه إذا أعطى مشكلة في CRC (الفحص الدوري الزائد أو التحقق من التكرار) ، وهو نفس رقم التحقق من المعلومات ، فسيتم تحديده بواسطة CRC.
الخطوة 9: أربعة أنواع من الإطارات (الإطارات)
من المهم ملاحظة أن البروتوكول يحسب بالفعل CRC ويرسل إشارات ACK و EOF ، وهي أشياء تم تنفيذها بالفعل بواسطة بروتوكول CAN. هذا يضمن أن الرسالة المرسلة لن تصل بالطريقة الخاطئة. هذا لأنه إذا أعطى مشكلة في CRC (الفحص الدوري الزائد أو التحقق من التكرار) ، وهو نفس رقم التحقق من المعلومات ، فسيتم تحديده بواسطة CRC.
أربعة أنواع من الإطارات (الإطارات)
يعتمد إرسال واستقبال البيانات في CAN على أربعة أنواع من الإطارات. سيتم تحديد أنواع الإطارات من خلال الاختلافات في بتات التحكم أو حتى عن طريق التغييرات في قواعد كتابة الإطار لكل حالة.
- إطار البيانات: يحتوي على بيانات جهاز الإرسال لجهاز الاستقبال (أجهزة)
- الإطار البعيد: هذا طلب للحصول على بيانات من إحدى العقد
- إطار الخطأ: هو إطار يتم إرساله بواسطة أي من العقد عند تحديد خطأ في الناقل ويمكن اكتشافه بواسطة جميع العقد
- إطار التحميل الزائد: يعمل على تأخير حركة المرور على الحافلة بسبب التحميل الزائد للبيانات أو التأخير في عقده واحده أو أكثر.
الخطوة 10: الدائرة - تفاصيل التوصيلات
الخطوة 11: الدائرة - التقاط البيانات
تم الحصول على أطوال موجية لـ CAN القياسي بمعرف 11 بت
الخطوة 12: الدائرة - التقاط البيانات
الأطوال الموجية التي تم الحصول عليها من أجل CAN الممتد مع معرف 29 بت
الخطوة 13: الدائرة - التقاط البيانات
البيانات التي حصل عليها محلل المنطق
الخطوة 14: مكتبة Arduino - CAN
أعرض هنا الخيارين حيث يمكنك تثبيت مكتبة CAN Driver Library
مدير مكتبة Arduino IDE
الخطوة 15: جيثب
github.com/sandeepmistry/arduino-CAN
الخطوة 16: كود مصدر جهاز الإرسال
كود المصدر: يشمل والإعداد ()
سنقوم بتضمين مكتبة CAN ، ونبدأ المسلسل لتصحيح الأخطاء ، ونبدأ ناقل CAN بسرعة 500 كيلوبت في الثانية.
#include // Inclui a biblioteca CAN void setup () {Serial.begin (9600)؛ // inicia a متسلسل par debug while (! Serial)؛ Serial.println ("Transmissor CAN") ؛ // Inicia o barramento Can a 500 kbps if (! CAN.begin (500E3)) {Serial.println ("Falha ao iniciar o controlador CAN") ؛ // caso não seja posível iniciar o controlador while (1) ؛ }}
الخطوة 17: كود المصدر: Loop () ، إرسال حزمة CAN 2.0 قياسية
باستخدام معيار CAN 2.0 ، نرسل حزمة. يحدد معرف 11 بت الرسالة. يجب أن يصل حجم كتلة البيانات إلى 8 بايت. يبدأ الحزمة مع المعرف 18 بالنظام الست عشري. يحزم 5 بايت ويغلق الوظيفة.
الحلقة الفارغة () {// Usando o CAN 2.0 padrão // Envia um pacote: o id tem 11 bits e Identifica a mensagem (Prioridade، evento) // o bloco de dados deve occuir até 8 bytes Serial.println ("Enviando pacote … ") ؛ CAN.beginPacket (0x12) ، // id 18 em CAN.write السداسية العشرية ('h') ؛ // 1º بايت CAN.write ('e') ؛ // 2º بايت CAN.write ('l') ؛ // 3º بايت CAN.write ('l') ؛ // 4º بايت CAN.write ('o') ؛ // 5º بايت CAN.endPacket () ؛ // encerra o pacote para envio Serial.println ("Enviado.") ؛ تأخير (1000) ؛
الخطوة 18: كود المصدر: Loop () ، إرسال حزمة Extended CAN 2.0
في هذه الخطوة ، يحتوي المعرف على 29 بت. يبدأ في إرسال 24 بت من المعرف ، ومرة أخرى ، حزم 5 بايت وإنهاء.
// Usando CAN 2.0 Estendido // Envia um pacote: o id tem 29 bits e Identifica a mensagem (premidade، evento) // o bloco de dados deve impluir até 8 bytes Serial.println ("Enviando pacote estendido…") ؛ CAN.beginExtendedPacket (0xabcdef) ، // id 11259375 عشري (abcdef em hexa) = 24 بت preenchidos até aqui CAN.write ('w') ؛ // 1º بايت CAN.write ('o') ؛ // 2º بايت CAN.write ('r') ؛ // 3º بايت CAN.write ('l') ؛ // 4º بايت CAN.write ('d') ؛ // 5º بايت CAN.endPacket () ؛ // encerra o pacote para envio Serial.println ("Enviado.") ؛ تأخير (1000) ؛ }
الخطوة 19: رمز مصدر جهاز الاستقبال
كود المصدر: يشمل والإعداد ()
مرة أخرى ، سنقوم بتضمين مكتبة CAN ، وبدء المسلسل لتصحيح الأخطاء ، وبدء ناقل CAN بسرعة 500 كيلوبت في الثانية. في حالة حدوث خطأ ، ستتم طباعة هذا الخطأ.
#include // Inclui a biblioteca CAN void setup () {Serial.begin (9600)؛ // inicia a متسلسل par debug while (! Serial)؛ Serial.println ("علبة المستقبل") ؛ // Inicia o barramento Can a 500 kbps if (! CAN.begin (500E3)) {Serial.println ("Falha ao iniciar o controlador CAN") ؛ // caso não seja posível iniciar o controlador while (1) ؛ }}
الخطوة 20: كود المصدر: Loop () ، الحصول على الحزمة والتحقق من التنسيق
حاولنا التحقق من حجم الحزمة المستلمة. توضح طريقة CAN.parsePacket () حجم هذه الحزمة. لذلك إذا كانت لدينا حزمة ، فسوف نتحقق مما إذا كانت قد تم تمديدها أم لا.
حلقة فارغة () {// Tenta verificar o tamanho do acote recebido int packetSize = CAN.parsePacket () ؛ if (packetSize) {// Se temos um pacote Serial.println ("Recebido pacote.") ؛ if (CAN.packetExtended ()) {// verifica se o pacote é estendido Serial.println ("Estendido") ؛ }
الخطوة 21: المصدر: Loop () ، يتحقق لمعرفة ما إذا كانت حزمة بعيدة
هنا ، نتحقق مما إذا كانت الحزمة المستلمة عبارة عن طلب بيانات. في هذه الحالة ، لا توجد بيانات.
if (CAN.packetRtr ()) {// Verifica se o pacote é um pacote remoto (Requisição de dados)، neste caso não há dados Serial.print ("RTR") ؛ }
الخطوة 22: كود المصدر: Loop () ، طول البيانات المطلوبة أو المستلمة
إذا كانت الحزمة المستلمة طلبًا ، فإننا نشير إلى الطول المطلوب. ثم نحصل على رمز طول البيانات (DLC) ، والذي يشير إلى طول البيانات. أخيرًا ، نشير إلى الطول المستلم.
Serial.print ("Pacote com id 0x") ؛ Serial.print (CAN.packetId () ، HEX) ؛ if (CAN.packetRtr ()) {// se o pacote recebido é de Requisição، indicamos o comprimento solicitado Serial.print ("e requsitou o comprimento") ؛ Serial.println (CAN.packetDlc ()) ؛ // getem o DLC (رمز طول البيانات، que indica o comprimento dos dados)} else {Serial.print ("e comprimento")؛ // aqui somente indica o comprimento recebido Serial.println (packetSize) ؛
الخطوة 23: كود المصدر: Loop () ، إذا تم استلام البيانات ، فسيتم طباعتها بعد ذلك
نقوم بطباعة البيانات (على الشاشة التسلسلية) ، ولكن فقط إذا لم تكن الحزمة المستلمة طلبًا.
// Imprime os dados somente se o pacote recebido não foi de Requisição while (CAN.available ()) {Serial.print ((char) CAN.read ()) ؛ } Serial.println () ، } Serial.println () ، }}
الخطوة 24: قم بتنزيل الملفات
بي دي إف
انا لا
موصى به:
خوذة أمان كوفيد - الجزء الأول: مقدمة إلى دوائر تينكركاد: 20 خطوة (بالصور)
Covid Safety Helmet الجزء الأول: مقدمة عن دوائر Tinkercad!: مرحبًا ، صديق! في هذه السلسلة المكونة من جزأين ، سنتعلم كيفية استخدام دوائر Tinkercad - أداة ممتعة وقوية وتعليمية للتعرف على كيفية عمل الدوائر! واحدة من أفضل طرق التعلم ، هي أن تفعل. لذلك ، سنقوم أولاً بتصميم مشروعنا الخاص: ال
اختيار محرك خطوة ومحرك لمشروع شاشة الظل الآلي في Arduino: 12 خطوة (بالصور)
اختيار Step Motor و Driver لمشروع شاشة الظل الآلي من Arduino: في هذا Instructable ، سأنتقل إلى الخطوات التي اتخذتها لتحديد Step Motor و Driver لمشروع نموذج شاشة الظل الآلي. شاشات الظل هي طرازات Coolaroo ذات الكرنك اليدوية الشائعة وغير المكلفة ، وأردت استبدال
ماسح سيكلوب ثلاثي الأبعاد My Way خطوة بخطوة: 16 خطوة (بالصور)
Ciclop 3D Scanner My Way خطوة بخطوة: مرحبًا بالجميع ، سأدرك ماسح Ciclop ثلاثي الأبعاد الشهير ، كل الخطوات الموضحة جيدًا في المشروع الأصلي غير موجودة ، لقد قمت ببعض الإصلاح لتبسيط العملية ، أولاً أقوم بطباعة القاعدة ، وأعيد ضبط ثنائي الفينيل متعدد الكلور ، لكن استمر
واجهة خطوة MIDI (نسخة باللغة الإسبانية): 12 خطوة
MIDI Step Interface (versión En Español): Versión en inglés aquí.En este التعليمي te mostraremos cómo hacer una plataforma التفاعلية de luz y sonido، que puede ser usada para jugar el famoso “Simon Says” al igual que como un controlador MIDI. أمبوس أساليب الأوبرا تخدع الفطائر
واجهة خطوة MIDI: 12 خطوة (بالصور)
MIDI Step Interface: النسخة الإسبانية هنا. في هذا الدليل سوف نوضح لك كيفية إنشاء واجهة ضوئية وصوتية يمكن استخدامها للعب & quot؛ Simon Says & quot؛ وكواجهة MIDI. سيتم لعب كلا الوضعين بقدمك. خلفية المشروع ولد بسبب