İçindekiler:

CANBUS için Basit Bir Eğitim: 8 Adım
CANBUS için Basit Bir Eğitim: 8 Adım

Video: CANBUS için Basit Bir Eğitim: 8 Adım

Video: CANBUS için Basit Bir Eğitim: 8 Adım
Video: STM32 CAN BUS HABERLEŞME UYGULAMA - 4 | CANOpen ENKODERDEN VERİ OKUMA | GETTING DATA FROM ENCODER 2024, Temmuz
Anonim
CANBUS için Basit Bir Eğitim
CANBUS için Basit Bir Eğitim

Üç haftadır CAN eğitimi alıyorum ve şimdi öğrenme sonuçlarımı doğrulamak için bazı uygulamaları tamamladım. Bu eğitimde, CANBUS iletişimini uygulamak için Arduino'yu nasıl kullanacağınızı öğreneceksiniz. Herhangi bir öneriniz varsa, mesaj bırakmaktan memnuniyet duyarız.

Gereçler:

Donanım:

  • Maduino Zero CANBUS
  • DHT11 Sıcaklık ve Nem Modülü
  • 1.3" I2C OLED 128x64- Mavi
  • DB9 - DB9 kablosu (dişi - dişi)
  • Dupont Hattı

Yazılım:

Arduino IDE'si

Adım 1: CANBUS Nedir?

CANBUS Nedir?
CANBUS Nedir?
CANBUS Nedir?
CANBUS Nedir?

CAN Hakkında

CAN (Kontrolör Alan Ağı), dağıtılmış gerçek zamanlı kontrolü gerçekleştirebilen bir seri iletişim ağıdır. Karmaşık kablo demetini iki telli bir bus ile değiştirmek için otomotiv endüstrisi için geliştirilmiştir.

CAN protokolü, OSI modelinde Veri Bağlantı Katmanını ve Fiziksel Katmanın bir bölümünü tanımlar.

CAN protokolü, ISO11898 ve ISO11519 ile ISO standardize edilmiştir. ISO11898, 125kbps-1Mbps iletişim hızına sahip CAN yüksek hızlı iletişim standardıdır. ISO11519, 125 kbps'den daha düşük bir iletişim hızına sahip CAN düşük hızlı iletişim standardıdır.

Burada yüksek hızlı CAN'a odaklanıyoruz.

ISO-11898, bilgilerin bir ağdaki cihazlar arasında nasıl iletildiğini ve katmanlar olarak tanımlanan Açık Sistemler Ara Bağlantı modeline (OSI) uygun olduğunu açıklar. Fiziksel ortam tarafından bağlanan cihazlar arasındaki gerçek iletişim, modelin fiziksel katmanı tarafından tanımlanır

  • Veri yoluna bağlı her CAN birimine düğüm denilebilir. Tüm CAN birimleri, bir ağ oluşturmak için her bir uçta 120 Ω dirençle sonlandırılan bir veri yoluna bağlanır. Otobüs CAN_H ve CAN_L hatlarından oluşmaktadır. CAN denetleyicisi, her iki kablodaki güç seviyesindeki farka dayalı olarak veri yolu seviyesini belirler. Otobüs seviyeleri, bunlardan biri olması gereken baskın ve resesif seviyelere ayrılmıştır. Gönderici, bus düzeyinde bir değişiklik yaparak mesajı alıcıya gönderir. Veri yolunda "ve" mantıksal satırı çalıştırıldığında, baskın düzey "0" ve çekinik düzey "1" olur.
  • Baskın durumda, CAN_H'nin voltajı yaklaşık 3.5V'dir ve CAN_L'nin voltajı yaklaşık 1.5V'dir. Resesif durumda, her iki hattın voltajı 2,5V civarındadır.
  • Sinyal diferansiyeldir, bu nedenle CAN sağlam gürültü bağışıklığını ve hata toleransını türetmektedir. Dengeli diferansiyel sinyal, gürültü bağlantısını azaltır ve bükümlü çift kablo üzerinden yüksek sinyal oranlarına izin verir. Her sinyal hattındaki akım eşittir ancak zıt yöndedir ve düşük gürültü emisyonlarının anahtarı olan bir alan iptal etme etkisi ile sonuçlanır. Dengeli diferansiyel alıcıların ve bükümlü çift kablolamanın kullanılması, bir CAN veriyolunun ortak mod reddini ve yüksek gürültü bağışıklığını artırır.

CAN alıcı-verici

CAN Alıcı-Verici, mantık seviyesi ile fiziksel sinyal arasındaki dönüşümden sorumludur. Mantıksal bir sinyali diferansiyel düzeye veya fiziksel bir sinyali mantıksal düzeye dönüştürün.

CAN Kontrolörü

CAN Denetleyicisi, CAN protokolündeki veri bağlantı katmanının tüm işlevlerini gerçekleştiren ve CAN protokolünü otomatik olarak çözebilen CAN'ın temel bileşenidir.

MCU

MCU, fonksiyon devresinin ve CAN kontrolörünün kontrolünden sorumludur. Örneğin, CAN denetleyici parametreleri düğüm başladığında başlatılır, CAN çerçevesi okunur ve CAN denetleyicisi aracılığıyla gönderilir, vb.

2. Adım: CAN İletişimleri Hakkında

Veri yolu boştayken, tüm düğümler mesaj göndermeye başlayabilir (çoklu ana kontrol). Bus'a ilk erişen düğüm gönderme hakkını alır (CSMA/CA modu). Birden fazla düğüm aynı anda göndermeye başladığında, yüksek öncelikli kimlik mesajını gönderen düğüm gönderme hakkını alır.

CAN protokolünde tüm mesajlar sabit bir formatta gönderilir. Otobüs boştayken, bus'a bağlı tüm birimler yeni mesaj göndermeye başlayabilir. İkiden fazla hücre aynı anda mesaj göndermeye başladığında, öncelik tanımlayıcıya göre belirlenir. Kimlik, gönderimin hedef adresini değil, veriyoluna erişen mesajın önceliğini temsil eder. İkiden fazla hücre aynı anda mesaj göndermeye başladığında, faizsiz kimliğin her bir biti birer birer hakem edilir. Hakemliği kazanan birim mesaj göndermeye devam edebilir ve hakemliği kaybeden birim işi göndermeyi hemen durdurur ve alır.

CAN veri yolu, bir yayın veri yolu türüdür. Bu, tüm düğümlerin tüm aktarımları 'duyabileceği' anlamına gelir. tüm düğümler her zaman tüm trafiği alır. CAN donanımı, her düğümün yalnızca ilginç mesajlara tepki verebilmesi için yerel filtreleme sağlar.

3. Adım: Çerçeveler

çerçeveler
çerçeveler

CAN cihazları, CAN ağı üzerinden çerçeve adı verilen paketler halinde veri gönderir. CAN'ın dört çerçeve türü vardır:

  • Veri çerçevesi: iletim için düğüm verilerini içeren bir çerçeve
  • Uzak çerçeve: belirli bir tanımlayıcının iletilmesini talep eden bir çerçeve
  • Hata çerçevesi: bir hata algılayan herhangi bir düğüm tarafından iletilen bir çerçeve
  • Aşırı yükleme çerçevesi: veri veya uzak çerçeve arasına bir gecikme enjekte etmek için bir çerçeve

Veri çerçevesi

Standart ve genişletilmiş olmak üzere iki tür veri çerçevesi vardır.

Şekildeki bit alanlarının anlamı:

  • SOF–Çerçevenin tek baskın başlangıcı (SOF) biti, mesajın başlangıcını işaretler ve boşta kaldıktan sonra bir veriyolundaki düğümleri senkronize etmek için kullanılır.
  • Tanımlayıcı-Standart CAN 11 bit tanımlayıcı, mesajın önceliğini belirler. İkili değer ne kadar düşükse, önceliği o kadar yüksek olur.
  • RTR–Tek uzak iletim talebi (RTR) biti
  • IDE–Baskın tek tanımlayıcı uzantısı (IDE) biti, uzantısı olmayan standart bir CAN tanımlayıcısının iletildiği anlamına gelir.
  • R0 – Ayrılmış bit (gelecekteki standart değişiklikle olası kullanım için).
  • DLC–4 bitlik veri uzunluğu kodu (DLC), iletilen veri baytlarının sayısını içerir.
  • Veri–64 bite kadar uygulama verisi iletilebilir.
  • CRC–16 bit (15 bit artı sınırlayıcı) döngüsel artıklık denetimi (CRC), hata tespiti için önceki uygulama verilerinin sağlama toplamını (iletilen bit sayısı) içerir.
  • ACK–ACK 2 bittir, biri onay biti ve ikincisi sınırlayıcıdır.
  • EOF–Bu çerçeve sonu (EOF), 7 bitlik alan, bir CAN çerçevesinin (mesajın) sonunu işaretler ve baskın olduğunda bir doldurma hatası göstererek bit doldurmayı devre dışı bırakır. Normal çalışma sırasında aynı mantık seviyesinden 5 bit art arda oluştuğunda, veriye zıt mantık seviyesinden bir bit doldurulur.
  • IFS–Bu 7 bit çerçeveler arası alan (IFS), denetleyici tarafından doğru alınan bir çerçeveyi mesaj arabelleği alanındaki uygun konumuna taşımak için gereken süreyi içerir.

Tahkim

Bus bekleme durumunda, mesajı ilk göndermeye başlayan birim, gönderme hakkını alır. Birden fazla birim aynı anda göndermeye başladığında, her bir gönderme birimi tahkim segmentinin ilk bitinde başlar. En fazla sayıda sürekli çıktı baskın düzeyine sahip birim göndermeye devam edebilir.

Adım 4: Hız ve Mesafe

Hız ve Mesafe
Hız ve Mesafe

CAN veri yolu, aynı anda birden fazla birimi birbirine bağlayan bir veri yoludur. Bağlanabilecek toplam ünite sayısında teorik olarak bir sınır yoktur. Ancak pratikte bağlanabilecek ünite sayısı, bus üzerindeki zaman gecikmesi ve elektrik yükü ile sınırlıdır. İletişim hızını azaltın, bağlanabilecek ünite sayısını artırın ve iletişim hızını artırın, bağlanabilecek ünite sayısını azaltın.

İletişim mesafesi, iletişim hızıyla ters orantılıdır ve iletişim mesafesi ne kadar uzak olursa iletişim hızı o kadar küçük olur. Daha uzun mesafe 1 km veya daha fazla olabilir, ancak hız 40kps'den azdır.

Adım 5: Donanım

Donanım
Donanım

Maduino Zero CAN-BUS modülü, Makerfabs tarafından CANbus iletişimi için geliştirilmiş bir araçtır, kullanıma hazır bir CAN-bus bağlantı noktası oluşturmak için CAN denetleyicisi ve CAN alıcı-vericisi ile Arduino'ya dayanmaktadır.

  • MCP2515, CAN spesifikasyonunu uygulayan bağımsız bir CAN denetleyicisidir. Hem standart hem de genişletilmiş verileri ve uzak çerçeveleri iletme ve alma yeteneğine sahiptir.
  • MAX3051, CAN protokol denetleyicisi ile bir denetleyici alan ağındaki (CAN) veri yolu hatlarının fiziksel kabloları arasında arabirim oluşturur. MAX3051, veriyoluna diferansiyel iletim yeteneği ve CAN kontrolörüne diferansiyel alma yeteneği sağlar.

6. Adım: Bağlantı

Bağlantı
Bağlantı

CAN iletişimini desteklemek için bir araç olarak kullanılacak kablolarla DHT11 modülünü Maduino Zero CAN-BUS modülüne bağlayın. Benzer şekilde, verileri almak ve görüntülemek için ekranı modüle bağlayın.

Maduino Zero CANBUS ve DHT11 arasındaki bağlantı:

Maduino Zero CANBUS -- DHT11

3v3 ------ VCC GND ------ GND D10 ------ VERİ

Maduino Zero CANBUS ve OLED arasındaki bağlantı:

Maduino Zero CANBUS -- OLED

3v3 ------ VCC GND ------ GND SCL ------ SCL SDA ------ SDA

İki Maduino Zero CANBUS modülünü bağlamak için bir DB9 kablosu kullanın.

7. Adım: Kod

MAX3051, diferansiyel seviyelerin mantıksal sinyallere dönüştürülmesini tamamlar. MCP2515, veri kodlama ve kod çözme gibi CAN işlevini tamamlar. MCU'nun yalnızca denetleyiciyi başlatması ve veri gönderip alması gerekir.

  • Github:
  • Arduino kurulduktan sonra kurulması gereken boardu (Arduino Zero) destekleyecek bir paket bulunmamaktadır.
  • Araçları seçin ->Board -> Board Manager, "Arduino zero" öğesini arayın ve "Arduino SAMD Boards" yükleyin.
  • Araçlar -> Tahta -> Arduino Sıfır (Yerel USB Bağlantı Noktası) öğesini seçin, Araçlar -> Bağlantı Noktası -> com… öğesini seçin.
  • Programı GitHub'dan aldıktan sonra, tüm dosyaların CANBUS'u destekleyen kitaplık dosyalarının bulunduğu proje dizininde olduğundan emin olmanız gerekir.
  • Sıcaklık ve nem elde etmek için DHT11'i sürmek için kullanılan Adafruit'in DHT sensör kitaplığını kurun.
  • Test_DHT11.ino kodunda sıcaklık ve nemi ayrı ayrı göndermek için farklı adresler kullanın.

CAN.sendMsgBuf(0x10, 0, stmp1.length(), stmp_send1);

gecikme(500); CAN.sendMsgBuf(0x11, 0, stmp2.length(), stmp_send2); gecikme(500);

“0x10” mesaj kimliği, “0” standart çerçeve, “stmp1.length()” mesaj uzunluğu, “stmp_send1” gönderilen veridir.

  • Test_OLED.ino kodunda CANBUS üzerindeki tüm mesajlar sorgulanarak alınır ve gerekli bilgiler OLED üzerinde görüntülenir.
  • Sensöre bağlı olan modüle Maduino-CANbus-RS485/Test_DHT11_OLED/Test_DHT11/Test_DHT11.ino programını, OLED'e bağlı başka bir modüle Maduino-CANbus RS485/Test_DHT11_OLED/Test_OLED/Test_OLED.ino programını yükleyin.

Adım 8: Göster

Göstermek
Göstermek
Göstermek
Göstermek

İki modülü açın, ekranda sıcaklık ve nem görüntülenecektir.

Önerilen: