תוכן עניינים:
- שלב 1: שימוש במשאבים
- שלב 2: CAN (רשת אזור בקר)
- שלב 3: CAN - תכונות
- שלב 4: מעגל בשימוש
- שלב 5: מתח קווי שידור (זיהוי דיפרנציאלי)
- שלב 6: פורמט תקנים ומסגרות מסוג CAN
- שלב 7: פורמט תקנים ומסגרות מסוג CAN
- שלב 8: פורמט תקנים ומסגרות מסוג CAN
- שלב 9: ארבעה סוגי מסגרות (מסגרות)
- שלב 10: מעגל - פרטי חיבורים
- שלב 11: מעגל - לכידת נתונים
- שלב 12: מעגל - לכידת נתונים
- שלב 13: מעגל - לכידת נתונים
- שלב 14: ספריית Arduino - CAN
- שלב 15: Github
- שלב 16: קוד מקור המשדר
- שלב 17: קוד מקור: לולאה (), שליחת חבילת CAN 2.0 רגילה
- שלב 18: קוד מקור: לולאה (), שליחת חבילת CAN 2.0 מורחבת
- שלב 19: קוד המקור של המקלט
- שלב 20: קוד מקור: לולאה (), קבלת החבילה ובדיקת הפורמט
- שלב 21: מקור: לולאה (), בודק אם מדובר בחבילה מרוחקת
- שלב 22: קוד מקור: לולאה (), אורך הנתונים המבוקש או התקבל
- שלב 23: קוד מקור: לולאה (), אם מתקבלים נתונים, הם מודפסים
- שלב 24: הורד את הקבצים
2025 מְחַבֵּר: John Day | [email protected]. שונה לאחרונה: 2025-01-23 14:46
נושא נוסף שהציעו לאחרונה עוקבי ערוץ היוטיוב שלי היה פרוטוקול CAN (Controller Area Network), עליו נתמקד היום. חשוב להסביר כי CAN הוא פרוטוקול תקשורת טורית בו זמנית. המשמעות היא שהסנכרון בין המודולים המחוברים לרשת מתבצע ביחס לתחילת כל הודעה שנשלחת לאוטובוס. נתחיל בהצגת מושגי היסוד של פרוטוקול CAN ונבצע הרכבה פשוטה עם שני ESP32.
במעגל שלנו, ה- ESPs יכולים לפעול כאדון וגם כעבד. אתה יכול לקבל מספר מיקרו -בקרים שמשדרים במקביל, מכיוון שה- CAN מתמודד עם התנגשות של הכל באופן אוטומטי. קוד המקור של הפרויקט הזה הוא סופר פשוט. תבדוק את זה!
שלב 1: שימוש במשאבים
- שני מודולים של ESP WROOM 32 NodeMcu
- שני משדרי CAN מ- WaveShare
- מגשרים לחיבורים
- מנתח לוגי ללכידה
- שלושה כבלי USB למחשבי ESP ומנתח
- 10 מטרים של זוג מעוות לשמש אוטובוס
שלב 2: CAN (רשת אזור בקר)
- הוא פותח על ידי רוברט בוש GmbH בשנות השמונים כדי לשרת את תעשיית הרכב.
- היא הפכה נפוצה עם השנים בשל החוסן שלה וגמישות היישום. הוא משמש עם ציוד צבאי, מכונות חקלאיות, אוטומציה תעשייתית ובניית, רובוטיקה וציוד רפואי.
שלב 3: CAN - תכונות
- תקשורת טורית דו-חוטית
- מקסימום 8 בתים של מידע שימושי לכל מסגרת, עם פיצול אפשרי
- כתובת המופנית להודעה ולא לצומת
- הקצאת הודעות עדיפות והעברת הודעות "בהמתנה"
- יכולת אפקטיבית לאתר ולזהות שגיאות
- יכולת רב-מאסטר (כל הצמתים יכולים לבקש גישה לאוטובוס)
- יכולת שידור מרובי (הודעה אחת למספר מקלטים בו זמנית)
- קצבי העברה של עד 1Mbit / s באוטובוס של 40 מטר (הפחתת התעריף עם הגדלת אורך הסוס)
- גמישות התצורה והכנסת הצמתים החדשים (עד 120 צמתים לאוטובוס)
- חומרה סטנדרטית, עלות נמוכה וזמינות טובה
- פרוטוקול מוסדר: ISO 11898
שלב 4: מעגל בשימוש
הנה, יש לי את משדרי השידור. יש אחד מכל צד, והם מחוברים על ידי זוג חוטים. האחד אחראי על השליחה והשני על קבלת נתונים.
שלב 5: מתח קווי שידור (זיהוי דיפרנציאלי)
ב- CAN, הסיביט הדומיננטי הוא אפס.
זיהוי קו דיפרנציאלי מפחית את רגישות הרעשים (EFI)
שלב 6: פורמט תקנים ומסגרות מסוג CAN
פורמט סטנדרטי עם מזהה 11 סיביות
שלב 7: פורמט תקנים ומסגרות מסוג CAN
פורמט מורחב עם מזהה 29 סיביות
שלב 8: פורמט תקנים ומסגרות מסוג CAN
חשוב לציין כי פרוטוקול כבר מחשב את ה- CRC ושולח אותות ACK ו- EOF, שהם דברים שכבר נעשים על ידי פרוטוקול CAN. זה מבטיח שההודעה שנשלחה לא תגיע בצורה הלא נכונה. הסיבה לכך היא שאם זה נותן בעיה ב- CRC (בדיקה מחזורית מיותרת או בדיקת יתירות), שהיא זהה לספרת בדיקת מידע, היא תזוהה על ידי ה- CRC.
שלב 9: ארבעה סוגי מסגרות (מסגרות)
חשוב לציין כי פרוטוקול כבר מחשב את ה- CRC ושולח אותות ACK ו- EOF, שהם דברים שכבר נעשים על ידי פרוטוקול CAN. זה מבטיח שההודעה שנשלחה לא תגיע בצורה הלא נכונה. הסיבה לכך היא שאם היא נותנת בעיה ב- CRC (בדיקה מחזורית מיותרת או בדיקת יתירות), שהיא זהה לספרת בדיקת מידע, היא תזוהה על ידי ה- CRC.
ארבעה סוגים של מסגרות (מסגרות)
שידור וקליטה של נתונים ב- CAN מבוססים על ארבעה סוגים של מסגרות. סוגי המסגרות יזוהו על ידי וריאציות בסיבי הבקרה או אפילו על ידי שינויים בכללי כתיבת המסגרת לכל מקרה.
- מסגרת נתונים: מכיל את נתוני המשדר עבור המקלט (ים)
- מסגרת מרוחקת: זוהי בקשה לנתונים מאחד הצמתים
- מסגרת שגיאה: זוהי מסגרת שנשלחת על ידי כל אחד מהצמתים בעת זיהוי שגיאה באוטובוס וניתן לזהות אותה על ידי כל הצמתים
- מסגרת עומס יתר: משמשת לעיכוב התנועה באוטובוס עקב עומס נתונים או עיכוב בצומת אחד או יותר.
שלב 10: מעגל - פרטי חיבורים
שלב 11: מעגל - לכידת נתונים
אורכי גל המתקבלים עבור CAN סטנדרטי עם מזהה 11 סיביות
שלב 12: מעגל - לכידת נתונים
אורכי גל המתקבלים ל- CAN מורחב עם מזהה של 29 סיביות
שלב 13: מעגל - לכידת נתונים
נתונים שהושגו על ידי מנתח הלוגיקה
שלב 14: ספריית Arduino - CAN
אני מציג כאן את שתי האפשרויות שבהן תוכל להתקין את ספריית מנהלי ההתקן של CAN
מנהל ספריית Arduino IDE
שלב 15: Github
github.com/sandeepmistry/arduino-CAN
שלב 16: קוד מקור המשדר
קוד מקור: כולל והתקנה ()
אנו נכלול את ספריית CAN, נתחיל את סדרת האיתור לאיתור באגים והפעל את אוטובוס CAN במהירות של 500 kbps.
#include // כלול הגדרת בטל של biblioteca () {Serial.begin (9600); // inicia ניפוי סדרתי באף בזמן (! סדרתי); Serial.println ("משדר יכול"); // Inicia o barramento יכול ל 500 kbps אם (! CAN.begin (500E3)) {Serial.println ("Falha ao iniciar o controlador CAN"); // caso não seja possível iniciariar o controlador while (1); }}
שלב 17: קוד מקור: לולאה (), שליחת חבילת CAN 2.0 רגילה
באמצעות CAN 2.0 הסטנדרטי, אנו שולחים חבילה. מזהה 11 הסיביות מזהה את ההודעה. בלוק הנתונים חייב להכיל עד 8 בתים. הוא מתחיל את המנה עם מזהה 18 בהקסדצימלי. הוא אורז 5 בתים וסוגר את הפונקציה.
void loop () {// Usando o CAN 2.0 padrão // Envia um pacote: o id tem 11 bits e identifiera a mensagem (prioridade, evento) // o bloco de dados deve possuir até 8 bytes Serial.println ("פקוט Enviando … "); CAN.beginPacket (0x12); // id 18 em CAN.write הקסדצימלי ('h'); // 1º בתים CAN.write ('e'); // 2º בתים CAN.write ('l'); // 3º בתים CAN.write ('l'); // 4º בתים CAN.write ('o'); // 5º בתים CAN.endPacket (); // encerra o pacote para envio Serial.println ("Enviado."); עיכוב (1000);
שלב 18: קוד מקור: לולאה (), שליחת חבילת CAN 2.0 מורחבת
בשלב זה, המזהה כולל 29 סיביות. הוא מתחיל לשלוח 24 סיביות מזהה, ושוב חבילות 5 בתים ויוצאים.
// Usando CAN 2.0 Estendido // Envia um pacote: o id tem 29 bits e identifiera a mensagem (prioridade, evento) // o bloco de dados deve possuir até 8 bytes Serial.println ("Enviando pacote estendido …"); CAN.beginExtendedPacket (0xabcdef); // id 11259375 עשרוני (abcdef em hexa) = 24 סיביות preenchidos até aqui CAN.write ('w'); // 1º בתים CAN.write ('o'); // 2º בתים CAN.write ('r'); // 3º בתים CAN.write ('l'); // 4º בתים CAN.write ('d'); // 5º בתים CAN.endPacket (); // encerra o pacote para envio Serial.println ("Enviado."); עיכוב (1000); }
שלב 19: קוד המקור של המקלט
קוד מקור: כולל והתקנה ()
שוב, נכלול את ספריית CAN, נתחיל את סדרת האיתור לניפוי באגים והפעלת אוטובוס CAN במהירות של 500 kbps. אם מתרחשת שגיאה, שגיאה זו תודפס.
#include // כלול הגדרת בטל של biblioteca () {Serial.begin (9600); // inicia ניפוי סדרתי באף בזמן (! סדרתי); Serial.println ("קולטן יכול"); // Inicia o barramento יכול ל 500 kbps אם (! CAN.begin (500E3)) {Serial.println ("Falha ao iniciar o controlador CAN"); // caso não seja possível iniciariar o controlador while (1); }}
שלב 20: קוד מקור: לולאה (), קבלת החבילה ובדיקת הפורמט
ניסינו לבדוק את גודל החבילה שהתקבלה. שיטת CAN.parsePacket () מראה לי את גודל החבילה הזו. אז אם יש לנו חבילה, נבדוק אם היא מורחבת או לא.
לולאת void () {// Tenta verificar o tamanho do acote recebido int packetSize = CAN.parsePacket (); if (packetSize) {// Se temos um pacote Serial.println ("פקוט Recebido."); if (CAN.packetExtended ()) {// verifica se o pacote é estendido Serial.println ("Estendido"); }
שלב 21: מקור: לולאה (), בודק אם מדובר בחבילה מרוחקת
כאן אנו בודקים אם המנה שהתקבלה היא בקשת נתונים. במקרה זה, אין נתונים.
if (CAN.packetRtr ()) {// Verifica se o pacote é um pacote remoto (Requisição de dados), neste caso não há dados Serial.print ("RTR"); }
שלב 22: קוד מקור: לולאה (), אורך הנתונים המבוקש או התקבל
אם המנה שהתקבלה היא בקשה, אנו מציינים את האורך המבוקש. לאחר מכן אנו מקבלים את קוד אורך הנתונים (DLC), המציין את אורך הנתונים. לבסוף, אנו מציינים את האורך שהתקבל.
Serial.print ("מזהה Pacote com 0x"); Serial.print (CAN.packetId (), HEX); if (CAN.packetRtr ()) {// se o pacote recebido é de requisição, indicamos o comprimento solicitado Serial.print ("e requsitou o comprimento"); Serial.println (CAN.packetDlc ()); // obtem o DLC (Code Length Data, que indica o comprimento dos dados)} else {Serial.print ("e comprimento"); // aqui somente indica o comprimento recebido Serial.println (packetSize);
שלב 23: קוד מקור: לולאה (), אם מתקבלים נתונים, הם מודפסים
אנו מדפיסים (על הצג הטורי) את הנתונים, אך רק אם המנה שהתקבלה אינה בקשה.
// Imprime os dados somente se o pacote recebido não foi de requisição while (CAN.available ()) {Serial.print ((char) CAN.read ()); } Serial.println (); } Serial.println (); }}
שלב 24: הורד את הקבצים
INO
מוּמלָץ:
אנחנו קבוצת הדרכה 6 UQD10801 (Robocon1) סטודנטים מאוניברסיטה Tun Hussein Onn Malaysia (UTHM): לוח מקשים 4x4 ו- LCD Arduino: 3 שלבים
אנחנו קבוצת הדרכה 6 UQD10801 (Robocon1) סטודנטים מאוניברסיטה Tun Hussein Onn Malaysia (UTHM): לוח מקשים 4x4 ו- LCD Arduino: לוח מקשים הם דרך מצוינת לאפשר למשתמשים לתקשר עם הפרויקט שלך. אתה יכול להשתמש בהם כדי לנווט בתפריטים, להזין סיסמאות ולשלוט במשחקים ורובוטים. במדריך זה אראה לך כיצד להתקין לוח מקשים בארדואינו. ראשית אסביר כיצד הארדו
מפענח פרוטוקול שלט רחוק RC5 ללא ספרייה: 4 שלבים
מפענח פרוטוקול שלט רחוק RC5 ללא ספרייה: לפני פענוח rc5 תחילה אנו דנים בפקודה rc5 ומהו מבנהה. אז בעצם הפקודה rc5 המשמשת בשלט רחוק המשמשים לטלוויזיות, נגני תקליטורים, d2h, מערכות קולנוע ביתיות וכו '. יש לה 13 או 14 סיביות מסודרות ב
שעון אינטרנט: הצג תאריך ושעה עם OLED באמצעות ESP8266 NodeMCU עם פרוטוקול NTP: 6 שלבים
שעון אינטרנט: הצג תאריך ושעה באמצעות OLED באמצעות ESP8266 NodeMCU עם פרוטוקול NTP: היי חברים במדריך זה נבנה שעון אינטרנט שיקבל זמן מהאינטרנט ולכן הפרויקט הזה לא יצטרך שום RTC להפעלה, הוא יצטרך רק חיבור לאינטרנט עובד ולפרויקט זה אתה צריך esp8266 שיהיה לו
נייקי LED Swoosh! זהו תפאורה נהדרת לחדר. זהו הפרויקט היחיד שכולם יכולים לחזור עליו: 5 שלבים
נייקי LED Swoosh! זהו תפאורה נהדרת לחדר. זהו הפרויקט היחיד שכולם יכולים לחזור עליו.: כלים -קלטת מדידה-מברג -מנסר מגהץ-מסור-מקדחה-נייר זכוכית אספקה-רצועת LED (RGB) בקר של 5 מ 'LED-אספקת חשמל 12V 4A-עץ 50-50-1500 2x עץ 20-20-3000 2x דיקט 500-1000mm ברגים (45mm) 150x ברגים (35mm) 30x-scr
ילדים יכולים להכין גם מראות אינסוף !: 8 שלבים (עם תמונות)
גם ילדים יכולים ליצור מראות אינסוף !: Dream AcadeME הוא ארגון חינוך חלופי ללא מטרות רווח. הפילוסופיה שלנו מתמקדת בלמידה ממוקדת ילדים הקשורה ל- STEAM (מדע, טכנולוגיה, הנדסה, אמנות ומתמטיקה), טבע וחברתיות-קונסטרוקטיביזם, גישה שבה ילדים