Daftar Isi:

Protokol CAN - Ya, Kita Bisa!: 24 Langkah
Protokol CAN - Ya, Kita Bisa!: 24 Langkah

Video: Protokol CAN - Ya, Kita Bisa!: 24 Langkah

Video: Protokol CAN - Ya, Kita Bisa!: 24 Langkah
Video: Gara gara ini banyak pelajar di jepang yang... #shorts #jepang 2024, November
Anonim
Image
Image
Sumber Daya yang Digunakan
Sumber Daya yang Digunakan

Subjek lain yang baru-baru ini disarankan oleh pengikut saluran YouTube saya adalah protokol CAN (Controller Area Network), yang akan kami fokuskan hari ini. Penting untuk dijelaskan bahwa CAN adalah protokol komunikasi serial simultan. Ini berarti sinkronisasi antara modul yang terhubung ke jaringan dilakukan dalam kaitannya dengan awal setiap pesan yang dikirim ke bus. Kami akan memulai dengan memperkenalkan konsep dasar protokol CAN dan melakukan perakitan sederhana dengan dua ESP32.

Di sirkuit kami, ESP dapat bertindak sebagai Master dan Slave. Anda dapat memiliki beberapa mikrokontroler yang mentransmisikan secara bersamaan, karena CAN menangani tabrakan semuanya secara otomatis. Kode sumber proyek ini sangat sederhana. Coba lihat!

Langkah 1: Sumber Daya yang Digunakan

  • Dua modul ESP WROOM 32 NodeMcu
  • Dua transceiver CAN dari WaveShare
  • Jumper untuk koneksi
  • Penganalisa logis untuk ditangkap
  • Tiga kabel USB untuk ESP dan penganalisis
  • 10 meter dari twisted pair untuk berfungsi sebagai bus

Langkah 2: BISA (Controller Area Network)

CAN (Jaringan Area Pengontrol)
CAN (Jaringan Area Pengontrol)
  • Ini dikembangkan oleh Robert Bosch GmbH pada 1980-an untuk melayani industri otomotif.
  • Ini telah menyebar luas selama bertahun-tahun karena kekokohan dan fleksibilitas implementasinya. Ini digunakan dengan peralatan militer, mesin pertanian, otomatisasi industri dan bangunan, robotika, dan peralatan medis.

Langkah 3: BISA - Fitur

BISA - Fitur
BISA - Fitur
BISA - Fitur
BISA - Fitur
  • Komunikasi serial dua kabel
  • Maksimum 8 byte informasi berguna per frame, dengan kemungkinan fragmentasi
  • Alamat diarahkan ke pesan dan bukan ke node
  • Menetapkan prioritas untuk pesan dan menyampaikan pesan "ditahan"
  • Kemampuan efektif untuk mendeteksi dan memberi sinyal kesalahan
  • Kemampuan multi-master (semua node dapat meminta akses bus)
  • Kemampuan multicast (satu pesan untuk beberapa penerima sekaligus)
  • Kecepatan transfer hingga 1Mbit / dtk pada bus 40 meter (pengurangan kecepatan dengan penambahan panjang busbar)
  • Fleksibilitas konfigurasi dan pengenalan node baru (hingga 120 node per bus)
  • Perangkat keras standar, biaya rendah, dan ketersediaan bagus
  • Protokol yang diatur: ISO 11898

Langkah 4: Sirkuit Digunakan

Sirkuit Digunakan
Sirkuit Digunakan

Di sini, saya memiliki Transceiver. Ada satu di setiap sisi, dan mereka dihubungkan oleh sepasang kabel. Satu bertanggung jawab untuk mengirim dan yang lainnya untuk menerima data.

Langkah 5: Tegangan Saluran Transmisi (Deteksi Diferensial)

Tegangan Saluran Transmisi (Deteksi Diferensial)
Tegangan Saluran Transmisi (Deteksi Diferensial)

Dalam CAN, bit yang dominan adalah Nol.

Deteksi Diferensial Garis Mengurangi Sensitivitas Kebisingan (EFI)

Langkah 6: CAN Standar dan Format Bingkai

CAN Standar dan Format Bingkai
CAN Standar dan Format Bingkai

Format standar dengan pengidentifikasi 11-bit

Langkah 7: CAN Standards and Frames Format

CAN Standar dan Format Bingkai
CAN Standar dan Format Bingkai

Format yang diperluas dengan pengidentifikasi 29-bit

Langkah 8: CAN Standards and Frames Format

Penting untuk dicatat bahwa sebuah protokol sudah menghitung CRC dan mengirimkan sinyal ACK dan EOF, yang merupakan hal-hal yang sudah dilakukan oleh protokol CAN. Ini menjamin bahwa pesan yang dikirim tidak akan sampai dengan cara yang salah. Hal ini karena jika memberikan masalah pada CRC (Redundant Cyclic Check atau Redundancy Check) yang sama dengan digit cek informasi akan diidentifikasi oleh CRC.

Langkah 9: Empat Jenis Bingkai (frame)

Empat Jenis Bingkai (frame)
Empat Jenis Bingkai (frame)

Penting untuk dicatat bahwa sebuah protokol sudah menghitung CRC dan mengirimkan sinyal ACK dan EOF, yang merupakan hal-hal yang sudah dilakukan oleh protokol CAN. Ini menjamin bahwa pesan yang dikirim tidak akan sampai dengan cara yang salah. Hal ini karena jika memberikan masalah pada CRC (Redundant Cyclic Check atau Redundancy Check) yang sama dengan digit cek informasi akan diidentifikasi oleh CRC.

Empat jenis bingkai (frame)

Transmisi dan penerimaan data di CAN didasarkan pada empat jenis frame. Jenis bingkai akan diidentifikasi oleh variasi dalam bit kontrol atau bahkan oleh perubahan aturan penulisan bingkai untuk setiap kasus.

  • Bingkai Data: Berisi data pemancar untuk penerima
  • Bingkai Jarak Jauh: Ini adalah permintaan data dari salah satu node
  • Bingkai Kesalahan: Ini adalah bingkai yang dikirim oleh salah satu node saat mengidentifikasi kesalahan di bus dan dapat dideteksi oleh semua node
  • Overload Frame: Berfungsi untuk menunda trafik pada bus akibat kelebihan data atau delay pada satu atau lebih node.

Langkah 10: Sirkuit - Detail Koneksi

Sirkuit - Detail Koneksi
Sirkuit - Detail Koneksi

Langkah 11: Sirkuit - Pengambilan Data

Sirkuit - Pengambilan Data
Sirkuit - Pengambilan Data

Panjang gelombang diperoleh untuk CAN standar dengan ID 11-bit

Langkah 12: Sirkuit - Pengambilan Data

Sirkuit - Pengambilan Data
Sirkuit - Pengambilan Data

Panjang gelombang diperoleh untuk CAN yang diperluas dengan ID 29-bit

Langkah 13: Sirkuit - Pengambilan Data

Sirkuit - Pengambilan Data
Sirkuit - Pengambilan Data

Data diperoleh dengan penganalisis logika

Langkah 14: Perpustakaan Arduino - BISA

Perpustakaan Arduino - BISA
Perpustakaan Arduino - BISA

Saya tunjukkan di sini dua opsi di mana Anda dapat menginstal CAN Driver Library

Manajer Perpustakaan Arduino IDE

Langkah 15: Github

Github
Github

github.com/sandeepmistry/arduino-CAN

Langkah 16: Kode Sumber Pemancar

Kode Sumber: Termasuk dan Pengaturan ()

Kami akan menyertakan pustaka CAN, memulai serial untuk debugging, dan memulai bus CAN pada 500 kbps.

#include //Menyertakan biblioteca BISA membatalkan setup() { Serial.begin(9600); //inicia a serial para debug while (!Serial); Serial.println("Transmissor BISA"); // Inicia o barramento CAN a 500 kbps if (!CAN.begin(500E3)) { Serial.println("Falha ao iniciar o controlador CAN"); //caso não seja possível iniciar o controlador while (1); } }

Langkah 17: Kode Sumber: Loop (), Mengirim Paket Standar CAN 2.0

Menggunakan standar CAN 2.0, kami mengirim paket. ID 11-bit mengidentifikasi pesan. Blok data harus memiliki hingga 8 byte. Ini memulai paket dengan ID 18 dalam heksadesimal. Ini mengemas 5 byte dan menutup fungsinya.

void loop() { // Usando o CAN 2.0 padrão //Envia um pacote: o id tem 11 bits e identifica a mensagem (prioridade, evento) //o bloco de dados deve possuir até 8 byte Serial.println("Enviando pacote …"); BISA.beginPacket(0x12); //id 18 em heksadesimal CAN.write('h'); // byte CAN.write('e'); //2º byte CAN.write('l'); //3º byte CAN.write('l'); //4º byte CAN.write('o'); //5º byte CAN.endPacket(); //encerra o pacote para envio Serial.println("Enviado."); penundaan (1000);

Langkah 18: Kode Sumber: Loop (), Mengirim Paket CAN 2.0 yang Diperpanjang

Pada langkah ini, ID memiliki 29 bit. Itu mulai mengirim 24 bit ID dan, sekali lagi, mengemas 5 byte dan berhenti.

//Usando CAN 2.0 Estendido //Envia um pacote: o id tem 29 bits e identifica a mensagem (prioridade, evento) //o bloco de dados deve possuir até 8 bytes Serial.println("Enviando pacote estendido…"); BISA.beginExtendedPacket(0xabcdef); //id 11259375 desimal (abcdef em hexa) = 24 bit preenchidos até aqui CAN.write('w'); // byte CAN.write('o'); //2º byte CAN.write('r'); //3º byte CAN.write('l'); //4º byte CAN.write('d'); //5º byte CAN.endPacket(); //encerra o pacote para envio Serial.println("Enviado."); penundaan (1000); }

Langkah 19: Kode Sumber Penerima

Kode Sumber: Termasuk dan Pengaturan ()

Sekali lagi, kami akan menyertakan pustaka CAN, memulai serial untuk debug, dan memulai bus CAN pada 500 kbps. Jika terjadi kesalahan, kesalahan ini akan dicetak.

#include //Menyertakan biblioteca BISA membatalkan setup() { Serial.begin(9600); //inicia a serial para debug while (!Serial); Serial.println("Reseptor BISA"); // Inicia o barramento BISA 500 kbps if (!CAN.begin(500E3)) { Serial.println("Falha ao iniciar o controlador CAN"); //caso não seja possível iniciar o controlador while (1); } }

Langkah 20: Kode Sumber: Loop (), Mendapatkan Paket dan Memeriksa Format

Kami mencoba memeriksa ukuran paket yang diterima. Metode CAN.parsePacket () menunjukkan kepada saya ukuran paket ini. Jadi kalau ada paket, kita cek apakah diperpanjang atau tidak.

void loop() { // Verifikasi tenta tamanho melakukan recebido int packetSize = CAN.parsePacket(); if (ukuran paket) { // Se temos um pacote Serial.println("Recebido pacote. "); if (CAN.packetExtended()) { //memverifikasi estendido Serial.println("Estendido"); }

Langkah 21: Sumber: Loop (), Periksa untuk Melihat Apakah Itu Paket Jarak Jauh

Di sini, kami memeriksa apakah paket yang diterima adalah permintaan data. Dalam hal ini, tidak ada data.

if (CAN.packetRtr()) { //Verifikasi se o pacote é um pacote remoto (Requisição de dados), neste caso não há dados Serial.print("RTR "); }

Langkah 22: Kode Sumber: Loop (), Panjang Data yang Diminta atau Diterima

Jika paket yang diterima adalah permintaan, kami menunjukkan panjang yang diminta. Kami kemudian mendapatkan Kode Panjang Data (DLC), yang menunjukkan panjang data. Akhirnya, kami menunjukkan panjang yang diterima.

Serial.print("Pacote com id 0x"); Serial.print(BISA.packetId(), HEX); if (CAN.packetRtr()) { //se o pacote recebido é de requisição, indicamos o comprimento solicitado Serial.print(" e requsitou o comprimento "); Serial.println(CAN.packetDlc()); //obtem o DLC (Data Length Code, que indica o comprimento dos dados) } else { Serial.print(" e comprimento "); // dapatkan beberapa indikasi atau komprimento recebido Serial.println(packetSize);

Langkah 23: Kode Sumber: Loop (), Jika Data Diterima, Kemudian Dicetak

Kami mencetak (pada monitor serial) data, tetapi hanya jika paket yang diterima bukan merupakan permintaan.

//Imprime os dados somente se o pacote recebido não foi de requisição while (CAN.available()) { Serial.print((char)CAN.read()); } Serial.println(); } Serial.println(); } }

Langkah 24: Unduh File

PDF

SAYA TIDAK

Direkomendasikan: