CAN Bus otomotivde 30 yıldır standart; endüstride giderek yaygınlaşıyor. Protokolün matematiksel temeli sağlam ama gerçek tasarımda terminal direnci, kablo seçimi gibi pratik konular projeyi yapar veya bozar.
Aşağıda CAN'in nasıl çalıştığı, fiziksel katman tasarımı, mesaj prioriteleri ve yaygın hatalar üzerinden ilerliyoruz.
Bu yazıda CAN protokolünün temel mimarisi, çerçeve yapısı, donanım gereksinimleri ve modern varyantları olan CAN FD ve CAN XL'i ele alıyoruz.
CAN Protokolünün Temel Mimarisi
CAN, multi-master bir veri yolu protokolüdür. Birden fazla node aynı veri yolunu paylaşır ve herhangi biri her an mesaj yayınlayabilir. Çatışma durumunda öncelikli mesaj kazanır (non-destructive arbitration). Bu özellik gerçek zamanlı sistemler için kritik öneme sahiptir.
Donanım Yapısı
- İki kablolu diferansiyel iletim (CAN_H ve CAN_L)
- İki uçta 120 ohm sonlandırma direnci
- Burulu çift kablo (genelde blendajlı)
- Her node'da bir CAN controller (entegre veya harici) ve bir CAN transceiver
Veri Hızları
| Versiyon | Maksimum Hız | Tipik Kullanım |
|---|---|---|
| CAN 2.0A/B (Klasik) | 1 Mbps | Otomotiv, endüstriyel |
| CAN FD | 5 Mbps (data fazı) | Modern otomotiv, ECU güncelleme |
| CAN XL | 10 Mbps | Geleceğin otomotiv mimarileri |
CAN Çerçevesi (Frame) Yapısı
Standart CAN 2.0A çerçevesi şu bileşenlerden oluşur:
- SOF (Start of Frame): 1 bit
- Identifier: 11 bit (CAN 2.0A) veya 29 bit (CAN 2.0B Extended)
- RTR (Remote Transmission Request): 1 bit
- Control: 6 bit (DLC dahil)
- Data: 0-8 byte (CAN FD'de 64 byte'a kadar)
- CRC: 15 bit
- ACK: 2 bit
- EOF (End of Frame): 7 bit
Identifier hem mesajın içeriğini tanımlar hem de önceliği belirler. Düşük sayısal değerli ID daha yüksek önceliklidir.
Bit Stuffing ve Hata Kontrolü
CAN, 5 ardışık aynı bit'in ardından zıt değerde "stuff bit" ekler. Bu, alıcı tarafının bit zamanlamasını sürdürebilmesi için gereklidir. Hatalı çerçeveler için 5 farklı hata tespit mekanizması vardır:
- Bit error: Yayınlanan ile okunan bit'in farklı olması
- Stuff error: Stuff kuralının ihlali
- CRC error: Hesaplanan CRC ile alınan CRC'nin tutmaması
- Form error: Çerçeve format ihlali
- Acknowledgment error: ACK bit'inin görülmemesi
Bu kombinasyon CAN'ın milyon mesajda 1'den az hata yapmasını sağlar; bu bağlamda mevcut diğer ekonomik protokollerin çoğundan üstündür.
CAN FD: Modern Otomotiv İçin Gelişmiş Versiyon
CAN FD (Flexible Data Rate), klasik CAN'ın eksikliklerini gidermek için 2012'de standardize edildi. Temel iyileştirmeler:
- Data fazında 5 Mbps'e kadar hız (klasik CAN'da 1 Mbps)
- Çerçeve başına 64 byte data (klasik 8 byte)
- İyileştirilmiş CRC (Geliştirilmiş hata tespiti)
- Klasik CAN ile geriye uyumluluk (kısıtlı)
Modern araçların ECU sayısı 100'ü aştığı için, klasik CAN'ın bant genişliği yetmez hale geldi. CAN FD bu darboğazı önemli ölçüde rahatlatır. Tesla, BMW, Mercedes gibi üreticilerin yeni modelleri CAN FD kullanır.
CANopen: Endüstriyel CAN Profili
CANopen, CAN üzerinde çalışan üst seviye bir uygulama katmanı protokolüdür. CiA (CAN in Automation) tarafından standardize edilen CANopen, endüstriyel cihazların birlikte çalışabilirliğini sağlar.
CANopen Mesaj Türleri
- PDO (Process Data Object): Gerçek zamanlı süreç verileri
- SDO (Service Data Object): Konfigürasyon ve parametre erişimi
- NMT (Network Management): Ağ durum kontrolü
- EMCY (Emergency): Hata bildirimleri
- HEARTBEAT/Sync: Senkronizasyon
CANopen, yumuşak başlangıçlar, motor sürücüleri, asansör kontrol sistemleri, robotik ve denizcilik uygulamalarında yaygın kullanılır.
J1939: Ağır Vasıta CAN Profili
SAE J1939, kamyon, otobüs, iş makineleri ve gemilerde kullanılan CAN tabanlı protokoldür. 250 kbps standart hızda çalışır ve 29-bit extended identifier kullanır. Tipik mesajları:
- EEC1: Motor RPM, motor torku
- EEC2: Yakıt kaldırma seviyesi, gaz pedalı pozisyonu
- CCVS: Hız, fren durumu, gaz pedalı
- LFE: Yakıt tüketimi
J1939 sayesinde aftermarket cihazlar (filo takip, yakıt yönetimi) standart şekilde araç verisine erişebilir.
STM32 ile CAN Geliştirme
STM32 ailesinin büyük çoğunluğu (F0/F1/F4/F7/H7/L4) en az 1 adet bxCAN veya FDCAN modülü içerir. Modern bir CAN uygulaması için tipik geliştirme akışı:
Donanım
- STM32 + harici CAN transceiver (TJA1042, MCP2551 vb.)
- CAN_H ve CAN_L hatlarına 120 ohm sonlandırma
- ESD koruma: TVS diyot (PESD1CAN, SM712 vb.)
Yazılım
STM32CubeMX ile CAN periferalı aktif edilir. HAL kütüphanesi ile başlangıç kolaydır:
- Bit timing ayarları (baud rate'e göre)
- Filter konfigürasyonu (sadece istenen ID'leri kabul etmek için)
- Interrupt veya FIFO bazlı alım
- CMSIS-RTOS task'larıyla async yapı
Üretim seviyesinde, hata sayaç (TEC, REC) takibi ve bus-off recovery mekanizmaları zorunludur. CAN modülü iletişimi sırasında geçici bir kablo problemi yaşandığında otomatik recovery sağlanmalıdır.
Yaygın Tasarım Hataları
1. Sonlandırma Direnç Hatası
Sadece bir uçta veya hiç sonlandırma yokken CAN haberleşmesi çalışmaz. İki uçta da 120 ohm direnç olmalıdır. Karmaşık ağlarda topoloji düzgün düşünülmeli; daldırma (stub) uzunlukları minimize edilmelidir.
2. Yanlış Bit Timing
Aynı CAN ağındaki tüm node'lar aynı baud rate ile çalışmalı, sample point'leri tutarlı olmalıdır. STM32 bit timing parametreleri (BS1, BS2, prescaler) doğru hesaplanmalı; üreticinin önerdiği oranlara (örn. 87.5% sample point) uyulmalıdır.
3. Filtreleme Atlama
CAN node'u, ilgisini çekmeyen mesajları donanım filtresi ile elemelidir. Tüm trafiği yazılımda işlemek CPU'yu boğar. STM32 bxCAN'da 14 filter bank, FDCAN'da daha fazla filter slot vardır.
4. Transceiver Seçimi
CAN FD kullanılacaksa transceiver da CAN FD destekli olmalıdır (TCAN1042HG, MCP2562FD vb.). Klasik CAN transceiver'ı CAN FD'de kullanmak yüksek hızlarda hatalara neden olur.
Diagnostic ve Test Araçları
- PCAN-USB (Peak System): Profesyonel CAN analyzer
- Vector CANalyzer/CANoe: Otomotiv standardı
- Kvaser araçları: Kompakt ve uygun fiyat
- Açık kaynak: SocketCAN (Linux), python-can kütüphanesi
- Düşük bütçe: candleLight, CANable USB-CAN dongle'lar
Geliştirme aşamasında bir CAN analyzer şarttır. Trafik kaydı, mesaj enjeksiyonu ve simülasyon yetenekleri olmadan CAN sistemleri hata ayıklamak çok zorlaşır.
Geleceğe Bakış: CAN XL ve Ethernet'in Yükselişi
Otomotiv mimarisinde Ethernet'in yükselişi (özellikle 100BASE-T1, 1000BASE-T1 araç ağları) CAN'ın yerini bazı uygulamalarda alıyor. Ancak CAN, basit ECU'lar arası haberleşmede uzun yıllar daha kullanılacak. CAN XL (2024'te standardize edildi), 10 Mbps hızla Ethernet'le rekabet edebilen yeni bir varyant olarak konumlanıyor.
Sonuç
CAN, 30+ yıllık geçmişiyle gömülü sistem mühendisinin temel araçlarından biri olmaya devam ediyor. Otomotivin yanı sıra endüstriyel otomasyon, denizcilik, havacılık ve tıbbi cihazlarda yaygın kullanımı sürüyor. Modern STM32 ve benzeri MCU'larla CAN entegrasyonu kolay; ancak doğru bit timing, filtreleme ve hata yönetimi profesyonel sonuç için kritiktir.
EA ARGE olarak, otomotiv ECU geliştirme, endüstriyel CANopen entegrasyonu, J1939 protokol uygulamaları ve CAN tabanlı diagnostic araçlar geliştiriyoruz.
Detayda saklı
CAN'ın güzel yanı: doğru tasarlanırsa unutulan bir altyapıdır, kötü tasarlanırsa hiç bitmeyen bir hata ayıklamadır. İkisi arasındaki fark genelde bus uçlarındaki 120 ohm direnç olur; tasarım dosyasına eklemekle 5 dakika, sahada bulmakla 5 hafta sürüyor.