CAN Bus (Controller Area Network) Haberleşme Protokolü

👤 Yazar: ozcan 📅 Tarih: 03.08.2026 17:06 👁️ Görüntüleme: 3

CAN Bus (Controller Area Network) Haberleşme Protokolü Detaylı İncelemesi

CAN Bus (Controller Area Network), 1983 yılında Bosch tarafından otomotiv sektöründeki karmaşık kablo demetlerini azaltmak ve modüller arası güvenilir veri iletimi sağlamak amacıyla geliştirilmiş, 1986 yılında resmi olarak duyurulmuş mesaj tabanlı (message-based) bir haberleşme protokolüdür. Otomotiv (ECU'lar arası iletişim), havacılık, tıbbi cihazlar ve endüstriyel otomasyon sistemlerinde standart olarak kullanılır.

CAN Bus Mimari Diyagramı


1. Donanım Mimarısı ve Diferansiyel Sinyalleşme

CAN Bus, elektriksel gürültülere karşı üstün koruma sağlamak için diferansiyel sinyalleşme tekniği kullanır. Veriyolu temel olarak iki adet sinyal hattı ve ortak bir referans (GND) hattından oluşur:

  • CAN_H (CAN High): Yüksek seviye diferansiyel sinyal hattı.
  • CAN_L (CAN Low): Düşük seviye diferansiyel sinyal hattı.

canbus sinyali

Dominant (Baskın) ve Recessive (Çekinik) Mantığı:
CAN haberleşmesinde Lojik 0 ve Lojik 1 yerine Dominant ve Recessive kavramları kullanılır. Hat açık kollektör/open-drain benzeri bir mantıkla çalışır; Dominant (0), Recessive (1) seviyesini bastırır.

  • Recessive (Lojik 1): CAN_H ve CAN_L hatlarının ikisi de yaklaşık 2.5V seviyesindedir. Gerilim farkı (Vdiff = CAN_H - CAN_L) 0V'a yakındır.
  • Dominant (Lojik 0): CAN_H gerilimi 3.5V'a yükselirken, CAN_L gerilimi 1.5V'a düşer. Gerilim farkı (Vdiff) yaklaşık 2.0V seviyesine ulaşır.

Sonlandırma Dirençleri (Termination)

CAN veriyolunun karakteristiği 120 Ω empedansa sahiptir. Yüksek hızlı veri transferinde hatta oluşan sinyal yansımalarını (reflection) engellemek için bus hattının en başındaki ve en sonundaki iki uç noktaya 120 Ω paralel sonlandırma direnci bağlanmalıdır. (İki direnç paralel olduğu için veriyolunun boştaki eşdeğer direnci yaklaşık 60 Ω ölçülmelidir).


2. CAN Çerçeve Yapısı (Frame Format) ve Hakemlik (Arbitration)

CAN protokolü Master/Slave mimarisi kullanmaz; bunun yerine veriyoluna bağlı tüm düğümler eşit haklara sahiptir (Multi-Master / Peer-to-Peer). Cihazlar hedef adrese değil, gönderilen mesajın içeriğini tanımlayan CAN ID (Identifier) değerine bakarak veriyi süzerler.

Saha / Alan Bit Sayısı Açıklama
SOF (Start of Frame) 1 Bit Paket başlangıcını gösteren Dominant (0) biti.
Arbitration Field (CAN ID) 11 Bit (Standard) / 29 Bit (Extended) Mesajın öncelik seviyesini ve kimliğini belirleyen kimlik numarası.
RTR (Remote Transmission Request) 1 Bit Veri çerçevesi mi (0) yoksa başka düğümden veri isteme çerçevesi mi (1) olduğunu belirtir.
Control Field (DLC) 6 Bit (4 Biti DLC) Gönderilecek verinin uzunluğunu belirtir (0 - 8 Bayt arası).
Data Field 0 - 64 Bit (0 - 8 Bayt) Taşınan ham veri yükü (Payload). CAN FD standardında bu 64 bayta kadar çıkar.
CRC Field 15 Bit + 1 Bit Delimiter Hata denetimi ve veri doğrulaması için döngüsel aşırılık kontrolü.
ACK Field 2 Bit (ACK + Delimiter) Veriyi hatasız alan herhangi bir düğümün hattı Dominant (0) yaparak gönderdiği onay biti.
EOF (End of Frame) 7 Bit Paketin bittiğini gösteren 7 adet Recessive (1) biti.
Tahribatsız Bit Bazlı Hakemlik (Non-Destructive Bitwise Arbitration):
Birden fazla düğüm aynı anda veri göndermeye başlarsa, CAN ID bitleri sırayla hatta sürülür. Dominant (0) biti Recessive (1) bitini bastırdığı için, CAN ID değeri sayısal olarak en küçük olan mesaj en yüksek önceliğe sahip olur.

Daha yüksek ID'ye sahip cihaz, kendisi '1' basarken hatta '0' olduğunu fark ettiği an veri göndermeyi anında keser ve sessiz moda geçer. Mesaj bozulmadan en öncelikli cihaz tarafından iletilmeye devam eder.

3. MCP2515 (SPI-CAN Denetleyici) ve SN65HVD230 Örnek Kodu

Dahili CAN denetleyicisi olmayan mikrokontrolcülerde sıklıkla MCP2515 (CAN Controller) ve TJA1050 / SN65HVD230 (CAN Transceiver) modülleri kullanılır. MCP2515 çipi mikrokontrolcü ile SPI üzerinden haberleşir.

ESP32 / Arduino C++ (mcp_can Kütüphanesi ile Veri Gönderme ve Alma)

#include <SPI.h>
#include <mcp_can.h>

const int SPI_CS_PIN = 5; // MCP2515 Chip Select Pini
MCP_CAN CAN0(SPI_CS_PIN); // CAN nesnesi oluştur

void setup() {
  Serial.begin(115200);

  // MCP2515 Başlat: 8MHz Kristal, 500kbps CAN Bus Hızı
  if (CAN0.begin(MCP_ANY, CAN_500KBPS, MCP_8MHZ) == CAN_OK) {
    Serial.println("MCP2515 Başarıyla Başlatıldı!");
  } else {
    Serial.println("MCP2515 Başlatılamadı...");
    while (1);
  }

  // Modülü Normal Çalışma Moduna Al
  CAN0.setMode(MCP_NORMAL);
}

void loop() {
  // 1. CAN Bus Üzerinden Veri Gönderme Örneği (ID: 0x0123)
  byte gonderilecekVeri[8] = {0x01, 0x02, 0x03, 0x04, 0xAA, 0xBB, 0xCC, 0xDD};
  
  // sendMsgBuf(ID, Standard/Extended, DLC, Data)
  byte sendStatus = CAN0.sendMsgBuf(0x0123, 0, 8, gonderilecekVeri);
  
  if (sendStatus == CAN_OK) {
    Serial.println("CAN Paket Gönderildi.");
  } else {
    Serial.println("Paket Gönderim Hatası!");
  }

  // 2. CAN Bus Üzerinden Veri Dinleme Örneği
  long unsigned int rxId;
  unsigned char len = 0;
  unsigned char rxBuf[8];

  if (CAN0.checkReceive() == CAN_MSGAVAIL) {
    CAN0.readMsgBuf(&rxId, &len, rxBuf);
    
    Serial.printf("\nYeni Mesaj Alındı! ID: 0x%03X - DLC: %d - Veri: ", rxId, len);
    for (int i = 0; i < len; i++) {
      Serial.printf("0x%02X ", rxBuf[i]);
    }
    Serial.println();
  }

  delay(1000);
}

4. CAN Bus, RS-485 ve RS-422 Karşılaştırması

Özellik CAN Bus RS-485 RS-422
Katman Seviyesi Fiziksel + Veri Bağı Katmanı (MAC) Sadece Fiziksel Katman Sadece Fiziksel Katman
Çakışma Önleme (Arbitration) Donanımsal (Bitwise Arbitration) Yok (Yazılımsal/Protokol seviyesinde) Gerekmez (Tek Verici)
Hata Yönetimi (Error Handling) Donanımsal CRC, Bit Stuffing, ACK Yok (Modbus vb. yazılım yönetir) Yok
Adresleme Mantığı Mesaj Odaklı (CAN ID) Cihaz Odaklı (Slave ID) Noktadan Noktaya / Çoğullamalı
Maksimum Hız 1 Mbit/s (CAN 2.0) / 8+ Mbit/s (CAN FD) 10 - 35 Mbit/s 10 Mbit/s
Maksimum Mesafe 40 Metre (1 Mbps) - 1000 Metre (50 kbps) 1200 Metre 1200 Metre

💬 Yorumlar

Henüz yorum yapılmamış. İlk yorumu siz yapın!

Bir Yorum Bırakın

Güvenlik Kontrolü:

Yenidir.com
↑ Sayfa Başı
📞 İletişim ✉ E-Posta Gönder 🟥 YouTube
© 2026 Yenidir.com
Yenidir CMS V0.1