- ההבדל בין תקשורת UART ו- RS485
- רכיבים נדרשים
- תרשים מעגלים לתקשורת קווית למרחקים ארוכים
- מודול ממיר MAX485 UART-RS485
- כבל Ethernet CAT-6E
- הסבר קוד ארדואינו
- סיכום
אנחנו משתמשים בלוחות פיתוח של מיקרו-בקר כמו Arduino, Raspberry Pi, NodeMCU, ESP8266, MSP430 וכו 'כבר זמן רב בפרויקטים הקטנים שלנו, בהם רוב הפעמים המרחק בין החיישנים ללוח הוא לא יותר ממספר סנטימטרים לכל היותר במרחקים אלה, התקשורת בין מודולי החיישנים השונים, הממסרים, המפעילים והבקרים יכולה להתבצע בקלות באמצעות חוטי מגשר פשוטים מבלי שנחשש מעיוות האות במדיום ומהרעשים החשמליים המתגנבים אליו. אבל אם אתה בונה מערכת בקרה עם לוחות הפיתוח הללו על פני מרחק גדול מ 10 עד 15 מטר, אז אתה צריך לקחת בחשבון את רעש ואת כוח האות כי אם אתה רוצה שהמערכת שלך תפעל בצורה אמינה, אז אתה לא יכול להרשות לעצמך לאבד את נתונים תוך כדי העברה.
ישנם סוגים רבים ושונים של פרוטוקולי תקשורת סדרתיים כמו I2C ו- SPI אשר ניתנים ליישום בקלות עם Arduino והיום אנו הולכים להסתכל על פרוטוקול אחר הנפוץ ביותר בשם RS485 אשר נפוץ מאוד בסביבות תעשייתיות בעלות רעש גבוה להעברת הנתונים מרחק רב. במדריך זה אנו הולכים ללמוד על פרוטוקול התקשורת RS485 וכיצד ליישם אותו עם שני הארדואינו ננו שאנו איתנו וכיצד להשתמש במודול ההמרה MAX485 RS485 ל- UART. בעבר ביצענו גם תקשורת MAX485 עם Arduino וגם תקשורת MAX485 עם Raspberry pi, אתה יכול גם לבדוק אותם אם אתה מעוניין בכך.
ההבדל בין תקשורת UART ו- RS485
רוב החיישנים בעלות הנמוכה ומודולים אחרים כמו GPS, Bluetooth, RFID, ESP8266 וכו 'אשר משמשים בדרך כלל עם Arduino, Raspberry Pi בשוק משתמשים בתקשורת מבוססת UART TTL מכיוון שהיא דורשת רק 2 חוטים TX (משדר) ו- RX (מַקְלֵט). זה לא פרוטוקול תקשורת סטנדרטי, אבל זה מעגל פיזי שאפשר להעביר ולקבל נתונים סדרתיים עם ציוד היקפי אחר. הוא יכול רק להעביר / לקבל נתונים באופן סדרתי, ולכן הוא ממיר תחילה את הנתונים המקבילים לנתונים סדרתיים ואז מעביר את הנתונים.
UART הוא מכשיר שידור אסינכרוני ולכן אין אות שעון לסנכרן את הנתונים בין שני המכשירים, במקום זאת הוא משתמש בסיביות התחלה ועצירה בתחילת ובסוף כל חבילת נתונים בהתאמה כדי לסמן את הקצוות של הנתונים המועברים. נתונים מועברים של UART מאורגנים בחבילות. כל חבילה מכילה סיבית התחלה אחת, 5 עד 9 סיביות נתונים (תלוי ב- UART), סיבית זוגית אופציונלית ו -1 או 2 סיביות עצירה. זה מתועד היטב ונמצא בשימוש נרחב ויש לו גם קצת זוגיות כדי לאפשר בדיקת שגיאות. אך יש לכך מגבלות שכן הוא אינו יכול לתמוך בעבדים מרובים ומאסטרים מרובים ומסגרת הנתונים המרבית מוגבלת ל- 9 ביטים. לצורך העברת הנתונים, שיעורי השדרוג של המאסטר ושל העבדים חייבים להיות בין 10% אחד מהשני. להלן דוגמה לאופן בו דמות היא משדר מעל קו נתונים של UART. אותות גבוהים ונמוכים נמדדים אל מול רמת ה- GND ולכן לשינוי רמת ה- GND תהיה השפעה הרסנית על העברת הנתונים.
מצד שני, RS485 היא יותר תקשורת מבוססת תעשייה שפותחה עבור רשת של מספר מכשירים שניתן להשתמש בהם למרחקים גדולים ובמהירויות גבוהות יותר. הוא פועל על פי שיטת איתות דיפרנציאלית של מדידה ולא על מדידת מתח עם סיכה GND. אותות ה- RS485 צפים וכל אות מועבר על קו Sig + וקו Sig-line.
מקלט ה- RS485 משווה את הפרש המתח בין שני הקווים, במקום רמת המתח המוחלטת על קו האות. זה עובד היטב ומונע קיומם של לולאות קרקע, מקור נפוץ לבעיות תקשורת. התוצאות הטובות ביותר מושגות אם Sig + ו- Sig- קווים מעוותים כשהתפתלות מבטלת את ההשפעה של רעש אלקטרומגנטי המושרה בכבל ומספקת חסינות הרבה יותר טובה כנגד הרעש המאפשר ל- RS485 להעביר את הנתונים עד 1200 מטר טווח.. זוג מעוות מאפשר גם למהירויות השידור להיות גבוהות בהרבה ממה שאפשר בכבלים ישרים. במרחקי שידור קטנים ניתן לממש מהירויות עד 35Mbps עם RS485 אם כי מהירות השידור תפחת עם המרחק. במהירות של 1200 מטר במהירות השידור, תוכלו להשתמש במהירות של 100 קילו-לשניות במהירות השידור. אתה צריך כבל אתרנט מיוחד למימוש פרוטוקול תקשורת זה. ישנן קטגוריות רבות של כבלי אתרנט בהם אנו יכולים להשתמש כמו CAT-4, CAT-5, CAT-5E, CAT-6, CAT-6A וכו '. במדריך שלנו, אנו הולכים להשתמש בכבל CAT-6E בעל 4 זוגות מפותלים של חוטי 24AWG ויכול לתמוך עד 600 מגה-הרץ. זה מסתיים בשני הקצוות על ידי מחבר RJ45. רמות מתח קו אופייניות ממנהלי הקו הן מינימום של ± 1.5 וולט עד למקסימום של כ- ± 6 V. רגישות כניסת המקלט היא ± 200 mV. רעש בטווח של ± 200 mV נחסם למעשה בגלל ביטול רעשים במצב רגיל. דוגמה לאופן העברת בתים (0x3E) על שתי השורות של תקשורת RS485.
רכיבים נדרשים
- 2 × מודול ממיר MAX485
- 2 × ארדואינו ננו
- 2 × 16 * 2 LCD אלפאנומרי
- פוטנציומטרים של מגבים 2 × 10k
- כבל אתרנט Cat-6E
- לוחות לחם
- חוטי מגשר
תרשים מעגלים לתקשורת קווית למרחקים ארוכים
התמונה למטה מציגה את דיאגרמת המעגל של המשדר והמקלט לתקשורת קווית למרחקים ארוכים של ארדואינו. שים לב שגם מעגלי המשדר וגם המקלט נראים זהים הדבר היחיד ששונה הוא הקוד שנכתב בתוכו. גם לצורך ההדגמה, אנו משתמשים בלוח אחד כמשדר ולוח אחד כמקלט, אך אנו יכולים לתכנת את הלוחות בקלות כך שיעבדו כמשדר וכמקלט עם אותה הגדרה
תרשים החיבור למעגל הנ"ל מובא גם להלן.
כפי שניתן לראות לעיל ישנם שני זוגות מעגלים זהים כמעט שלכל אחד מהם ננו של Arduino, 16 * 2 אלפאנומרי LCD, ו- MAX485 UART ל- RS485 ממיר IC המחובר לכל קצה כבל Ethernet Cat-6E באמצעות מחבר RJ45. הכבל בו השתמשתי בהדרכה אורכו 25 מטר. אנו נשלח נתונים מהצד המשדר מעל הכבל מהנאנו המומר לאותות RS485 באמצעות מודול MAX RS485 העובד במצב מאסטר.
בקצה הקבלה, מודול הממיר MAX485 עובד כעבד, והאזנה לשידור מהמאסטר הוא ממיר שוב את נתוני RS485 שקיבל לאותות ה- 5 V TTL UART הסטנדרטיים שיקראו על ידי הננו המקבל ויוצגו ב 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 אינץ 'לשימוש עם לוח לחם אם תרצו.
כבל Ethernet CAT-6E
כאשר אנו חושבים על העברת נתונים למרחקים ארוכים, אנו חושבים מיד על חיבור לאינטרנט באמצעות כבלים אתרנט. כיום, אנו משתמשים בעיקר ב- Wi-Fi לצורך קישוריות לאינטרנט, אך קודם לכן נהגנו להשתמש בכבלי Ethernet המגיעים לכל מחשב אישי כדי לחבר אותו לאינטרנט. הסיבה העיקרית העומדת מאחורי השימוש בכבלי אתרנט אלה על גבי חוטים רגילים היא שהם מספקים הגנה טובה בהרבה מפני רעש הזוחל ועיוות האות למרחקים גבוהים. יש להם מעיל מגן מעל שכבת הבידוד כדי להגן מפני הפרעות אלקטרומגנטיות וגם כל זוג חוטים מפותל יחד כדי למנוע היווצרות לולאה נוכחית ובכך הגנה טובה הרבה יותר מפני הרעש. הם מסתיימים לעתים קרובות עם מחברי RJ45 עם 8 פינים משני קצותיהם. ישנן קטגוריות רבות של כבלי אתרנט בהם אנו יכולים להשתמש כמו CAT-4, CAT-5,CAT-5E, CAT-6, CAT-6A וכו '. במדריך שלנו אנו נשתמש בכבל CAT-6E שיש לו 4 זוגות מעוותים של חוטי 24AWG ויכול לתמוך עד 600 מגה-הרץ.
תמונה המראה כיצד זוג חוטים מתפתלים בתוך שכבת הבידוד של כבל CAT-6E
מחבר RJ-45 מיועד לכבל אתרנט CAT-6E
הסבר קוד ארדואינו
בפרויקט זה אנו משתמשים בשני ארדואינו נאנו, אחד כמשדר ואחד כמקלט המניע כל אחד 16 * 2 אלפאנומרי LCD כדי להציג את התוצאות. לכן, בקוד הארדואינו נתמקד בשליחת הנתונים ולהציג נתונים שנשלחו או קיבלו על גבי מסך ה- LCD.
לצד משדר:
אנו מתחילים לכלול את הספרייה הסטנדרטית להפעלת LCD ולהכריז על סיכת D8 של הארדואינו ננו כסיכת פלט בה נשתמש בהמשך כדי להכריז על מודול MAX485 כמשדר או מקלט.
int enablePin = 8; int potval = 0; #לִכלוֹל
עכשיו מגיעים לחלק ההתקנה. אנו נמשוך את סיכת ההפעלה גבוהה בכדי להכניס את מודול MAX485 למצב משדר. מכיוון שמדובר ב- IC של חצי דופלקס ולכן הוא לא יכול גם לשדר ולקבל בו זמנית. אנו גם מאותחלים את ה- LCD כאן ונדפיס הודעת קבלת פנים.
Serial.begin (9600); // אתחל סדרתי ב- baudrate 9600: pinMode (enablePin, OUTPUT); lcd.begin (16,2); lcd.print ("מעגל מעגל"); lcd.setCursor (0,1); lcd.print ("משדר ננו"); עיכוב (3000); lcd.clear ();
עכשיו בלולאה, אנו כותבים ערך שלם שמגדיל ברציפות על קווי הסדרה אשר מועבר לאחר מכן לננו האחר. ערך זה מודפס גם על גבי ה- LCD לתצוגה וניקוי באגים.
Serial.print ("ערך שנשלח ="); Serial.println (potval); // כתיבה טורית POTval ל- RS-485 אוטובוס lcd.setCursor (0,0); lcd.print ("ערך שנשלח"); lcd.setCursor (0,1); lcd.print (potval); עיכוב (1000); lcd.clear (); potval + = 1;
צד המקלט:
שוב, אנו מתחילים לכלול את הספרייה הסטנדרטית להפעלת LCD ולהכריז על סיכת D8 של הארדואינו ננו כסיכת פלט בה נשתמש בהמשך כדי להכריז על מודול MAX485 כמשדר או מקלט.
int enablePin = 8; #לִכלוֹל
עכשיו מגיעים לחלק ההתקנה. אנו נמשוך את סיכת ההפעלה גבוהה בכדי להכניס את מודול MAX485 למקלט. מכיוון שמדובר ב- IC של חצי דופלקס ולכן הוא לא יכול גם לשדר ולקבל בו זמנית. אנו גם מאותחלים את ה- LCD כאן ונדפיס הודעת קבלת פנים.
Serial.begin (9600); // אתחל סדרתי ב- baudrate 9600: pinMode (enablePin, OUTPUT); lcd.begin (16,2); lcd.print ("מעגל מעגל"); lcd.setCursor (0,1); lcd.print ("מקלט ננו"); עיכוב (3000); digitalWrite (enablePin, LOW); // (פין 8 תמיד נמוך כדי לקבל ערך ממאסטר)
כעת בלולאה, אנו בודקים אם יש משהו זמין ביציאה הטורית ואז קוראים את הנתונים ומכיוון שהנתונים הנכנסים הם מספר שלם, אנו מנתחים אותם ומציגים על גבי ה- LCD המחובר.
int pwmval = Serial.parseInt (); // קבל ערך INTEGER ממאסטר דרך 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 ולוחות פיתוח אחרים אלא אם כן אתה משתמש בכבל כחיבור אתרנט ודורש את כל רוחב הפס ומהירות ההעברה שאתה יכול לקבל. האם לשחק עם מהירות ההעברה לבד ולנסות גם סוגים אחרים של כבל Ethernet. אם יש לך שאלות, השאיר אותן בסעיף ההערות למטה או השתמש בפורומים שלנו ואשתדל כמיטב יכולתי לענות עליהן. עד אז, אדיוס!