Talaan ng mga Nilalaman:

CAN Protocol - Oo, Maaari Namin !: 24 Hakbang
CAN Protocol - Oo, Maaari Namin !: 24 Hakbang

Video: CAN Protocol - Oo, Maaari Namin !: 24 Hakbang

Video: CAN Protocol - Oo, Maaari Namin !: 24 Hakbang
Video: I Belong to the Zoo - Balita (Official Music Video) 2024, Nobyembre
Anonim
Image
Image
Ginamit na Mga Mapagkukunan
Ginamit na Mga Mapagkukunan

Ang isa pang paksa na iminungkahi kamakailan ng mga tagasunod ng aking channel sa YouTube ay ang CAN (Controller Area Network) na protokol, na kung saan ay pagtuunan namin ng pansin ngayon. Mahalagang ipaliwanag na ang CAN ay isang sabay-sabay na serial communication protocol. Nangangahulugan ito na ang synchronism sa pagitan ng mga module na konektado sa network ay ginaganap na may kaugnayan sa simula ng bawat mensahe na ipinadala sa bus. Magsisimula kami sa pamamagitan ng pagpapakilala ng mga pangunahing konsepto ng CAN protocol at magsagawa ng isang simpleng pagpupulong na may dalawang mga ESP32.

Sa aming circuit, ang mga ESP ay maaaring kumilos bilang parehong Master at Alipin. Maaari kang magkaroon ng maraming mga microcontroller nang sabay-sabay na paghahatid, dahil ang CAN ay makitungo sa banggaan ng lahat nang awtomatiko. Ang source code ng proyektong ito ay sobrang simple. Suriin ito!

Hakbang 1: Ginamit na Mga Mapagkukunan

  • Dalawang modyul ng ESP WROOM 32 NodeMcu
  • Dalawang CAN transceiver mula sa WaveShare
  • Mga jumper para sa mga koneksyon
  • Lohikal na analista para sa pagkuha
  • Tatlong mga USB cable para sa mga ESP at analyzer
  • 10 metro ng baluktot na pares upang maglingkod bilang isang bus

Hakbang 2: CAN (Controller Area Network)

CAN (Controller Area Network)
CAN (Controller Area Network)
  • Ito ay binuo ni Robert Bosch GmbH noong 1980s upang magsilbi sa industriya ng automotive.
  • Ito ay naging laganap sa mga nakaraang taon dahil sa pagiging matatag at kakayahang umangkop ng pagpapatupad nito. Ginagamit ito gamit ang mga kagamitang pang-militar, makinarya sa agrikultura, pang-industriya at pagbuo ng automation, robotics, at kagamitang medikal.

Hakbang 3: MAAARI - Mga Tampok

CAN - Mga Tampok
CAN - Mga Tampok
CAN - Mga Tampok
CAN - Mga Tampok
  • Dalawang-wire na komunikasyon sa serial
  • Maximum na 8 bytes ng kapaki-pakinabang na impormasyon sa bawat frame, na may posibilidad na pagkakawatak-watak
  • Ang direksyon ay nakadirekta sa mensahe at hindi sa node
  • Ang pagtatalaga ng priyoridad sa mga mensahe at pag-relay ng mga "on hold" na mensahe
  • Mabisang kakayahang makita at mag-signal ng mga error
  • Kakayahang multi-master (ang lahat ng mga node ay maaaring humiling ng pag-access sa bus)
  • Kakayahang Multicast (isang mensahe para sa maraming mga tagatanggap nang sabay)
  • Mga rate ng paglipat ng hanggang sa 1Mbit / s sa isang 40-metro na bus (pagbawas ng rate na may pagtaas ng haba ng busbar)
  • Kakayahang umangkop ng pagsasaayos at pagpapakilala ng mga bagong node (hanggang sa 120 node bawat bus)
  • Karaniwang hardware, mababang gastos, at mahusay na kakayahang magamit
  • Regulated na protocol: ISO 11898

Hakbang 4: Ginamit ang Circuit

Ginamit na Circuit
Ginamit na Circuit

Narito, mayroon akong mga Transceiver. Mayroong isa sa bawat panig, at nakakonekta sila ng isang pares ng mga wire. Ang isa ay responsable para sa pagpapadala at ang isa pa para sa pagtanggap ng data.

Hakbang 5: Mga Boltahe ng Linya ng Paghahatid (Pagkakaiba ng Pagtuklas)

Mga Boltahe ng Transmission Line (Pagkakaiba sa Pagtuklas)
Mga Boltahe ng Transmission Line (Pagkakaiba sa Pagtuklas)

Sa CAN, ang nangingibabaw na piraso ay Zero.

Ang Pagkakaiba ng Detalye ng Line ay Binabawasan ang Sensitivity ng Noise (EFI)

Hakbang 6: MAAARI ang Format ng Mga Pamantayan at Mga Frame

CAN Format ng Mga Pamantayan at Frame
CAN Format ng Mga Pamantayan at Frame

Karaniwang format na may 11-bit identifier

Hakbang 7: MAAARI ang Mga Pamantayan sa Format at Mga Frame

CAN Format ng Mga Pamantayan at Frame
CAN Format ng Mga Pamantayan at Frame

Pinalawak na format na may 29-bit identifier

Hakbang 8: MAAARI ang Format ng Mga Pamantayan at Mga Frame

Mahalagang tandaan na kinakalkula na ng isang protocol ang CRC at nagpapadala ng mga signal ng ACK at EOF, na mga bagay na nagawa na ng CAN protocol. Ginagarantiyahan nito na ang mensahe na ipinadala ay hindi darating sa maling paraan. Ito ay dahil kung magbibigay ito ng isang problema sa CRC (Redundant Cyclic Check o Redundancy Check), na kapareho ng isang digit ng impormasyon ng tseke, makikilala ito ng CRC.

Hakbang 9: Apat na Mga Uri ng Mga Frame (mga frame)

Apat na Uri ng Mga Frame (mga frame)
Apat na Uri ng Mga Frame (mga frame)

Mahalagang tandaan na kinakalkula na ng isang protocol ang CRC at nagpapadala ng mga signal ng ACK at EOF, na mga bagay na nagawa na ng CAN protocol. Ginagarantiyahan nito na ang mensahe na ipinadala ay hindi darating sa maling paraan. Ito ay dahil kung magbibigay ito ng isang problema sa CRC (Redundant Cyclic Check o Redundancy Check), na kapareho ng isang digit ng impormasyon ng tseke, makikilala ito ng CRC.

Apat na uri ng mga frame (frame)

Ang paghahatid at pagtanggap ng data sa CAN ay batay sa apat na uri ng mga frame. Ang mga uri ng frame ay makikilala ng mga pagkakaiba-iba sa mga control bit o kahit na sa pamamagitan ng mga pagbabago sa mga panuntunan sa pagsulat ng frame para sa bawat kaso.

  • Data Frame: Naglalaman ng data ng transmiter para sa (mga) tatanggap
  • Remote Frame: Ito ay isang kahilingan para sa data mula sa isa sa mga node
  • Error Frame: Ito ay isang frame na ipinadala ng alinman sa mga node kapag nakikilala ang isang error sa bus at maaaring makita ng lahat ng mga node
  • Overload Frame: Naghahatid upang maantala ang trapiko sa bus dahil sa labis na karga ng data o pagkaantala sa isa o higit pang mga node.

Hakbang 10: Circuit - Mga Detalye ng Mga Koneksyon

Circuit - Mga Detalye ng Mga Koneksyon
Circuit - Mga Detalye ng Mga Koneksyon

Hakbang 11: Circuit - Data Capture

Circuit - Pagkuha ng Data
Circuit - Pagkuha ng Data

Mga haba ng haba na nakuha para sa pamantayan ng CAN na may 11-bit ID

Hakbang 12: Circuit - Data Capture

Circuit - Pagkuha ng Data
Circuit - Pagkuha ng Data

Mga haba ng haba na nakuha para sa pinalawig na CAN na may 29-bit ID

Hakbang 13: Circuit - Data Capture

Circuit - Pagkuha ng Data
Circuit - Pagkuha ng Data

Ang data na nakuha ng tagapag-aral ng lohika

Hakbang 14: Arduino Library - CAN

Arduino Library - CAN
Arduino Library - CAN

Ipinapakita ko rito ang dalawang mga pagpipilian kung saan maaari mong mai-install ang CAN Driver Library

Arduino IDE Library Manager

Hakbang 15: Github

Github
Github

github.com/sandeepmistry/arduino-CAN

Hakbang 16: Code ng Source ng Transmitter

Source Code: Kasama at Pag-setup ()

Isasama namin ang CAN library, simulan ang serial para sa pag-debug, at simulan ang CAN bus sa 500 kbps.

#include // Inclui a biblioteca CAN CAN void setup () {Serial.begin (9600); // inicia isang serial para debug habang (! Serial); Serial.println ("Transmissor CAN"); // 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 habang (1); }}

Hakbang 17: Source Code: Loop (), Pagpapadala ng isang Karaniwang CAN 2.0 Packet

Gamit ang karaniwang CAN 2.0, nagpapadala kami ng isang pakete. Kinikilala ng 11-bit ID ang mensahe. Ang data block ay dapat magkaroon ng hanggang 8 bytes. Sinisimula nito ang packet na may ID 18 sa hexadecimal. Nag-iimpake ito ng 5 bytes at isinasara ang pagpapaandar.

void loop () {// Usando o CAN 2.0 padrão // Envia um pacote: o id 11 11 bit at magkakilala ng isang mensagem (nauna, kahit na) // o bloco de maging deve posuir até 8 bytes Serial.println ("Enviando pacote … "); CAN.beginPacket (0x12); // id 18 em hexadecimal CAN. magsulat ('h'); // 1º byte CAN. Magsulat ('e'); // 2º byte CAN. Magsulat ('l'); // 3º byte CAN. Magsulat ('l'); // 4º byte CAN. Magsulat ('o'); // 5º byte CAN.endPacket (); // encerra o pacote para envio Serial.println ("Enviado."); pagkaantala (1000);

Hakbang 18: Source Code: Loop (), Pagpapadala ng isang Pinalawak na CAN 2.0 Package

Sa hakbang na ito, ang ID ay mayroong 29 na piraso. Nagsisimula itong magpadala ng 24 na piraso ng ID at, sa sandaling muli, naka-pack na 5 bytes at quits.

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

Hakbang 19: Source Code ng Tagatanggap

Source Code: Kasama at Pag-setup ()

Muli, isasama namin ang aklatan ng CAN, simulan ang serial sa pag-debug, at simulan ang CAN bus sa 500 kbps. Kung may naganap na error, mai-print ang error na ito.

#include // Inclui a biblioteca CAN CAN void setup () {Serial.begin (9600); // inicia isang serial para debug habang (! Serial); Serial.println ("Receptor CAN"); // 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 habang (1); }}

Hakbang 20: Source Code: Loop (), Pagkuha ng Package at Suriin ang Format

Sinubukan naming suriin ang laki ng natanggap na packet. Ipinapakita sa akin ng pamamaraang CAN.parsePacket () ang laki ng package na ito. Kaya't kung mayroon kaming isang pakete, susuriin namin kung ito ay pinahaba o hindi.

void loop () {// Tenta verificar o tamanho do acote recebido int packetSize = CAN.parsePacket (); kung (packetSize) {// Se temos um pacote Serial.println ("Recebido pacote."); kung (CAN.packetExtended ()) {// verifica se o pacote é estendido Serial.println ("Estendido"); }

Hakbang 21: Pinagmulan: Loop (), Mga Suriin upang Makita Kung Ito Ay Isang Malayong Package

Dito, sinusuri namin kung ang natanggap na packet ay isang kahilingan sa data. Sa kasong ito, walang data.

kung (CAN.packetRtr ()) {// Verifica se o pacote é um pacote remoto (Requisição de magiging), Neste caso não há maging Serial.print ("RTR"); }

Hakbang 22: Source Code: Loop (), Haba ng Data na Hiniling o Natanggap

Kung ang natanggap na packet ay isang kahilingan, isasaad namin ang hiniling na haba. Pagkatapos ay nakukuha namin ang Data Length Code (DLC), na nagsasaad ng haba ng data. Sa wakas, isinasaad namin ang haba ng natanggap.

Serial.print ("Pacote com id 0x"); Serial.print (CAN.packetId (), HEX); kung (CAN.packetRtr ()) {// se o pacote recebido é de requisição, indikasyon 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)} iba pa {Serial.print ("e comprimento"); // aqui somente indica o comprimento recebido Serial.println (packetSize);

Hakbang 23: Source Code: Loop (), Kung Natanggap ang Data, Pagkatapos Ito ay Nagpi-print

Nai-print namin (sa serial monitor) ang data, ngunit kung ang natanggap na packet ay hindi isang kahilingan.

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

Hakbang 24: I-download ang Mga File

PDF

INO

Inirerekumendang: