INHOUDSOPGAWE:
- Stap 1: Hulpbronne gebruik
- Stap 2: CAN (Controller Area Network)
- Stap 3: KAN - funksies
- Stap 4: Kring gebruik
- Stap 5: Transmissielynspannings (differensiële opsporing)
- Stap 6: CAN Standards and Frames Format
- Stap 7: CAN Standards and Frames Format
- Stap 8: CAN Standards and Frames Format
- Stap 9: Vier soorte rame (rame)
- Stap 10: Kring - Besonderhede van verbindings
- Stap 11: Kringloop - datavaslegging
- Stap 12: Kringloop - datavaslegging
- Stap 13: Kringloop - datavaslegging
- Stap 14: Arduino -biblioteek - KAN
- Stap 15: Github
- Stap 16: Senderbronkode
- Stap 17: Bronkode: lus (), stuur 'n standaard CAN 2.0 -pakkie
- Stap 18: Bronkode: Loop (), stuur 'n uitgebreide CAN 2.0 -pakket
- Stap 19: Bronkode van die ontvanger
- Stap 20: Bronkode: lus (), die pakket kry en die formaat nagaan
- Stap 21: Bron: Loop (), kyk of dit 'n eksterne pakket is
- Stap 22: Bronkode: lus (), datalengte aangevra of ontvang
- Stap 23: Bronkode: lus (), as data ontvang word, word dit dan gedruk
- Stap 24: Laai die lêers af
Video: CAN Protocol - Ja, ons kan !: 24 stappe
2024 Outeur: John Day | [email protected]. Laas verander: 2024-01-30 07:26
'N Ander onderwerp wat die volgelinge van my YouTube -kanaal onlangs voorgestel het, was die CAN (Controller Area Network) protokol, waarop ons ons vandag sal toespits. Dit is belangrik om te verduidelik dat CAN 'n gelyktydige seriële kommunikasieprotokol is. Dit beteken dat die sinchronisasie tussen die modules wat aan die netwerk gekoppel is, uitgevoer word in verhouding tot die begin van elke boodskap wat na die bus gestuur word. Ons begin met die bekendstelling van die basiese konsepte van die CAN -protokol en voer 'n eenvoudige samestelling uit met twee ESP32's.
In ons kring kan die ESP's as beide meester en slaaf optree. U kan verskeie mikrobeheerders gelyktydig stuur, omdat die CAN die botsing van alles outomaties hanteer. Die bronkode van hierdie projek is super eenvoudig. Kyk daarna!
Stap 1: Hulpbronne gebruik
- Twee modules van ESP WROOM 32 NodeMcu
- Twee CAN -ontvangers van WaveShare
- Springers vir verbindings
- Logiese ontleder vir opname
- Drie USB -kabels vir ESP's en ontleder
- 10 meter gedraaide paar om as bus te dien
Stap 2: CAN (Controller Area Network)
- Dit is in die 1980's deur Robert Bosch GmbH ontwikkel om die motorbedryf te bedien.
- Dit het oor die jare wydverspreid geword vanweë die robuustheid en buigbaarheid van implementering. Dit word gebruik met militêre toerusting, landboumasjinerie, industriële en geboutomatisering, robotika en mediese toerusting.
Stap 3: KAN - funksies
- Tweedraads seriële kommunikasie
- Maksimum van 8 grepe nuttige inligting per raam, met fragmentasie moontlik
- Adres gerig op die boodskap en nie na die knoop nie
- Gee prioriteit aan boodskappe en gee boodskappe wat in die wag is, deur
- Doeltreffende vermoë om foute op te spoor en aan te dui
- Multi-meestervermoë (alle nodusse kan toegang tot die bus versoek)
- Multicast -funksie (een boodskap vir verskeie ontvangers tegelyk)
- Oordraagtempo's van tot 1 Mbit / s op 'n bus van 40 meter (vermindering van die koers met toename in die lengte van die rail)
- Buigbaarheid van konfigurasie en bekendstelling van nuwe nodusse (tot 120 knope per bus)
- Standaard hardeware, lae koste en goeie beskikbaarheid
- Gereguleerde protokol: ISO 11898
Stap 4: Kring gebruik
Hier het ek die Transceivers. Daar is een aan elke kant, en hulle is verbind met 'n paar drade. Die een is verantwoordelik vir die stuur en die ander vir die ontvangs van data.
Stap 5: Transmissielynspannings (differensiële opsporing)
In CAN is die dominante bietjie nul.
Line Differential Detection Verminder geraasgevoeligheid (EFI)
Stap 6: CAN Standards and Frames Format
Standaardformaat met 11-bis identifiseerder
Stap 7: CAN Standards and Frames Format
Uitgebreide formaat met 29-bis identifiseerder
Stap 8: CAN Standards and Frames Format
Dit is belangrik om daarop te let dat 'n protokol die CRC reeds bereken en ACK- en EOF -seine stuur, wat dinge reeds deur die CAN -protokol gedoen word. Dit waarborg dat die gestuurde boodskap nie op die verkeerde manier kom nie. Dit is omdat dit 'n probleem in die CRC (Redundant Cyclic Check of Redundancy Check), wat dieselfde is as 'n inligtingkontrolesyfer, sal identifiseer deur die CRC.
Stap 9: Vier soorte rame (rame)
Dit is belangrik om daarop te let dat 'n protokol die CRC reeds bereken en ACK- en EOF -seine stuur, wat dinge reeds deur die CAN -protokol gedoen word. Dit waarborg dat die gestuurde boodskap nie op die verkeerde manier kom nie. Dit is omdat dit 'n probleem in die CRC (Redundant Cyclic Check of Redundancy Check), wat dieselfde is as 'n inligtingkontrolesyfer, sal identifiseer deur die CRC.
Vier soorte rame (rame)
Die oordrag en ontvangs van data in die CAN is gebaseer op vier soorte rame. Die raamtipes sal geïdentifiseer word deur variasies in die kontrolebits of selfs deur veranderinge in die raamskryfreëls vir elke geval.
- Data raam: Bevat die sender data vir die ontvanger (s)
- Afstandsraam: Dit is 'n versoek vir data van een van die nodusse
- Foutraamwerk: dit is 'n raam wat deur enige van die nodusse gestuur word tydens die identifisering van 'n fout in die bus en kan deur alle nodusse opgespoor word
- Oorbelasingsraamwerk: dien om die verkeer op die bus te vertraag weens data -oorlading of vertraging op een of meer nodusse.
Stap 10: Kring - Besonderhede van verbindings
Stap 11: Kringloop - datavaslegging
Golflengtes verkry vir standaard CAN met 11-bis ID
Stap 12: Kringloop - datavaslegging
Golflengtes verkry vir uitgebreide CAN met 29-bis ID
Stap 13: Kringloop - datavaslegging
Data verkry deur die logiese ontleder
Stap 14: Arduino -biblioteek - KAN
Ek wys hier die twee opsies waar u die CAN Driver Library kan installeer
Arduino IDE -biblioteekbestuurder
Stap 15: Github
github.com/sandeepmistry/arduino-CAN
Stap 16: Senderbronkode
Bronkode: Sluit in en opstel ()
Ons sluit die CAN -biblioteek in, begin die reeks vir ontfouting en begin die CAN -bus teen 500 kbps.
#include // Sluit 'n biblioteca KAN leegstelling opstel () {Serial.begin (9600); // inicia 'n reekse vir ontfouting terwyl (! Serial); Serial.println ("Transmissor CAN"); // Inicia o barramento KAN 500 kbps as (! CAN.begin (500E3)) {Serial.println ("Falha ao iniciar o controlador CAN"); // caso não seja possível iniciar o controlador while (1); }}
Stap 17: Bronkode: lus (), stuur 'n standaard CAN 2.0 -pakkie
Met die standaard CAN 2.0 stuur ons 'n pakket. Die 11-bis-ID identifiseer die boodskap. Die datablok moet tot 8 grepe hê. Dit begin die pakkie met ID 18 in heksadesimaal. Dit pak 5 grepe en sluit die funksie.
void loop () {// Usando o CAN 2.0 pad // Envia um pacote: o id tem 11 bits e identifiera a mensagem (prioridade, evento) // o bloco de dados deve possuir até 8 bytes Serial.println ("Enviando pacote … "); CAN.beginPacket (0x12); // id 18 em heksadesimale 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."); vertraging (1000);
Stap 18: Bronkode: Loop (), stuur 'n uitgebreide CAN 2.0 -pakket
In hierdie stap het die ID 29 bisse. Dit begin 24 stukkies ID stuur en pak weer 5 grepe en stop.
// Usando CAN 2.0 Estendido // Envia um pacote: o id tem 29 bits e identifiera a mensagem (prioridade, evento) // o bloco de dados deve possuir até 8 bytes Serial.println ("Enviando pacote estendido …"); CAN.beginExtendedPacket (0xabcdef); // id 11259375 desimale (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."); vertraging (1000); }
Stap 19: Bronkode van die ontvanger
Bronkode: Sluit in en opstel ()
Weereens sluit ons die CAN -biblioteek in, begin die reeks om te ontfout en begin die CAN -bus teen 500 kbps. As 'n fout voorkom, word hierdie fout gedruk.
#include // Sluit 'n biblioteca KAN leegstelling opstel () {Serial.begin (9600); // inicia 'n reekse vir ontfouting terwyl (! Serial); Serial.println ("Ontvanger KAN"); // Inicia o barramento KAN 500 kbps as (! CAN.begin (500E3)) {Serial.println ("Falha ao iniciar o controlador CAN"); // caso não seja possível iniciar o controlador while (1); }}
Stap 20: Bronkode: lus (), die pakket kry en die formaat nagaan
Ons het probeer om die grootte van die pakkie te kontroleer. Die CAN.parsePacket () -metode wys my die grootte van hierdie pakket. As ons 'n pakket het, sal ons kyk of dit verleng is of nie.
void lus () {// Tenta verificar or tamanho do acote recebido int packetSize = CAN.parsePacket (); if (packetSize) {// Se temos um pacote Serial.println ("Recebido pacote."); as (CAN.packetExtended ()) {// verifica se o pacote é estendido Serial.println ("Estendido"); }
Stap 21: Bron: Loop (), kyk of dit 'n eksterne pakket is
Hier kyk ons of die pakkie wat ontvang is 'n data -versoek is. In hierdie geval is daar geen data nie.
if (CAN.packetRtr ()) {// Verifica se o pacote é um pacote remoto (Requisição de dados), neste caso não há dados Serial.print ("RTR"); }
Stap 22: Bronkode: lus (), datalengte aangevra of ontvang
As die ontvangde pakkie 'n versoek is, dui ons die verlangde lengte aan. Ons kry dan die Data Length Code (DLC), wat die lengte van die data aandui. Laastens dui ons die lengte aan.
Serial.print ("Pacote com id 0x"); Serial.print (CAN.packetId (), HEX); as (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);
Stap 23: Bronkode: lus (), as data ontvang word, word dit dan gedruk
Ons druk (op die seriële monitor) die data, maar slegs as die ontvangde pakkie nie 'n versoek is nie.
// 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 (); }}
Stap 24: Laai die lêers af
EK NEE
Aanbeveel:
Hoe om 'n veiligheidsboks onder ons te maak - taak vir elektriese bedrading: 7 stappe
Hoe om 'n veiligheidsboks onder ons te maak - taak vir elektriese bedrading: vandag sal ek u wys hoe u 'n veiligheidsboks kan maak na 'n spel onder ons - 'n taak vir elektriese bedrading
Buigsame boekwyser wat verander kan word, kan verander word: 6 stappe
Buigsame boek wat verander kan word: verander u gunsteling papierboekmerk in 'n veranderlike boek met slegs 'n paar maklike stappe. om 'n boek opsy te sit as dinge gaan
Hoe om musiek te kry van byna enige (Haha) webwerf (solank u dit kan hoor, kan u dit kry Ok, as dit in Flash is ingebed, kan u dit nie redigeer nie) !!!!! Bygevoeg inligting: 4 stappe
Hoe om musiek te kry van byna enige (Haha) webwerf (solank u dit kan hoor, kan u dit kry … Ok, as dit in Flash is ingebed, kan u dit nie redigeer nie) !!!!! Bygevoeg inligting: as u ooit na 'n webwerf gaan en 'n liedjie speel waarvan u hou en dit wil hê, is dit die instruksie dat u nie my skuld het as u iets deurmekaar maak nie (die enigste manier waarop dit kan gebeur, is as u sonder rede begin om dinge uit te vee) ) Ek kon musiek kry vir
Hoe u Fedora op 'n SheevaPlug kan installeer en 'n SD -kaart kan oplaai: 13 stappe
Hoe om Fedora op 'n SheevaPlug te installeer en 'n SD -kaart af te laai: Ek het 'n plasing op die SheevaPlug by Slashdot en daarna in Popular Mechanics gesien. Dit het na 'n interessante toestel gelyk dit loop by 2,5 w, geen waaiers, soliede toestand en geen monitor nodig nie. Ek dra al jare lank 'n ou CRT -monitor rond
Hoe u u rekenaar drasties kan bespoedig en die snelheid kan handhaaf vir die hele lewe van die stelsel: 9 stappe
Hoe u u rekenaar drasties kan bespoedig en die snelheid kan handhaaf vir die hele lewe van die stelsel: Dit is 'n handleiding wat ek gemaak het oor hoe u u rekenaar kan opruim, aanpas en optimaliseer sodat dit vinniger kan werk as toe u die eerste keer gekoop het dit en om dit so te hou. Ek sal foto's plaas sodra ek 'n kans kry, maar ongelukkig op die oomblik nie