- بروتوكول الاتصال التسلسلي RS-485
- RS-485 في اردوينو
- المكونات مطلوبة
- مخطط الرسم البياني
- برمجة Arduino UNO & Arduino Nano لـ RS485 Serial Communication
- التحكم في سطوع LED مع الاتصال التسلسلي RS485
يعد اختيار بروتوكول اتصال للاتصال بين وحدات التحكم الدقيقة والأجهزة الطرفية جزءًا مهمًا من النظام المضمن. إنه مهم لأن الأداء العام لأي تطبيق مضمن يعتمد على وسائل الاتصال لأنها مرتبطة بخفض التكلفة ونقل البيانات بشكل أسرع وتغطية المسافات الطويلة وما إلى ذلك.
في الدروس السابقة تعلمنا عن بروتوكول الاتصال I2C وبروتوكولات الاتصال SPI في Arduino. يوجد الآن بروتوكول اتصال تسلسلي آخر يسمى RS-485 ، يستخدم هذا البروتوكول اتصال تسلسلي غير متزامن. الميزة الرئيسية لـ RS-485 هي نقل البيانات لمسافات طويلة بين جهازين. وهي الأكثر استخدامًا في البيئة الصناعية الصاخبة كهربائيًا.
في هذا البرنامج التعليمي ، سوف نتعرف على الاتصال التسلسلي RS-485 بين جهازي Arduinos ثم نوضح ذلك عن طريق التحكم في سطوع LED المتصل بـ Slave Arduino من Master Arduino عن طريق إرسال قيم ADC من خلال وحدة RS-485. يتم استخدام مقياس جهد 10 كيلو لتغيير قيم ADC في Master Arduino.
لنبدأ بفهم طريقة عمل الاتصال التسلسلي RS-485.
بروتوكول الاتصال التسلسلي RS-485
RS-485 هو بروتوكول اتصال تسلسلي غير متزامن لا يتطلب نبض ساعة. يستخدم تقنية تسمى الإشارة التفاضلية لنقل البيانات الثنائية من جهاز إلى آخر.
إذن ما هي طريقة نقل الإشارة التفاضلية هذه ؟؟
تعمل طريقة الإشارة التفاضلية عن طريق إنشاء جهد تفاضلي باستخدام 5 فولت موجب وسالب. وهو يوفر نصف دوبلكس الاتصال عند استخدام اثنين من الأسلاك و كامل الازدواج يتطلب 4 أربع أسلاك.
باستخدام هذه الطريقة
- يدعم RS-485 معدل نقل بيانات أعلى يبلغ 30 ميجابت في الثانية كحد أقصى.
- كما يوفر أقصى مسافة لنقل البيانات مقارنة ببروتوكول RS-232. ينقل البيانات حتى 1200 متر كحد أقصى.
- الميزة الرئيسية لـ RS-485 عبر RS-232 هي العبودية المتعددة مع Master واحد بينما تدعم RS-232 العبد الفردي فقط.
- يمكن أن تحتوي على 32 جهازًا متصلًا كحد أقصى ببروتوكول RS-485.
- ميزة أخرى لـ RS-485 هي أنها محصنة ضد الضوضاء لأنها تستخدم طريقة الإشارة التفاضلية للنقل.
- يعتبر RS-485 أسرع مقارنة ببروتوكول I2C.
RS-485 في اردوينو
لاستخدام RS-485 في Arduino ، هناك حاجة إلى وحدة تسمى 5V MAX485 TTL إلى RS485 والتي تعتمد على Maxim MAX485 IC لأنها تسمح بالاتصال التسلسلي على مسافة طويلة تصل إلى 1200 متر وهي ثنائية الاتجاه. في وضع نصف الازدواج يكون معدل نقل البيانات 2. 5Mbps.
تتطلب وحدة 5V MAX485 TTL إلى RS485 جهدًا كهربائيًا يبلغ 5 فولت وتستخدم مستويات منطقية 5 فولت بحيث يمكن توصيلها بمنافذ تسلسلية للأجهزة لوحدات التحكم الدقيقة مثل Arduino.
لديها الميزات التالية:
- جهد التشغيل: 5 فولت
- شريحة MAX485 على متن الطائرة
- انخفاض استهلاك الطاقة لاتصالات RS485
- جهاز الإرسال والاستقبال محدود السرعة
- 5.08mm الملعب 2P محطة
- أسلاك اتصالات مريحة RS-485
- يمكن التحكم في جميع دبابيس الشريحة من خلال المتحكم الدقيق
- حجم اللوح: 44 × 14 ملم
دبوس خارج من RS-485:
اسم الدبوس |
استعمال |
VCC |
5 فولت |
أ |
إدخال جهاز استقبال غير مقلوب إخراج سائق غير مقلوب |
ب |
عكس إدخال جهاز الاستقبال عكس إخراج السائق |
GND |
GND (0 فولت) |
R0 |
خرج جهاز الاستقبال (RX pin) |
إعادة |
خرج جهاز الاستقبال (تمكين منخفض) |
DE |
خرج السائق (عالي التمكين) |
دي |
مدخلات السائق (TX pin) |
يمكن توصيل وحدة RS-485 بسهولة مع Arduino. لنستخدم المنافذ التسلسلية للأجهزة من Arduino 0 (RX) و 1 (TX) (في UNO ، NANO). البرمجة بسيطة أيضًا ، ما عليك سوى استخدام Serial.print () للكتابة إلى RS-485 و Serial. اقرأ () للقراءة من RS-485.
يتم شرح جزء البرمجة لاحقًا بالتفصيل ولكن يتيح أولاً التحقق من المكونات المطلوبة ومخطط الدائرة.
المكونات مطلوبة
- Arduino UNO أو Arduino NANO (2)
- وحدة محول MAX485 TTL إلى RS485 - (2)
- 10 كيلو الجهد
- شاشة LCD مقاس 16 × 2
- يؤدى
- اللوح
- توصيل الأسلاك
في هذا البرنامج التعليمي ، يتم استخدام Arduino Uno كـ Master ويتم استخدام Arduino Nano كعبد. يتم استخدام لوحتي Arduino هنا ، لذا يلزم وجود وحدتين RS-485.
مخطط الرسم البياني
توصيل الدائرة بين أول RS-485 و Arduino UNO (Master):
RS-485 |
اردوينو UNO |
دي |
1 (تكساس) |
DE إعادة |
8 |
R0 |
0 (RX) |
VCC |
5 فولت |
GND |
GND |
أ |
إلى A من Slave RS-485 |
ب |
إلى B من Slave RS-485 |
الاتصال بين الثانية RS-485 و Arduino Nano (Slave):
RS-485 |
اردوينو UNO |
دي |
D1 (تكساس) |
DE إعادة |
د 8 |
R0 |
D0 (RX) |
VCC |
5 فولت |
GND |
GND |
أ |
إلى A من Master RS-485 |
ب |
إلى B من Master RS-485 |
توصيل الدائرة بين شاشة LCD مقاس 16 × 2 و Arduino Nano:
16x2 LCD |
اردوينو نانو |
VSS |
GND |
VDD |
+ 5 فولت |
V0 |
إلى دبوس مركز مقياس الجهد للتحكم في التباين في شاشة LCD |
RS |
د 2 |
RW |
GND |
ه |
د 3 |
د 4 |
د 4 |
د 5 |
د 5 |
د 6 |
د 6 |
د 7 |
د 7 |
أ |
+ 5 فولت |
ك |
GND |
يتم توصيل مقياس جهد 10 كيلو بالدبوس التناظري A0 في Arduino UNO لتوفير دخل تناظري ويتم توصيل LED بالدبوس D10 من Arduino Nano.
برمجة Arduino UNO & Arduino Nano لـ RS485 Serial Communication
لبرمجة كلا المجالين Arduino IDE يستخدم ولكن تأكد من تحديد PORT المقابل من Tools-> Port and Board من Tools-> Board.
يتم تقديم رمز كامل مع فيديو تجريبي في نهاية هذا البرنامج التعليمي. نحن هنا نوضح جزءًا مهمًا من الكود. يوجد برنامجان في هذا البرنامج التعليمي ، أحدهما لـ Arduino UNO (Master) والآخر لـ Arduino Nano (Slave).
شرح الكود للماجستير: اردوينو UNO
في الجانب الرئيسي ، ما عليك سوى أخذ الإدخال التناظري عند الدبوس A0 عن طريق تغيير مقياس الجهد ثم SerialW اكتب هذه القيم إلى ناقل RS-485 من خلال منافذ التسلسل للأجهزة (0،1) في Arduino UNO
لبدء الاتصال التسلسلي عند الدبابيس التسلسلية للأجهزة (0،1) استخدم:
Serial.begin (9600) ؛
لقراءة قيمة النظير في A0 دبوس من اردوينو UNO وتخزينها في متغير potval الاستخدام:
int potval = analogRead (pushval) ؛
قبل كتابة قيمة potval إلى المنفذ التسلسلي ، يجب أن تكون المسامير DE & RE لـ RS-485 عالية ومتصلة بالدبوس 8 في Arduino UNO لجعل الدبوس 8 مرتفعًا:
digitalWrite (enablePin ، عالية) ؛
بعد ذلك لوضع هذه القيم في المنفذ التسلسلي المتصل بوحدة RS-485 ، استخدم العبارة التالية
Serial.println (بوتفال) ؛
شرح كود الرقيق: اردوينو نانو
في الجانب التابع ، يتم تلقي قيمة عدد صحيح من Master RS-485 المتوفر في منفذ Hardware Serial في Arduino Nano (دبابيس -0،1). ما عليك سوى قراءة هذه القيمة وتخزينها في متغير. القيم في شكل (0 -1023). لذلك يتم تحويلها إلى (0-255) حيث يتم استخدام تقنية PWM للتحكم في سطوع LED.
ثم AnalogW اكتب تلك القيمة المحولة إلى دبوس LED D10 (إنه دبوس PWM). بناءً على قيمة PWM ، يتغير سطوع LED وأيضًا عرض هذه القيم في شاشة LCD مقاس 16 × 2.
لكي تتلقى RS-485 من Slave Arduino القيم من Master ، ما عليك سوى جعل المسامير DE & RE لـ RS-485 LOW. لذا فإن دبوس D8 (enablePin) في Arduino NANO مصنوع منخفض.
digitalWrite (enablePin ، منخفض) ؛
وقراءة بيانات الأعداد الصحيحة المتوفرة في Serial Port وتخزينها في استخدام متغير
int pwmval = Serial.parseInt () ،
بعد ذلك قم بتحويل القيمة من (0-1023 إلى 0-255) وقم بتخزينها في متغير:
int تحويل = خريطة (pwmval ، 0،1023،0،255) ؛
بعد ذلك ، اكتب القيمة التناظرية (PWM) للدبوس D10 حيث يتم توصيل أنود LED:
analogWrite (ليدبين ، تحويل) ؛
لطباعة قيم PWM هذه في شاشة عرض LCD مقاس 16 × 2
lcd.setCursor (0،0) ؛ lcd.print ("PWM FROM MASTER") ؛ lcd.setCursor (0،1) ؛ lcd.print (تحويل) ؛
التحكم في سطوع LED مع الاتصال التسلسلي RS485
عندما يتم ضبط قيمة PWM على 0 باستخدام مقياس الجهد ، يتم إيقاف تشغيل مؤشر LED.
وعند ضبط قيمة PWM على 251 باستخدام مقياس الجهد: يتم تشغيل مؤشر LED بسطوع كامل كما هو موضح في الصورة أدناه:
هذه هي الطريقة التي يمكن بها استخدام RS485 للاتصال التسلسلي في Arduino.