סריאל דרך RF Link Kit: יש מצב?

תקשורת טורית, כמו זו של הארדואינו עם המחשב, היא נוחה ושימושית, ואם מצליחים לממש אותה בצורה אלחוטית זה עוד יותר שימושי. בפוסט זה אתאר את המגבלות העקרוניות והטכניות על מימוש אלחוטי של הסריאל דרך מודולי הרדיו הפשוטים והזולים (RF Link Kit) – כהקדמה לניסיון לבצע זאת בפועל.

שני זוגות RF Link Kit בתדר 433MHz
שני זוגות RF Link Kit בתדר 433MHz

מבוא: ערמה של בעיות

אם ננסה לחבר בצורה נאיבית את פיני TX ו-RX של המודולים המתקשרים לפיני data של יחידות הרדיו (משדר ומקלט),  זה לא יעבוד. אפילו אם זה היה עובד, זו היתה מערכת בעייתית מאד, מכיוון שקו ה-TX הוא HIGH כברירת מחדל (ראו כאן), מה שאומר שיחידת המשדר היתה משדרת ברציפות בזמן שהתקשורת לא פעילה, ובכך מבזבזת המון חשמל ומפריעה מאד לשידורים אחרים בסביבה באותו תדר.

גם אם נתחכם ונהפוך את האות בכניסה וביציאה, באמצעות טרנזיסטור או שער NOT, זה לא יפתור לגמרי את הבעיה. כפי שציינתי בעבר, מקלטי הרדיו הזולים האלה מחפשים בצורה אקטיבית את הסיגנל, ואם האות יציב במשך יותר מדי זמן לטעמם (וזה יכול להיות כשאין שום שידור או שכשיש שידור רציף), הם מתחילים להפיק רעש אקראי. הרעש הזה עלול להתבטא כקלט סריאלי חסר משמעות, או להפריע לקלט הלגיטימי. אנחנו צריכים לנהל איכשהו את השידור ואת הקליטה כך שיחמקו מבעיית הרעש, וזה כבר מחייב מערכת מתווכת.

בעיה נוספת היא שלמודולי ה-RF Link Kit יש מגבלות משמעותיות על קצבי שידור וקליטה (פה ושם אנחנו שומעים מספרים כמו 2400 או 4800 ביטים לשניה), וגם בהתעלם מהרעש אין לנו שום ערובה שמה שיוצא מהמקלט זהה בדיוק, מבחינת משכי זמן, למה שנכנס למשדר.

בקיצור, כדי לממש Serial אלחוטי עם RF Link Kit, צריך לאפיין קודם כל את יכולות השידור והקליטה הגולמיות של מודולי הרדיו, ועל סמך המידע הזה לבנות מערכת שתנהל את התקשורת בפועל.

במאמר מוסגר, אפשר גם לקחת שני לוחות ארדואינו רגילים ולתכנת כל אחד מהם כך שיקרא את המידע מה-Serial שלו וישלח אותו, בייט אחרי בייט, באמצעות ספריה כזו או אחרת שיודעת לעבוד עם RF Link Kit. זה יעבוד, אבל יהיה (יחסית) מסורבל, איטי, יקר ובזבזני.

תזמונים מהשטח

מודולי RF Link Kit מהמזרח הרחוק מגיעים בלי מפרט טכני, ובמחירים כאלה סביר להניח שגם אם היה מפרט, הקשר בינו לבין המציאות היה רופף. לכן לקחתי זוג משדר-מקלט אחד (בתדר 433MHz), וחיברתי את היחידות לארדואינו מתוכנת בהתאם וגם ל-Logic Analyzer, כדי לראות בעיניים את הקשר בין הקלט והפלט. מדגם בגודל 1 לא אומר הרבה, כמובן, אבל להתרשמות ראשונית זה יכול להספיק.

בתמונה כאן למטה, הערוץ העליון מציג את מה שנכנס מהארדואינו למשדר: אות אימון (HIGH/LOW מהירים לסירוגין), אחריו 50ms של שקט, שידור באורך 1ms, שקט במשך 200ms וחוזר חלילה.

שידור(בערוץ העליון)  וקליטה עם RF Link Kit מטווח של סנטימטרים.
שידור(בערוץ העליון) וקליטה עם RF Link Kit מטווח של סנטימטרים.

מה שבולט במיוחד בתמונה הזו הוא הרעש, שמתחיל להופיע אחרי כ-70-80ms של שקט. בדיקות נפרדות הראו הופעה דומה של רעש גם אחרי שידור רצוף ארוך.

בעזרת התוכנה מדדתי את הזמן שבין התחלת השידור לבין הופעת האות המקביל במקלט. במודולים כאלה המשדר הוא בסיסי להפליא, כך שסביר להניח שהעיכוב בתוכו זניח. גם הזמן שהאות נמצא "באוויר" זניח לחלוטין, כמובן, בטווחים כאלה. לכן, כל עיכוב שיתגלה (ברזולוציה של הכלים שברשותי) מקורו כנראה במקלט. הפרש הזמנים בין תחילת השידור לתחילת הקליטה היה עקבי למדי, ונע בין 36 ל-39 מיליוניות השניה.

הפרשי הזמנים בין סיום השידור לסיום הקליטה, לעומת זאת, היו גדולים יותר ובעלי שונות גדולה יותר: בין 46 ל-52 מיליוניות השניה, ולא נראה שיש קשר כלשהו בין הפרש ההתחלה להפרש הסיום.

משך האות המינימלי שהמקלט הצליח לזהות ולהגיב לו היה 12 מיליוניות השניה, אך רק בתנאי שהאות הזה מבודד. כששלחתי שלושה ברצף (עם הפסקות של 12 מיליוניות השניה ביניהם), המקלט הגיב כאילו היה מדובר באות אחד רציף:

תגובה לאותות קצרים וצפופים מדי
תגובה לאותות קצרים וצפופים מדי

גם הפרשי ההתחלה והסיום היו פרועים יותר עבור אותות קצרים מאד. התמונה התחילה להתייצב באזור 55 מיליוניות השניה:

תגובה ב-RF Link Kit לאותות של 55 מיקרו-שניות
תגובה ב-RF Link Kit לאותות של 55 מיקרו-שניות

כלומר, כדי להשיג שידור אמין, נצטרך לעבוד לפחות בסדרי גודל כאלה. אגב, בשניה אחת נכנסים כ-18K אותות כאלה, כך שזהו פחות או יותר הגבול המרבי המוחלט של ביטים בשניה לשידור גולמי עם RF Link Kit כזה.

בשידור סריאלי בקצב 9600 ביטים לשניה, משכו של כל ביט הוא כ-104 מיליוניות השניה. זהו נתון מעניין בהקשר הנוכחי, כי בקצב הנפוץ הזה אנחנו כבר אמורים לקבל תגובה טובה מהמקלט, וכל בייט שנשלח (ביט התחלה, 8 ביטים מידע וביט סיום) הוא קצר מספיק כדי למנוע הופעה של רעש אקראי באמצע השידור, אפילו במקרה הכי גרוע של רצף ביטים זהים.

לוגיקה הכרחית

מבחינת החומרה, נראה שיש אפשרות לממש Serial אלחוטי בנוסח ארדואינו על בסיס ה-RF Link Kit, בקצב שידור סטנדרטי וסביר. מה שחסר כרגע הוא דרך לנטרול הרעשים, והתחשבות בשתים-עשרה מיליוניות השניה, בממוצע, שמתווספים לכל פולס.

את הנושא השני אפשר לפתור בקלות אם נמדוד כל פולס נכנס, ונעביר ליחידת המשדר פולס קצר יותר ב-12 מיליוניות השניה. עם הרעש אפשר להתמודד בכמה דרכים. זו שנראית לי כרגע ריאלית ביותר היא, ברגע שמגיע קלט חדש בסריאל, לשלוח קודם כל אות אימון, לחכות קצת (או לשלוח אות מוסכם כלשהו), ואז להעביר את הביטים שהתקבלו והצטברו בינתיים. העיכוב יכול להיות אלפיות שניה ספורות, כך שהשפעתו על מהירות המערכת תהיה קטנה יחסית. הצד הקולט יצטרך לזהות את אות האימון או האות המוסכם, ולהתחיל באיסוף הביטים בהתאם. בפוסט(ים?) הבא ננסה להפוך את התיאוריה הזו לאבטיפוס מעשי.

להרשמה
הודע לי על
7 תגובות
מהכי חדשה
מהכי ישנה לפי הצבעות
Inline Feedbacks
הראה את כל התגובות

אני צריך לכתוב קוד בארדואינו ולשדר בעזרת משדר RF 2.4 ג’יגה הרץ באיזה הספק שאני רוצה אפשר עזרה?

אחלה פוסט, מחכה להמשך!
האם פרסמת כבר פוסט על הכלים שאתה משתמש בהם, כמו הלוג׳יק לדוגמא? ואם לא – האם תוכל לפרסם בהמשך?

דרך אגב כשאתה מפרסם קוד כזה או אחר יהיה נחמד לקבל אותו ארוז עם דוגמה כמו שנהוג לפרסם סיפריות לארדואינו מקל על הצד השני:)

נשמע מעניין מאוד