Taula de continguts:
- Pas 1: recursos utilitzats
- Pas 2: CAN (xarxa d'àrea de controlador)
- Pas 3: CAN: funcions
- Pas 4: Circuit utilitzat
- Pas 5: Voltatges de la línia de transmissió (detecció diferencial)
- Pas 6: format de normatives i marcs CAN
- Pas 7: format de normatives i marcs CAN
- Pas 8: Format d'estàndards i marcs CAN
- Pas 9: quatre tipus de marcs (marcs)
- Pas 10: Circuit: detalls de les connexions
- Pas 11: Circuit: captura de dades
- Pas 12: Circuit: captura de dades
- Pas 13: Circuit: captura de dades
- Pas 14: Biblioteca Arduino: CAN
- Pas 15: Github
- Pas 16: Codi font del transmissor
- Pas 17: Codi font: Loop (), enviament d'un paquet CAN 2.0 estàndard
- Pas 18: Codi font: Loop (), enviament d'un paquet CAN 2.0 ampliat
- Pas 19: Codi font del receptor
- Pas 20: Codi font: Loop (), Obtenció del paquet i comprovació del format
- Pas 21: Font: Loop (), comprova si es tracta d’un paquet remot
- Pas 22: codi font: bucle (), longitud de dades sol·licitada o rebuda
- Pas 23: Codi font: bucle (), si es reben dades, s’imprimeix
- Pas 24: baixeu els fitxers
Vídeo: Protocol CAN: sí, podem !: 24 passos
2024 Autora: John Day | [email protected]. Última modificació: 2024-01-30 08:15
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)
- 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
- 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
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)
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
Format estàndard amb identificador d'11 bits
Pas 7: format de normatives i marcs CAN
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)
É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
Pas 11: Circuit: captura de dades
Longituds d'ona obtingudes per a CAN estàndard amb identificador d'11 bits
Pas 12: Circuit: captura de dades
Longituds d'ona obtingudes per a CAN estès amb identificació de 29 bits
Pas 13: Circuit: captura de dades
Dades obtingudes per l’analitzador lògic
Pas 14: 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.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
INO
Recomanat:
Descodificador de protocol de control remot RC5 sense biblioteca: 4 passos
Descodificador de protocol de control remot RC5 sense biblioteca: abans de descodificar rc5, primer discutim què és l'ordre rc5 i quina és l'estructura d'aquest. de manera bàsica, l'ordre rc5 que s'utilitza en controls remots que s'utilitzen en televisors, reproductors de CD, d2h, sistemes de cinema a casa, etc., té 13 o 14 bits disposats en un
Rellotge d'Internet: visualització de la data i l'hora amb un OLED mitjançant ESP8266 NodeMCU amb protocol NTP: 6 passos
Rellotge d’Internet: visualitzeu la data i l’hora amb un OLED mitjançant ESP8266 NodeMCU amb protocol NTP: Hola nois d’aquest instructable, construirem un rellotge d’Internet que obtindrà temps d’Internet, de manera que aquest projecte no necessitarà cap RTC per executar-se, només necessitarà un funcionant la connexió a Internet I per a aquest projecte necessiteu un esp8266 que tingui un
Pantalla Nextion - Interfície i protocol explicats amb PIC i Arduino: 10 passos
Pantalla Nextion | Interfície i protocol explicats amb PIC i Arduino: la pantalla Nextion és molt fàcil d’utilitzar i la interfície és senzilla amb el micro controlador. Amb l’ajut de l’editor Nextion podem configurar la pantalla i podem dissenyar la interfície d’usuari a la pantalla. actuarà a la pantalla per mostrar
Tauler d’anuncis digitals amb protocol Raspberry Pi i MQTT: 8 passos
Tauler d’anuncis digitals que utilitza el protocol Raspberry Pi i MQTT: els taulers d’anuncis s’utilitzen gairebé a tot arreu, com ara oficines, escoles, hospitals i hotels. Es poden utilitzar una i altra vegada per mostrar avisos importants o anunciar esdeveniments o reunions pròxims. Però l’avís o els anuncis han de ser fonamentals
Comprensió del protocol IR dels comandaments a distància dels condicionadors d'aire: 9 passos (amb imatges)
Comprensió del protocol IR dels comandaments a distància dels controladors d’aire: ja fa temps que aprenc sobre protocols IR. Com enviar i rebre senyals IR. En aquest punt, l’únic que queda és el protocol IR dels comandaments a distància de CA. A diferència dels comandaments a distància tradicionals de gairebé tots els dispositius electrònics (per exemple, un televisor) on