- الفرق بين اتصالات UART و RS485
- المكونات مطلوبة
- مخطط الدائرة للاتصالات السلكية لمسافات طويلة
- وحدة محول MAX485 UART-RS485
- كابل إيثرنت CAT-6E
- شرح كود اردوينو
- استنتاج
لقد استخدمنا لوحات تطوير وحدات التحكم الدقيقة مثل Arduino و Raspberry Pi و NodeMCU و ESP8266 و MSP430 وما إلى ذلك لفترة طويلة الآن في مشاريعنا الصغيرة حيث لا تزيد المسافة بين المستشعرات واللوحة في معظم الأوقات عن بضعة سنتيمترات كحد أقصى و في هذه المسافات ، يمكن إجراء الاتصال بين وحدات المستشعر المختلفة والمرحلات والمشغلات وأجهزة التحكم بسهولة عبر أسلاك توصيل بسيطة دون القلق بشأن تشوه الإشارة في الوسط وتسلل الضوضاء الكهربائية إليه. ولكن إذا كنت تقوم ببناء نظام تحكم باستخدام لوحات التطوير هذه على مسافة تزيد عن 10 إلى 15 مترًا ، فيجب أن تأخذ في الاعتبار الضوضاء وقوة الإشارة لأنك إذا كنت تريد أن يعمل نظامك بشكل موثوق ، فلا يمكنك تحمل خسارة البيانات أثناء النقل.
هناك العديد من الأنواع المختلفة لبروتوكولات الاتصال التسلسلي مثل I2C و SPI والتي يمكن تنفيذها بسهولة مع Arduino واليوم سننظر في بروتوكول آخر أكثر شيوعًا يسمى RS485 والذي يشيع استخدامه في البيئات الصناعية عالية الضوضاء لنقل البيانات عبر مسافة طويلة. في هذا البرنامج التعليمي ، سوف نتعرف على بروتوكول الاتصال RS485 وكيفية تنفيذه مع اثنين من Arduino Nano لدينا وكيفية استخدام MAX485 RS485 إلى وحدة التحويل UART. في السابق ، أجرينا أيضًا اتصال MAX485 مع Arduino وأيضًا MAX485 Communication مع Raspberry pi ، يمكنك أيضًا التحقق منها إذا كنت مهتمًا.
الفرق بين اتصالات UART و RS485
تستخدم معظم المستشعرات منخفضة التكلفة والوحدات النمطية الأخرى مثل GPS و Bluetooth و RFID و ESP8266 وما إلى ذلك ، والتي يتم استخدامها بشكل شائع مع Arduino ، يستخدم Raspberry Pi في السوق الاتصالات القائمة على UART TTL لأنها تتطلب فقط سلكين TX (مرسل) و RX (المتلقي). إنه ليس بروتوكول اتصالات قياسيًا ، ولكنه دائرة مادية يمكنك من خلالها إرسال واستقبال البيانات التسلسلية مع الأجهزة الطرفية الأخرى. يمكنه فقط إرسال / استقبال البيانات بشكل تسلسلي ، لذلك يقوم أولاً بتحويل البيانات المتوازية إلى بيانات تسلسلية ثم نقل البيانات.
UART هو جهاز إرسال غير متزامن وبالتالي لا توجد إشارة على مدار الساعة لمزامنة البيانات بين الجهازين بدلاً من ذلك ، فإنه يستخدم بتات البدء والإيقاف في بداية ونهاية كل حزمة بيانات على التوالي لتمييز أطراف البيانات التي يتم نقلها. يتم تنظيم البيانات المرسلة UART في حزم. تحتوي كل حزمة على 1 بت بدء ، 5 إلى 9 بتات بيانات (اعتمادًا على UART) ، بت تماثل اختياري ، و 1 أو 2 بت توقف. إنه موثق جيدًا ويستخدم على نطاق واسع ولديه أيضًا بت تماثل للسماح بفحص الأخطاء. ولكن هناك بعض القيود عليه لأنه لا يمكنه دعم العديد من العبيد والأسياد المتعددين ويقتصر إطار البيانات الأقصى على 9 بتات. لنقل البيانات ، يجب أن تكون معدلات البث بالباود لكل من Master و Slave بين 10٪ من بعضها البعض. الموضح أدناه هو مثال على كيفية قيام حرف ما بجهاز إرسال عبر خط بيانات UART. يتم قياس الإشارة المرتفعة والمنخفضة مقابل مستوى GND ، لذا فإن تغيير مستوى GND سيكون له تأثير كارثي على نقل البيانات.
من ناحية أخرى ، يعد RS485 اتصالًا يعتمد على الصناعة تم تطويره لشبكة من الأجهزة المتعددة التي يمكن استخدامها لمسافات طويلة وبسرعات أكبر أيضًا. إنه يعمل على طريقة قياس الإشارات التفاضلية بدلاً من قياس الجهد wrt GND pin. تطفو إشارات RS485 ويتم إرسال كل إشارة عبر خط Sig + وخط Sig-.
يقارن جهاز الاستقبال RS485 فرق الجهد بين كلا الخطين ، بدلاً من مستوى الجهد المطلق على خط الإشارة. يعمل هذا بشكل جيد ويمنع وجود حلقات أرضية ، وهي مصدر شائع لمشاكل الاتصال. يتم تحقيق أفضل النتائج إذا تم التواء خطوط Sig + و Sig- حيث يؤدي الالتواء إلى إبطال تأثير الضوضاء الكهرومغناطيسية الناتجة في كابل ويوفر مناعة أفضل بكثير ضد الضوضاء التي تسمح لـ RS485 بنقل البيانات حتى 1200 متر من النطاق. يتيح الزوج الملتوي أيضًا أن تكون سرعات النقل أعلى بكثير مما هو ممكن مع الكابلات المستقيمة. على مسافات نقل صغيرة ، يمكن تحقيق سرعات تصل إلى 35 ميجابت في الثانية باستخدام RS485 على الرغم من أن سرعة النقل ستنخفض مع المسافة. عند سرعة نقل تبلغ 1200 متر ، يمكنك استخدام سرعة نقل تبلغ 100 كيلو بت في الثانية فقط. أنت بحاجة إلى كبل Ethernet خاص لتحقيق بروتوكول الاتصال هذا. هناك العديد من فئات كبلات Ethernet التي يمكننا استخدامها مثل CAT-4 و CAT-5 و CAT-5E و CAT-6 و CAT-6A وما إلى ذلك. في برنامجنا التعليمي ، سنستخدم كابل CAT-6E الذي يحتوي على 4 أزواج ملتوية من أسلاك 24AWG ويمكنه دعم ما يصل إلى 600 ميجا هرتز. يتم إنهاؤه عند كلا الطرفين بواسطة موصل RJ45. مستويات جهد الخط النموذجية من مشغلات الخط هي بحد أدنى ± 1.5 فولت إلى حد أقصى يبلغ حوالي ± 6 فولت. حساسية إدخال جهاز الاستقبال هي ± 200 مللي فولت. يتم حظر الضوضاء في نطاق ± 200 مللي فولت بشكل أساسي بسبب إلغاء الضوضاء في الوضع الشائع. مثال على كيفية نقل البايت (0x3E) عبر سطري اتصالات RS485.
المكونات مطلوبة
- 2 × MAX485 محول الوحدة النمطية
- 2 × اردوينو نانو
- 2 × 16 * 2 شاشة LCD أبجدية رقمية
- 2 × 10 كيلو مقاييس فرق المساحات
- كابل إيثرنت Cat-6E
- الألواح
- أسلاك توصيل
مخطط الدائرة للاتصالات السلكية لمسافات طويلة
تُظهر الصورة أدناه مخطط دائرة جهاز الإرسال والاستقبال لاتصالات Arduino السلكية لمسافات طويلة. هل لاحظ أن كلاً من دائرتي الإرسال والاستقبال تبدو متطابقة ، الشيء الوحيد الذي يختلف هو الكود المكتوب فيهما. أيضًا من أجل العرض التوضيحي ، نستخدم لوحة واحدة كجهاز إرسال ولوحة واحدة كجهاز استقبال ، ولكن يمكننا بسهولة برمجة اللوحات للعمل كجهاز إرسال وجهاز استقبال بنفس الإعداد
ويرد أدناه أيضًا مخطط الاتصال للدائرة أعلاه.
كما ترى أعلاه ، يوجد زوجان متطابقان تقريبًا من الدوائر مع كل منهما يحتوي على Arduino nano و 16 * 2 Alphanumeric LCD و MAX485 UART إلى RS485 محول IC متصل بكل طرف من كبل Ethernet Cat-6E عبر موصل RJ45. يبلغ طول الكابل الذي استخدمته في البرنامج التعليمي 25 مترًا. سنرسل بعض البيانات من جانب جهاز الإرسال عبر الكابل من Nano والذي يتم تحويله إلى إشارات RS485 عبر MAX RS485 Module الذي يعمل في الوضع الرئيسي.
في الطرف المستلم ، تعمل وحدة المحول MAX485 كعبد ، وتستمع إلى الإرسال من Master ، فإنها تقوم مرة أخرى بتحويل بيانات RS485 التي تلقتها إلى إشارات 5V TTL UART القياسية ليتم قراءتها بواسطة Nano المستقبلة وعرضها على 16 * 2 شاشة LCD أبجدية رقمية متصلة به.
وحدة محول MAX485 UART-RS485
تحتوي وحدة المحول UART-RS485 هذه على شريحة MAX485 على اللوحة ، وهي عبارة عن جهاز إرسال واستقبال منخفض الطاقة ومحدود بمعدل كبير يستخدم لاتصالات RS-485. يعمل بمصدر طاقة فردي + 5 فولت والتيار المقدر 300 μA. إنه يعمل على اتصال أحادي الاتجاه لتنفيذ وظيفة تحويل مستوى TTL إلى مستوى RS-485 مما يعني أنه يمكنه إما الإرسال أو الاستقبال في أي وقت ، وليس كلاهما ، بل يمكنه تحقيق أقصى معدل إرسال يبلغ 2.5 ميجا بت في الثانية. يقوم جهاز الإرسال والاستقبال MAX485 بسحب تيار إمداد يتراوح بين 120μA و 500μA في ظل ظروف التفريغ أو التحميل الكامل عند تعطيل السائق. السائق محدود لتيار ماس كهربائى ويمكن وضع مخرجات السائق في حالة مقاومة عالية من خلال دائرة الاغلاق الحراري. يحتوي إدخال جهاز الاستقبال على ميزة آمنة من الفشل تضمن إخراجًا منطقيًا عاليًا إذا كان الإدخال دائرة مفتوحة.بالإضافة إلى ذلك ، لديها أداء قوي ضد التدخل. كما أن لديها مصابيح LED مدمجة لعرض الحالة الحالية للرقاقة ، أي ما إذا كانت الشريحة تعمل بالطاقة أم أنها ترسل البيانات أو تستقبلها مما يسهل التصحيح والاستخدام.
يوضح مخطط الدائرة الموضح أعلاه كيفية توصيل MAX485 IC الموجود باللوحة بمكونات مختلفة ويوفر رؤوس تباعد قياسية بحجم 0.1 بوصة لاستخدامها مع لوحة التجارب إذا أردت.
كابل إيثرنت CAT-6E
عندما نفكر في نقل البيانات لمسافات طويلة ، نفكر على الفور في الاتصال بالإنترنت عبر كبلات Ethernet. في الوقت الحاضر ، نستخدم في الغالب شبكة Wi-Fi للاتصال بالإنترنت ولكن في وقت سابق اعتدنا استخدام كبلات Ethernet التي تذهب إلى كل كمبيوتر شخصي لتوصيله بالإنترنت. السبب الرئيسي وراء استخدام كبلات Ethernet هذه عبر الأسلاك العادية هو أنها توفر حماية أفضل بكثير من الضوضاء الزاحفة وتشويه الإشارة عبر مسافات عالية. لديهم سترة واقية فوق طبقة العزل للحماية من التداخل الكهرومغناطيسي وأيضًا يتم لف كل زوج من الأسلاك معًا لمنع أي تكوين حلقة حالية وبالتالي حماية أفضل بكثير ضد الضوضاء. غالبًا ما يتم إنهاؤها بموصلات 8 pin RJ45 في كلا الطرفين. هناك العديد من فئات كبلات Ethernet التي يمكننا استخدامها مثل CAT-4 و CAT-5 وCAT-5E ، CAT-6 ، CAT-6A ، إلخ. في برنامجنا التعليمي ، سنستخدم كابل CAT-6E الذي يحتوي على 4 أزواج ملتوية من أسلاك 24AWG ويمكنه دعم ما يصل إلى 600 ميجاهرتز.
صورة توضح كيف يتم لف زوج من الأسلاك داخل طبقة العزل لكابل CAT-6E
موصل RJ-45 مخصص لكابل إيثرنت CAT-6E
شرح كود اردوينو
في هذا المشروع ، نستخدم جهازي Arduino Nano ، أحدهما كجهاز إرسال والآخر كجهاز استقبال يقود كل منهما شاشة LCD أبجدية رقمية مقاس 16 * 2 لعرض النتائج. لذلك ، في كود Arduino ، سنركز على إرسال البيانات وعرض البيانات التي أرسلت أو استقبلت البيانات على شاشة LCD.
لجانب المرسل:
نبدأ بتضمين المكتبة القياسية لقيادة شاشة LCD ونعلن أن دبوس D8 الخاص بـ Arduino Nano هو دبوس الإخراج الذي سنستخدمه لاحقًا للإعلان عن وحدة MAX485 كجهاز إرسال أو جهاز استقبال.
int enablePin = 8 ؛ int potval = 0 ؛ #تضمن
نأتي الآن إلى جزء الإعداد. سنقوم بسحب دبوس التمكين عاليًا لوضع وحدة MAX485 في وضع المرسل. نظرًا لأنه IC نصف مزدوج الاتجاه ، فإنه لا يمكنه الإرسال والاستقبال في نفس الوقت. سنقوم أيضًا بتهيئة شاشة LCD هنا وطباعة رسالة ترحيب.
Serial.begin (9600) ؛ // تهيئة المسلسل عند معدل الباود 9600: pinMode (enablePin ، OUTPUT) ؛ lcd.begin (16.2) ؛ lcd.print ("CIRCUIT DIGEST") ؛ lcd.setCursor (0،1) ؛ lcd.print ("جهاز الإرسال نانو") ؛ تأخير (3000) ؛ lcd.clear () ؛
الآن في الحلقة ، نكتب قيمة عددية متزايدة باستمرار على الخطوط التسلسلية والتي يتم نقلها بعد ذلك إلى النانو الأخرى. تتم طباعة هذه القيمة أيضًا على شاشة LCD للعرض وتصحيح الأخطاء.
Serial.print ("قيمة الإرسال =") ؛ Serial.println (بوتفال) ؛ // Serial Write POTval to RS-485 Bus lcd.setCursor (0،0) ؛ lcd.print ("القيمة المرسلة") ؛ lcd.setCursor (0،1) ؛ lcd.print (بوتفال) ؛ تأخير (1000) ؛ lcd.clear () ؛ بوتفال + = 1 ؛
جانب المستقبل:
هنا مرة أخرى ، نبدأ بتضمين المكتبة القياسية لقيادة شاشة LCD ونعلن أن دبوس D8 الخاص بـ Arduino Nano هو دبوس الإخراج الذي سنستخدمه لاحقًا للإعلان عن وحدة MAX485 كجهاز إرسال أو جهاز استقبال.
int enablePin = 8 ؛ #تضمن
نأتي الآن إلى جزء الإعداد. سنقوم بسحب دبوس التمكين عاليًا لوضع وحدة MAX485 في وضع الاستقبال. نظرًا لأنه IC نصف مزدوج الاتجاه ، فإنه لا يمكنه الإرسال والاستقبال في نفس الوقت. سنقوم أيضًا بتهيئة شاشة LCD هنا وطباعة رسالة ترحيب.
Serial.begin (9600) ؛ // تهيئة المسلسل عند معدل الباود 9600: pinMode (enablePin ، OUTPUT) ؛ lcd.begin (16.2) ؛ lcd.print ("CIRCUIT DIGEST") ؛ lcd.setCursor (0،1) ؛ lcd.print ("مستقبل نانو") ؛ تأخير (3000) ؛ digitalWrite (enablePin ، منخفض) ؛ // (Pin 8 LOW دائمًا لتلقي القيمة من Master)
الآن في الحلقة ، نتحقق مما إذا كان هناك أي شيء متاح على المنفذ التسلسلي ثم نقرأ البيانات وبما أن البيانات الواردة هي عدد صحيح ، فإننا نحللها ونعرضها على شاشة LCD المتصلة.
int pwmval = Serial.parseInt () ، // تلقي القيمة الصحيحة من Master throught RS-485 Serial.print ("حصلت على قيمة") ؛ Serial.println (pwmval) ؛ lcd.setCursor (0،0) ؛ lcd.print ("القيمة المستلمة") ؛ lcd.setCursor (0،1) ؛ lcd.print (pwmval) ؛ تأخير (1000) ؛ lcd.clear () ؛
استنتاج
يمكن العثور على إعداد الاختبار الذي استخدمناه لهذا المشروع أدناه.
يمكن العثور على العمل الكامل لهذا المشروع في الفيديو المرتبط أدناه. هذه الطريقة هي إحدى الطرق البسيطة والسهلة التنفيذ لنقل البيانات عبر مسافات طويلة. في هذا المشروع ، استخدمنا فقط معدل الباود 9600 وهو أقل بكثير من سرعة النقل القصوى التي يمكننا تحقيقها مع وحدة MAX-485 ولكن هذه السرعة مناسبة لمعظم وحدات الاستشعار الموجودة هناك ولا نحتاج حقًا جميع السرعات القصوى أثناء العمل مع Arduino ولوحات التطوير الأخرى إلا إذا كنت تستخدم الكابل كاتصال إيثرنت وتتطلب كل النطاق الترددي وسرعة النقل التي يمكنك الحصول عليها. قم بالتلاعب بسرعة النقل بمفردك وجرب أنواع كبلات إيثرنت الأخرى أيضًا. إذا كانت لديك أي أسئلة ، فاتركها في قسم التعليقات أدناه أو استخدم منتدياتنا وسأبذل قصارى جهدي للإجابة عليها. حتى ذلك الحين ، وداع!