Mündəricat:

CAN Protokolu - Bəli, edə bilərik !: 24 addım
CAN Protokolu - Bəli, edə bilərik !: 24 addım

Video: CAN Protokolu - Bəli, edə bilərik !: 24 addım

Video: CAN Protokolu - Bəli, edə bilərik !: 24 addım
Video: ЛЮБОВЬ С ДОСТАВКОЙ НА ДОМ (2020). Романтическая комедия. Хит 2024, Iyul
Anonim
Image
Image
İstifadə olunan mənbələr
İstifadə olunan mənbələr

Bu yaxınlarda YouTube kanalımın izləyiciləri tərəfindən təklif olunan başqa bir mövzu bu gün diqqətimizi çəkəcəyimiz CAN (Controller Area Network) protokolu idi. CAN -ın eyni vaxtda serial ünsiyyət protokolu olduğunu izah etmək vacibdir. Bu, şəbəkəyə qoşulan modullar arasında sinxronizmin avtobusa göndərilən hər bir mesajın başlanğıcı ilə əlaqəli olduğu anlamına gəlir. CAN protokolunun əsas anlayışlarını təqdim edərək başlayacağıq və iki ESP32 ilə sadə bir montaj edəcəyik.

Dövrümüzdə ESP -lər həm Usta, həm də Kölə kimi çıxış edə bilərlər. CAN hər şeyin avtomatik toqquşması ilə məşğul olduğu üçün eyni anda bir neçə mikrokontrolör ötürə bilərsiniz. Bu layihənin mənbə kodu çox sadədir. Onu yoxlamaq!

Addım 1: İstifadə olunan mənbələr

  • ESP WROOM 32 NodeMcu -nun iki modulu
  • WaveShare -dən iki CAN ötürücü
  • Əlaqələr üçün tullananlar
  • Tutmaq üçün məntiqi analizator
  • ESP və analizator üçün üç USB kabeli
  • 10 metr bükülmüş cütlük avtobus olaraq xidmət edəcək

Addım 2: CAN (Controller Area Network)

CAN (Nəzarətçi Bölgəsi Şəbəkəsi)
CAN (Nəzarətçi Bölgəsi Şəbəkəsi)
  • 1980 -ci illərdə Robert Bosch GmbH tərəfindən avtomobil sənayesinə xidmət etmək üçün hazırlanmışdır.
  • İllər keçdikcə möhkəmliyi və tətbiqin elastikliyi səbəbindən geniş yayılmışdır. Hərbi texnika, kənd təsərrüfatı texnikası, sənaye və bina avtomatlaşdırılması, robot texnikası və tibbi avadanlıqlarla birlikdə istifadə olunur.

Addım 3: CAN - Xüsusiyyətlər

CAN - Xüsusiyyətlər
CAN - Xüsusiyyətlər
CAN - Xüsusiyyətlər
CAN - Xüsusiyyətlər
  • İki telli serial rabitə
  • Parçalanma ilə birlikdə hər çərçivədə maksimum 8 bayt faydalı məlumat
  • Ünvana deyil, mesaja yönəldilmiş ünvan
  • Mesajlara prioritet verilməsi və "gözləmə" mesajlarının ötürülməsi
  • Səhvləri aşkar etmək və siqnal vermək üçün təsirli qabiliyyət
  • Çox master qabiliyyəti (bütün qovşaqlar avtobus girişi tələb edə bilər)
  • Çox yayım qabiliyyəti (eyni anda birdən çox alıcı üçün bir mesaj)
  • 40 metrlik bir avtobusda 1Mbit / s-ə qədər ötürmə sürətləri (baranın uzunluğunun artması ilə dərəcənin azaldılması)
  • Konfiqurasiya elastikliyi və yeni qovşaqların tətbiqi (hər avtobusda 120 düyünə qədər)
  • Standart avadanlıq, aşağı qiymət və yaxşı mövcudluq
  • Tənzimlənən protokol: ISO 11898

Addım 4: Dövrə istifadə olunur

İstifadə olunan dövrə
İstifadə olunan dövrə

Budur, vericilərim var. Hər tərəfdə bir ədəd var və bir cüt tel ilə bağlanırlar. Biri məlumat göndərməkdən, digəri isə məlumat almaqdan məsuldur.

Addım 5: Transmissiya Xətti Gərginliyi (Diferensial Algılama)

Transmissiya Xətti Gərginliyi (Diferensial Algılama)
Transmissiya Xətti Gərginliyi (Diferensial Algılama)

CAN -da dominant bit sıfırdır.

Xətt Diferensial Algılama Səs Həssaslığını (EFI) azaldır

Addım 6: CAN Standartları və Çərçivə Formatı

CAN Standartları və Çərçivə Formatı
CAN Standartları və Çərçivə Formatı

11-bit identifikatoru olan standart format

Addım 7: CAN Standartları və Çərçivə Formatı

CAN Standartları və Çərçivə Formatı
CAN Standartları və Çərçivə Formatı

29-bit identifikatoru ilə genişləndirilmiş format

Addım 8: CAN Standartları və Çərçivə Formatı

Qeyd etmək vacibdir ki, bir protokol artıq CRC -ni hesablayır və ACK və EOF siqnallarını göndərir, bunlar artıq CAN protokolu ilə edilir. Bu, göndərilən mesajın yanlış şəkildə gəlməyəcəyinə zəmanət verir. Bunun səbəbi, bir məlumat yoxlama rəqəmi ilə eyni olan CRC -də (Ehtiyatlı Dövriyyəli Çek və ya İşsizlik Redaktəsi) bir problem verərsə, CRC tərəfindən təyin ediləcəkdir.

Addım 9: Dörd növ Çərçivə (çərçivə)

Dörd növ Çərçivə (çərçivə)
Dörd növ Çərçivə (çərçivə)

Qeyd etmək vacibdir ki, bir protokol artıq CRC -ni hesablayır və ACK və EOF siqnallarını göndərir, bunlar artıq CAN protokolu ilə edilir. Bu, göndərilən mesajın yanlış şəkildə gəlməyəcəyinə zəmanət verir. Bunun səbəbi, bir məlumat yoxlama rəqəmi ilə eyni olan CRC -də (Ehtiyatlı Dövriyyəli Çek və ya İşsizlik Redaktəsi) bir problem verərsə, CRC tərəfindən təyin ediləcəkdir.

Dörd növ çərçivə (çərçivə)

CAN -da məlumatların ötürülməsi və qəbulu dörd növ çərçivəyə əsaslanır. Çərçivə növləri, nəzarət bitlərindəki dəyişikliklər və ya hər bir hal üçün çərçivə yazma qaydalarındakı dəyişikliklərlə müəyyən ediləcək.

  • Məlumat Çərçivəsi: Alıcı (lar) üçün ötürücü məlumatları ehtiva edir
  • Uzaqdan Çərçivə: Bu qovşaqlardan birindən məlumat istənilməsidir
  • Hata Çərçivəsi: Avtobusdakı bir səhv müəyyən edildikdə hər hansı bir qovşaq tərəfindən göndərilən və bütün qovşaqlar tərəfindən aşkar edilə bilən bir çərçivədir.
  • Aşırı Yükləmə Çərçivəsi: Bir və ya daha çox qovşaqda məlumatların həddən artıq yüklənməsi və ya gecikməsi səbəbindən avtobusdakı trafikin gecikməsinə xidmət edir.

Addım 10: Dövrə - Əlaqələrin təfərrüatları

Dövrə - Əlaqələrin təfərrüatları
Dövrə - Əlaqələrin təfərrüatları

Addım 11: Dövrə - Məlumat Capture

Dövrə - Məlumat Capture
Dövrə - Məlumat Capture

11 bitlik ID ilə standart CAN üçün əldə edilən dalğa uzunluqları

Addım 12: Dövrə - Məlumat Capture

Dövrə - Məlumat Capture
Dövrə - Məlumat Capture

29 bitlik ID ilə uzadılmış CAN üçün əldə edilən dalğa uzunluqları

Addım 13: Dövrə - Məlumat Capture

Dövrə - Məlumat Capture
Dövrə - Məlumat Capture

Məntiq analizatoru tərəfindən əldə edilən məlumatlar

Addım 14: Arduino Kitabxanası - CAN

Arduino Kitabxanası - CAN
Arduino Kitabxanası - CAN

Burada CAN Sürücü Kitabxanasını yükləyə biləcəyiniz iki variantı göstərirəm

Arduino IDE Kitabxana Meneceri

Addım 15: Github

Github
Github

github.com/sandeepmistry/arduino-CAN

Addım 16: Vericinin Mənbə Kodu

Mənbə Kodu: Daxildir və Quraşdırma ()

CAN kitabxanasını daxil edəcəyik, ayıklama üçün seriala başlayacağıq və 500 kbps -də CAN avtobusunu işə salacağıq.

#include // Includi a biblioteca CAN void setup () {Serial.begin (9600); // inicia bir serial para ayıklama zamanı (! Serial); Serial.println ("Transmissor CAN"); // Incria o barramento CAN 500 kbps əgər (! CAN.begin (500E3)) {Serial.println ("Falha ao iniciar o controlador CAN"); // (1); }}

Addım 17: Mənbə Kodu: Loop (), Standart CAN 2.0 Paketi Göndərmək

Standart CAN 2.0 istifadə edərək bir paket göndəririk. 11 bitlik ID mesajı müəyyən edir. Məlumat bloku 8 bayta qədər olmalıdır. ID 18 ilə paketi onaltılı olaraq başlayır. 5 bayt yığır və funksiyanı bağlayır.

void loop () {// Usando o CAN 2.0 padrão // Envia um pacote: o vaxt 11 bits e identifica a mensagem (prioridade, evento) // o bloco de dados deve possuir até 8 bayt Serial.println ("Enviando pacote … "); CAN.beginPacket (0x12); // id 18 em onaltılıq CAN.write ('h'); // 1º bayt CAN.write ('e'); // 2º bayt CAN.write ('l'); // 3º bayt CAN.write ('l'); // 4º bayt CAN.write ('o'); // 5º bayt CAN.endPacket (); // Serial.println ("Enviado.") üçün şifrələr daxil edin; gecikmə (1000);

Addım 18: Mənbə Kodu: Loop (), Genişləndirilmiş CAN 2.0 Paketi Göndərmək

Bu addımda, ID 29 bitə malikdir. 24 bit ID göndərməyə başlayır və bir daha 5 bayt yığır və çıxır.

// Usando CAN 2.0 Estendido // Envia um pacote: o, 29 bit və ya əvvəlcədən müəyyən edilmiş bir hadisədir (əvvəlcədən, bir hadisə) // 8 bayt Serial.println ("Enviando pacote estendido…"); CAN.beginExtendedPacket (0xabcdef); // id 11259375 decimal (abcdef em hexa) = 24 bit əvvəl CAN.write ('w'); // 1º bayt CAN.write ('o'); // 2º bayt CAN.write ('r'); // 3º bayt CAN.write ('l'); // 4º bayt CAN.write ('d'); // 5º bayt CAN.endPacket (); // Serial.println ("Enviado.") üçün şifrələr daxil edin; gecikmə (1000); }

Addım 19: Alıcı Mənbə Kodu

Mənbə Kodu: Daxildir və Quraşdırma ()

Yenə CAN kitabxanasını daxil edəcəyik, serialı ayıklamağa başlayacağıq və 500 kbps -də CAN avtobusunu işə salacağıq. Səhv baş verərsə, bu səhv çap ediləcək.

#include // Includi a biblioteca CAN void setup () {Serial.begin (9600); // inicia bir serial para ayıklama zamanı (! Serial); Serial.println ("Reseptor CAN"); // Incria o barramento CAN 500 kbps əgər (! CAN.begin (500E3)) {Serial.println ("Falha ao iniciar o controlador CAN"); // (1); }}

Addım 20: Mənbə Kodu: Loop (), Paketi Alın və Formatı Yoxlayın

Alınan paketin ölçüsünü yoxlamağa çalışdıq. CAN.parsePacket () metodu mənə bu paketin ölçüsünü göstərir. Bir paketimiz varsa, uzadılıb -uzadılmayacağını yoxlayacağıq.

void loop () {// Təklif olunan sənədlər paketiSize = CAN.parsePacket (); if (packetSize) {// İstifadə müddəti Serial.println ("Recebido pacote."); əgər (CAN.packetExtended ()) {// verifica se o pacote a estendido Serial.println ("Estendido"); }

Addım 21: Mənbə: Loop (), Uzaqdan Paket olub olmadığını yoxlayır

Burada alınan paketin məlumat sorğusu olub olmadığını yoxlayırıq. Bu vəziyyətdə heç bir məlumat yoxdur.

əgər (CAN.packetRtr ()) {// Verilənlər pacote remoto (İstifadəçi tələbləri), yoxsa Serial.print ("RTR"); }

Addım 22: Mənbə Kodu: Loop (), İstənilən və ya Alınan Məlumat Uzunluğu

Alınan paket bir istəkdirsə, tələb olunan uzunluğu göstəririk. Daha sonra, məlumatların uzunluğunu göstərən Data Length Code (DLC) əldə edirik. Nəhayət, alınan uzunluğu göstəririk.

Serial.print ("Pacote com id 0x"); Serial.print (CAN.packetId (), HEX); if (CAN.packetRtr ()) {// se o pacote recebido é de recuisidão, indialos or complico soicitado Serial.print ("e requsitou o compimento"); Serial.println (CAN.packetDlc ()); // DLC (Data Length Code, que indica o compimento dos dados)} başqa {Serial.print ("e compimento"); // göstərişlər Serial.println (packetSize);

Addım 23: Mənbə Kodu: Loop (), Məlumat Alınırsa Sonra Yazdırır

Verilənləri (serial monitorda) çap edirik, ancaq alınan paket istək deyilsə.

// İmtina etmək üçün (CAN.available ()) {Serial.print ((char) CAN.read ()); } Serial.println (); } Serial.println (); }}

Addım 24: Dosyaları Yükləyin

PDF

MƏN YOX

Tövsiyə: