Video Transkripti:
Bryan Hennessy: [00:00:02] Şimdi bit-odaklı tahkim(arbitrasyon) konusuna geçeceğiz. NMEA 2000’i ilk çalıştığımda, sanırım 2003 veya 2004’tü, denizcilik endüstrisine yeni girmiştim, bit-odaklı arbitrasyon gerçekten çalıştığım şeydi. Buna aşık oldum çünkü kariyerimin önceki 20 yılında dijital iletişim ve makine iletişimi yaparken karşılaştığım pek çok sorunu çözüyordu. Çok mantıklıydı. Okudum ve şöyle düşündüm: “Vay canına, bunu neden ben düşünemedim? Bu çok basit.” Çok basit ama bir o kadar da güçlü olan bu bit-odaklı arbitrasyon şeyini anlamam ve daha fazla kullanmam gerekiyordu. İşte o zaman tüm kariyerimin odağını CAN’a doğru kaydırdım.
Diferansiyel sinyalleşme hakkında konuştuğunuzda, bir voltajı ölçtüğünüzde veya bir kablodaki voltaja baktığınızda, onu bir referansla ölçmeniz gerekir. Başka bir referansa karşı ölçülmelidir. Aksi takdirde, [00:01:00] hiçbir şey ifade etmez. Yani tıpkı bir yüksekliği ölçmek gibi. Neyin üzerindeki yükseklik? Bir şeyin üzerinde olması gerekir. Bir referans noktasına sahip olmalısınız.
Dolayısıyla mühendisler, elektrik mühendisleri bunu kesinlikle çok iyi anlarlar. Bu CAN_Low ve CAN_High sinyallerinin ve bu sinyallerdeki voltajların bir gösterimi. Bu slayta birkaç şey eklemem gerekiyor ama bu sefer onlardan bahsedeceğim. Burada farklı zaman aralıklarımız var, zaman bir, zaman iki, zaman üç. Birinci zaman diliminde CAN_High sinyali yaklaşık 2,5 volt, CAN_Low sinyali de yaklaşık 2,5 volttur. Buna 1 veya çekinik bit veya iletim veya çekinik durum denir. Burada isimler önemlidir çünkü bir anlam ifade ederler.
İkinci zaman diliminde ve bu, bir osiloskopta veya birçok farklı diyagramda olduğu gibi soldan sağa doğru giden zamandır, ikinci zaman diliminde baskın bir bitimiz vardır. [00:02:00] CAN_ High üzerinde yaklaşık 3,5 volt ve CAN_Low üzerinde yaklaşık 1,5 volt var. Bunlar elbette bir vericiden çıkan voltajlardır. Ağda aşağı doğru indikçe voltajlar çok daha düşük olabilir. Ancak diferansiyel sinyalleşme ya da diferansiyel sinyalleşmenin anlamı basitçe alıcıların bu iki sinyal arasındaki farkı ölçmesi ve çok az fark olduğunu ya da hiç fark olmadığını ya da oldukça önemli bir fark olduğunu görebilmesidir. Alıcıdaki bu fark kesinlikle burada olduğu gibi 2 volt olmayabilir, fark bir voltun onda ikisi olabilir, ancak yine de onu alacaktır çünkü diferansiyel sinyallemede sinyal iki kablo üzerinde uzun bir yol kat eder ve bunu ayırt etmek veya alıcının bir kabloyu çıkarıp anlaması oldukça kolaydır. Dolayısıyla, diferansiyel sinyalleşme ile oldukça büyük bir ağda istediğimiz zaman [00:03:00] ağ boyunca güvenilir bir şekilde 0 alabiliriz ve ağ boyunca güvenilir bir şekilde 1 alabiliriz.
Pek çok mühendis diferansiyel sinyalleşmenin tek uçlu sinyalleşmeden daha güvenilir olduğunu söyleyecektir, burada tek bir kabloyu toprağa referansla ölçersiniz. Yani voltaj yalnızca iletim kablolarınızdan birinde, iletişim kablolarınızdan birinde değişiyor. Toprak diğer kablodur. Birçok insan bunun çok uzağa iletilmeyeceğini söyler çünkü özünde hat boyunca enerji gönderirsiniz. Diferansiyel sinyalleşmede, hatta gönderdiğiniz ortalama enerji gerçekten sıfır olmalıdır çünkü 0’lardan 1’lere doğru dengelenir. Yani gerçekten de hat boyunca hiç enerji gönderilmemelidir, bu da daha az direnç, sinyalde daha az düşüş olması gerektiği anlamına gelir. Bunun ne kadar doğru olduğunu bilmiyorum ama pek çok mühendis böyle söylüyor.
Katılımcı: Kısa bir sorum var.
Bryan Hennessy: Evet.
Katılımcı: Tolerans ölçümlerde olduğunda, [00:04:00] sanırım bu CAN’in üstündeki farklı standartlar tarafından belirleniyor.
Bryan Hennessy: Evet.
Katılımcı: Sanırım sinyali ne kadar uzağa gönderdiğinize bağlı olarak kullanım durumlarına da bağlı.
Bryan Hennessy: Evet. Ben de bu konuya biraz değinecektim. Sanırım biraz girdim. Düşen kablo mesafesi, baud hızı farklı sektörlerde farklı olabilir. Örneğin CANopen, her türlü farklı baud hızını belirleyebilirsiniz. Bu bir dengedir ve çoğu durumda tasarımcı sistemi sırasında ayarlanır. Toleranslar söz konusu olduğunda, bu CAN standardı tarafından belirlenir ve alıcılarda ve vericilerde, özellikle de alıcılarda yerleşiktir. CAN’de her alıcı bir vericidir. Aslında veriyolu üzerinde bir alıcı-verici devresi örneğinin şeması geliyor.
Tam toleransları bilmiyorum, spesifikasyona geri dönmem gerekecek. Mesele şu ki [00:05:00], mühendislikte buna bazı eşikler diyoruz, alıcının bu ya sıfır ya da bu ya bir ya da muhtemelen bu bir hiç kimsenin toprağı diyeceği ve bunu gerçekten belirleyemeyeceğim.
Katılımcı: Harvard departmanında çalışırken, tüm ürünler için test dinlenmesiyle çok çalıştığımı söyleyebilirim. Yani her pozitif ürün üretimden sonra test edilir ve elimizden geldiğince zorlamaya çalışırız. Çalışmamasını sağlamanın gerçekten çok zor olduğunu söyleyebilirim. En azından normal CAN ile. Henüz CAN FD ile çalışmadım ama normal CAN gerçekten zor. Sinyale osiloskop ile baktım. Bunun bir CAN sinyali olduğunu bile göremedim. Yani çok karışıktı ama yine de çalıştı. Yani, bir ağınız varsa ve dar bir çerçeve ya da başka bir şey alırsanız, baktığınızda muhtemelen bunun bir CAN kanalı olduğunu bile göremezsiniz [00:06:00].
Yani, her şey yolundaysa, bu şekilde görünür. Ancak CAN ağında pek çok şey yapabilirsiniz çünkü çalışırlar.
Bryan Hennessy: Birçok insanın CAN’ın çok güvenilir olduğunu söylediğini duydum çünkü bir CAN ağı üretebilirsiniz ve ona bakmak, doğrulamak ve her şeyin doğru çalıştığından emin olmak için gerçekten doğru adımları atmazsanız, çalışacaktır ama tamamen yanlış şekilde çalışıyor olabilir. Üzerinde yanlış bir sonlandırıcı veya yanlış bir değer olabilir ya da kablolama standardın söylediğinden tamamen yanlış olabilir. Ama hey, çalışıyor, o zaman bunlardan bir milyon tane üretelim ve müşterilere gönderelim. Sonra bir bakmışsınız ki, “Aman Tanrım, bu konuda sınıra çok yaklaşmışım ve bu doğru değil ve hepsi burada çalışmıyor.” Eminim birçoğunuzun bildiği gibi üretim dünyasında %2’lik bir arıza oranının sizi işinizden edeceği pek çok uygulama vardır ve %99,9’luk bir düzgün çalışma oranı ve çok çok küçük bir arıza oranı elde edebilmek için bunu doğru yapsanız iyi edersiniz.
Ama evet, CAN’ın neredeyse fazla güvenilir olmasıyla ilgili tüm mesele bu. Çalışmaması gereken pek çok durumda çalışıyor. Bunun büyük bir kısmı diferansiyel sinyalleşme ve bit-bilge arbitrasyonundan kaynaklanıyor.
Böylece herhangi bir CAN alıcı-vericisinde veya verici çipinde sinyalin vericide neye benzediğini anlıyoruz. Kvaser verici çipleri üretmiyor. Biz silikon yapmıyoruz. Bunu yapmak için TI’dan, microchip’ten ya da diğer silikon tedarikçilerinden silikon kullanıyoruz. Ancak, umarım, tüm silikonlar ve odada başka silikon tasarımcılarımız da vardır, sanırım, tüm silikonlar standardı düzgün bir şekilde karşılamak ve CAN standardı için uygun bir alıcı-verici olmak üzere tasarlanmıştır.
Bu yüzden bu çok önemli bir slayt. Bu slayt, bit-odaklı arbitrasyonu anlamak için. [00:08:00] Slaytta bir ağ üzerindeki iki düğüm gösterilmektedir. Burada açıklayacağım şeyin arkasındaki teori 2, 3, 4, 50, 100 ve alt durumlar olabilir. Ben genellikle 50 diyorum çünkü NMEA 2000 özellikleri 50’de duruyor ve bunun maksimum olduğunu söylüyorlar. Ancak diğer ağlarda eminim 50’den fazla ve herhangi bir ağda CAN ile diğer bazı uygulamalar vardır. Teorik olarak bir maksimum değer var. Bunun ne olduğunu gerçekten bilmiyorum. Bit hızına ve diğer şeylere bağlı olacaktır, ancak maksimum hakkında endişelenmeyeceğiz. Ama çok yüksek.
Yani bir ağda iki düğüm varsa, burada soldan sağa doğru dört zaman diliminiz var. Bir de veriyolunda olanlar var. Şimdi size gösterdiğim CAN ağını hatırlamalısınız. Her düğüm aynı iki kabloya bağlıdır, bu yüzden ağda sadece iki kablo vardır. Dolayısıyla, herhangi bir zamanda her bir kabloda bir tane olmak üzere yalnızca iki gerçek gerilim olabilir.
Yani şuradaki birinci zaman diliminde, [00:09:01] A Düğümü 1 iletiyor ve B Düğümü 1 iletiyor. 1’in çekinik veya baskın olduğunu söylesek de, çekinik bir bit olduğunu söyledik. Yani CAN veriyolu, veriyolunu oluşturan iki kablo yüzer. Veriyolunda hiçbir şey iletilmiyorsa ve sadece boştaysa, bu durumda olacaktır, çekinik durumda olacaktır.
Biraz geri gitmeliyim. Herhangi bir veri iletişim şemasında boğuştuğunuz şeylerden biri de çarpışmaların azaltılmasıdır. İki cihaz aynı anda iletim yapmak isterse, bununla nasıl başa çıkarsınız? Sistem bununla nasıl başa çıkıyor? Ethernet ağında bir grup cihaz varsa ve bunlardan ikisi aynı anda veri göndermeye başlarsa, bu bir voltaj yükselmesine neden olur ve alıcılar bu yükselmeyi algılar ve bir çarpışma olduğunu anladıkları için geri çekilirler. Ethernet standardı aslında [00:10:00] rastgele bir süre beklediklerini ve verilerini iletmek için tekrar denediklerini ve bir çarpışma olmamasını umduklarını söylüyor.
Şimdi yoğun bir Ethernet ağında bu iyi bir şey değildir. Rastgele zaman miktarı iyi bir şey değildir. CAN çok deterministiktir. Bir kontrol sistemi için yüksek öncelikli bir bilgi göndermeniz gerektiğinde, örneğin durmam gerektiği için arabamda frene basmak gibi, bu CAN sisteminiz üzerinden almak istediğiniz oldukça önemli bir mesajdır, denklemin hiçbir yerinde rastgele zaman miktarımızı istemezsiniz. Belirlenmiş deterministik zaman miktarları istiyorsunuz ve CAN burada devreye giriyor ve CAN’ın Ethernet’e göre en büyük avantajlarından biri de bu. Bunun nedeni, bit bazlı tahkim ve mesajların önceliklendirilmesidir.
Tekrar A zaman dilimine dönecek olursak, hem A düğümü hem de B düğümü çekinik bir durum iletmektedir. Timeslot B gelir ve hem Node A hem de Node B iletecek verimin olduğunu söyler. Çerçeve başlangıcı biti olan baskın bir durum ileteceğim. Yani, eğer kimse veri yoluna sahip olmasaydı [00:11:00] ve zaman aralığı 1 sırasında kimse iletim yapmasaydı, bu bir çerçeve başlangıcı biti olurdu. Timeslot 2 bir çerçeve başlangıcı bitidir ve hem Düğüm A hem de Düğüm B’nin iletmek için bir çerçevesi vardır. Verimiz var. Göndereceğiz.
Daha sonra göreceğiniz gibi, timeslot 3 üç öncelik bitinin ilki olacaktır. Yani zaman aralığı 3 gelir ve işler burada ilginçleşir. A düğümü diyor ki ben 1 göndereceğim ve B düğümü diyor ki ben 0 göndereceğim, çünkü benim önceliğim şu, bu bundan daha yüksek öncelikli olacak. Bunu daha sonra açıklayacağım. Ama o sadece 0 gönderiyor, bu 1 gönderiyor.
Peki bu noktada veri yolunda ne görünecek? Tabii ki burada 1 görünecek çünkü ikisi de onu iletiyor. Burada, her ikisi de bu sinyali gönderdiği için veri yolunda bir 0 görünecektir. Ancak burada biri 1 diğeri 0 gönderiyor. Bu çekinik ve bu baskın. [00:12:00] Veriyolunda görünen şey – nedenini daha sonra elektriksel olarak göstereceğim – 0’dır. Bir CAN alıcı-vericisi veriyoluna her bir şey gönderdiğinde, veriyolunda gerçekte ne olduğunu geri okur. Yani alıcı devre. Ve ilettiği şeyle eşleşmezse, bir şey biliyor demektir. Bildiği şey şudur: “Hey, bu veri yolunda bir şey ileten başka biri var ve benim için daha yüksek önceliğe sahip, bu yüzden iletimi bıraksam iyi olur.”
Yani bu noktada, tam burada, Düğüm A diyecek ki 1 gönderiyorum ve 0 okuyorum, daha yüksek öncelikli bir cihaz iletim yapıyor. İletimi durduracağım. Bu noktadan sonra, A Düğümü veriyolunu resesif durumda bırakır, böylece veriyolunu hiç kullanmaz. B düğümünün bu noktada bir tahkimi vardır. Bit-odaklı tahkim bu kadar basittir. Hepsi bu kadar.
[00:13:01] Timeslot 4, her ikisi de resesif duruma geri dönüyor ve elbette veri yolunda bir resesif görünecek. Bu konuda sorusu olan var mı?
Bu önemli bir kavram. Birincisi, size 0 önceliğinin 1, 2 veya 3 önceliğinden daha iyi olduğunu söylediğimde bunu anladığınızda, J1939 şemasında veya NMEA 2000’de veriyolundaki daha düşük sayının ve önceliğin üç bit olduğunu, nedenini tam olarak anladığınızı söyler. “Hey, 0’ın neden 7 veya 6’dan ya da başka herhangi bir sayıdan daha öncelikli olduğunu anlıyorum çünkü 0, herhangi bir çekinik bitin aksine üç baskın bittir.
Katılımcı: Peki bu CAN ağındaki [00:14:00] adresle aynı şey mi?
Bryan Hennessy: Bu iyi bir soru çünkü bu veri bağlantı katmanı tarafından belirlenir, ki fiziksel katmanı aştığımızda bundan bahsedeceğiz. Bazen, bu adrestir. Bazen de önceliktir. CAN kullanan farklı endüstrilerde farklıdır. Hangi endüstride olduğunuza bağlı olarak bu farklı şekilde tanımlanabilir. Bu farklı şekilde kullanılabilir. Ama yine de fiziksel katmanda bit bazında tahkim söz konusudur.
Bunu gerçek bir CAN alıcı-vericisinin teknik özellik sayfasından aldım. Belki istediğimden biraz daha karmaşık ama mesajı iletiyor. CAN mikrodenetleyiciniz solda, CAN_Low ve CAN_High ise sağda yer alıyor. Yani bunlar aslında CAN veri yolundaki iki kablonuz.
Buradan gerçekten çıkarmanızı istediğim tek şey şu, yani bunlar sadece buraya gelen TTL sinyalleri. [00:15:00] Yani, bir şey iletiyor. Sonra vericiyi açan bu onay sinyali var. Yani bu verici çekinik durumdaysa, bir şey iletmiyorsa veya 1 iletiyorsa, hiçbir şey iletmediğinizde arama sinyali kapalı olacaktır. Yani temel olarak bunların hangi voltajlarda olduğunu veya bu cihazın bu hatları hangi voltaja sürdüğünü anlamak için, bunu devreden çıkarmanız yeterlidir. Bunu devreden çıkarırsanız, burada sadece bir direnç bölücünüz olur ve dirençler aynı değerdedir, bu nedenle bu hatların her ikisindeki voltaj aynı olacaktır çünkü ikisi de direnç bölücüdür. Voltajlar sadece VCC ile toprak arasında bir orta voltaj olacaktır.
Eğer diferansiyel sinyalleşme hakkında size gösterdiğim diyagramı tekrar düşünürseniz, [00:16:00] bunlar sadece orta voltajda yüzer durumdadır. Bir şeyi sürmek istediğinizde ve TX’e aktif bir sinyal geldiğinde ve bu sürücüyü assert sinyali ile açtığınızda, bunları sürücünün onları sürmek için tasarlandığı duruma süreceksiniz ve dirençler sinyalleri bu voltaja çekmenize izin verecek ve sonra baskın bir duruma sürüyorsunuz. Yani diğer uçtaki işlemci bunu sürüp sürmeyeceğine ve ne zaman süreceğine dair tüm kararları veriyor. Geri bildirim tam buradan geliyor. Yani iletimle aynı şey olduğundan emin olmak için alma hattını okuyacak. Yani işlemci ağ üzerinde tam kontrole sahip.
Katılımcı: Ortak bir zemini paylaşması gerektiğini düşünüyor musunuz?
Bryan Hennessy: CAN’de her durumda gerekmez. Çoğu cihaz paylaşır. Çoğu sistem bunu yapar. NMEA 2000’de buna kalkan diyorlar. Kabloyu ekranlıyorlar ama buna gerek yok. [00:17:01] İki CAN cihazı kesinlikle ortak bir zemin olmadan birbirleriyle konuşacak ve iletişim kuracaktır. Tam burada, bu ağ üzerinde ortak bir topraklama yok. Diferansiyel sinyalleşmenin bir diğer güzel yanı da ortak bir toprağa ihtiyaç duymamanızdır.
CAN’ın bazı kullanımlarında temel olarak gürültü azaltma, sistemdeki gürültü için ortak bir topraklama belirtilir, ancak diferansiyel sinyallemede bu gerekli değildir.
Bu J1939 spesifikasyonundan çalınmıştır. Bu aslında teşhis araçlarından ve bunların nasıl takıldığından bahseden J1939-84 spesifikasyonundan çalınmıştır. Bunu sadece farklı endüstrilerin CAN kullanırken ayarlamaları gereken bazı şeylerin temsili bir diyagramı olarak kullanıyorum, örneğin ana kablo uzunluğu, maksimum ana kablo uzunluğu, buradaki düşme kablosu uzunlukları, dirençten [00:18:00] ilk düşme kablosuna kadar olan uzunluk ve bunlar. Yani farklı teknik özellikler, ne kadar hızlı gittiklerine, hangi kabloyu kullandıklarına, bükümlü çift olup olmadığına, hangi ölçüye sahip olduğuna, hangi yalıtım olduğuna bağlı olarak bunların farklı maksimumlar, minimumlar olduğunu söyleyecektir, bunların hepsi farklı endüstrilerde değişebilen şeylerdir. Yine rakamlar göreceksiniz. Bu J1939’dan alınmış bir örnektir, ancak farklı sektörlerde bu farklı değerler için farklı sayılar göreceksiniz.