CAN Bus Nedir?
CAN Bus, “Controller Area Network”ün kısaltmasıdır. “Denetleyici Alan Ağı” anlamına gelen CAN Bus protokolü, 1983 yılında otomotiv sektöründe kullanılmak üzere Robert Bosch tarafından geliştirilmeye başlanmıştır ve resmi olarak 1986 yılında kullanılmaya başlanmıştır. Araçlarda bulunan kablo ağının azaltılması amaçlanmıştır. Bu protokol sayesinde motor, frenler, klima, çeşitli sensörler gibi birimler arasında onlarca kablo yerine sadece 2 kablo kullanılmaktadır.
CAN protokolü başta otomotiv alanında kullanılsa da veri iletim hızı, hata oranının düşüklüğü ve uygulama kolaylığı gibi sebeplerden dolayı mikro işlemcili bireysel uygulamalarda da kullanılmaktadır. İletişim hızı 40m de 1Mbit/sn iken 1km uzaklıklarda 40Kbit/sn ye düşmektedir. Yapılan olasılık hesaplarına göre sağlıklı çalışan bir CAN sisteminin hata yapma olasılığı çok düşüktür. Bu nedenle protokolün yüksek hızlı veri iletimi ve yüksek güvenilirlik seviyesi, otomotiv ve endüstriyel uygulamalarda tercih edilmesinin sebepleri arasında yer alır.
CAN Bus, günümüz otomobillerinde ve diğer cihazlarda bulunan Elektronik Kontrol Birimlerinin (ECU’lar) birbirleriyle iletişim kurmasını sağlar. Mesaj tabanlı bir protokoldür. Mesajlar veya “çerçeveler”, ağdaki tüm cihazlar tarafından alınır ve ana bilgisayar gerektirmez. Bu sayede, otomobil parçaları, sensörler, kontrol birimleri ve diğer sistemler arasında seri olarak veri alışverişi yapılabilir.
CAN Bus, diğer protokollerden farklı olarak adres temelli değil mesaj temelli çalışmaktadır. Her mesaja özgü bir ID numarası vardır. Mesajlar çerçeveler ile iletilirler. Veri ve istek mesajları olarak ikiye ayrılırlar. İstek mesajlarında veri bulunmaz. Veri mesajlarında ise en fazla 8 bytle lık veri aktarılır. CAN2.0A ve CAN2.0B olmak üzere 2 tane standardı vardır. Bunlar arasındaki fark mesaj uzunluklarının farklı olmasıdır.
Can Bus, seri tip ve asenkron bir haberleşmedir. İletişim yarı çift yönlüdür(half dublex) ve diferansiyel sinyal seviyelidir. Gürültü korumalıdır. Can Bus iletişimde tüm cihazlar veri gönderebilir-alabilir.
CAN Bus, CAN_H ve CAN_L olmak üzere 2 hattan oluşur. İletişim, bir kimlik ve mesaja dayalı mesaj tabanlı protokoldür. Her cihaz bir kimlik ve mesaj gönderir. Tüm cihazlar aynı mesajı alır ancak yalnızca belirtilen kimliğe sahip cihaz bu mesaj üzerinde işlem yapabilir. Bu şekilde yalnızca iki kablo kullanarak bir ağdaki tüm cihazlar arasında bir iletişim oluşturabiliriz. Ayrıca yarı çift yönlü(half dublex) olduğu için aynı anda sadece bir cihaz veri yolunu kullanabilir ve veri gönderebilir. Yani aynı anda sadece veri gönderilebilir ya da alınabilir.
CAN Bus İletişim Protokolü
CAN Veri Yolu ve Bağlantı Noktaları
Genel olarak bir CAN bağlantı noktası üstte gösterilmiştir. Bağlantı noktaları düğüm olarak isimlendirilirler. Mikro denetleyici ve CAN kontrolcüsünden oluşmaktadırlar. Yukarıda CAN kontrolcüsü mikro denetleyiciye dâhil edilerek tek aygıt olarak gösterilmiştir. Fakat CAN kontrolcüsü harici entegre olarak da kullanılabilir. CAN kontrolcüsü CAN veri yoluna direk bağlanır. Bu veri yolu iki telden oluşmuş ve iki tarafı 120 ohm dirençlerle sonlandırılmıştır. Bu dirençler veri yolunun öngörülebilir bir durumda kalmasına ve sinyal yansımalarının azaltılmasına yardımcı olur.
CAN yapısında alıcı ve verici birbirinden fiziksel olarak bağımsızdır. Fakat düğümlerin yapısı gereği gönderilen mesaj alıcıdan dinlenebilmektedir. Bu sayede veriyi gönderen işlemci gönderdiği veri ile okuduğu veriyi karşılaştırarak hata ve mesajların öncelik seviyelerine göre iletilmelerine olanak sağlanır. Multimaster yapıda çalışabilen bu sistem için bu özellik önemlidir.
CAN yapısında Lojik-1 recessive(çekingen), lojik-0 dominant(baskın) olarak adlandırılmaktadır. Bunun sebebi hatta farklı düğümlerden aynı anda 0 ve 1 yazılması durumunda 0’ın 1’e karşı baskın gelmesidir. Lojik-0’ın lojik-1’e baskın gelmesi sonucu küçük mesaj ID sine sahip mesajlar öncelik kazanırlar. Çerçevenin başlangıcında en fazla 0'a sahip olan veya en düşük kimliğe sahip olan düğüm önceliklidir.
Üstteki resimde iki düğüme ait ID bitleri tek tek hatta yazılmaya başlanıp 4. bite sıra geldiğinde düğüm-15’in 4. bitteki 0 değeri dominant olduğu için baskın olur ve hattı ele geçirir. Hatta yazılan her bit, hem biti yazan düğüm tarafından ve hem de diğerleri tarafından da algılandığı için düğüm-16 baskın biti görür ve kendi iletimini durdurur. Düğüm-15 de hattı kazandığını bilir. Düğüm-15’in işi bittiğinde düğüm-16 iletimi tekrar dener.
Bir düğüm tarafından mesaj gönderilmesi kararlaştırıldığında mesaj yol boşalana kadar bekletilir. Her düğüm, yolu devamlı izlemektedir. Yol boşaldıktan sonra düğüm yola “başla” işaretini vererek mesajı yollamaya başlar. Mesaj her düğüme ulaşmaktadır ve ilişkisi olan düğümler mesajı okuyup işlemektedirler. Eğer yol boşaldığında birden fazla düğüm yola mesaj yazmaya başlarsa düşük ID’li mesajı yazan düğüm, yolu ele geçirir. Diğer düğümler aradan çekilerek tekrar göndermek üzere yolun boşalmasını beklerler.
İletişim Yöntemi ve Voltajlar:
Normal bir seri iletişimde veriler seri olarak iletilirken 0V🡪0 ve 5V🡪1 dir. Fakat araç içerisinde motor titreşimi, hoparlörler vb. elektriksel gürültüler çoktur. Bu da verilerde bozulmaya, 1 ve 0 durumlarında kararsızlığa neden olur. Bunun için Can Bus iletişimde 0 ve 5 volt olmak üzere iki voltaj seviyesi kullanılmaz. Alıcının, CAN_H ve CAN_L sinyalleri arasındaki voltaj farkını okuyup bunu 1 bit olarak yorumladığı bir yöntem kullanılır. Aşağıdaki gibi:
H düşük L yüksek seviyede olduğunda:
Diferansiyel seviye 2,5 – 2,5 = 0 olur. Bu da lojik 1 demektir.
H yüksek L düşük seviyede olduğunda:
Diferansiyel seviye 3,75 – 1,25 = 2,5 olur. Bu da lojik 0 demektir.
Can Bus iletişimi sırasında kablonun elektriksel gürültüden etkilendiğini varsayalım. Hem CAN_H hattı hem de CAN_L hattı bu gürültüden aynı anda etkilendiğinden sinyaller arasındaki fark da aynı kalır. Böylece veriler elektriksel gürültüden etkilenmemiş olur.
CAN Bus asenkron bir iletişimdir. Clock sinyali kullanılmaz. Bu nedenle tüm cihazların baund hızı aynı olmalıdır.
Veri Çerçevesi ve Mesaj İletimi – CAN Data Frame:
İki tür CAN mesaj çerçevesi vardır. CAN 2.0A tarafından tanımlanan 11 bitlik mesaj ID’sine sahip mesajlara Standart Çerçeve(Standard Frame) denir. CAN 2.0B tarafından tanımlanan 29 bitlik mesaj ID’sine sahip mesajlara Genişletilmiş Çerçeve(Extended Frame) denir. Standart çerçeve en fazla 211=2048 adet ID’ye izin verirken, genişletilmiş çerçeve 229 = 536870912 ID’ye izin verir. Bu çok büyük bir farktır. Harika olan şey, hem standart hem de genişletilmiş çerçevelerin aynı veri yolunda kullanılabilmesidir. Ancak daha önce gördüğümüz gibi, MSB tarafında daha fazla 0 sayısına sahip daha küçük mesaj ID’si her zaman öncelik kazanacaktır. Bu nedenle standart çerçeveler genişletilmiş çerçevelere göre öncelik kazanır.
CAN ile tüm veriler çerçeveler içinde gönderilir ve dört türü vardır:
Veri çerçeveleri(data): Verileri bir veya daha fazla alıcı düğüme aktarır.
Uzak çerçeveler(remote): Diğer düğümlerden veri ister.
Hata çerçeveleri(error): Rapor hataları.
Aşırı yük çerçeveleri(overload): Aşırı yük koşullarını bildirir.
Ağdaki her cihaz standart mesaj formatını kullanarak bir “veri çerçevesi” oluşturur ve bunu sırayla iletir. İki çeşit mesaj çerçevesi vardır. Standart Çerçeve(Standard Frame) ve Genişletilmiş Çerçeve(Extended Frame).
Standart Çerçeve(Standard Frame) ve CAN Data Frame Bitleri
SOF(Starf Of Frame): Her çerçeve SOF sinyali ile başlar. Başlangıç bitidir. Bu sinyal 1 bitliktir ve dominanttır. Böylece diğer cihazlar yeni verinin geldiğini anlar.
Arbitration Field(Denetim Alanı): 12 bitlik denetim alanıdır. İlk 11 biti mesaj ID’sidir. ID(Identifier): Tanımlayıcı, kimlik anlamındadır. Mesajın gönderileceği cihazın ID numarasıdır. Denetim alanındaki son bit RTR(Remote Transmission Request)’dir. Bu bit “0” ise; belirtilen ID nolu cihaza veri gönderileceğini, “1” ise belirtilen ID nolu cihazdan veri istenileceğini belirtir.
Control(Kontrol Alanı): Bu alanın ilk biti IDE diye isimlendirilir. IDE(Identifier Extension): Tanımlayıcı Uzantısı anlamındadır. Bu tek bitlik IDE, çerçevenin hangi türde olduğunu tanımlar. Değer 0 ise, çerçeve standart türdedir. Değer 1 ise, çerçeve genişletilmiş türdedir.
Bu bitin ardından gelecekteki kullanım için ayrılmış bir bitlik kullanılmayan rezerve alan gelmektedir. Bu bitin adı “r0” dır.
Daha sonra 4 bitlik DLC diye isimlendirilen bir alan gelir. DLC alanı gönderilen verinin kaç byte olduğunu söyler. Bayt sayısı 0 ile 8 arasında (0 – 64 bit) olabilir. Yani, göndereceğiniz 8 bayttan fazla veri varsa, bunu birden fazla çerçeveye bölmeniz gerekir. 0 uzunluğundaki veriler genellikle RTR çerçeveleriyle birlikte kullanılır. Çünkü veri isteğinde bulunulacaktır.
Data(Veri): İletilecek veridir. Veri alanı en fazla 8 byte olabilmektedir. Veri uzunluğu DLC alanı tarafından belirlenir.
Cyclic Redundancy Check (CRC): “Döngüsel Artıklık/Yedeklilik Denetimi” anlamına gelen bu alan, bir tür hata algılama mekanizmasıdır. Bu alan 16 bitliktir ve 15 bitlik CRC (Cyclic Redundancy Check) bilgisi ile resesif CRC Delimiter bitinden oluşmaktadır. CRC alanı, SOF alanından CRC alanına kadar gönderilen verinin doğru olup olmadığının anlaşılması için oluşturulan bir değerdir. Veriyi gönderen düğüm, veri üzerinde bir takım işlemler yaparak 15 bitlik CRC değerini hesaplar ve çerçeveye ekler. Veriyi alan düğüm göndericinin yaptığı işlemler ile aynı işlemleri yapar ve CRC’yi tekrar hesaplar. Alınan ve hesaplanan CRC tutarlı ise veri doğru gönderilmiştir. Eğer alınan ve hesaplanan CRC birbiri ile eşleşmiyorsa alıcı gerekirse yeniden iletim isteyebilir veya hatalı paketi yok sayabilir.
CRC Delimiter(CRC Ayırıcı/sınırlayıcı) ise, CRC verilerinin nerede bittiğini gösterir. Bu her zaman 1 olmalıdır.
Acknowledgement(ACK): Onay anlamına gelir. Verinin doğru olarak alındığına onay vermek için kullanılır. Bu alan 2 bitiktir. İlk bit olan “ACK Slot” bitidir. Gönderici, bu biti resisif-çekinik(1) olarak gönderir. Eğer veri, en az bir alıcı tarafından doğru alınmışsa, alıcı yola dominant-baskın(0) biti yazar. Böylece gönderici mesajın en az bir alıcı tarafından alındığını anlar ama mesajın CAN ağındaki tüm düğümler tarafından alındığını bilemez. Birden fazla alıcı düğüm aynı anda 0 değerini belirtse bile herhangi bir soruna neden olmaz. Eğer gönderici dominant biti okuyamazsa, ACK işaretinden kaynaklı bir hata olduğuna kanaat getirir ve veriyi tekrar yollar.
Bu alanın ikinci biti ise “ACK Delimiter(ACK Ayırıcı/sınırlayıcı)” olarak adlandırılır. ACK yuvasını sınırlayan 1 bitlik bir alandır ve resesiftir-çekiniktir(1).
End-of-Frame (EOF): Her CAN çerçevesinin(mesajın) sonlandırıldığını belirten 7 bitlik alandır. Bu alandaki bitler resesiftir-çekiniktir(1).
Inter-Frame Spacing (IFS): “Çerçeveler Arası Boşluk” anlamına gelir. 3 bitlik bir alandır. IFS en az 3 ardışık resesif-çekinik(1) bitten oluşmalıdır. Denetleyicinin bir çerçeveyi(mesajı) arabellek alanındaki konumuna taşıması için gereken zamandır. Üç resesif-çekinik(1) bit geçtikten sonra, dominant-baskın(0) bir bit tespit edildiğinde, bu, bir sonraki çerçevenin SOF biti olur.
Stuff Bit: Senkronizasyonu sürdürmek için, yeterli geçiş sağlamak amacıyla, aynı polariteye sahip 5 ardışık bitten sonra zıt polariteye sahip bir bit eklenir. Bu uygulamaya bit doldurma denir ve CAN ile kullanılan sıfıra dönüşsüz (NRZ) kodlama nedeniyle gereklidir.
Yani 00000 ardışık olarak gönderildiğinde, sonraki bit, sonraki veri biti ne olursa olsun 1 olur. Yine aynı şekilde 11111 bitleri ardışık olarak gönderildiğinde, sonraki bit 0 olur. CAN denetleyicileri bu bitleri tanır ve gerçek veriden ayırır. Sabit boyutta olan CRC, ACK ve EOF haricindeki tüm alanlarda bit doldurma işlemi yapılır. Bit doldurmanın kullanıldığı alanlarda, aynı polariteye sahip 6 ardışık bit (111111 veya 000000) bir hata olarak kabul edilir.
Genişletilmiş Çerçeve(Extended Frame)
Genişletilmiş Çerçevedeki alanların çoğu Standart Çerçevede de olduğu için sadece farklı olan alanları açıklayalım.
Base ID: 29 bitlik ID'nin ilk 11 bitidir.
Substitute Remote Request (SRR): “Uzaktan İstek Yerine Geçme” anlamına gelir. SRR biti resesif-çekinik(1) olmalıdır.
Identifier Extension Bit (IDE): Tanımlayıcı Uzantısı anlamındadır. Bu tek bitlik IDE, çerçevenin hangi türde olduğunu tanımlar. Genişletilmiş çerçeve biçimi olduğu için resesif-çekinik(1) olmalıdır.
Extended ID: 29 bitlik ID'nin kalan 18 bitidir.
Reserved Bits (r1, r0): Kullanılmayan rezerve bitlerdir. Dominant-baskın(0) olarak ayarlanmış ancak baskın veya çekinik olarak kabul edilen ayrılmış bitlerdir.
CAN Veri İletim Hızları
Motor yönetiminden klimaya hibrit araçlardaki şarj sistemlerinden hidrolik direksiyona kadar CAN oldukça farklı alanlarda kullanılır. Tabi her alanın gerektirdiği veri hızı farklıdır. Mesela motordaki iletişim, konfordaki iletişime göre daha hızlı olmayı gerektirir. Bundan dolayı da her sistem için CAN ağ iletişimi farklı veri aktarım hızıyla sağlanır.
CAN protokolünün yaygın sürümleri arasında, veri hızı yetenekleri ve maksimum veri yükü boyutları bakımından farklılık gösteren CAN 2.0, CAN FD ve CAN XL bulunur.
Can 2.0 Düşük hızlı CAN:
Veri aktarım hızı 5 kBit/s ile 125 kBit/s arasındadır.
Klima yönetimi, koltuk ayarlama, elektrikli cam, açılır tavan, yan ayna ayarı, araç içi ışıklandırma, navigasyon gibi sistemlerde kullanılır.
ISO-Norm 11898–3’de tanımlanmıştır.
İki sonlandırma direnci kullanmak yerine, düğümler ağın genel empedansını 100 Ω civarında tutmak için kesirli değerler kullanacaktır.
Can 2.0 Yüksek hızlı CAN:
Veri aktarım hızı 125 kBit/s ile 1 Mbit/s arasındadır.
Motor yönetimi, elektronik şanzıman, sürüş denge sistemleri (ESP gibi), gösterge paneli gibi sistemlerde kullanılır.
ISO-Norm 11898–2’de tanımlanmıştır.
Her iki uçta 120 Ω dirençlerle sonlandırılmış doğrusal bir veri yolu kullanır.
Yukarıdaki tablodaki örneklerden de anlaşılacağı üzere düşük Hızlı CAN, sinyal sağlamlığını artırmak için daha büyük voltaj farkı kullanır. Voltajlara bakarak, Yüksek Hızlı CAN’ın Düşük Hızlı CAN ile uyumlu olmadığını söyleyebilirsiniz. Bu nedenle birini diğerine tercih etmek istediğinizde CAN alıcı-vericisini değiştirmeniz gerekir. Ancak CAN denetleyicisi aynı olabilir.
CAN FD
Modern yüksek performanslı araçlarda artan veri transferi ihtiyacını karşılamak için 2012 yılında Bosch tarafından geliştirilmiş ve piyasaya sürülmüştür. CAN Esnek Veri anlamına gelen CAN-FD ile iletişim daha hızlı ve daha akıllı hale geldi. Esnek bir veri hızı, mesaj başına daha fazla veri ve çok daha yüksek hızlı aktarımlar sunar. Her bir standart (düşük hız ve yüksek hız) CAN mesajı içindeki veri uzunluğu 8 bayttır. Ancak CAN FD ile bu, %800 artarak 64 bayta yükseltilmiştir. Ek olarak, maksimum veri hızı da 1 Mbps’den 8 Mbps’ye önemli ölçüde artırılmıştır.
CAN FD ileriye doğru atılmış önemli bir adımdır. Çünkü ECU’ların iletim hızlarını dinamik olarak değiştirmesine ve gerçek zamanlı gereksinimlere göre daha büyük veya daha küçük mesaj boyutlarını seçmesine olanak tanır. Artık yüksek performanslı araçlarda bulunur. ECU performansı arttıkça ve CAN FD donanım maliyetleri düştükçe, CAN FD’nin neredeyse tüm araçlara girmesi an meselesidir.
CAN FD ayrıca geriye dönük olarak uyumludur. CAN FD, CAN 2.0B ile aynı çerçeve formatını kullanarak ve çerçevenin bir CAN FD çerçevesi mi yoksa standart bir CAN 2.0 çerçevesi mi olduğunu belirtmek için yeni bir kontrol alanı ekleyerek CAN 2.0 aygıtlarıyla geriye dönük uyumluluğunu korur. Bu, CAN FD aygıtlarının aynı veri yolunda CAN 2.0 aygıtlarıyla birlikte var olmasına olanak tanırken, daha yüksek veri hızları ve daha büyük veri yükleri yalnızca diğer CAN FD aygıtlarıyla iletişim kurarken kullanılabilir.
CAN XL
CiA 610-1 tarafından belirtilen ve ISO11898-1'in bir parçası olarak standartlaştırılan CAN XL, 2048 bayta kadar yükleri ve 20 Mbit/s'ye kadar veri hızlarını destekler. CAN FD ve Ethernet (100BASE-T1) arasındaki boşluğu kapatır. CAN XL denetleyicileri ayrıca Klasik CAN ve CAN FD iletişimini de işleyebilir ve karma ağlarda uyumluluğu garanti eder. Geniş veri alanları, IP (İnternet Protokolü) ve Ethernet çerçevelerinin tünellenmesi gibi daha yüksek katman protokollerine olanak tanır.
CAN Kablo Uzunluğu ve Maksimum Hız
CAN veri yolu hattı, 120 Ω karakteristik empedansa sahip diferansiyel bir hat olmalıdır. Kablolama için, genellikle CAN-H ve CAN-L sinyalleri için bükümlü bir çift tel kullanılır. Telin bükümlü olması elektromanyetik parazitlerin her iki kablodaki sinyali eşit şekilde etkilemesine neden olur ve böylece hatalar en aza indirilir. GND bağlantısı için ekstra bir tel veya çift kullanılabilir. Kablo korumalı veya korumasız olabilir. Korumalıysa, kalkanın yalnızca bir ucu GND'ye veya Toprağa bağlanmalıdır. CAN bağlantıları için konnektör standardı yoktur. Genellikle; 9 pinli DSUB, 5-pin Mini-C ve/veya Micro-C, 6 pinli Deutch konektör, DE-9 veya benzeri bir konnektör kullanılır. Kablo uzunluğuna ve türüne bağlı olarak, maksimum mesafe veya hız aşağıdaki tabloda gösterildiği gibi sınırlandırılabilir.
NOT: Arduino Uno’da CAN Bus iletişim pinleri yok ama MCP2515 dönüştürücü ile Arduino Uno’nun SPI pinlerinden CAN Bus iletişim sağlanabilir. Arduino Due’nin Can Bus iletişim pinleri var. ESP32 mikro denetleyicisinin de CAN Bus iletişim pinleri var.
Kaynaklar:
https://en.wikipedia.org/wiki/CAN_bus#Remote_frame
https://devreyakan.com/can-bus-nedir/
http://www.barissamanci.net/Makale/15/can-bus-nedir-can-protokolu-incelemesi/

0 comments:
Yorum Gönder