CAN (Controller Area Network) Hattı
“Controller Area Network Bus” olan yani “Kontrol Alan Ağı Veri yolu”dur. 1980’ lerde Robert Bosch tarafından otomotivde kablo yumağı yerine bir kablodan yazılım kontrollü veri transferini sağlamak amacıyla geliştirilmiştir.
CAN, otomotiv endüstrisindeki en bilinen haberleşme sistemidir. Her ne kadar başlangıçta yalnızca otomotiv uygulamaları için tasarlanmış olsa da yüksek performansı güvenirliliğinden dolayı birçok dağıtık (distrubuted) endüstriyel kontrol uygulamalarında yaygın olarak kullanılmaktadır.
Güvenliğin çok önemli olduğu gerçek zamanlı uygulamalarda da kullanılır. Öyle ki istatistiksel olasılık hesapları sonucunda bir asırda bir tane tespit edilemeyen mesaj hatası yapabileceği tespit edilmiştir.
Uygulama alanı yüksek hızlı ağlardan düşük maliyetli çoklu kablolamalı sistemlere kadar geniştir. CAN-BUS, otomobil elektroniği, akıllı motor kontrolü, robot kontrolü, akıllı sensörler, asansörler, makine kontrol birimleri, kaymayı engelleyici sistemler, trafik sinyalizasyon sistemleri, akıllı binalar ve laboratuar otomasyonu gibi uygulama alanlarında maksimum 1Mbit/sn lik bir hızda veri iletişimi sağlar.
CAN-BUS’ ı ISO/OSI Reference Modeli üzerinden açıklamak istersek CAN BUS
- Nesne Katmanı (Object layer)
- İletim Katmanı (Transfer layer)
- Fiziksel Katman (Physical layer)
şeklinde üç alt bölüme ayırabiliriz. Bu üç alt bölümü alatacak olursak…
Nesne Katmanı
Nesne ve iletim katmanları data link layerin tüm servis ve fonksiyonlarını oluşturur.
Nesne Katmanının görevleri;
- Hangi mesajın transfer edileceğini tespit etmek
- İletim katmanında hangi mesajın alınacağına karar vermek
- Donanımla ilgili uygulamaya arayüz sağlamaktır.
İletim Katmanı
İletim katmanının başlıca görevi transfer protokolüdür.
- Çerçeve (frame) kontrolü
- Mesaj önceliği belirleme
- Hata kontrolü
- Hata sinyalleşmesi
- Hata kapatma
İletim katmanı yeni bir mesajı yollamadan önce iletim hattının boş olmasına dikkat eder. İletim hattından veri alınmasından da sorumludur. Ayrıca senkron iletişim için veri transferi sırasında bit zamanlamasının bazı parametrelerini göz önünde bulundurur.
Fiziksel Katmanı
Fiziksel Katman, üniteler arasında veri haberleşmesi sırasındaki tüm elektriksel kısımdır.
CAN-BUS sisteminin sahip olduğu özellikler:
- Mesaj önceliği
- Kayıp zaman güvenliği
- Yapılandırma esnekliği
- Senkronizasyonlu çoklu kabul: Aynı veri birçok ünite tarafından alınabilinir
- Sistemdeki veri yoğunluğunu kaldırabilme
- Çok efendili (Multimaster) çalışma
- Hata tespiti ve hataya ilişkin sinyalleri üretme
- Mesajın yollanmasında hata oluşması halinde mesajın iletim hattının (BUS) boş olduğu bir anda mesajın otomatik tekrar yollama
- Ünitelerde oluşan geçici ve kalıcı hataları ayırt edebilme ve özerk olarak kalıcı hatalı üniteleri kapatabilme
Çalışma Mantığı
CAN-BUS üzerinden haberleşen tüm sistem bileşenlerine ünite (node) denir. Örneğin 100 tane birbirinden bağımsız mikrodenetleyicili devrelerimiz olsun. Bunları CAN—BUS sistemi ile haberleştirdiğimizi varsayım. Bu sistemde her bir mikrodenetleyicili sistem bir üniteyi oluşturur. CAN-BUS sisteminde tüm üniteler iletim hattına eşit öncelikli veri yollama hakkına sahiptirler. Buna multimaster çalışma denir.
Hatasız veri iletişimi nasıl olur?
Herkes bir anda veri yollamaya çalışırsa çatışmalar olacağı açık. Bunun çözümü şöyle sağlanmış. Tüm üniteler her daim iletim hattını dinlemek zorundadır. Yani her ünite iletim hattının boş olduğu anı yakalamaya çalışır. Hattı boş gören verisini yollar.
Tüm ünitelerin eşit mesaj yollama önceliği olsa da işin aslı biraz öyle değil.
Bunun sebebi, CAN’ in mesaj öncelikli bir sistem olmasından dolayıdır. İnternette tüm PC’ lerin bir numarası IP’si vardır ve veriler o IP li kişiye yollanır. Zaten bu yüzden bol kablolamalı bir sistemdir. Ancak CAN de ünitelere değil mesajlara numara verilir.
Örneğin bir otomobil düşünelim;
Aceleci şoförümüz yolda hızlıca giderken bir arabaya çarpacak olsun. Şoför çarpacağını fark eder ve tüm gücüyle frene asılır. Burada CAN’ in önemi arabaların kaza yapması ile başlar. Mesela önden çarptı ve sensörler bunu fark ettiğinde hava yastıklarının açılması, yakıtın kesilmesi gibi bir dizi önlemler alınmalıdır. Bu işlerden sorumlu tüm ünitelere 1 numaralı mesaj (kaza oldu güvenlik sistemleri devreye girin) iletilmelidir. Bunu sensörlü sistem söyleyecektir diğer ünitelere. Ancak o ara başka bir ünite mesela motor ısısının kaç derece olduğunu kokpitte ki LCD li üniteye yollamaya çalışsın.
Sizce hangisi şu anda daha önemli!
İşte CAN tek kablo üzerinden eşit erişimli mesaj yollanmasına izin verir ama öncelikli mesajların daha önce iletim ortamına iletilmesine de özen gösterir.
CAN, iletişim ortamına erişim yöntemi olarak bit öncelikli yapı ile CSMA/CD (Carrier Sense Multiple Access with Collision Detection) kullanır. CSMA/CD (Carrier Sense Multiple Access with Collision Detection) den kısaca bahsedersek CAN sistemi, güvenli iletişim gücünü bu yapıyı kullanmasından alır.
Bir CAN haberleşmesi örneği ile CSMA/CD nın rolünü açıklayalım. CAN sistemindeki her ünite iletim ortamını dinlemek zorundadır. Eğer bir ünite iletim ortamına veri aktarmak isterse önce yolu dinler, yol boş ise verisini yola iletir. Bazen uzak mesafelerden de kaynaklanan sebeplerden dolayı bir ünite yola veri aktarırken, uzaktaki diğer ünite mesajın yolda olduğunu anlayamadığından kendi mesajını da yolu boş zannederek bırakır. Böylece çatışma (collision) oluşur. İki ünitede çatışmayı sezer ve her iki ünitede veri aktarım isteklerini bir süre bekletir. Daha sonra iletim ortamı boş olduğunda verilerini tekrar yollamaya çalışırlar.
Kabloyu kim kullanacak (CSMA/CD) ?
İlkokul öğretmenim her zaman söz size gelmeden konuşmayın derdi. Ama söz bize nasıl gelir, yoksa biz mi söze gideriz o ayrı bir konu. Bir arkadaş grubunda sohbet ederken benim taktiğim ise her zaman şöyledir. Söz almadan önce konuşanın konuşmasını bitirmesini beklerim, ancak kimse konuşmuyorsa sözümü söylerim (Carrier Sense).
Ancak benim gibi iyi aile terbiyesi almış bir arkadaşım da aynı benim taktikle sözü alabilir, kimsenin ağzını kapatamayız değil mi canım? (Multiple Access).
Bazen işte böyle ikimizde fırsattan istifade iki laf da ben edeyim diye aynı anda söze başlarsak ne olur, gürültü olur tabii, ben böyle durumlarda hemen çenemi kaparım (Collision Detection).
Çalışma Mantığı
Bu yöntem, mesajların çarpışmamasını garanti etmekle beraber, iletişim hattının uzunluğunu sınırlandırır.
Dolayısıyla, CAN düğümler;
1 Mbit/s veri iletim hızı ile 40 m
40 Kbit/s veri iletim hızı ile 1000 m’lik bir veri yolu üzerinden bağlanabilirler.
CAN-BUS’ a gönderilen tüm veriler tüm üniteler tarafından alınır. Her ünite içinde bulunan filtreler yardımıyla kendisini ilgilendiren mesajları alır, ilgilendirmeyenleri ise çöpe atar.
CAN-BUS Veri Paketleme Yapısı ve Mantığı
Mesaj ID Alanı (Arbitration Field) (=Yargıcılık Alanı)
CAN sistemlerinde veriler paketler halinde iletilir. Ancak iki tip paketleme yapılır ve özel adları da vardır. 11bit tanımlayıcıya sahip olanlar CAN2.0A diğer adıyla Standart CAN, 29bit tanımlayıcıya sahip olanlara ise CAN2.0B diğer adıyla Geliştirilmiş (Extended) CAN denir. Aralarındaki temel fark ise tanımlanabilinecek mesaj sayısıdır. Standart CAN de 211 = 2048 mesaj tanımlanabilinirken, Geliştirilmiş CAN de 229 = 536.870.912…mesaj tanımlanabilinir.
Bu bilginin tutulduğu alana mesaj id alanı denir. Mesaj önceliğini belirlemede buradaki sayı dikkate alınır. Ayrıca, mesaj id alanı RTR biti de içerir. Eğer 1 ise gönderilecek pakete İstek Çerçevesi (Remote Frame) denir. Eğer 0 ise Veri Çerçevesi (Data Frame) denir. Bir ünite neden Data Frame yollar? Bu sorunun yanıtı kendisinde bulunan veriyi iletmektir.
Peki bir ünite neden istek çerçevesi yollar? Bu sorunun yanıtı da şöyledir. Bazen üniteler başka ünitelerden gelecek bilgiye ihtiyaç duyarlar. Karşı tarafa “bana şu bilgiyi yolla” demenin yolu istek çerçevesi kullanmaktır. İstek çerçevesi yollayan bir ünitenin Veri Alanı (Data Field) yoktur. Çünkü veri istemektedir. İstenen veriye ilişkin bilgi Mesaj ID Alanında vardır. Kontrol Alanı (Control Field) 6bitten oluşur. İlk biti standart veri paketlemesi mi yoksa geliştirilmiş veri paketlemesi mi yapıldığını belirtir. Ayrıca Veri Alanının kaç byte ten oluştuğunu belirten bitlere de sahiptir.
Veri Alanı (Data Field)
CAN-BUS ta bir anda en fazla 8byte lık veri yollanabilir. Yani Veri Alanı uzunluğu en azla 8byte olur. Ama daha da az olabilir. Gönderilecek veri uzunluğu Kontrol Alanında belirtilir.
Dönüşsel Artıklık Kontrol Alanı (Cyclic Redundancy Control Field – CRC Field)
15bitlik CRC Sequence ve CRC Delimiter dan oluşur. Görevi pakete ait CRC Kodunu tutmaktır. Üniteye gelen pakete cevap verilebilmesi için ilk önce paketin doğruluğu kontrol edilmelidir. Bunun için de ilk önce alınan paketin CRC değeri hesaplanır. Daha sonra alıcı ünite paket ile birlikte gelen CRC değeri ile hesaplanan değeri karşılaştırılır. İki değer birbirine eşit ise alınan paket geçerlidir. Eğer iki değer birbirine eşit değilse mesajı alamadığını belirtmek için CRC hatasından kaynaklı hata oluştuğunu belirten Hata Çerçevesi (Error Frame) yollar. Bu bilgiyi alan gönderici veriyi tekrar yollamaya çalışır. Bu bilgiyi ünitelerden sadece biri yollasa bile veri tekrar yollanmalıdır. Alındı Bilgisi Alanı (Acknowledgement Field – ACK Field)
Bunu bir mesaj iletimiyle açıklayalım. Gönderici Başla biti ile iletim hattında şu an gönderici benim der. Ardından Mesaj ID Alanı, Kontrol Alanı, Veri Alanı, CRC Alanı gönderilir. Alındı Bilgisi Alanında ise iletim ortamı çekinik tutulur. Eğer diğer tüm ünitelerden biri, mesaj onu ilgilendirse ya da ilgilendirmese dahi, mesajı alabiliyorsa iletim ortamını baskın yapar ve böylece gönderici en az bir ünite veriyi alabildiği için bitir bitini yollayıp iletim ortamını diğerlerinin kullanımı için bırakır. Yani Alındı Bilgisi Alanında “Aldınız mı?” sorusuna yanıt beklenir. Eğer Alındı Bilgisi sürecinde herhangi bir üniteden alındığına dair bilgi alamazsa ACK hatasından kaynaklı hata oluştuğunu belirten Hata Çerçevesi üretilir ve gönderici tekrar yollamaya çalışır.
Eğer gönderen İstek Çerçevesi yollamışsa, alıcı da iletim hattının boş bir anında cevabını göndericiye yollar.
Hata Çerçevesi (Error Frame)
Veri Çerçevesi ya da İstek Çerçevesinin gönderiminde ya alımında hata oluştuğunda gönderen ya da alıcılar tarafından ne tip hatanın olduğunu belirten mesaj çerçevesidir.
Kullanım Türleri
CAN kullanım şekli bakımından iki şekilde görülür. Biri Full-CAN diğeri ise Half-CAN tabirleri ile anılır. Bu ifadelerden kasıt ise şöyledir. Eğer CAN denetleyici ve mikrodenetleyici birbirinden ayrı iseler buna half-CAN denir. Ancak mikrodenetleyici kendi içinde CAN denetleyicisini de barındırıyorsa Full-CAN olur. Full-CAN de mikroişlemciye daha az yüklenilir. Ama başlangıçta CAN içermeyen bir sistemden CAN’ e geçmek için half-CAN daha yararlıdır.
EMI:( Elektromagnetik Parazit)
CAN, elektromagnetik parazitlerden etkilenmez. Eğer elektromanyetik parazit iletim ortamını etkilerse CAN_H, CAN_L aynı şekilde etkileneceğinden sistemler sorunsuzca çalışır. CAN_H, CAN_L, CAN_BUS da kullanılan sinyalleşmedir. Lojikten bilinen sıfır ve birler gibi.
CAN’ in Gelişim Süreci:
90 larda CAN’ in gelişimi sonucunda CiA denen CAN in Automation kuruldu. Bu bağımsız grup CAN özelliklerini belirlemekte ve gerçekleştirmektedir. Daha sonra DeviceNET geliştirldi. DeviceNet endüstriyel cihazlarını (sensörs,aktuatör) yüksek seviye cihazlarına(kontrolör) bağlamaya yarayan düşük seviye networktür. DeviceNet özellikle düşük maliyet üzerine yoğunlaşmıştır. 95 de CAN2.0B geliştirilerekten bir CAN sistemine bağlı ünite sayısı 500milyona çıkarılmıştır. 1996 da CANopen geliştirilmiştir. Böylece uygulamada kullanılabilirliği daha da artmıştır.
Sonuç:
Mesaj içerikli haberleşmenin getirdiği kablolama kolaylığı ve bunun getirdiği düşük maliyet, hata tespit rutinlerinin çok güçlü olmasının getirdiği güvenirlik, yeni ünitelerin eklenmesi için sistemde değişime gitmemenin getirdiği kolaylık, saniyede 10000 mesaj iletimi sağlaması CAN-BUS’ ın önemli avantajlarıdır.
“bit” = ikilik sayı (binary) sistemdeki her bir basamaga verilen addir.
Alabilecegi degerler “0” ve “1”dir.
1 Byte = 8 bit. Örnegin 01101011 bir byte’tir.
1 Kilo Byte = 1.024 Byte
1 Mega Byte = (1024 x 1024) = 1.048.576 Byte
bps = bits per second (saniyedeki bit sayisi)
1 kbps = 1.000 bps (1024 bps degildir.)