Innholdsfortegnelse:
- Trinn 1: Ressurser brukt
- Trinn 2: CAN (Controller Area Network)
- Trinn 3: CAN - Funksjoner
- Trinn 4: Krets brukt
- Trinn 5: Overføringslinjespenninger (differensialdeteksjon)
- Trinn 6: CAN -standarder og rammerformat
- Trinn 7: CAN -standarder og rammerformat
- Trinn 8: CAN -standarder og rammerformat
- Trinn 9: Fire typer rammer (rammer)
- Trinn 10: Krets - Detaljer om tilkoblinger
- Trinn 11: Krets - datafangst
- Trinn 12: Krets - datafangst
- Trinn 13: Krets - datafangst
- Trinn 14: Arduino Library - CAN
- Trinn 15: Github
- Trinn 16: Senderens kildekode
- Trinn 17: Kildekode: Loop (), Sende en standard CAN 2.0 -pakke
- Trinn 18: Kildekode: Loop (), Sende en utvidet CAN 2.0 -pakke
- Trinn 19: Mottakerens kildekode
- Trinn 20: Kildekode: Loop (), Få pakken og sjekk formatet
- Trinn 21: Kilde: Loop (), sjekker om det er en ekstern pakke
- Trinn 22: Kildekode: Loop (), datalengde forespurt eller mottatt
- Trinn 23: Kildekode: Loop (), hvis data mottas, skrives det deretter ut
- Trinn 24: Last ned filene
Video: CAN -protokoll - Ja, vi kan !: 24 trinn
2024 Forfatter: John Day | [email protected]. Sist endret: 2024-01-30 11:24
Et annet emne som nylig ble foreslått av tilhengerne av YouTube -kanalen min, var CAN (Controller Area Network) -protokoll, som vi skal fokusere på i dag. Det er viktig å forklare at CAN er en samtidig seriell kommunikasjonsprotokoll. Dette betyr at synkronismen mellom modulene som er koblet til nettverket, utføres i forhold til begynnelsen av hver melding som sendes til bussen. Vi starter med å introdusere de grunnleggende konseptene i CAN -protokollen og utføre en enkel montering med to ESP32 -er.
I vår krets kan ESP -er fungere som både Master og Slave. Du kan ha flere mikrokontrollere som sender samtidig, fordi CAN håndterer kollisjon av alt automatisk. Kildekoden til dette prosjektet er superenkel. Sjekk det ut!
Trinn 1: Ressurser brukt
- To moduler med ESP WROOM 32 NodeMcu
- To CAN -mottakere fra WaveShare
- Gensere for tilkoblinger
- Logisk analysator for fangst
- Tre USB -kabler for ESP og analysator
- 10 meter vridd par for å tjene som buss
Trinn 2: CAN (Controller Area Network)
- Det ble utviklet av Robert Bosch GmbH på 1980 -tallet for å betjene bilindustrien.
- Det har blitt utbredt gjennom årene på grunn av sin robusthet og fleksibilitet i implementeringen. Det brukes med militært utstyr, landbruksmaskiner, industri- og bygningsautomasjon, robotikk og medisinsk utstyr.
Trinn 3: CAN - Funksjoner
- To-leders seriell kommunikasjon
- Maksimalt 8 byte nyttig informasjon per ramme, med fragmentering mulig
- Adresse rettet til meldingen og ikke til noden
- Tilordne meldinger prioritet og videresending av "på vent" -meldinger
- Effektiv evne til å oppdage og signalisere feil
- Mulighet for flere master (alle noder kan be om busstilgang)
- Multicast -funksjon (én melding for flere mottakere samtidig)
- Overføringshastigheter på opptil 1 Mbit / s på en 40 meter lang buss (reduksjon av hastigheten med økning av samlingslengden)
- Fleksibilitet i konfigurasjon og introduksjon av nye noder (opptil 120 noder per buss)
- Standard maskinvare, lav pris og god tilgjengelighet
- Regulert protokoll: ISO 11898
Trinn 4: Krets brukt
Her har jeg mottakerne. Det er en på hver side, og de er forbundet med et par ledninger. Den ene er ansvarlig for å sende og den andre for å motta data.
Trinn 5: Overføringslinjespenninger (differensialdeteksjon)
I CAN er den dominerende biten Zero.
Line Differential Detection reduserer støyfølsomhet (EFI)
Trinn 6: CAN -standarder og rammerformat
Standardformat med 11-bits identifikator
Trinn 7: CAN -standarder og rammerformat
Utvidet format med 29-biters identifikator
Trinn 8: CAN -standarder og rammerformat
Det er viktig å merke seg at en protokoll allerede beregner CRC og sender ACK- og EOF -signaler, som er ting som allerede gjøres av CAN -protokollen. Dette garanterer at meldingen som sendes ikke kommer på feil måte. Dette er fordi hvis det gir et problem i CRC (Redundant Cyclic Check eller Redundancy Check), som er det samme som et informasjonskontrollsiffer, vil det bli identifisert av CRC.
Trinn 9: Fire typer rammer (rammer)
Det er viktig å merke seg at en protokoll allerede beregner CRC og sender ACK- og EOF -signaler, som er ting som allerede gjøres av CAN -protokollen. Dette garanterer at meldingen som sendes ikke kommer på feil måte. Dette er fordi hvis det gir et problem i CRC (Redundant Cyclic Check eller Redundancy Check), som er det samme som et informasjonskontrollsiffer, vil det bli identifisert av CRC.
Fire typer rammer (rammer)
Overføring og mottak av data i CAN er basert på fire typer rammer. Rammetypene vil bli identifisert ved variasjoner i kontrollbitene eller til og med ved endringer i rammeskrivereglene for hvert tilfelle.
- Dataramme: Inneholder senderdata for mottakeren (e)
- Fjernramme: Dette er en forespørsel om data fra en av nodene
- Feilramme: Det er en ramme sendt av noen av nodene når den identifiserer en feil i bussen og kan oppdages av alle noder
- Overload Frame: Tjener til å forsinke trafikk på bussen på grunn av dataoverbelastning eller forsinkelse på en eller flere noder.
Trinn 10: Krets - Detaljer om tilkoblinger
Trinn 11: Krets - datafangst
Bølgelengder oppnådd for standard CAN med 11-bits ID
Trinn 12: Krets - datafangst
Bølgelengder oppnådd for utvidet CAN med 29-bits ID
Trinn 13: Krets - datafangst
Data innhentet av den logiske analysatoren
Trinn 14: Arduino Library - CAN
Jeg viser her de to alternativene der du kan installere CAN Driver Library
Arduino IDE Library Manager
Trinn 15: Github
github.com/sandeepmistry/arduino-CAN
Trinn 16: Senderens kildekode
Kildekode: Inkluderer og oppsett ()
Vi inkluderer CAN -biblioteket, starter serien for feilsøking og starter CAN -bussen med 500 kbps.
#include // Inkluder et biblioteca KAN ugyldig oppsett () {Serial.begin (9600); // inicia a serial para debug while (! Serial); Serial.println ("Senderen KAN"); // Inicia o barramento KAN 500 kbps hvis (! CAN.begin (500E3)) {Serial.println ("Falha ao iniciar o controlador CAN"); // caso não seja possível iniciar o controlador while (1); }}
Trinn 17: Kildekode: Loop (), Sende en standard CAN 2.0 -pakke
Ved bruk av standard CAN 2.0 sender vi en pakke. 11-biters ID identifiserer meldingen. Datablokken må ha opptil 8 byte. Det starter pakken med ID 18 i heksadesimal. Den pakker 5 byte og lukker funksjonen.
void loop () {// Usando o CAN 2.0 padrão // 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 heksadesimal 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."); forsinkelse (1000);
Trinn 18: Kildekode: Loop (), Sende en utvidet CAN 2.0 -pakke
I dette trinnet har ID -en 29 bits. Den begynner å sende 24 bits ID og pakker igjen 5 byte og slutter.
// 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 desimal (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."); forsinkelse (1000); }
Trinn 19: Mottakerens kildekode
Kildekode: Inkluderer og oppsett ()
Igjen vil vi inkludere CAN -biblioteket, starte serien for å feilsøke og starte CAN -bussen med 500 kbps. Hvis det oppstår en feil, skrives denne feilen ut.
#include // Inkluder et biblioteca KAN ugyldig oppsett () {Serial.begin (9600); // inicia a serial para debug while (! Serial); Serial.println ("Reseptor CAN"); // Inicia o barramento KAN 500 kbps hvis (! CAN.begin (500E3)) {Serial.println ("Falha ao iniciar o controlador CAN"); // caso não seja possível iniciar o controlador while (1); }}
Trinn 20: Kildekode: Loop (), Få pakken og sjekk formatet
Vi prøvde å kontrollere størrelsen på pakken som ble mottatt. CAN.parsePacket () -metoden viser meg størrelsen på denne pakken. Så hvis vi har en pakke, sjekker vi om den er utvidet eller ikke.
void loop () {// Tenta verificar o tamanho do acote recebido int packetSize = CAN.parsePacket (); if (packetSize) {// Se temos um pacote Serial.println ("Recebido pacote."); hvis (CAN.packetExtended ()) {// verifica se o pacote é estendido Serial.println ("Estendido"); }
Trinn 21: Kilde: Loop (), sjekker om det er en ekstern pakke
Her sjekker vi om den mottatte pakken er en dataforespørsel. I dette tilfellet er det ingen data.
hvis (CAN.packetRtr ()) {// Verifica se o pacote é um pacote remoto (Requisição de dados), neste caso não há dados Serial.print ("RTR"); }
Trinn 22: Kildekode: Loop (), datalengde forespurt eller mottatt
Hvis den mottatte pakken er en forespørsel, angir vi ønsket lengde. Vi får deretter Data Length Code (DLC), som angir lengden på dataene. Til slutt angir vi mottatt lengde.
Serial.print ("Pacote com id 0x"); Serial.print (CAN.packetId (), HEX); hvis (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);
Trinn 23: Kildekode: Loop (), hvis data mottas, skrives det deretter ut
Vi skriver ut (på den serielle skjermen) dataene, men bare hvis den mottatte pakken ikke er en forespørsel.
// 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 (); }}
Trinn 24: Last ned filene
INO
Anbefalt:
Nettstedskontrollert juletre (alle kan kontrollere det): 19 trinn (med bilder)
Nettstedskontrollert juletre (hvem som helst kan kontrollere det): Vil du vite hvordan et nettstedstyrt juletre ser ut? Her er videoen som viser prosjektet mitt av juletreet mitt. Livestrømmen er nå avsluttet, men jeg lagde en video for å fange det som foregikk: I år, midt i Decembe
DIY -- Hvordan lage en edderkopprobot som kan kontrolleres ved hjelp av smarttelefon ved hjelp av Arduino Uno: 6 trinn
DIY || Hvordan lage en edderkopprobot som kan kontrolleres ved hjelp av smarttelefon ved hjelp av Arduino Uno: Mens du lager en edderkopprobot, kan du lære så mange ting om robotikk. Som å lage roboter er både underholdende og utfordrende. I denne videoen skal vi vise deg hvordan du lager en Spider -robot, som vi kan bruke ved hjelp av smarttelefonen vår (Androi
LED Snapper: Sannsynligvis det mest grunnleggende stykke testutstyr du kan lage: 3 trinn
LED Snapper: Sannsynligvis det mest grunnleggende stykke testutstyr du kan lage: La meg presentere deg LED Snapper. Et enkelt, men enormt nyttig stykke testutstyr som du kan bygge for å hjelpe deg med å feilsøke elektronikkprosjektene dine. LED Snapper er et kretskort med åpen kildekode som lar deg enkelt legge til
Halloween gresskar med et bevegelig animatronisk øye - Dette gresskaret kan rulle øynene !: 10 trinn (med bilder)
Halloween gresskar med et bevegelig animatronisk øye | Dette gresskaret kan rulle med øyet !: I denne instruksen lærer du hvordan du lager et Halloween -gresskar som skremmer alle når øyet beveger seg. Juster ultralydsensorens triggeravstand til riktig verdi (trinn 9), og gresskaret ditt vil forstene alle som tør å ta cand
Hvordan få musikk fra Nesten alle (Haha) nettsteder (så lenge du kan høre det, kan du få det Ok fint hvis det er innebygd i Flash du kanskje ikke kan) REDIGERT !!!!! Lagt til informasjon: 4 trinn
Hvordan få musikk fra Nesten alle (Haha) nettsteder (så lenge du kan høre det, kan du få det … Ok fint hvis det er innebygd i Flash du kanskje ikke kan) REDIGERT !!!!! Lagt til informasjon: hvis du noen gang går til et nettsted og den spiller en sang du liker og vil ha den, så er det instruerbart for meg, det er ikke min feil hvis du ødelegger noe (den eneste måten det vil skje er hvis du begynner å slette ting uten grunn ) Jeg har klart å få musikk til