İçindekiler:

CAN Protokolü - Evet Yapabiliriz!: 24 Adım
CAN Protokolü - Evet Yapabiliriz!: 24 Adım

Video: CAN Protokolü - Evet Yapabiliriz!: 24 Adım

Video: CAN Protokolü - Evet Yapabiliriz!: 24 Adım
Video: 24 SAAT DENİZDE KALMAK! (YILAN GİRDİ) @siladundar1 2024, Temmuz
Anonim
Image
Image
Kullanılan Kaynaklar
Kullanılan Kaynaklar

Son zamanlarda YouTube kanalımın takipçileri tarafından önerilen bir diğer konu da bugün üzerinde duracağımız CAN (Controller Area Network) protokolüydü. CAN'ın eşzamanlı bir seri iletişim protokolü olduğunu açıklamak önemlidir. Bu, ağa bağlı modüller arasındaki senkronizasyonun, bus'a gönderilen her mesajın başlangıcına göre gerçekleştirildiği anlamına gelir. CAN protokolünün temel kavramlarını tanıtarak başlayacağız ve iki ESP32 ile basit bir montaj gerçekleştireceğiz.

Devremizde ESP'ler hem Master hem de Slave olarak görev yapabilir. Aynı anda birden fazla mikro denetleyiciye sahip olabilirsiniz, çünkü CAN her şeyin çarpışmasıyla otomatik olarak ilgilenir. Bu projenin kaynak kodu süper basittir. Bunu kontrol et!

Adım 1: Kullanılan Kaynaklar

  • ESP WROOM 32 NodeMcu'nun iki modülü
  • WaveShare'den iki CAN alıcı-verici
  • Bağlantılar için jumperlar
  • Yakalama için mantıksal analizör
  • ESP'ler ve analizör için üç USB kablosu
  • Otobüs olarak hizmet etmek için 10 metre bükümlü çift

Adım 2: CAN (Kontrolör Alan Ağı)

CAN (Kontrolör Alan Ağı)
CAN (Kontrolör Alan Ağı)
  • 1980'lerde Robert Bosch GmbH tarafından otomotiv endüstrisine hizmet etmek için geliştirilmiştir.
  • Sağlamlığı ve uygulama esnekliği nedeniyle yıllar içinde yaygınlaşmıştır. Askeri teçhizat, tarım makineleri, endüstriyel ve bina otomasyonu, robotik ve tıbbi teçhizat ile kullanılmaktadır.

3. Adım: CAN - Özellikler

CAN - Özellikler
CAN - Özellikler
CAN - Özellikler
CAN - Özellikler
  • İki telli seri iletişim
  • Parçalanma olasılığı ile çerçeve başına maksimum 8 bayt yararlı bilgi
  • Düğüme değil mesaja yönlendirilen adres
  • Mesajlara öncelik atama ve "beklemede" mesajların iletilmesi
  • Hataları tespit etme ve sinyal verme konusunda etkili yetenek
  • Çoklu yönetici özelliği (tüm düğümler veri yolu erişimi talep edebilir)
  • Çok noktaya yayın özelliği (aynı anda birden fazla alıcı için bir mesaj)
  • 40 metrelik bir bus üzerinde 1Mbit/s'ye kadar transfer hızları (bara uzunluğunun artması ile hızın düşmesi)
  • Yapılandırma esnekliği ve yeni düğümlerin tanıtılması (veri yolu başına 120 düğüme kadar)
  • Standart donanım, düşük maliyet ve iyi kullanılabilirlik
  • Düzenlenmiş protokol: ISO 11898

Adım 4: Kullanılan Devre

Kullanılan Devre
Kullanılan Devre

Burada, Alıcı-Vericilerim var. Her iki tarafta birer tane var ve bir çift tel ile bağlılar. Biri veri göndermekten, diğeri veri almaktan sorumludur.

Adım 5: İletim Hattı Gerilimleri (Diferansiyel Tespiti)

İletim Hattı Gerilimleri (Diferansiyel Algılama)
İletim Hattı Gerilimleri (Diferansiyel Algılama)

CAN'da baskın bit Sıfır'dır.

Hat Diferansiyel Algılama, Gürültü Hassasiyetini Azaltır (EFI)

Adım 6: CAN Standartları ve Çerçeve Formatı

CAN Standartları ve Çerçeve Formatı
CAN Standartları ve Çerçeve Formatı

11 bit tanımlayıcılı standart biçim

Adım 7: CAN Standartları ve Çerçeve Formatı

CAN Standartları ve Çerçeve Formatı
CAN Standartları ve Çerçeve Formatı

29 bit tanımlayıcı ile genişletilmiş format

Adım 8: CAN Standartları ve Çerçeve Formatı

Bir protokolün CRC'yi zaten hesapladığını ve ACK ve EOF sinyallerini gönderdiğini belirtmek önemlidir, bunlar CAN protokolü tarafından zaten yapılmıştır. Bu, gönderilen mesajın yanlış yoldan gelmemesini garanti eder. Bunun nedeni, bir bilgi kontrol basamağı ile aynı olan CRC'de (Redundant Cyclic Check veya Redundancy Check) bir sorun verirse, CRC tarafından tanımlanacaktır.

Adım 9: Dört Çerçeve Türü (çerçeveler)

Dört Çeşit Çerçeve (çerçeve)
Dört Çeşit Çerçeve (çerçeve)

Bir protokolün zaten CRC'yi hesapladığını ve ACK ve EOF sinyallerini gönderdiğini, bunlar CAN protokolü tarafından zaten yapılmış şeyler olduğunu not etmek önemlidir. Bu, gönderilen mesajın yanlış yoldan gelmemesini garanti eder. Bunun nedeni, bir bilgi kontrol basamağı ile aynı olan CRC'de (Redundant Cyclic Check veya Redundancy Check) bir sorun verirse, CRC tarafından tanımlanacaktır.

Dört tip çerçeve (çerçeve)

CAN'de veri iletimi ve alımı dört tip çerçeveye dayanmaktadır. Çerçeve türleri, kontrol bitlerindeki varyasyonlarla veya hatta her durum için çerçeve yazma kurallarındaki değişikliklerle tanımlanacaktır.

  • Veri Çerçevesi: Alıcı(lar) için verici verilerini içerir.
  • Uzak Çerçeve: Bu, düğümlerden birinden gelen veri talebidir.
  • Hata Çerçevesi: Bus'ta bir hata tanımlanırken herhangi bir düğüm tarafından gönderilen ve tüm düğümler tarafından algılanabilen bir çerçevedir.
  • Aşırı Yük Çerçevesi: Bir veya daha fazla düğümde aşırı veri yüklenmesi veya gecikme nedeniyle veriyolu üzerindeki trafiği geciktirmeye yarar.

Adım 10: Devre - Bağlantıların Detayları

Devre - Bağlantıların Detayları
Devre - Bağlantıların Detayları

Adım 11: Devre - Veri Yakalama

Devre - Veri Yakalama
Devre - Veri Yakalama

11 bit ID'li standart CAN için elde edilen dalga boyları

Adım 12: Devre - Veri Yakalama

Devre - Veri Yakalama
Devre - Veri Yakalama

29 bit ID ile genişletilmiş CAN için elde edilen dalga boyları

Adım 13: Devre - Veri Yakalama

Devre - Veri Yakalama
Devre - Veri Yakalama

Mantık analizörü tarafından elde edilen veriler

Adım 14: Arduino Kütüphanesi - CAN

Arduino Kütüphanesi - CAN
Arduino Kütüphanesi - CAN

Burada CAN Sürücü Kitaplığını kurabileceğiniz iki seçeneği gösteriyorum

Arduino IDE Kütüphane Yöneticisi

Adım 15: Github

Github
Github

github.com/sandeepmistry/arduino-CAN

Adım 16: Verici Kaynak Kodu

Kaynak Kodu: İçerir ve Kurulum ()

CAN kitaplığını ekleyeceğiz, hata ayıklama için seriyi başlatacağız ve CAN veri yolunu 500 kbps'de başlatacağız.

#include // Biblioteca CAN void setup() { Serial.begin(9600); //inicia a serial para debug while (!Serial); Serial.println("Transmisor CAN"); // CAN a 500 kbps if (!CAN.begin(500E3)) { Serial.println("Falha ao iniciar o controlador CAN"); //caso não seja possível iniciar o controlador while (1); } }

Adım 17: Kaynak Kodu: Döngü (), Standart CAN 2.0 Paketi Gönderme

Standart CAN 2.0'ı kullanarak bir paket gönderiyoruz. 11 bitlik kimlik mesajı tanımlar. Veri bloğu en fazla 8 bayta sahip olmalıdır. Paketi ID 18 ile onaltılı olarak başlatır. 5 bayt paketler ve işlevi kapatır.

void loop() { // CAN 2.0 padrão'yu kullanma //Envia um paote: o id tem 11 bit ve bir mensagem tanımlaması (öncelikli, evento) //o 8 baytlık bir bloco de dados deve possuir'i Serial.println("Enviando paketi …"); CAN.beginPacket(0x12); //id 18 em onaltılık CAN.write('h'); //1º bayt CAN.write('e'); // bayt CAN.write('l'); ///3º bayt CAN.write('l'); ///4º bayt CAN.write('o'); ///5º bayt CAN.endPacket(); //encerra o pacote para envio Serial.println("Enviado."); gecikme(1000);

Adım 18: Kaynak Kodu: Döngü (), Genişletilmiş CAN 2.0 Paketi Gönderme

Bu adımda, kimliğin 29 biti vardır. 24 bit kimlik göndermeye başlar ve bir kez daha 5 bayt paketler ve çıkar.

//Usando CAN 2.0 Estendido //Envia um pacote: o id tem 29 bit e identifica a mensagem (öncelikli, evento) //o 8 byte'lık bir bloco de dados deve possuir Serial.println("Enviando pacote estendido…"); CAN.beginExtendedPacket(0xabcdef); //id 11259375 ondalık sayı (abcdef em hexa) = 24 bit preenchidos até aqui CAN.write('w'); //1º bayt CAN.write('o'); // bayt CAN.write('r'); ///3º bayt CAN.write('l'); ///4º bayt CAN.write('d'); ///5º bayt CAN.endPacket(); //encerra o pacote para envio Serial.println("Enviado."); gecikme(1000); }

Adım 19: Alıcı Kaynak Kodu

Kaynak Kodu: İçerir ve Kurulum ()

Yine, CAN kütüphanesini dahil edeceğiz, seriyi hata ayıklamak için başlatacağız ve CAN veri yolunu 500 kbps'de başlatacağız. Bir hata oluşursa, bu hata yazdırılacaktır.

#include // Biblioteca CAN void setup() { Serial.begin(9600); //inicia a serial para debug while (!Serial); Serial.println("Alıcı CAN"); // CAN a 500 kbps if (!CAN.begin(500E3)) { Serial.println("Falha ao iniciar o controlador CAN"); //caso não seja possível iniciar o controlador while (1); } }

Adım 20: Kaynak Kodu: Döngü (), Paketi Alma ve Formatı Kontrol Etme

Alınan paketin boyutunu kontrol etmeye çalıştık. CAN.parsePacket() yöntemi bana bu paketin boyutunu gösteriyor. Yani bir paketimiz varsa, uzatılıp uzatılmadığını kontrol edeceğiz.

void loop() { // Tenta doğrulama veya tamanho do acote recebido int packageSize = CAN.parsePacket(); if (packetSize) { // Se temos um pacote Serial.println("Recebido paketi. "); if (CAN.packetExtended()) { //verifica se o pacote é estendido Serial.println("Estendido"); }

Adım 21: Kaynak: Döngü (), Uzak Bir Paket Olup Olmadığını Kontrol Eder

Burada, alınan paketin bir veri talebi olup olmadığını kontrol ediyoruz. Bu durumda, veri yoktur.

if (CAN.packetRtr()) { //Verifica se o pacote é um pacote remoto (Requisição de dados), iç içe geçmiş durumda Serial.print("RTR"); }

Adım 22: Kaynak Kodu: Döngü (), Talep Edilen veya Alınan Veri Uzunluğu

Alınan paket bir istek ise talep edilen uzunluğu belirtiriz. Ardından, verilerin uzunluğunu belirten Veri Uzunluğu Kodunu (DLC) elde ederiz. Son olarak, alınan uzunluğu belirtiriz.

Serial.print("Pacote com id 0x"); Serial.print(CAN.packetId(), HEX); if (CAN.packetRtr()) { //se o pacote recebido é de requisição, göstergeler o comprimento soicitado Serial.print(" e requsitou o comprimento "); Serial.println(CAN.packetDlc()); //obtem o DLC (Veri Uzunluğu Kodu, que indica o comprimento dos dados) } else { Serial.print(" e comprimento "); // bazı göstergeler ve tamamlayıcı bilgiler Serial.println(packetSize);

Adım 23: Kaynak Kodu: Döngü (), Veri Alınırsa Yazdırılır

Verileri (seri monitörde) yazdırırız, ancak yalnızca alınan paket bir istek değilse.

//Imprime os dados bazı durumlarda o pacote recebido não foi de requisição while (CAN.available()) { Serial.print((char)CAN.read()); } Seri.println(); } Seri.println(); } }

Adım 24: Dosyaları İndirin

PDF

BEN HAYIR

Önerilen: