Taula de continguts:

Protocol CAN: sí, podem !: 24 passos
Protocol CAN: sí, podem !: 24 passos

Vídeo: Protocol CAN: sí, podem !: 24 passos

Vídeo: Protocol CAN: sí, podem !: 24 passos
Vídeo: Как легко вернуть свою энергию и не уставать: Наука + Метафизика 2024, De novembre
Anonim
Image
Image
Recursos utilitzats
Recursos utilitzats

Un altre tema suggerit recentment pels seguidors del meu canal de YouTube era el protocol CAN (xarxa d'àrees de control), que és el que ens centrarem avui. És important explicar que CAN és un protocol de comunicació en sèrie simultani. Això significa que el sincronisme entre els mòduls connectats a la xarxa es realitza en relació amb l'inici de cada missatge enviat al bus. Començarem introduint els conceptes bàsics del protocol CAN i realitzarem un muntatge senzill amb dos ESP32.

Al nostre circuit, els ESP poden actuar tant com a mestre com a esclau. Podeu tenir diversos microcontroladors que transmeten simultàniament, ja que el CAN tracta automàticament la col·lisió de tot. El codi font d’aquest projecte és molt senzill. Comprova-ho!

Pas 1: recursos utilitzats

  • Dos mòduls de ESP WROOM 32 NodeMcu
  • Dos transceptors CAN de WaveShare
  • Jumpers per a connexions
  • Analitzador lògic per a la captura
  • Tres cables USB per ESP i analitzador
  • 10 metres de parell trenat per servir d’autobús

Pas 2: CAN (xarxa d'àrea de controlador)

CAN (xarxa d'àrea de controlador)
CAN (xarxa d'àrea de controlador)
  • Va ser desenvolupat per Robert Bosch GmbH als anys vuitanta per servir la indústria de l’automòbil.
  • S’ha generalitzat al llarg dels anys a causa de la seva robustesa i flexibilitat d’implementació. S’utilitza amb equipament militar, maquinària agrícola, automatització industrial i d’edificis, robòtica i equipament mèdic.

Pas 3: CAN: funcions

CAN: funcions
CAN: funcions
CAN: funcions
CAN: funcions
  • Comunicació serial de dos fils
  • Màxim de 8 bytes d'informació útil per fotograma, amb fragmentació possible
  • Adreça dirigida al missatge i no al node
  • Assignació de prioritat als missatges i retransmissió de missatges "en espera"
  • Capacitat efectiva de detectar i assenyalar errors
  • Capacitat multimestre (tots els nodes poden sol·licitar accés al bus)
  • Capacitat de multidifusió (un missatge per a diversos receptors alhora)
  • Taxes de transferència de fins a 1 Mbits / s en un bus de 40 metres (reducció de la tarifa amb augment de la longitud de la barra de bus)
  • Flexibilitat de configuració i introducció de nous nodes (fins a 120 nodes per bus)
  • Maquinari estàndard, baix cost i bona disponibilitat
  • Protocol regulat: ISO 11898

Pas 4: Circuit utilitzat

Circuit utilitzat
Circuit utilitzat

Aquí tinc els transceptors. N’hi ha un a cada costat i estan connectats per un parell de cables. Un és responsable de l'enviament i l'altre de rebre dades.

Pas 5: Voltatges de la línia de transmissió (detecció diferencial)

Voltatges de la línia de transmissió (detecció diferencial)
Voltatges de la línia de transmissió (detecció diferencial)

A CAN, el bit dominant és Zero.

La detecció diferencial de línia redueix la sensibilitat al soroll (EFI)

Pas 6: format de normatives i marcs CAN

Normes CAN i format de marcs
Normes CAN i format de marcs

Format estàndard amb identificador d'11 bits

Pas 7: format de normatives i marcs CAN

Normes CAN i format de marcs
Normes CAN i format de marcs

Format ampliat amb identificador de 29 bits

Pas 8: Format d'estàndards i marcs CAN

És important tenir en compte que un protocol ja calcula el CRC i envia senyals ACK i EOF, que són coses que ja fa el protocol CAN. Això garanteix que el missatge enviat no arribi de manera incorrecta. Això es deu al fet que si dóna un problema al CRC (Redundant Cyclic Check o Redundancy Check), que és el mateix que un dígit de comprovació d'informació, el CRC identificarà.

Pas 9: quatre tipus de marcs (marcs)

Quatre tipus de marcs (marcs)
Quatre tipus de marcs (marcs)

És important tenir en compte que un protocol ja calcula el CRC i envia senyals ACK i EOF, que són coses que ja fa el protocol CAN. Això garanteix que el missatge enviat no arribi de manera incorrecta. Això es deu al fet que si dóna un problema al CRC (Redundant Cyclic Check o Redundancy Check), que és el mateix que un dígit de comprovació d'informació, el CRC identificarà.

Quatre tipus de marcs (marcs)

La transmissió i recepció de dades al CAN es basa en quatre tipus de trames. Els tipus de trames s’identificaran per variacions en els bits de control o fins i tot per canvis en les regles d’escriptura de trames per a cada cas.

  • Marc de dades: conté les dades del transmissor per als receptors
  • Marc remot: es tracta d’una sol·licitud de dades d’un dels nodes
  • Frame Frame: és un frame enviat per qualsevol dels nodes quan identifica un error al bus i pot ser detectat per tots els nodes
  • Frame Overload Frame: serveix per retardar el trànsit al bus a causa de la sobrecàrrega o retard de dades en un o més nodes.

Pas 10: Circuit: detalls de les connexions

Circuit: detalls de les connexions
Circuit: detalls de les connexions

Pas 11: Circuit: captura de dades

Circuit: captura de dades
Circuit: captura de dades

Longituds d'ona obtingudes per a CAN estàndard amb identificador d'11 bits

Pas 12: Circuit: captura de dades

Circuit: captura de dades
Circuit: captura de dades

Longituds d'ona obtingudes per a CAN estès amb identificació de 29 bits

Pas 13: Circuit: captura de dades

Circuit: captura de dades
Circuit: captura de dades

Dades obtingudes per l’analitzador lògic

Pas 14: Biblioteca Arduino: CAN

Biblioteca Arduino - CAN
Biblioteca Arduino - CAN

Aquí mostro les dues opcions on podeu instal·lar la biblioteca de controladors CAN

Arduino IDE Library Manager

Pas 15: Github

Github
Github

github.com/sandeepmistry/arduino-CAN

Pas 16: Codi font del transmissor

Codi font: inclou i configura ()

Inclourem la biblioteca CAN, iniciarem la sèrie per a la depuració i iniciarem el bus CAN a 500 kbps.

#include // Inclui a biblioteca CAN void setup () {Serial.begin (9600); // inicia un serial para debug while (! Serial); Serial.println ("transmissor CAN"); // Iniciació o barrament 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); }}

Pas 17: Codi font: Loop (), enviament d'un paquet CAN 2.0 estàndard

Mitjançant la norma CAN 2.0, enviem un paquet. L'identificador d'11 bits identifica el missatge. El bloc de dades ha de tenir fins a 8 bytes. Comença el paquet amb ID 18 en hexadecimal. Conté 5 bytes i tanca la funció.

void loop () {// Usando o CAN 2.0 padrão // Envia um pacote: o id tem 11 bits e identifica a mensagem (prioritat, esdeveniment) // o bloco de dados deve possuir até 8 bytes Serial.println ("Enviando pacote … "); CAN.beginPacket (0x12); // id 18 em hexadecimal CAN.write ('h'); // 1º 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."); retard (1000);

Pas 18: Codi font: Loop (), enviament d'un paquet CAN 2.0 ampliat

En aquest pas, la identificació té 29 bits. Comença a enviar 24 bits d’identificació i, un cop més, empaqueta 5 bytes i surt.

// Usant CAN 2.0 Estendido // Envia um pacote: o id tem 29 bits e identifica a mensagem (prioritat, event) // o bloco de dados deve possuir 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.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."); retard (1000); }

Pas 19: Codi font del receptor

Codi font: inclou i configura ()

Una vegada més, inclourem la biblioteca CAN, iniciarem la sèrie per depurar i iniciarem el bus CAN a 500 kbps. Si es produeix un error, aquest error s’imprimirà.

#include // Inclui a biblioteca CAN void setup () {Serial.begin (9600); // inicia un serial para debug while (! Serial); Serial.println ("Receptor CAN"); // Iniciació o barrament 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); }}

Pas 20: Codi font: Loop (), Obtenció del paquet i comprovació del format

Hem intentat comprovar la mida del paquet rebut. El mètode CAN.parsePacket () em mostra la mida d’aquest paquet. Per tant, si tenim un paquet, comprovarem si està ampliat o no.

void loop () {// Tenta verificar o tamanho do acote recebido int packetSize = CAN.parsePacket (); if (packetSize) {// Se tenim um pacote Serial.println ("Recebido pacote."); if (CAN.packetExtended ()) {// verifica si el pacte és estendut Serial.println ("Estendido"); }

Pas 21: Font: Loop (), comprova si es tracta d’un paquet remot

Aquí comprovem si el paquet rebut és una sol·licitud de dades. En aquest cas, no hi ha dades.

if (CAN.packetRtr ()) {// Verifica se o pacote é um pacote remoto (Requisição de dados), en aquest cas no s'ha de tenir Serial.print ("RTR"); }

Pas 22: codi font: bucle (), longitud de dades sol·licitada o rebuda

Si el paquet rebut és una sol·licitud, indiquem la longitud sol·licitada. Després obtenim el codi de longitud de dades (DLC), que indica la longitud de les dades. Finalment, indiquem la durada rebuda.

Serial.print ("Pacote com id 0x"); Serial.print (CAN.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"); // aqui somente indica o comprimento recebido Serial.println (packetSize);

Pas 23: Codi font: bucle (), si es reben dades, s’imprimeix

Imprimim (al monitor sèrie) les dades, però només si el paquet rebut no és una sol·licitud.

// 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 (); }}

Pas 24: baixeu els fitxers

PDF

INO

Recomanat: