Isi kandungan:

Tutorial Ringkas untuk CANBUS: 8 Langkah
Tutorial Ringkas untuk CANBUS: 8 Langkah

Video: Tutorial Ringkas untuk CANBUS: 8 Langkah

Video: Tutorial Ringkas untuk CANBUS: 8 Langkah
Video: CAN Bus communication explained in 5 minutes 2024, Julai
Anonim
Tutorial Ringkas untuk CANBUS
Tutorial Ringkas untuk CANBUS

Saya telah belajar CAN selama tiga minggu, dan sekarang saya telah menyelesaikan beberapa aplikasi untuk mengesahkan hasil pembelajaran saya. Dalam tutorial ini, anda akan belajar bagaimana menggunakan Arduino untuk melaksanakan komunikasi CANBUS. Sekiranya anda mempunyai cadangan, selamat datang untuk meninggalkan mesej.

Bekalan:

Perkakasan:

  • Maduino Zero CANBUS
  • Modul Suhu & Kelembapan DHT11
  • 1.3 "I2C OLED 128x64- Biru
  • Kabel DB9 hingga DB9 (wanita ke wanita)
  • Talian Dupont

Perisian:

Arduino IDE

Langkah 1: Apa itu CANBUS

Apa itu CANBUS
Apa itu CANBUS
Apa itu CANBUS
Apa itu CANBUS

Mengenai BOLEH

CAN (Controller Area Network) adalah rangkaian komunikasi bersiri yang dapat mewujudkan kawalan masa nyata yang diedarkan. Ia dikembangkan untuk industri automotif untuk menggantikan tali pendawaian kompleks dengan bas dua wayar.

Protokol CAN menentukan Lapisan Pautan Data dan sebahagian daripada Lapisan Fizikal dalam model OSI.

Protokol CAN diseragamkan ISO dengan ISO11898 dan ISO11519. ISO11898 adalah standard komunikasi berkelajuan tinggi CAN dengan kelajuan komunikasi 125kbps-1Mbps. ISO11519 adalah standard komunikasi berkelajuan rendah CAN dengan kelajuan komunikasi kurang dari 125kbps.

Di sini kita memberi tumpuan kepada CAN berkelajuan tinggi.

ISO-11898 menerangkan bagaimana maklumat dilalui antara peranti di rangkaian dan sesuai dengan model Open Systems Interconnection (OSI) yang ditakrifkan dari segi lapisan. Komunikasi sebenar antara peranti yang dihubungkan oleh medium fizikal ditentukan oleh lapisan fizikal model

  • Setiap unit CAN yang disambungkan ke bas boleh dipanggil simpul. Semua unit CAN disambungkan ke bas yang dihentikan pada setiap hujungnya dengan perintang 120 Ω untuk membentuk rangkaian. Bas ini terdiri daripada laluan CAN_H dan CAN_L. Pengawal CAN menentukan tahap bas berdasarkan perbezaan tahap kuasa pada kedua-dua wayar. Tahap bas dibahagikan kepada tahap dominan dan resesif, yang mesti menjadi salah satu daripadanya. Pengirim menghantar mesej kepada penerima dengan membuat perubahan di tingkat bas. Apabila garis logik "dan" dijalankan di dalam bas, tahap yang dominan adalah "0" dan tahap resesif adalah "1".
  • Dalam keadaan dominan, voltan CAN_H kira-kira 3.5V dan voltan CAN_L kira-kira 1.5V. Dalam keadaan resesif, voltan kedua-dua talian sekitar 2.5V.
  • Isyaratnya adalah perbezaan itulah sebabnya DAPAT memperoleh kekebalan kebisingan dan toleransi kesalahannya. Isyarat pembezaan yang seimbang mengurangkan gandingan bunyi dan membolehkan kadar isyarat yang tinggi berbanding kabel pasangan berpusing. Arus di setiap garis isyarat sama tetapi ke arah yang berlawanan dan menghasilkan kesan pembatalan medan yang merupakan kunci kepada pelepasan bunyi rendah. Penggunaan penerima pembezaan seimbang dan pemasangan kabel berpasangan meningkatkan penolakan mod biasa dan kekebalan bunyi tinggi bas CAN.

DAPAT Pemancar

Transceiver CAN bertanggungjawab untuk penukaran antara tahap logik dan isyarat fizikal. Tukarkan isyarat logik ke tahap pembezaan atau isyarat fizikal ke tahap logik.

DAPAT Pengawal

CAN Controller adalah komponen inti CAN, yang menyedari semua fungsi lapisan pautan data dalam protokol CAN dan secara automatik dapat menyelesaikan protokol CAN.

MCU

