- תקשורת טורית RS-485
- רכיבים נדרשים
- תרשים מעגל
- תכנות STM32F103C8 ו- Arduino UNO לתקשורת טורית RS485
- בדיקת תקשורת RS485 בין STM32F103C8 לבין Arduino UNO:
פרוטוקולי התקשורת הם החלק האינטגרלי ממערכת אלקטרוניקה דיגיטלית ומערכת משובצת. בכל מקום שיש ממשק של מספר מיקרו-בקר וציוד היקפי, יש להשתמש בפרוטוקול התקשורת על מנת להחליף נתונים רבים. ישנם סוגים רבים של פרוטוקול תקשורת סדרתי. ה- RS485 הוא אחד מפרוטוקולי התקשורת הטורית ומשמש בפרויקטים תעשייתיים ובמכונות כבדות.
למדנו על תקשורת טורית RS485 בין Arduino Uno ו- Arduino Nano במדריך הקודם . הדרכה זו עוסקת בשימוש בתקשורת טורית RS-485 במיקרו-בקר STM32F103C8. אם אתה חדש במיקרו-בקר STM32 אז התחל עם תחילת העבודה עם STM32 באמצעות Arduino IDE: LED מהבהב ובדוק את כל פרויקטי STM32 כאן.
במדריך זה מאסטר STM32F103C8 כולל שלושה כפתורי לחיצה המשמשים לשליטה במצבם של שלוש נוריות LED הנמצאות ב- Slave Arduino Uno באמצעות תקשורת טורית RS-485.
נתחיל בהבנת העבודה של תקשורת טורית RS-485.
תקשורת טורית RS-485
RS-485 הוא פרוטוקול תקשורת סדרתי אסינכרוני שאינו דורש שעון. היא משתמשת בטכניקה הנקראת אות דיפרנציאלי להעברת נתונים בינאריים ממכשיר אחד לאחר.
אז מה זו שיטת העברת אותות דיפרנציאלית ??
שיטת אות הדיפרנציאל פועלת על ידי יצירת מתח דיפרנציאלי באמצעות 5V חיובי ושלילי. הוא מספק חצי דופלקס תקשורת בעת שימוש שני חוטים ו דופלקס מלא תקשורת בעת שימוש ארבעה חוטים.
באמצעות שיטה זו:
- RS-485 תומך בקצב העברת נתונים גבוה יותר של מקסימום 30 מגה לשנייה.
- הוא גם מספק מרחק העברת נתונים מרבי בהשוואה לפרוטוקול RS-232. הוא מעביר נתונים עד למקסימום 1200 מטר.
- היתרון העיקרי של RS-485 על פני RS-232 הוא עבד מרובה עם מאסטר יחיד ואילו RS-232 תומך בעבד יחיד בלבד.
- יכול להיות לכל היותר 32 מכשירים המחוברים לפרוטוקול RS-485.
- יתרון נוסף של ה- RS-485 הוא חסין מפני הרעש כאשר הם משתמשים בשיטת אות דיפרנציאלית להעברה.
- RS-485 מהיר יותר בהשוואה לפרוטוקול I2C.
ניתן לחבר את מודול RS-485 לכל מיקרו-בקר בעל יציאה טורית. לשימוש במודול RS-485 עם מיקרו-בקרים יש צורך במודול בשם 5V MAX485 TTL ל- RS485 המבוסס על Maxim MAX485 IC מכיוון שהוא מאפשר תקשורת טורית למרחק רב של 1200 מטר והוא דו כיווני וחצי דופלקס בעל קצב העברת נתונים של 2.5 Mbps. מודול זה דורש מתח של 5 וולט.
תיאור פין RS-485:
שם סיכה |
תיאור |
VCC |
5V |
א |
קלט מקלט לא הפוך פלט נהג שאינו הפוך |
ב |
היפוך קלט מקלט הפיכת פלט הנהג |
GND |
GND (0V) |
R0 |
מקלט (פין RX) |
מִחָדָשׁ |
פלט מקלט (LOW-Enable) |
DE |
פלט נהג (HIGH-Enable) |
DI |
קלט נהג (פין TX) |
למודול RS485 יש את התכונות הבאות:
- מתח הפעלה: 5V
- שבב MAX485 מובנה
- צריכת חשמל נמוכה לתקשורת RS485
- משדר מוגבל בקצב שינה
- מסוף 2P בגובה 5.08 מ"מ
- חיווט תקשורת RS-485 נוח
- ניתן לשלוט על כל סיכות השבב באמצעות המיקרו-בקר
- גודל לוח: 44 x 14 מ"מ
השימוש במודול זה עם STM32F103C8 ו- Arduino UNO קל מאוד. נעשה שימוש ביציאות סדרתיות חומרה של מיקרו-בקרים. הסיכות הטוריות של החומרה ב- STM32 וב- Arduino UNO מפורטות להלן.
- ב- STM32F103C8: סיכות PA9 (TX) ו- PA10 (RX)
- ב- Arduino Uno: Pin 0 (RX) & 1 (TX)
התכנות גם פשוט פשוט השתמש ב- Serial.print () כדי לכתוב ל- RS-485 ו- Serial. קרא () לקריאה מ- RS-485 והסיכות DE & RE של RS-485 נעשו LOW כדי לקבל נתונים והפכו HIGH ל- לכתוב נתונים לאוטובוס RS-485.
רכיבים נדרשים
- STM32F103C8
- ארדואינו UNO
- מודול ממיר MAX485 TTL ל- RS485 - (2)
- פוטנציומטר 10K
- לחצן לחיצה - 3
- נורית - 3
- נגדים
- קרש לחם
- חוטי חיבור
תרשים מעגל
במדריך זה STM32F103C8 משמש כמאסטר עם מודול RS-485 אחד ו- Arduino UNO משמש כעבד עם מודול RS-485 אחר.
חיבור מעגל בין ה- RS-485 ל- STM32F103C8 (מאסטר):
RS-485 |
STM32F103C8 |
DI |
PA9 (TX1) |
DE מִחָדָשׁ |
PA3 |
R0 |
PA10 (RX1) |
VCC |
5V |
GND |
GND |
א |
ל- A של עבד RS-485 |
ב |
ל- B של עבד RS-485 |
STM32F103C8 עם שלושה לחצני כפתור:
שלושה כפתורי לחיצה עם שלושה נגדי Pull Down של 10k מחוברים לסיכות PA0, PA1, PA2 של STM32F103C8.
חיבור מעגל בין ה- RS-485 ל- Arduino UNO (עבד):
RS-485 |
ארדואינו UNO |
DI |
1 (TX) |
DE מִחָדָשׁ |
2 |
R0 |
0 (RX) |
VCC |
5V |
GND |
GND |
א |
ל- A של מאסטר RS-485 |
ב |
ל- B של מאסטר RS-485 |
שלוש נוריות משמשות כאשר אנודות של נוריות עם נגן של 330 אוהם מחוברות לסיכות 4, 7, 8 של Arduino UNO וקתודה של נוריות LED מחוברות ל- GND.
תכנות STM32F103C8 ו- Arduino UNO לתקשורת טורית RS485
Arduino IDE משמש לפיתוח ותכנות של שני הלוחות כלומר STM32 ו- Arduino UNO. אך וודא שבחרת את ה- PORT המתאים מ- Tools-> Port and Board מ- Tools-> Board. אם אתה מוצא קשיים או ספק, אז פשוט עיין בתכנות STM32 שלך ב- ARDUINO IDE. התכנות של הדרכה זו מורכב משני חלקים ראשונים ל- STM32F103C8 (מאסטר) ואחרים עבור Arduino UNO (Slave). שני הקודים יוסברו בזה אחר זה בהמשך.
STM32F103C8 כמנהלבצד הראשי, הסטטוס של לחצן הלחיצה נקרא ואז כתוב את הערכים הללו באופן סדרתי לאוטובוס ה- RS-485 דרך יציאות סדרתיות חומרה 1 (PA9, PA10) של STM32F103C8. כמו כן אין צורך בספרייה חיצונית נכון לעכשיו. בארדואינו יש את כל הספרייה הדרושה לתקשורת סדרתית.
התחל בתקשורת סדרתית באמצעות סיכות סידורי חומרה (PA9, PA10) ברישום של 9600.
סדרה 1. התחיל (9600);
קרא את מצב כפתור הלחיצה בסיכות PA0, PA1, PA2 של STM32F103C8 ושמור אותם בכפתור משתנה 1val, button2val, button3val. הערך הוא HIGH אם לוחצים על כפתור ו- LOW כאשר לא לוחצים עליו.
int button1val = digitalRead (button1); int button2val = digitalRead (button2); int button3val = digitalRead (button3);
לפני שליחת ערכי הכפתור ליציאה הטורית, הפינים DE ו- RE של RS-485 צריכים להיות HIGH המחוברים לסיכה PA3 של STM32F103C8 (כדי להפוך את סיכה PA3 לגובה):
digitalWrite (enablePin, HIGH);
ליד כדי להכניס את הערכים ליציאה הסדרתית ולשלוח ערכים תלוי באיזה כפתור לחיצה נלחץ השתמש בהצהרה אחרת אם שלח את הערך המתאים כשלוחצים על הכפתור.
אם לוחצים על הכפתור הראשון התנאי תואם והערך '1' נשלח ליציאה הסדרתית בה מחובר Arduino UNO.
אם (button1val == HIGH) { int num1 = 1; Serial1.println (num1); }
באופן דומה, כאשר לוחצים על כפתור 2 הערך 2 נשלח דרך היציאה הטורית וכאשר לוחצים על כפתור 3 הערך 3 נשלח מעל היציאה הטורית.
אחרת אם (button2val == HIGH) { int num2 = 2; Serial1.println (num2); } אחרת אם (button3val == HIGH) { int num3 = 3; Serial1.println (num3); }
וכשלא לוחצים על כפתור הערך 0 נשלח לארדואינו אונו.
אחרת { int num = 0; Serial1.println (num); }
זה מסיים את התכנות להגדרת STM32 כ- Master.
ארדואינו UNO כעבדבצד העבדים ה- Arduino UNO מקבל ערך שלם שנשלח מה- Master STM32F103C8 אשר זמין ביציאה החומרית של ה- Arduino UNO (P0, 1) שם מחובר מודול RS-485.
כל שעליך לעשות הוא לקרוא ערך ולאחסן במשתנה. בהתאם לערך שהתקבל נורית ה- LED המתאימה מופעלת או כבויה ומחוברת ל- Arduino GPIO.
כדי לקבל את הערכים מהמאסטר פשוט הפוך את הפינים DE & RE של מודול RS-485 LOW. אז pin-2 (enablePin) של Arduino UNO נעשה נמוך.
digitalWrite (enablePin, LOW);
עכשיו פשוט קרא את נתוני המספרים השלמים הזמינים בנמל הסידורי ושמור אותם במשתנה.
int קבל = Serial.parseInt ();
בהתאם לערך כלומר (0, 1, 2, 3) שהתקבל, המקביל אחד משלושת הנוריות מופעל.
אם (קבל == 1) // תלוי בערך המתקבל נורית ה- LED המתאימה מופעלת או כבויה { digitalWrite (ledpin1, HIGH); } אחר אם (קבל == 2) { digitalWrite (ledpin2, HIGH); } אחר אם (קבל == 3) { digitalWrite (ledpin3, HIGH); } אחר { digitalWrite (ledpin1, LOW); digitalWrite (ledpin2, LOW); digitalWrite (ledpin3, LOW); }
זה מסיים את התכנות והגדרת התצורה של Arduino UNO כעבד. כמו כן זה מסיים את התצורות המלאות עבור Arduino UNO ו- STM32. סרטון העבודה וכל הקודים מצורפים בסוף הדרכה זו.
בדיקת תקשורת RS485 בין STM32F103C8 לבין Arduino UNO:
1. כאשר לוחצים על כפתור 1, המחובר ל- Master STM32, נורת LED 1 נדלקת המחוברת ל- Arduino Slave.
2. כאשר לוחצים על כפתור -2, שהתחבר ל- Master STM32, נורת LED 2 נדלקת המחוברת ל- Arduino Slave.
3. באופן דומה כאשר לחיצת כפתור -3 נלחצת נורית ה- 3 נדלקת המחוברת לארבדנו Slave.
זה מסיים את התקשורת הסדרתית RS485 בין STM32F103C8 לבין Arduino UNO. לוחות ה- Arduino UNO ו- STM32 משמשים באופן נרחב ללוחות אב טיפוס מהירים וביצענו פרויקטים שימושיים רבים בלוחות אלה. אם אתה מוצא ספקות או שיש לך הצעה כלשהי עבורנו, כתוב והערה למטה.