Anlama olabilir Bus Protokolü ve MCP2515'i Arduino ile Kullanma

Understanding CAN Bus Protocol and Using the MCP2515 with Arduino

Otomotiv ve endüstriyel uygulamalar alanında, birden fazla mikrodenetleyici arasındaki güvenilir iletişim çok önemlidir. Denetleyici Alan Ağı (CAN) veri yolu protokolü bu tür ihtiyaçlar için sağlam bir çözüm olarak ortaya çıkmıştır. Bu blog yazısı, CAN BUS protokolünün temellerini araştırır ve MCP2515 CAN denetleyicisinin bir Arduino ile nasıl entegre edileceğini gösterir ve projelerinizde sorunsuz iletişim sağlar.

Otobüs protokolü nedir?

Denetleyici Alan Ağı (CAN) Yolu, mikrodenetleyicilerin ve cihazların ana bilgisayar olmadan birbirleriyle iletişim kurmasına izin vermek için tasarlanmış sağlam bir araç veri yolu standardıdır. 1980'lerde Bosch tarafından geliştirilen CAN Bus, otomotiv sistemlerinde bir standart haline geldi, ancak endüstriyel otomasyonda ve diğer gömülü sistemlerde de yaygın olarak kullanılmaktadır.

CAN BUS protokolünün temel özellikleri şunları içerir:

  • Çok Master Yapılandırması: Birden fazla düğüm merkezi bir denetleyici olmadan aynı veri yolu üzerinde iletişim kurabilir.
  • Mesaj Öncesi: Mesajlar, önce kritik verilerin iletilmesini sağlayarak tanımlayıcılarına göre önceliklendirilir.
  • Hata Algılama: CRC kontrolleri ve onay bitleri dahil olmak üzere sağlam hata algılama mekanizmaları güvenilirliği artırır.
  • Yüksek hızlı iletişim: Gerçek zamanlı uygulamalar için uygun olan 1 Mbps'ye kadar veri hızlarını destekler.

Bu özellikler, araç motoru yönetim sistemleri, endüstriyel otomasyon ve robotik gibi birden fazla cihazın verimli ve güvenilir bir şekilde iletişim kurması gereken senaryolar için CAN veri yolunu ideal hale getirir.

MCP2515 CAN denetleyicisini tanıtmak

MCP2515, seri periferik arayüz (SPI) aracılığıyla mikrodenetleyicilerle arabirim kuran bağımsız bir denetleyici alan ağı (CAN) denetleyicisidir. Karmaşık CAN protokolünü işler ve geliştiricilerin daha üst düzey uygulama mantığına odaklanmasına izin verir. MCP2515'in temel özellikleri şunları içerir:

  • Standart ve genişletilmiş CAN çerçeveleri için destek.
  • Yerleşik hata işleme ve filtreleme mekanizmaları.
  • Arduino da dahil olmak üzere çeşitli mikrodenetleyicilerle uyumluluk.
  • Düşük güç tüketimi, gömülü sistemler için uygun hale getirir.

MCP2515'i bir Arduino ile entegre ederek, projelerinize CAN veri yolu özellikleri ekleyerek diğer Can özellikli cihazlarla veya ağlarla iletişimi sağlayabilirsiniz.

Arduino ile MCP2515'i ayarlamak

Başlamak için aşağıdaki bileşenlere ihtiyacınız olacak:

  • Arduino Kurulu (örn. Arduino Uno)
  • MCP2515 CAN modülü (genellikle bir TJA1050 Can alıcı -vericisi ile birlikte gelir)
  • Jumper telleri
  • Breadboard (isteğe bağlı)

Arduino ile MCP2515'i kurmak için adım adım bir kılavuz:

1. MCP2515'i Arduino'ya bağlama

MCP2515 modülünü Arduino'ya aşağıdaki gibi bağlayın:

  • VCC ile 5V Arduino'da
  • Gnd ile Gnd Arduino'da
  • CS ile Pim 10 Arduino'da
  • Sck ile Pin 13 Arduino'da
  • (Mosi) Pim 11 Arduino'da
  • BU YÜZDEN (Miso) Pim 12 Arduino'da
  • İnt ile Pim 2 Arduino'da

     Arduino          MCP2515
     -------          -------
     5V       ------>  VCC
     GND      ------>  GND
     Pin 10   ------>  CS
     Pin 13   ------>  SCK
     Pin 11   ------>  SI (MOSI)
     Pin 12   ------>  SO (MISO)
     Pin 2    ------>  INT

2. Gerekli kütüphaneleri yükleme

MCP2515 ile iletişim kurmak için MCP_CAN kütüphane. Arduino Kütüphane Yöneticisi aracılığıyla yükleyin:

  1. Arduino IDE'yi açın.
  2. Gezmek Eskiz> Kütüphane Ekle> Kütüphaneleri Yönet ...
  3. Araştırmak MCP_CAN ve yükle MCP_CAN Kütüphane Cory J. Fowler.

3. Örnek kodu yükleme

MCP2515 ve Arduino'yu kullanarak CAN mesajlarını göndermek ve almak için temel bir örnek:

Bir kutu mesajı göndermek


// Include the necessary libraries
#include 
#include "mcp_can.h"

// Define the CS pin
#define CAN0_CS 10

// Initialize the CAN controller
MCP_CAN CAN0(CAN0_CS);

void setup() {
    Serial.begin(115200);
    while (CAN0.begin(MCP_ANY, CAN_500KBPS, MCP_8MHZ) != CAN_OK) {
        Serial.println("CAN BUS Shield init fail");
        Serial.println(" Init CAN BUS Shield again");
        delay(100);
    }
    Serial.println("CAN BUS Shield init ok!");
    CAN0.setMode(MCP_NORMAL);
}

void loop() {
    byte data[] = {0x00, 0xFF, 0xAA, 0x55, 0x33, 0x66, 0x99, 0xCC};
    // Send data: CAN ID = 0x100, data length = 8
    if (CAN0.sendMsgBuf(0x100, 0, 8, data) == CAN_OK) {
        Serial.println("Message Sent Successfully!");
    } else {
        Serial.println("Error Sending Message...");
    }
    delay(1000);
}

Bir kutu mesajı almak


// Include the necessary libraries
#include 
#include "mcp_can.h"

// Define the CS pin
#define CAN0_CS 10

// Initialize the CAN controller
MCP_CAN CAN0(CAN0_CS);

void setup() {
    Serial.begin(115200);
    while (CAN0.begin(MCP_ANY, CAN_500KBPS, MCP_8MHZ) != CAN_OK) {
        Serial.println("CAN BUS Shield init fail");
        Serial.println(" Init CAN BUS Shield again");
        delay(100);
    }
    Serial.println("CAN BUS Shield init ok!");
    CAN0.setMode(MCP_NORMAL);
}

void loop() {
    unsigned long canId;
    byte len = 0;
    byte buf[8];
    
    // Check if data has been received
    if (CAN0.checkReceive() == CAN_MSGAVAIL) {
        CAN0.readMsgBuf(&canId, &len, buf);
        Serial.print("CAN ID: 0x");
        Serial.println(canId, HEX);
        Serial.print("Data: ");
        for (int i = 0; i < len; i++) {
            Serial.print(buf[i], HEX);
            Serial.print(" ");
        }
        Serial.println();
    }
}

Gönderen eskizde, Arduino kimliğe sahip bir kutu mesajını iletir 0x100 her saniye. Alıcı taslak, gelen CAN mesajlarını dinler ve kimliği ve verileri seri monitöre yazdırır.

Arduino ile Can Bus uygulamaları

Arduino ile CAN BUST BUST'ı entegre etmek, otomotiv sistemlerinin ötesinde çok sayıda uygulama açar. Bazı popüler kullanım durumları şunları içerir:

  • Robotik: Çoklu motor kontrolörleri ve sensörler arasında iletişimi etkinleştirin.
  • Endüstriyel Otomasyon: Farklı makineler ve kontrol birimleri arasında veri alışverişini kolaylaştırın.
  • Ev Otomasyonu: Birleştirilmiş bir ağ içindeki çeşitli akıllı cihazları bağlayın.
  • Veri toplama sistemleri: Birden çok sensörden verileri verimli bir şekilde toplayın ve işleyin.

Çözüm

Güvenilirliği ve verimliliği ile CAN veri yolu protokolü, çok sayıda gömülü sistemde iletişim için bir omurga görevi görür. Geliştiriciler, MCP2515 CAN denetleyicisini bir Arduino ile kullanarak kullanarak CAN otobüs yeteneklerini projelerine zahmetsizce entegre edebilirler. İster otomotiv sistemleri, ister endüstriyel otomasyon veya karmaşık robotlar üzerinde çalışıyor olun, CAN otobüsünün anlayışı ve kaldırma, sisteminizin iletişim çerçevesini önemli ölçüde artırabilir.

Sağlanan kapsamlı kılavuzlar ve örneklerle, bir sonraki Arduino projenize CAN'ı entegre etmek için iyi donanımlısınız. Mutlu kodlama!

Yorum bırak

Notice an Issue? Have a Suggestion?
If you encounter a problem or have an idea for a new feature, let us know! Report a problem or request a feature here.