MCU bertanggungjawab untuk kawalan litar fungsi dan pengawal CAN. Sebagai contoh, parameter pengawal CAN diinisialisasi semasa simpul dimulakan, bingkai CAN dibaca dan dihantar melalui pengawal CAN, dll.

Langkah 2: Mengenai Komunikasi CAN

Apabila bas tidak berfungsi, semua nod boleh mula menghantar mesej (kawalan multi-master). Node yang pertama kali memasuki bas mendapat hak untuk menghantar (mod CSMA / CA). Apabila berbilang nod mula dihantar pada masa yang sama, simpul yang menghantar mesej ID keutamaan tinggi mendapat hak untuk menghantar.

Dalam protokol CAN, semua mesej dihantar dalam format tetap. Apabila bas tidak berfungsi, semua unit yang disambungkan ke bas dapat mula menghantar mesej baru. Apabila lebih daripada dua sel mula menghantar mesej pada masa yang sama, keutamaan ditentukan berdasarkan pengecam. ID tidak mewakili alamat tujuan kiriman, melainkan keutamaan mesej yang memasuki bas. Apabila lebih daripada dua sel mula menghantar mesej pada masa yang sama, setiap bit ID tanpa faedah ditimbangtara satu demi satu. Unit yang memenangkan timbang tara dapat terus mengirim mesej, dan unit yang kehilangan timbang tara segera berhenti menghantar dan menerima pekerjaan.

Bas CAN adalah jenis bas yang disiarkan. Ini bermaksud bahawa semua nod dapat 'mendengar' semua penghantaran. semua node akan sentiasa mengambil semua lalu lintas. Perkakasan CAN menyediakan penapisan tempatan sehingga setiap nod hanya dapat bertindak balas terhadap mesej yang menarik.

Langkah 3: Bingkai

Bingkai
Bingkai

Peranti CAN menghantar data ke seluruh rangkaian CAN dalam paket yang disebut bingkai. CAN mempunyai empat jenis bingkai:

  • Bingkai data: bingkai yang mengandungi data nod untuk penghantaran
  • Bingkai jarak jauh: bingkai yang meminta transmisi pengenal tertentu
  • Rangka ralat: bingkai yang dihantar oleh sebarang nod yang mengesan kesalahan
  • Overload frame: bingkai untuk menyuntikkan kelewatan antara data atau bingkai jarak jauh

Rangka data

Terdapat dua jenis bingkai data, standard dan diperluas.

Makna bidang bit Rajah adalah:

  • SOF - Bit permulaan bingkai tunggal (SOF) yang dominan menandakan permulaan mesej, dan digunakan untuk menyegerakkan nod pada bas setelah terbiar.
  • Pengecam-Pengecam Standard CAN 11-bit menetapkan keutamaan mesej. Semakin rendah nilai binari, semakin tinggi keutamaannya.
  • RTR – Permintaan transmisi jarak jauh tunggal (RTR) bit
  • IDE - Bit pelanjutan pengenal tunggal (IDE) yang dominan bermaksud pengecam CAN standard tanpa pelanjutan sedang dihantar.
  • R0 – Bit terpelihara (untuk kemungkinan penggunaan oleh pindaan standard masa depan).
  • DLC – Kod panjang data 4-bit (DLC) mengandungi jumlah bait data yang dihantar.
  • Data – Hingga 64 bit data aplikasi dapat dikirimkan.
  • CRC – Pemeriksaan redundansi siklik 16-bit (15 bit plus delimiter) (CRC) mengandungi checksum (jumlah bit yang dihantar) dari data aplikasi sebelumnya untuk pengesanan ralat.
  • ACK – ACK adalah 2 bit, satu adalah bit pengakuan dan yang kedua adalah pembatas.
  • EOF - Medan hujung bingkai (EOF), 7-bit ini menandakan akhir bingkai CAN (mesej) dan melumpuhkan pemprosesan bit, menunjukkan ralat pemadat ketika dominan. Apabila 5 bit tahap logik yang sama berlaku berturut-turut semasa operasi normal, sedikit tahap logik yang bertentangan dimasukkan ke dalam data.
  • IFS – Ruang interframe 7-bit (IFS) ini mengandungi masa yang diperlukan oleh pengawal untuk memindahkan bingkai yang diterima dengan betul ke kedudukannya yang betul di kawasan penyangga mesej.

Timbang Tara

Dalam keadaan siaga bas, unit yang mula menghantar mesej terlebih dahulu mendapat penghantaran yang betul. Apabila beberapa unit mula menghantar pada masa yang sama, setiap unit penghantaran bermula pada bahagian pertama segmen timbang tara. Unit dengan jumlah keluaran berterusan yang dominan dapat terus dihantar.

Langkah 4: Kelajuan dan Jarak

Kelajuan dan Jarak
Kelajuan dan Jarak

Bas CAN adalah bas yang menghubungkan beberapa unit pada masa yang sama. Secara teorinya tidak ada had jumlah unit yang dapat dihubungkan. Namun, dalam praktiknya, jumlah unit yang dapat dihubungkan dibatasi oleh kelewatan masa di dalam bas dan beban elektrik. Kurangkan kelajuan komunikasi, tingkatkan jumlah unit yang dapat dihubungkan, dan tingkatkan kelajuan komunikasi, jumlah unit yang dapat dihubungkan berkurang.

Jarak komunikasi secara terbalik berkaitan dengan kecepatan komunikasi, dan semakin jauh jarak komunikasi, semakin kecil kecepatan komunikasi. Jarak yang lebih panjang boleh menjadi 1km atau lebih, tetapi kelajuannya kurang dari 40kps.

Langkah 5: Perkakasan

Perkakasan
Perkakasan

Modul Maduino Zero CAN-BUS adalah alat yang dikembangkan oleh Makerfabs untuk komunikasi CANbus - berdasarkan Arduino, dengan pengawal CAN dan transceiver CAN, untuk membuat port CAN-siap yang boleh digunakan.

  • MCP2515 adalah pengawal CAN yang berdiri sendiri yang melaksanakan spesifikasi CAN. Ia mampu menghantar dan menerima kedua-dua data standard dan diperpanjang dan bingkai jarak jauh.
  • Antara muka MAX3051 antara pengawal protokol CAN dan wayar fizikal garis bus dalam rangkaian kawasan pengawal (CAN). MAX3051 menyediakan keupayaan penghantaran berbeza ke bas dan keupayaan penerimaan pembezaan ke pengawal CAN.

Langkah 6: Sambungan

Sambungan
Sambungan

Sambungkan modul DHT11 ke modul CAN-BUS Maduino Zero dengan wayar untuk digunakan sebagai instrumen untuk menyokong komunikasi CAN. Begitu juga, sambungkan paparan ke modul untuk menerima data dan memaparkannya.

Hubungan antara Maduino Zero CANBUS dan DHT11 :

Maduino Zero CANBUS - DHT11

3v3 ------ VCC GND ------ GND D10 ------ DATA

Hubungan antara Maduino Zero CANBUS dan OLED:

Maduino Zero CANBUS - OLED

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

Gunakan kabel DB9 untuk menyambungkan dua modul Maduino Zero CANBUS.

Langkah 7: Kod

MAX3051 menyelesaikan penukaran tahap pembezaan kepada isyarat logik. MCP2515 melengkapkan fungsi CAN seperti pengekodan dan penyahkodan data. MCU hanya perlu memulakan pengawal dan menghantar dan menerima data.

  • Github:
  • Setelah dipasang Arduino, tidak ada pakej untuk menyokong papan (Arduino zero) yang diperlukan untuk dipasang.
  • Pilih alat -> Papan -> Pengurus Papan, cari "Arduino zero" dan pasang "Arduino SAMD Boards".
  • Pilih Tools -> Board -> Arduino Zero (Native USB Port), pilih Tools -> Port -> com…
  • Setelah mendapat program dari GitHub, anda perlu memastikan bahawa semua fail ada di dalam direktori projek, yang berisi fail perpustakaan yang mendukung CANBUS.
  • Pasang perpustakaan sensor DHT oleh Adafruit, yang digunakan untuk menggerakkan DHT11 untuk mendapatkan suhu dan kelembapan.
  • Gunakan alamat yang berbeza untuk menghantar suhu dan kelembapan secara berasingan dalam kod Test_DHT11.ino.

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

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

"0x10" adalah ID pesan, "0" adalah bingkai standar rata-rata, "stmp1.length ()" adalah panjang pesan, "stmp_send1" adalah data yang dikirim.

  • Dalam kod Test_OLED.ino, semua mesej di CANBUS diterima dengan pertanyaan dan maklumat yang diperlukan dipaparkan di OLED.
  • Muat naik program Maduino-CANbus-RS485 / Test_DHT11_OLED / Test_DHT11 / Test_DHT11.ino ke modul yang disambungkan ke sensor, dan Muat naik program Maduino-CANbus RS485 / Test_DHT11_OLED / Test_OLED / Test_OLED.ino ke modul lain yang bersambung ke OLED.

Langkah 8: Tunjukkan

Tunjukkan
Tunjukkan
Tunjukkan
Tunjukkan

Kuasa pada dua modul, suhu dan kelembapan akan ditunjukkan pada paparan.

Disyorkan: