Daftar Isi:

Tutorial Sederhana untuk CANBUS: 8 Langkah
Tutorial Sederhana untuk CANBUS: 8 Langkah

Video: Tutorial Sederhana untuk CANBUS: 8 Langkah

Video: Tutorial Sederhana untuk CANBUS: 8 Langkah
Video: Remove the canbus information wire 2024, Juli
Anonim
Tutorial Sederhana untuk CANBUS
Tutorial Sederhana untuk CANBUS

Saya telah belajar CAN selama tiga minggu, dan sekarang saya telah menyelesaikan beberapa aplikasi untuk memvalidasi hasil belajar saya. Dalam tutorial ini, Anda akan belajar bagaimana menggunakan Arduino untuk mengimplementasikan komunikasi CANBUS. Jika Anda memiliki saran, selamat datang untuk meninggalkan pesan.

Perlengkapan:

Perangkat keras:

  • Maduino Nol CANBUS
  • Modul Suhu & Kelembaban DHT11
  • 1.3" I2C OLED 128x64- Biru
  • Kabel DB9 ke DB9 (wanita ke wanita)
  • Jalur Dupont

Perangkat lunak:

Arduino IDE

Langkah 1: Apa itu CANBUS

Apa itu CANBUS?
Apa itu CANBUS?
Apa itu CANBUS?
Apa itu CANBUS?

Tentang BISA

CAN (Controller Area Network) adalah jaringan komunikasi serial yang dapat mewujudkan kontrol real-time terdistribusi. Ini dikembangkan untuk industri otomotif untuk menggantikan rangkaian kabel yang rumit dengan bus dua kabel.

Protokol CAN mendefinisikan Data Link Layer dan bagian dari Physical Layer dalam model OSI.

Protokol CAN adalah standar ISO dengan ISO11898 dan ISO11519. ISO11898 adalah standar komunikasi kecepatan tinggi CAN dengan kecepatan komunikasi 125kbps-1Mbps. ISO11519 adalah standar komunikasi kecepatan rendah CAN dengan kecepatan komunikasi kurang dari 125kbps.

Di sini kita fokus pada CAN berkecepatan tinggi.

ISO-11898 menjelaskan bagaimana informasi dilewatkan antar perangkat di jaringan dan sesuai dengan model Interkoneksi Sistem Terbuka (OSI) yang didefinisikan dalam istilah lapisan. Komunikasi aktual antara perangkat yang dihubungkan oleh media fisik ditentukan oleh lapisan fisik model

  • Setiap unit CAN yang terhubung ke bus dapat disebut node. Semua unit CAN terhubung ke bus yang diakhiri di setiap ujungnya dengan resistor 120 untuk membentuk jaringan. Bus terdiri dari jalur CAN_H dan CAN_L. Kontroler CAN menentukan level bus berdasarkan perbedaan level daya pada kedua kabel. Level bus dibagi menjadi level dominan dan resesif, yang harus menjadi salah satunya. Pengirim mengirimkan pesan ke penerima dengan membuat perubahan di tingkat bus. Ketika garis logika "dan" dieksekusi pada bus, level dominan adalah "0" dan level resesif adalah "1".
  • Dalam keadaan dominan, tegangan CAN_H sekitar 3.5V dan tegangan CAN_L sekitar 1.5V. Dalam keadaan resesif, tegangan kedua saluran sekitar 2.5V.
  • Sinyalnya diferensial itulah sebabnya CAN memperoleh kekebalan kebisingan yang kuat dan toleransi kesalahan. Sinyal diferensial yang seimbang mengurangi noise coupling dan memungkinkan kecepatan sinyal yang tinggi melalui kabel twisted-pair. Arus di setiap jalur sinyal sama tetapi dalam arah yang berlawanan dan menghasilkan efek pembatalan medan yang merupakan kunci emisi kebisingan yang rendah. Penggunaan penerima diferensial seimbang dan kabel twisted-pair meningkatkan penolakan mode umum dan kekebalan kebisingan yang tinggi dari bus CAN.

BISA Transceiver

CAN Transceiver bertanggung jawab atas konversi antara level logika dan sinyal fisik. Mengkonversi sinyal logis ke tingkat diferensial atau sinyal fisik ke tingkat logis.

Pengontrol BISA

CAN Controller adalah komponen inti CAN, yang mewujudkan semua fungsi lapisan data link dalam protokol CAN dan secara otomatis dapat menyelesaikan protokol CAN.

MCU

MCU bertanggung jawab atas kontrol sirkuit fungsi dan pengontrol CAN. Misalnya, parameter pengontrol CAN diinisialisasi ketika node dimulai, frame CAN dibaca dan dikirim melalui pengontrol CAN, dll.

Langkah 2: Tentang CAN Communications

Saat bus dalam keadaan idle, semua node dapat mulai mengirim pesan (kontrol multi-master). Node yang pertama kali mengakses bus mendapat hak untuk mengirim (mode CSMA/CA). Ketika beberapa node mulai mengirim pada saat yang sama, node yang mengirim pesan ID prioritas tinggi mendapatkan hak untuk mengirim.

Dalam protokol CAN, semua pesan dikirim dalam format tetap. Saat bus dalam keadaan idle, semua unit yang terhubung ke bus dapat mulai mengirim pesan baru. Ketika lebih dari dua sel mulai mengirim pesan pada saat yang sama, prioritas ditentukan berdasarkan pengidentifikasi. ID tidak mewakili alamat tujuan pengiriman, melainkan prioritas pesan yang mengakses bus. Ketika lebih dari dua sel mulai mengirim pesan pada saat yang sama, setiap bit ID bebas bunga akan diarbitrase satu per satu. Unit yang memenangkan arbitrase dapat terus mengirim pesan, dan unit yang kalah dalam arbitrase segera berhenti mengirim dan menerima pekerjaan.

Bus CAN adalah jenis bus siaran. Ini berarti bahwa semua node dapat 'mendengar' semua transmisi. semua node akan selalu mengambil semua lalu lintas. Perangkat keras CAN menyediakan pemfilteran lokal sehingga setiap node hanya dapat bereaksi terhadap pesan yang menarik.

Langkah 3: Bingkai

bingkai
bingkai

Perangkat CAN mengirim data melalui jaringan CAN dalam paket yang disebut frame. CAN memiliki empat jenis bingkai:

  • Bingkai data: bingkai yang berisi data simpul untuk transmisi
  • Bingkai jarak jauh: bingkai yang meminta transmisi pengidentifikasi tertentu
  • Bingkai kesalahan: bingkai yang ditransmisikan oleh node mana pun yang mendeteksi kesalahan
  • Bingkai kelebihan beban: bingkai untuk menyuntikkan penundaan antara data atau bingkai jarak jauh

Bingkai data

Ada dua jenis frame data, standar dan diperpanjang.

Arti dari bidang bit Gambar adalah:

  • SOF-The single dominan start of frame (SOF) bit menandai awal dari pesan, dan digunakan untuk menyinkronkan node pada bus setelah idle.
  • Identifier-The Standard CAN 11-bit identifier menetapkan prioritas pesan. Semakin rendah nilai biner, semakin tinggi prioritasnya.
  • RTR–Bit permintaan transmisi jarak jauh (RTR) tunggal
  • IDE – Bit ekstensi pengenal tunggal dominan (IDE) berarti bahwa pengidentifikasi CAN standar tanpa ekstensi sedang ditransmisikan.
  • R0–Bit yang dicadangkan (untuk kemungkinan penggunaan dengan amandemen standar di masa mendatang).
  • DLC–Kode panjang data 4-bit (DLC) berisi jumlah byte data yang ditransmisikan.
  • Data–Hingga 64 bit data aplikasi dapat ditransmisikan.
  • CRC–The 16-bit (15 bit plus pembatas) cyclic redundancy check (CRC) berisi checksum (jumlah bit yang ditransmisikan) dari data aplikasi sebelumnya untuk deteksi kesalahan.
  • ACK-ACK adalah 2 bit, satu adalah bit pengakuan dan yang kedua adalah pembatas.
  • EOF–Ini end-of-frame (EOF), bidang 7-bit menandai akhir bingkai CAN (pesan) dan menonaktifkan bitstuffing, menunjukkan kesalahan isian saat dominan. Ketika 5 bit dari tingkat logika yang sama terjadi secara berurutan selama operasi normal, sedikit dari tingkat logika yang berlawanan dimasukkan ke dalam data.
  • IFS–Ruang interframe 7-bit (IFS) ini berisi waktu yang diperlukan oleh pengontrol untuk memindahkan bingkai yang diterima dengan benar ke posisi yang tepat di area buffer pesan.

Arbitrasi

Dalam keadaan bus idle, unit yang mulai mengirim pesan terlebih dahulu mendapatkan hak pengiriman. Ketika beberapa unit mulai mengirim pada saat yang sama, setiap unit pengiriman dimulai pada bit pertama dari segmen arbitrase. Unit dengan jumlah tingkat dominan keluaran kontinu terbesar dapat terus mengirim.

Langkah 4: Kecepatan dan Jarak

Kecepatan dan Jarak
Kecepatan dan Jarak

Bus CAN adalah bus yang menghubungkan beberapa unit secara bersamaan. Secara teoritis tidak ada batasan jumlah unit yang dapat dihubungkan. Namun dalam praktiknya, jumlah unit yang dapat dihubungkan dibatasi oleh waktu tunda pada bus dan beban listrik. Kurangi kecepatan komunikasi, tambah jumlah unit yang dapat dihubungkan, dan tingkatkan kecepatan komunikasi, jumlah unit yang dapat dihubungkan berkurang.

Jarak komunikasi berbanding terbalik dengan kecepatan komunikasi, dan semakin jauh jarak komunikasi maka kecepatan komunikasi semakin kecil. Jarak yang lebih jauh bisa 1km atau lebih, tetapi kecepatannya kurang dari 40kps.

Langkah 5: Perangkat Keras

Perangkat keras
Perangkat keras

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

  • MCP2515 adalah pengontrol CAN yang berdiri sendiri yang mengimplementasikan spesifikasi CAN. Ia mampu mentransmisikan dan menerima data standar dan diperpanjang dan bingkai jarak jauh.
  • Antarmuka MAX3051 antara pengontrol protokol CAN dan kabel fisik jalur bus di jaringan area pengontrol (CAN). MAX3051 menyediakan kemampuan transmisi diferensial ke bus dan kemampuan menerima diferensial ke pengontrol CAN.

Langkah 6: Koneksi

Koneksi
Koneksi

Hubungkan modul DHT11 ke modul CAN-BUS Maduino Zero dengan kabel yang akan digunakan sebagai instrumen untuk mendukung komunikasi CAN. Demikian pula, hubungkan layar ke modul untuk menerima data dan menampilkannya.

Koneksi antara Maduino Zero CANBUS dan DHT11:

Maduino Nol CANBUS -- DHT11

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

Koneksi antara Maduino Zero CANBUS dan OLED:

Maduino Nol CANBUS -- OLED

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

Gunakan kabel DB9 untuk menghubungkan dua modul Maduino Zero CANBUS.

Langkah 7: Kode

MAX3051 menyelesaikan konversi level diferensial menjadi sinyal logis. MCP2515 melengkapi fungsi CAN seperti encoding dan decoding data. MCU hanya perlu menginisialisasi pengontrol dan mengirim dan menerima data.

  • Github:
  • Setelah Arduino terinstal, tidak ada paket untuk mendukung board (Arduino zero) yang perlu diinstal.
  • Pilih alat -> Papan -> Manajer Papan, cari "Arduino zero" dan instal "Arduino SAMD Boards".
  • Pilih Tools -> Board -> Arduino Zero (Native USB Port), pilih Tools -> Port -> com…
  • Setelah mendapatkan program dari GitHub, Anda perlu memastikan bahwa semua file berada di direktori proyek, yang berisi file library yang mendukung CANBUS.
  • Instal perpustakaan sensor DHT oleh Adafruit, yang digunakan untuk menggerakkan DHT11 untuk mendapatkan suhu dan kelembaban.
  • Gunakan alamat yang berbeda untuk mengirim suhu dan kelembaban secara terpisah dalam kode Test_DHT11.ino.

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

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

“0x10” berarti ID pesan, “0” berarti bingkai standar, “stmp1.length()” berarti panjang pesan, “stmp_send1” adalah data yang dikirim.

  • Dalam kode Test_OLED.ino, semua pesan di CANBUS diterima oleh kueri dan informasi yang diperlukan ditampilkan di OLED.
  • Upload program Maduino-CANbus-RS485/Test_DHT11_OLED/Test_DHT11/Test_DHT11.ino ke modul yang terhubung dengan sensor, dan Upload program Maduino-CANbus RS485/Test_DHT11_OLED/Test_OLED/Test_OLED.ino ke modul lain yang terhubung ke OLED.

Langkah 8: Tunjukkan

Menunjukkan
Menunjukkan
Menunjukkan
Menunjukkan

Nyalakan dua modul, suhu dan kelembaban akan ditampilkan di layar.

Direkomendasikan: